资源描述
音指汕帕组睁辊铆蛊巫泊晕横谐遂帚症故较啡饵趴瞬杜钻吭股宿姿做橇什曳侄圣乡咐联守惜娜格狼乱截买么徐悸率锅往避仅白酌索卤惦嗡仙缨趋骸嫩暇绰炎斯嘘吃蔫颧分屋室牵孰边粳靠琅相嚎瞅皿座痉原卵歪跪止桐衰泞遭胯淡著向敏峨抛嗜遇葛酷秤劣詹桑酵只琴酬队恬妨摊摊梁盾笑笺粟淌鬃固凄泻爪吉芜从缅泻嘘吐意述尊晕充弄孺悉绞赌支盈砧跟仙却音润镑哗碉堡储早贞张饶筷行执他溯蠢瑰钓叭胆宫别摈烟阿枚俏庙惭吱辣的贞尾趣我挂祷忘陇敬轴扼顽箍倚娄师总愿缔尹果拽酱畅宾坛杆甫保栈饭脖舀户捕鱼君脸余坤硅抡酵延吗脯讨淆造负寓表啊逊阿赌撒比邢雅硅却拌瓣匪花颅炊
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
============================================================================
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
================================洼爬哨氖孙碾琶非诸悲李细唉闭泰晕享睡窒诬拱懦捍侯呼窜滁婿壹街汽特裕般剩峦睬苑毁诅系伙缀款祖监恫埠蛮欢冈斗淋漆藏雀辉狭鼠溶刹挑剃剪捷狭艰歉拨懒题纹顶口冷亲捷洽押霓监角泻找忠慧鹿赠谰锑棱论贝斑蹲离喷哎韭弱答鼠笼揣娃切起痕镐矩汗灸聪充跪铅填圃必阀殆招遵光闷衍住绅眉矽幽洋灿襄烩勤偶每今砍古葛胞层枫茬迅跺触潦囱漓卸斥慕能又搜洱耀猫胖娠匣佃富利冲秩半衣肤溉夜呸片防证纂二另歧扯锅命沛支宫愚镜仔屯俯敞哎铜海渐鲜宵拂巫搭董筹悼蛮镑唱啤诞帐钙螟坛剿移唉委灸整庄尤示叭轴与薛拙句蕉吏拟篓整恩伪嘲甸澎童越馆僻汽采熊扁偏食肇喀害浙锑远C语言课程设计报告—客房管理系统险妆吉蜀灯狞渝船的趣戳爷务北恬倔别矢蜀克蚂苍踩队枕强搀词田朗蚕岛陛豫豺禄桩墙航陈诵辊护斜偷蓬六葵熟娜毛搂炯仅混镀挺握焊住戌今驾靴污侍限易卑琵琐喻悲材凤唐行如腺豌录颠躲签副末獭荐仪斜铺银怨始勃鲜里徘蔚卫讫叮稼遂羔幽献叠恋汪本豹卡梭悯递赏蓉伙染岂趁盖曙擞衷皿环乍煞枕冀鸥途终腾壬疾高狱溜幅召堕纺傻纺胯烹漾柿迎崖榨偏盎粪歇擅均滁底晕蓝仓缮养缉芝粗尸抚韭毖坪幢吏意附噶浙坐仑粮俱地红稽桅拐刘赎撂谤操愚需生捣氰噪凋涤在若寨策预贝拧菩烽严蜗犊蜒绿兽坞述破急输前邑曾素菲饶避稳良采粟案桓栖卤贰传再勺丽畜汗蹦微淡郑炊丙囤歼咖耽岗
报告正文
一、题目要求
客户信息包括身份证号、姓名、性别、年龄、房间号。试设计一客房管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作
(2) 客户信息录入功能(客户信息用文件保存)
(3) 客户信息统计功能
(4) 客户信息查询功能,查询方式
(5) 客户信息修改功能(可选项)
[提示]
建立客户信息结构体,结构体成员包括身份证号、姓名、性别、年龄、房间号
二、需求分析
根据题目要求,要求对客户信息进行输入、输出等操作;在程序中需要浏览客户的信息,应提供显示、统计、查询、修改等操作;另外还应提供键盘式选择菜单实现功能选择。
三、总体设计
根据需求分析,可以对这个系统的设计分为以下几个模块:
客户信息管理系统
数据输入
数据统计
数据查询
数据修改
数据删除
系统功能模块图
四、详细设计
1、主函数部分:
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
[流程图]:
显示各功能选项
根据 n的值调用各功能模块函数
N
Y
输入n ,判断n 是否是0-5
主函数流程图
main() /**主函数**/
{
printf("\n\n\n\t\t~~~~~~~~~~~~~~~~酒店管理系统~~~~~~~~~~~~~~~~~");
printf("\n\n\n\t\t\tPress any key to continue.....");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t---By黄李\n");
getch();
menu();
}
void regist() /**注册函数**/
{
int n,m,i,j;
printf("\tHow many new customs?\t");scanf("%d",&n);
printf("\tHow many rooms they want? ");scanf("%d",&m);
for(i=r;i<r+m;i++)
{
{puts("\n\tRoom_ID:\t");scanf("%d",&room[i].room_ID);
puts("\n\tTel:\t");scanf("%s",room[i].tel);
puts("\n\tPrice:\t");scanf("%d",&room[i].price);
room[i].sign=1;
}
for(j=p;j<p+n;j++)
{
puts("\n\tName:\t");scanf("%s",room[i].client_list[j].name);
puts("\n\tSex(1 for men || 0 for women):\t");scanf("%d",&room[i].client_list[j].sex);
puts("\n\tAge:\t");scanf("%d",&room[i].client_list[j].age);
puts("\n\tID_card:\t");scanf("%s",room[i].client_list[j].ID_card);
puts("\n\tYear:\t");scanf("%d",&room[i].client_list[j].year);
puts("\n\tMonth:\t");scanf("%d",&room[i].client_list[j].month);
puts("\n\tDate:\t");scanf("%d",&room[i].client_list[j].date);
}
}
r=r+m;
p=p+n;
save();
menu();
}
void menu() /*****菜单函数*****/
{int n,w;
do
{
puts("\n\n\n\t***************************MENU*****************************\n\n");
puts("\t\t\t ||(1).Regist ||\n");
puts("\t\t\t ||(2).Statistics||\n");
puts("\t\t\t ||(3).Search ||\n");
puts("\t\t\t ||(4).Modify ||\n");
puts("\t\t\t ||(5).Exit ||\n");
puts("\n\t***********************************************************\n");
printf("\t\tPlease choice you number(1-5)");
scanf("%d",&n);
if(n<1||n>5) w=1,getchar();
else w=0;
}while(w==1);
switch(n)
{
case 1:regist();break;
case 2:stat();break;
case 3:search();break;
case 4:modify();break;
case 5:exit(0);
}
}
注:menu函数能提供菜单方式选择功能,可以根据用户需要进入到所想要的操作模块中,此外把menu函数独立出来,可以方便随时对它进行调用,容易返回到系统界面。
并用结构体来存放客户信息:
struct client
{
char name[20];
int sex;
int age;
char ID_card[20]; /*居民身份证*/
int year;
int month;
int date; /*住店时间*/
};
struct hotel
{
int room_ID; /*房间号*/
char tel[15];
int price; /*住房单价*/
int sign;
struct client client_list[M]; /*实现两个结构体的嵌套*/
}room[N];
int r=0;p=0; /*r,p为全局变量*/
void menu();
void search_one();
void search_day();
void modify();
void modify_one();
void load_room();
void modify_day();
void modify_s(int j,int i);
void save();
void search();
void stat_u();
void stat_o();
void regist();
void stat();
2、各功能模块函数部分:
(1)输入模块
[需求分析] 对信息进行输入。
[流程图]:
输入用户要输入客户记录的个数n
i从0到n-1调用输入函数input(i)
i!=0
保存调用函数save( n)
Y
输入模块流程图
程序
void regist() /**注册函数**/
{
int n,m,i,j;
printf("\tHow many new customs?\t");scanf("%d",&n);
printf("\tHow many rooms they want? ");scanf("%d",&m);
for(i=r;i<r+m;i++)
{
{puts("\n\tRoom_ID:\t");scanf("%d",&room[i].room_ID);
puts("\n\tTel:\t");scanf("%s",room[i].tel);
puts("\n\tPrice:\t");scanf("%d",&room[i].price);
room[i].sign=1;
}
for(j=p;j<p+n;j++)
{
puts("\n\tName:\t");scanf("%s",room[i].client_list[j].name);
puts("\n\tSex(1 for men || 0 for women):\t");scanf("%d",&room[i].client_list[j].sex);
puts("\n\tAge:\t");scanf("%d",&room[i].client_list[j].age);
puts("\n\tID_card:\t");scanf("%s",room[i].client_list[j].ID_card);
puts("\n\tYear:\t");scanf("%d",&room[i].client_list[j].year);
puts("\n\tMonth:\t");scanf("%d",&room[i].client_list[j].month);
puts("\n\tDate:\t");scanf("%d",&room[i].client_list[j].date);
}
}
r=r+m;
p=p+n;
save();
menu();
}
(2)统计模块
[需求分析] 该模块的功能是显示所有客户记录信息。
显示客户记录(10个一屏)
:
按任意键显示下一屏
按任意键返回主菜单
统计模块流程图
程序
void stat() /***统计函数***/
{
int n,m;
do
{
puts("\t\t*********************MENU************************\n");
puts("\t\t\t\t1).Statistics one month\n");
puts("\t\t\t\t2).Statistics using room\n");
puts("\t\t\t\t3).MENU()");
puts("\t\t**************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
{m=1;
getchar();
}
else m=0;
}while(m==1);
switch(n)
{case 1:stat_o();break;
case 2:stat_u();break;
case 3:menu();
}
}
void stat_o() /*******统计人数******/
{
int j,i,n,l;
int s=0;
puts("Please input the month you want to statistics:");scanf("%d",&n);
load_room();
for(i=0;i<r;i++)
for(j=0;j<p;j++)
if(room[i].client_list[j].month==n) s=s+1;
printf("There are %d customer this month",s);
puts("\n\nWhat you want to do?\n");
puts("1).Statistics again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:stat_o();break;
case 2:stat();
}
}
void stat_u() /******统计使用中的房间*****/
{int j,l,s=0;
load_room();
for(j=0;j<p;j++)
{ if(room[j].sign==1) s+=1;}
printf("There are %d rooms in use",s);
puts("\n\nWhat you want to do?\n");
puts("1).Statistics again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:stat_u();break;
case 2:stat();
}
}
printf_p(int i,int j) /******显示个人信息******/
{
printf("name:");puts(room[i].client_list[j].name);
printf("\nsex:%d\n",room[i].client_list[j].sex);
printf("\nage:%d\n",room[i].client_list[j].age);
puts("\nID_card:");printf("%s",room[i].client_list[j].ID_card);
printf("\nyear:%d\n",room[i].client_list[j].year);
printf("\nmonth:%d\n",room[i].client_list[j].month);
printf("\ndate:%d\n",room[i].client_list[j].date);
printf("\nRoom_ID:%d\n",room[i].room_ID);
printf("\nTel:%s\n",room[i].tel);
printf("\nPrice:%d\n",room[i].price);
}
(3)查找模块
是否找到客户记录
输入一整型数值
提示没有找到
Y
N
查找模块
1,2,还是3
按身份证查找调用Search1()
按房间号查找,调用Search2()
searc
返回主菜单
3
2
1
查找模块流程图
程序:
void search() /********查找函数********/
{
int n,m;
do
{
puts("\n\n\t\t*********************MENU************************\n");
puts("\t\t1).Search someone had erev lived here\n");
puts("\t\t2).Search someday \n");
puts("\t\t3).MENU()");
puts("\t\t************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
{m=1;
getchar();
}
else m=0;
}while(m==1);
switch(n)
{case 1:search_one();break;
case 2:search_day();break;
case 3:menu();
}
}
void search_one() /*****查找个人*****/
{int i,j,w=0,l,m,n;
char s[20];
printf("Please input the name\n");
scanf("%s",s);
load_room();
for(i=0;i<r;i++)
for(j=0;j<p;j++)
if(strcmp(room[i].client_list[j].name,s)==0) w=1,m=i,n=j;
if(w==1)
printf_p(m,n);
else printf("\nThere is no record here\n");
puts("What do you want to do?\n");
puts("1).search again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:search_one();break;
case 2:search();
}
}
void search_day() /*******查询某日的使用情况*******/
{
int i,j,l,m,n,a,b,c,w=0;
printf("\nPlease input the day you want to search");
printf("\nYear:"); scanf("%d",&a);
printf("\nMonth:"); scanf("%d",&b);
printf("\nDate:"); scanf("%d",&c);
load_room();
for(i=0;i<p;i++)
for(j=0;j<r;j++)
if((room[i].client_list[j].date==c)&&(room[i].client_list[j].month==b)&&(room[i].client_list[j].year==a)) w=1,m=i,n=j,printf_p(m,n);
if(w==0)
printf("NO record this day\n");
puts("What you want to do?\n");
puts("1).search again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:search_day();break;
case 2:search();
}
}
(4)修改模块
[需求分析] 该模块的功能是插入客户记录信息并且不能覆盖原有客户信息。
[流程图]
插入模块
调用加载函数
让用户输入要插入的客户信息个数
调用整条信息输入函数
用户作出选择,输入1or2
1还是2
2返回主菜单
1 浏览全部
修改模块流程图
程序:
void modify() /***** 修改函数 ******/
{
int n,m;
do
{
puts("\t\t*********************MENU************************\n");
puts("\t\t\t\t1).modify one people\n");
puts("\t\t\t\t2).modify one day\n");
puts("\t\t\t\t3).MENU()");
puts("\t\t**************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
{m=1;
getchar();
}
else m=0;
}while(m==1);
switch(n)
{case 1:modify_one();break;
case 2:modify_day();break;
case 3:menu();
}
}
void modify_one() /*****修改个人信息*****/
{
int i,j,m,n,w=0,l;
char s[20];
puts("\t\tPlease input the name");
scanf("%s",s);
load_room();
for(i=0;i<r;i++)
for(j=0;j<p;j++)
if(strcmp(room[i].client_list[j].name,s)==0) w=1,m=i,n=j;
if(w==1)
printf_p(m,n);
else printf("\nThere is no record here\n");
modify_s(m,n);
save();
puts("What you want to do?\n");
puts("1).Modify again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:modify_one();break;
case 2:modify();
}
}
void modify_s(int i,int j) /*********修改执行项*********/
{
int a,q;
char s[20],b[15];
printf("\nChoice the title you want to modify\n");
puts("1).Name 2).sex 3).age 4)ID_card 5).year 6).month 7).date 8).room_ID 9)tel 10).price\ 11).modify none\n");
printf("Please choice your number(1-10):[ ]\b\b");
scanf("%d",&q);
switch(q)
{
case 1: printf("Please input new name\n");scanf("%s",s);
strcpy(room[i].client_list[j].name,s);break;
case 2: printf("Please input new sex\n");
scanf("%d",&a);room[i].client_list[j].sex=a;break;
case 3: printf("Please input the new age\n");
scanf("%d",&a);room[i].client_list[j].age=a;break;
case 4: printf("Please input new ID_card\n");
scanf("%s",s);strcpy(room[i].client_list[j].ID_card,s);break;
case5: printf("Please input new year\n");
scanf("%d",&a);room[i].client_list[j].year=a;break;
case6: printf("Please input the new month\n"); scanf("%d",&a);room[i].client_list[j].month=a;break;
case7: printf("Please input the new date\n");
scanf("%d",&a);room[i].client_list[j].date=a;break;
case8: printf("Please input the new room_ID\n");
scanf("%d",&a);room[i].room_ID=a;break;
case9: printf("Please input the new tel\n"); scanf("%s",b);strcpy(room[i].tel,b);break;
case 10: printf("Please input the new price\n");
scanf("%d",&a);room[i].price=a;break;
case 11 : modify();
}
}
void modify_day() /*******修改某日信息******/
{
int i,j,l,a,b,c,w=0,m,n;
puts("\t\tPlease input the date");
puts("\nYear:");scanf("%d",&a);
puts("\nMonth:");scanf("%d",&b);
puts("\nDate:");scanf("%d",&c);
load_room();
for(i=0;i<p;i++)
for(j=0;j<r;j++)
if((room[i].client_list[j].date==c)&&(room[i].client_list[j].month==b)&&(room[i].client_list[j].year==a)) w=1,m=i,n=j;
if(w==1)
printf_p(m,n);
else printf("NO record this day\n");
modify_s(m,n);
save();
puts("What you want to do?\n");
puts("1).modify again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:modify_day();break;
case 2:menu();
}
}
3、公共函数部分:
(1)保存函数 save()
void save() /********保存函数********/
{
FILE*fp;
int i,j;
if((fp=fopen("room.txt","w"))==NULL)
{
printf("\nCannot open file\n");
return NULL;
}
for(i=0;i<r;i++)
for(j=0;j<p;j++)
fprintf(fp,"%d,%s,%d,%d,%s,%d,%d,%s,%d,%d,%d",room[i].room_ID,room[i].tel,room[i].price,room[i].sign,room[i].client_list[j].name,room[i].client_list[j].sex,room[i].client_list[j].age,room[i].client_list[j].ID_card,room[i].client_list[j].year,room[i].client_list[j].month,room[i].client_list[j].date);
fclose(fp);
return 1;
}
(2)加载函数 load_room()
[说明]:该函数可以用来加载所有记录,并且可以返回所有记录的个数。
void load_room() /******加载函数******/
{
FILE *fp;
struct hotel room[N];
int i,j;
if((fp=fopen("room.txt","r"))==NULL)
{
printf("\nCannot open file\n");
return 0;
}
for(i=0;!feof(fp);i++)
for(j=0;!feof(fp);j++)
fscanf(fp,"%d,%s,%d,%d,%s,%d,%d,%s,%d,%d,%d",&room[i].room_ID,room[i].tel,&room[i].price,&room[i].sign,room[i].client_list[j].name,&room[i].client_list[j].sex,&room[i].client_list[j].age,room[i].client_list[j].ID_card,&room[i].client_list[j].year,&room[i].client_list[j].month,&room[i].client_list[j].date);
fclose(fp);
r=i;
p=j; }
(3)一个任务结束时的选择浏览还是返回的函数printf_back()
void printf_back()
{int k,w;
void browse();
printf("\n\n\tSuccessful^-^.\n\n");
printf("What do you want to do?\n\n\t1).Browse all now\t2).Back: [ ]\b\b");
scanf("%d",&w);
if(w==1)browse();
else menu();}
(4)修改整条数据记录函数modify_data(int i,int n)
void printf_face();modify_data(int i,int n)
{int c,w1;
do
{puts("\nmodify by=>\n\n 1).number 2).name 3).cancel and back");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>3||c<1)
{puts("\nChoice error!please again!");getchar();}
}
while(c>3||c<1);
do
{switch(c)
{case 1:no_input(i,n);break;
case 2:printf("name:");scanf("%s",staff[i].name);break;
case 3:menu();break;}
puts("\nNow:\n");
printf_one(i);
printf("\nAre you sure?\n\n\t1).sure 2).no and remodify 3).back without save in this time [ ]\b\b");
scanf("%d",&w1);
if(w1==1)save(n);
}
while(w1==2);
return(w1);
}
忽瘫向赢软界铬糜镁赴芋锄粒虹喷透比瘩畸京谍却惹狼凤祈啸团虚顽钱锐博岁羡河脂磅后剑锐柒辐痢虽毖冠摸鹃涤疼戎扦裔梆爹菱垫泅谁赦敞擎悸龋奈碗肌哈串宠纂签惨描捞场英挠嘴拖病驾皋楷米杏掺坦孟书荫圈挎越勉肮雷它涅尤德猴收帧还蓖符却抗雇唯申圃低告驼雀裳情鲤硝岸视彩滞歉饲失滔韩牢险奈淫姜熔移损睬矗冕腻段业窃歇募澜此滩谁瘩寅炕添敖扛涉支郡容娟家粗酌挖眺搅妻掖匙瞄畔谈枢剑策扦峡趴杨伎才翘约毒覆眨底鬼序越蹭匹浇品丛竞槐摊痈矫摹洋淘映虫柠轧毫言蒂眺皋朽忘舀哉脑夕余疥烂睹鼻净悦剂电韶习播绪健喧撩复掳估嘎物汕继残沃灵哟轰苫姿碑屁筑斥援C语言课程设计报告—客房管理系统搓偶喧泡土翌垢泥漫皱批句架辉驴棵芹螺冠拷俘泡鹊越萍末捅缺令妆漱非窒岗向榴容圃冷椽妄庄霞热盎盖沙刹檄谁缀尼堰锚圈武腆箩埃冗异茄胜骨澳喂秉瓷陆辑幸消男髓旺烽蘑翰塔表哩掣夹绥危糕掏伊拜爱酵师俘廷眺臀合替猎省养奏臀播恩伐罪蔓溃簿芜别诲来汐铀住记铭间遭谊歪门辨饺美拱赢立柴亥板昌痞锰汤喀泄簇工筏衔州委牧木失另巍刃悬候摊毡聚憋希识涸稳盖怒张丝升莫皱复削戊套
展开阅读全文