C语言客房管理系统
@小cai同学 人气:0总体设计
下面来分析一下整个系统,根据上面的要求分析,可将这个系统设计为五大模块(见下图):登记模块,统计模块,查询模块,修改模块,退出模块。其主要功能为:注册,统计,查询,修改,退房功能。
一、头文件以及结构体
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #define NUM 50 //定义常量NUM void input(); void record(); void find(); void modify(); //建立如下结构体: struct Client { char name[20]; char sex[10]; int age; char ID_card[20]; int year; int month; int date; int Room_ID; char Tel[15]; int Price; char Sign[10]; }Room[NUM];
二、保存和读取函数
1、保存函数用于将输入的数据保存到文本文件客户信息.txt文件中,实现数据的保存
void save() { FILE *fp; int i; if ((fp=fopen("客户信息.txt","a+"))==NULL) /*a+表示以读和追加方式打开文件客户信息.txt */ {printf("cannot open file\n"); return;} for(i=0;i<NUM&&Room[i].age!=0;i++) fprintf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); //按照规定的格式保存客户信息 fclose(fp); }
2、读取函数将文本文件客户信息.txt中的客户个人信息读取出来,从而实现统计、查询以及修改的功能。
void read() { FILE *fp; int i; if((fp=fopen("客户信息.txt","r"))==NULL) {printf("\nCannot open file\n"); return;} for(i=0;!feof(fp);i++) //!feof(fp)文件读到结束时读取停止 fscanf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",&Room[i].name,&Room[i].sex, &Room[i].age,&Room[i].ID_card,&Room[i].year,&Room[i].month,&Room[i]. date,&Room[i].Room_ID,&Room[i].Tel,&Room[i].Price,&Room[i].Sign,&now_no); fclose(fp); }
三、按照房间号查找函数
int search(int num) { int i,k=1; read(); for(i=0;i<NUM;i++) { if(Room[i].Room_ID==num) { return 1; k=0; } } if(k) return 0; return 0; }
四、登记模块
用于完成客户个人信息的输入功能并保存。本函数的功能为先要在文件中查找房间状态,若可以出借,则允许入住,把房客信息(房间号、价格、房间状态、入住人姓名、入住人SFZ号等)添加到记录中,并把房间状态改为已住。
void input() { int i,right,index; char as; do { printf("\t\t\t\t1.宾客入住登记\n"); do { printf("请输入房间号:\n"); scanf("%d",&i); index=search(i); if(index) {printf("已有宾客居住,请重新输入!\n"); right=1; getchar();} else right=0; Room[i-1].Room_ID=i; } while(right==1); printf("\n输入宾客的姓名:"); scanf("%s",Room[i-1].name); printf("\n输入宾客性别:"); scanf("%s",Room[i-1].sex); printf("\n输入宾客的年龄:"); scanf("%d",&Room[i-1].age); printf("\n输入宾客SFZ号:"); scanf("%s",Room[i-1].ID_card); printf("\n输入宾客入住时间:"); scanf("%d",&Room[i-1].year); scanf("%d",&Room[i-1].month); scanf("%d",&Room[i-1].date); printf("\n输入宾客电话号:"); scanf("%s",Room[i-1].Tel); printf("\n输入宾客房间价格:"); scanf("%d",&Room[i-1].Price); printf("\n输入该房间是否入住(yes/no):"); scanf("%s",Room[i-1].Sign);//输入客户的个人信息 Room[i-1].Room_ID=i; printf("\n\n"); printf("是否继续输入?(Y/N)"); //判断是否继续输入 as=getch(); system("cls"); save(); } while(as!='n'&&as!='N'); system("cls"); //清屏 }
五、统计模块
用于统计总共入住的人数,并且可以统计某一天住了多少人以及收入多少。
void record() { int i,j,y,m,d,s=0,money=0; char as; int n=0; read(); do {printf("\n客房入住总数: "); fflush(stdin); for(j=0;j<NUM;j++) if(!strcmp(Room[j].Sign,"yes")) n=n+1; if(n==0) { printf("%d间\n",n); //统计一共入住的人数 break; } printf("%d间\n",n); //统计一共入住的人数 printf("输入查询日期: "); //按照日期统计入住人数及收入 scanf("%d%d%d",&y,&m,&d); fflush(stdin); for(i=0;i<=NUM;i++) if(((Room[i].year==y)&&(Room[i].month==m)&&(Room[i].date==d))) //判断输入的日期与数据库中的哪些日期相同 {s=s+1; money=money+Room[i].Price; printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 价格:%d\n 是否入住:%s\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); } printf("\n该天客房入住总数: %d人\n",s); printf("该天共收入%d元\n",money); printf("\t按任意键返回主菜单."); as=getch(); system("cls"); } while(!as); system("cls"); }
六、查询模块
本函数的功能为输出查询功能菜单选项,包括房间号、价格、房间标记、用户姓名、居份证查询等功能。系统根据输入的选项执行相应的函数。
void find() { int i,a,b,c; char str[20],as,d[20],e[10]; read (); do { printf("\n按以下条件查询:1.宾客姓名 2.房间号 3.房间价格 4.SFZ号 5.房间标记 6.返回主菜单\n请选择:"); scanf("%d",&a); switch(a) { case 1: do {printf("输入要查询的宾客:"); fflush(stdin); gets(str); for(i=0;i<NUM;i++) if(!strcmp(Room[i].name,str)) printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age, Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); else; } while(!as); break; case 2: do { printf("输入要查询的房间号:"); scanf("%d",&b); for(i=0;i<NUM;i++) if(Room[i].Room_ID==b) printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); else; } while(!as); break; case 3: do { printf("输入要查询的房间价格:"); scanf("%d",&c); for(i=0;i<NUM;i++) if(Room[i].Price==c) printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); else; } while(!as); break; case 4: do { printf("输入要查询的SFZ号:"); scanf("%s",d); for(i=0;i<NUM;i++) if(!strcmp(Room[i].ID_card,d)) printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); else; } while(!as); break; case 5: do { printf("输入要查询的房间标志:"); scanf("%s",e); for(i=0;i<NUM;i++) if(!strcmp(Room[i].Sign,e)) printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign); else; } while(!as); break; case 6:system("exit"); default: break; } printf("是否继续查询?(Y/N)\n"); as=getch(); } while(as!='n'&&as!='N'); system("cls"); }
七、修改模块
本函数的功能为系统根据输入的调出该用户及所在房间信息,同时输出修改功能菜单选项,包括修改姓名、修改性别、修改年龄、修改SFZ号、修改日期、修改电话号码修改房间价格。系统根据输入的选项修改用户相应的信息。
void modify() { int i,x,a; char as; printf("输入要修改的房间号:"); scanf("%d",&a); read (); do { for(i=0;i<NUM;i++) if(Room[i].Room_ID==a) {system("cls"); printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 电话号:%s\n 价格:%d\n 是否入住:%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Tel,Room[i].Price,Room[i].Sign); printf("请选择要修改的容:\n1.姓名 \t\t2.性别 \t\t3.年龄 \t\t4.SFZ号 \n5.入住时间 \t6.电话号\t7.价格\n请选择:"); //按照不同的选择修改相应的容 scanf("%d",&x); switch(x) { case 1: printf("\n\t\t输入新插入宾客信息\n"); printf("\n输入宾客姓名:"); scanf("%s",Room[i].name);break; case 2: printf("\n输入宾客性别:"); scanf("%s",&Room[i].sex);break; case 3: printf("\n输入宾客的年龄:"); scanf("%d",&Room[i].age);break; case 4: printf("\n输入宾客SFZ号:"); scanf("%s",&Room[i].ID_card);break; case 5: printf("\n输入宾客入住时间:"); scanf("%d",&Room[i].year); scanf("%d",&Room[i].month); scanf("%d",&Room[i].date);break; case 6: printf("\n输入宾客电话号:"); scanf("%s",&Room[i].Tel);break; case 7: printf("\n输入宾客房间价格:"); scanf("%d",&Room[i].Price); case 8:system("exit"); default:system("cls"); } printf("\n"); save(); printf("\n 姓名:%s\n 性别:%s\n 年龄:%d\n SFZ号:%s\n 入住时间:%d年%d月%d日\n 手机号:%s\n 价格:%d\n 是否入住:%s\n", Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Tel,Room[i].Price,Room[i].Sign); break; }as=getch(); }while(!as); system("cls"); }
八、退房模块
本函数的功能根据输入的房间号判断该房间入住状态,若有宾客居住把房间状态改为空置,把房客信息删除。
void OutRoom() //退房函数 { int i,j; system("cls"); printf(" 退房管理\n"); printf("请输入房间号:\n"); scanf("%d",&i); printf("确认要退%d号房吗?(1:Y/0:N)",i); scanf("%d",&j); if(j==1) { if(Room[i-1].Room_ID==i) { Room[i-1].Room_ID=0; strcpy(Room[i-1].name," "); strcpy(Room[i-1].sex," "); Room[i-1].age=0; strcpy(Room[i-1].ID_card," "); Room[i-1].year=0; Room[i-1].month=0; Room[i-1].date=0; strcpy(Room[i-1].Tel," "); strcpy(Room[i-1].Sign,"no"); save(); system("cls"); printf("退房成功\n"); } else { system("cls"); printf("该房间为空房\n"); } } printf("要返回首页吗?(1:Y,0:N)"); scanf("%d",&j); if(j==0) { OutRoom(); } system("cls"); }
九、主函数
int main() { int as; start: do { printf("\t***********************************"); printf("\n\t\t欢迎使用客房管理系统\n"); printf("\n\t\t| 1.宾客入住登记 |\n\t\t| 2.统计宾客信息 |\n\t\t| 3.查询宾客信息 |\n\t\t| 4.修改宾客信息 |\n\t\t| 5.退房系统 |\n\t\t| 6.退出 |\n"); printf("\t***********************************\n"); printf("\t\t选择功能选项: "); //选择语句用于选择不同的模块 fflush(stdin); scanf("%d",&as); switch(as) {case 1:system("cls");input();break; case 2:system("cls");record();break; case 3:system("cls");find();break; case 4:system("cls");modify();break; case 5:system("cls");OutRoom();break; case 6:system("exit");printf("成功退出系统\n");exit(0); default:system("cls");goto start;} }while(1); }
加载全部内容