2015级计算机科学与技术学院实验报告1《C语言程序设计》综合实验报告一、需求分析编写一个客房管理系统,提供键盘式菜单实现功能选择,功能包括:用户登记、统计、查询和用户信息修改。软件平台:CODEBLOCKS二、整体设计整个客房管理系统被设计为用户登记模块、统计模块、查询模块和修改模块。数据以TXT格式存储,支持保存信息。三、详细设计(1)用户登记模块通过函数readfile读取txt文件信息到room数组,提示用户选择想要入住的房间号,判断是否已经被占用,若占用,重新选择房间号,若没有占用,提示输入登记信息,把数据存入Room数组中,通过savefile添加信息到txt。客房管理系统二统计模块一登记模块三查询模块四修改模块调用readfile函数读取txt信息2015级计算机科学与技术学院实验报告2(2)统计模块读取txt信息到结构体数组room,提示用户选择统计方式,设置计数器,顺序遍历Room数组,1、计数器记录数组数,即总客房数2、判断每一个数组中的结构体的时间是否和需要查询的日期相同,若相同,计数器加一(3)查询模块调用readfile函数,将信息读入room结构体数组中,提示用户选择查询方式,通过基本查找算法查找Room数组。可以按房间号、价格、房间标记、用户姓名、居民身份证查询。判断房间是否被占用提示用户输入登记信息调用savefile函数存储登记信息读取用户输入的的房间号是否选择统计方式2、按时间统计1、统计总客房数选择统计方式按房间号查询按姓名查询按价格查询按身份证号查询调用readfile函数,读取信息读取信息2015级计算机科学与技术学院实验报告3每一个查询函数内部结构如下:(4)修改模块调用readfile函数,读取信息到room结构体数组,提示用户输入需要修改的房间号,采用基本查找算法在数组中找到要修改的数据,提示用户重新更改房间信息,最后将结构体数组重新写入文件保存。遍历每一个结构体j判断是否和要查询的信息相同调用打印函数,打印j结构体信息是遍历每一个结构体j调用readfile(读取文件函数)判断是否是用户需要修改的房间号输入需要查询的房间号2015级计算机科学与技术学院实验报告4四、源代码#includestdio.h#includestdlib.h#includestring.h#defineM80//客户结构体typedefstructclient{charname[12];//姓名intsex;//性别intage;//年龄charid[20];//身份证号intyear;//入住时间intmonth;intdate;}CLIENT;//客房结构体structHotel{introomid;inttel;//用户的话intprice;//价格intsign;//默认标记为空房间CLIENTclient_list;//客户信息}room[M];voidMenu();//目录界面voiddengji(structHotelroom[]);voidsavefile(structHotelroom[],inti);intreadfile(structHotelroom[]);voidtongji(structHotelroom[]);voidchaxun(structHotelroom[]);voidprintmessage(structHotelroom[],intn);修改结构体j调用saveall函数,保存结构体数组2015级计算机科学与技术学院实验报告5voidxiugai(structHotelroom[]);//主函数intmain(){intn;charreply;Menu();do{printf(请输入选项对应的数字:\n);scanf(%d,&n);while(n!=1&&n!=2&&n!=3&&n!=4){printf(请输入各选项对应的数字!\n);scanf(%d,&n);}switch(n){case1:dengji(room);break;case2:tongji(room);break;case3:chaxun(room);break;case4:xiugai(room);break;}printf(是否还要进入其它选项?(回复Y或y继续)\n);scanf(%c,&reply);}while(reply=='y'||reply=='Y');return0;}//系统目录voidMenu(){printf(************************客房管理系统***************************\n);printf(\t\t\t1————登记\n);printf(\t\t\t2————统计\n);2015级计算机科学与技术学院实验报告6printf(\t\t\t3————查询\n);printf(\t\t\t4————修改\n);printf(***************************************************************\n);}//登记客户信息voiddengji(structHotelroom[]){intx,j,i,flag;charanswer;do{i=readfile(room);do{flag=0;printf(输入您想入住的房间号:(三位数)\n);scanf(%3d,&x);for(j=0;ji;j++){if(room[j].roomid==x){printf(该房间已经被占用!\n);flag=1;}}}while(flag0);room[i+1].roomid=x;printf(请输入您的电话:(仅支持六位数号码~)\n);scanf(%d,&room[i+1].tel);printf(入住价格\n);scanf(%d,&room[i+1].price);printf(请输入您的名字\n);scanf(%s,room[i+1].client_list.name);printf(性别:(1表示女,0表示男)\n);scanf(%d,&room[i+1].client_list.sex);printf(您的年龄:\n);scanf(%d,&room[i+1].client_list.age);printf(您的id:\n);scanf(%s,room[i+1].client_list.id);printf(请输入入住年月日(格式:20151111)\n);scanf(%4d%2d%2d,&room[i+1].client_list.year,&room[i+1].client_list.month,&room[i+1].client_list.date);2015级计算机科学与技术学院实验报告7savefile(room,i+1);printf(是否还要继续登记?(回复Y或y继续)\n);scanf(%c,&answer);}while(answer=='Y'||answer=='y');}//读取txt中的信息intreadfile(structHotelroom[]){FILE*fp;inti;if((fp=fopen(room.txt,r))==NULL){printf(Failuretoopenscore.txt!\n);exit(0);}for(i=0;!feof(fp);i++){fscanf(fp,%5d,&room[i].roomid);fscanf(fp,%6d,&room[i].price);fscanf(fp,%15d,&room[i].tel);fscanf(fp,%12s,room[i].client_list.name);fscanf(fp,%4d,&room[i].client_list.sex);fscanf(fp,%6d,&room[i].client_list.age);fscanf(fp,%20s,room[i].client_list.id);fscanf(fp,%7d,&room[i].client_list.year);fscanf(fp,%5d,&room[i].client_list.month);fscanf(fp,%5d,&room[i].client_list.date);}fclose(fp);returni;}//保存结构体数组信息到文件voidsavefile(structHotelroom[],inti){FILE*fp;if((fp=fopen(room.txt,a))==NULL){printf(Failuretoopenscore.txt!\n);exit(0);}2015级计算机科学与技术学院实验报告8fprintf(fp,%5d%6d%15d%12s%4d%6d%20s%7d%5d%5d,room[i].roomid,room[i].price,room[i].tel,room[i].client_list.name,room[i].client_list.sex,room[i].client_list.age,room[i].client_list.id,room[i].client_list.year,room[i].client_list.month,room[i].client_list.date);fclose(fp);}//统计模块voidtongji(structHotelroom[]){intn,x;intyear,month,day,j,count=0;x=readfile(room);printf(请选择统计方式:1统计房客数,2统计某一天的房客数\n);scanf(%d,&n);switch(n){case1:printf(客房总数为:%d\n,x);break;case2:printf(请输入具体时间:\n);scanf(%d%d%d,&year,&month,&day);for(j=0;jx;j++){if(room[j].client_list.year==year&&room[j].client_list.month==month&&room[j].client_list.date==day){count++;}}printf(%d年%d月%d号的房客数为%d,year,month,day,count);}2015级计算机科学与技术学院实验报告9}//查询模块voidchaxun(structHotelroom[]){intn,x,roomid,price,j;charname[12],id[20];x=readfile(room);printf(按房间号查询请按1;按价格查询请按2;按用户姓名查询请按3;按身份证号码查询请按4\n);scanf(%d,&n);switch(n){case1:printf(请输入房间号:\n);scanf(%d,&roomid);for(j=0;jx;j++){if(room[j].roomid==roomid){print(room,j);}}break;case2:printf(请输入价格:\n);scanf(%d,&price);for(j=0;jx;j++){if(room[j].price==price){print(room,j);}}break;case3:printf(请输入客户姓名:\n);scanf(%s,name);for(j=0;jx;j++){if(strcmp(room[j].client_list.name,name)==0){print(room,j);}2015级计算机科学与技术学院实验报告10}break;case4:printf(请输入身份证号码:\n);scanf(%s,id);for(j=0;jx;j++){if(strcmp(room[j].client_list.id,id)==0){print(room,j);}}}}//打印voidprint(st