客房管理系统.docx
《客房管理系统.docx》由会员分享,可在线阅读,更多相关《客房管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
![客房管理系统.docx](https://file1.bdocx.com/fileroot1/2023-4/18/0570a891-779a-41e6-b526-d4cc031ea1bd/0570a891-779a-41e6-b526-d4cc031ea1bd1.gif)
客房管理系统
C语言课程设计
题目:
客房管理系统
设计者:
专业:
班级学号:
学号:
所属院系:
机电学院
指导教师:
日
以下是报告正文
1.题目与要求:
客房管理系统
系统包括新用户登记功能,统计功能,查询功能,修改功能。
1.1问题提出与要求:
建立如下结构体:
StructClient
{
CharName[20];
intSex;
intAge;
charID-card[];/*居民身份证*/
intyear;
intmonth;
intdate;
};
StructHotel
{
IntRoom-ID;/*房间号*/
IntTel;
intPrice;
boolsign;/*标记房间是否为空房间*/
StructClient
Client-list;/*实现两结构体的嵌套*/
}
Room[NUM]
需求分析
根据题目要求,客房信息要用文件存储,提供文件的输入输出操作;在程序中需要对客房具有登记,统计,查询和修改的功能;另外还要用键盘式菜单实现功能选择.
2.功能实现设计:
2.1总体设计:
下面来分析一下整个系统,根据上面的要求分析,可将这个系统设计为五大模块(见下图):
注册模块,统计模块,查询模块,修改模块,退出模块。
其主要功能为:
注册,统计,查询,修改功能。
2.2详细设计:
2.2.1主函数
主函数一般设计得比较简洁,提供输入,功能处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
[流程图]
[程序]
voidmain()/*主函数*/
{
intn,w=1;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应的数字范围之内*/
structHotel*info;
while(w)
{
puts("\t\tC语言课程设计客房管理系统\n");
puts("\t\t072084班丁超学号:
20081003552\n");
puts("\t\t********************************\n");
puts("\t\t****************MENU****************\n");
puts("\t\t**********1registration*****************\n");
/*注册*/
puts("\t\t**********2statistic*********************\n");/*统计*/
puts("\t\t*********3search**********************\n");/*查询*/
puts("\t\t*********4modify*********************\n");
/*修改*/
puts("\t\t**********5exit************************\n");/*退出*/
puts("\t\t***************************************\n");
puts("\t\t************************************\n");
printf("Choiceyournumber(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>5)/*对选择的数字作判断*/
{
w=1;
getchar();
}
switch(n){
case1:
regi();break;/*注册模块*/
case2:
stat();break;/*统计模块*/
case3:
search();break;/*查询模块*/
case4:
modify();break;/*修改模块*/
case5:
tuichu();break;/*退出模块*/
default:
break;
}
getchar();
}
}
2.2.2功能模块设计
2.2.2.1注册模块
单独看各数据信息,身份证号码均是字符型,可采用字符型数组;用户在填完个人信息,即可进行房间预定。
[流程图]
[程序]
regi()/*注册模块*/
{
inti,n;
structHotel*info;
chars[10];
chara[10]="have";
printf("peoplenumber:
\n");
scanf("%d",&n);
for(i=0;i{
info=(structHotel*)malloc(sizeof(Room[NUM]));
if(info==0)
{
printf("memroyusedover\n");
}
inputs("\tRoom_ID:
\n",info->Room_ID,10);
if(!
((char*)(info->Room_ID))[0])break;
inputs("\thavepeopleputhavenopeopleputnull\n",info->person,10);
if(strcmp(a,info->person))
{
inputs("\tname:
\n",info->Client_list.Name,20);
inputs("\tsex:
\n",info->Client_list.Sex,10);
inputs("\tage:
\n",info->Client_list.Age,10);
inputs("\tId_card:
\n",info->Client_list.ID_card,20);
inputs("\tyear:
\n",info->Client_list.year,10);
inputs("\tmonth:
\n",info->Client_list.month,10);
inputs("\tdate:
\n",info->Client_list.date,10);
inputs("\tTel:
\n",info->Tel,10);
inputs("\tPrice:
\n",info->Price,10);
}
printf("\tregistrationdone\n");
start=dls_store(info,start);
}
}
inputs(char*prompt,char*s,intcount)
{
charp[255];
do{
printf("%s",prompt);
scanf("%s",p);
if(strlen(p)>count)
printf("toolong!
\n");
}while(strlen(p)>count);
strcpy(s,p);
}
structHotel*dls_store(structHotel*i,structHotel*top)
{
staticstructHotel*last=0;
structHotel*old,*p;
if(last==NULL)
{
i->next=NULL;
i->prior=NULL;
last=i;
returni;
}
p=top;
old=NULL;
while(p)
{
if(strcmp(p->Room_ID,i->Room_ID)<0){
old=p;
p=p->next;
}else{
if(p->prior)
{
p->prior->next=i;
i->next=p;
p->prior=i;
returntop;
}
i->next=p;
i->prior=0;
p->prior=i;
returni;
}
old->next=i;
i->next=0;
i->prior=old;
last=i;
returnstart;
}
}
2.2.2.2统计模块
有两种数据进行统计,被占用的房间和未被占用的房间。
[流程图]
[程序]
stat()/*统计模块*/
{
structHotel*info;
chara[10]="null";
charb[10]="have";
intc,count=0;
printf("\tstatistictheusedRoom_IDput1,theunusedRoom_IDput2\n");
scanf("%d",&c);
if(c==1)
{
info=start;
while(info)
{
if(!
strcmp(a,info->person))
{
printf("\Room_ID%s\n",info->Room_ID);
count++;
}
info=info->next;
}
printf("\tusedroomsare%s\n",count);/*统计被占用的房间*/
}
if(c==2)
{
info=start;
while(info)
{
if(!
strcmp(b,info->person))
{
printf("\tRoom_ID%s\n",info->Room_ID);
count++;
}
info=info->next;
}
printf("\tunusedroomsare%s\n",count);/*统计未被占用的房间*/
}
}
display(structHotel*info)
{
{
printf("\t\tname:
%s\n",info->Client_list.Name);
printf("\t\tsex:
%s\n",info->Client_list.Sex);
printf("\t\tage:
%s\n",info->Client_list.Age);
printf("\t\tId_card:
%s\n",info->Client_list.ID_card);
printf("\t\tyear:
%s\n",info->Client_list.year);
printf("\t\tmonth:
%s\n",info->Client_list.month);
printf("\t\tdate:
%s\n",info->Client_list.date);
printf("\t\tTel:
%s\n",info->Tel);
printf("\t\tPrice:
%s\n",info->Price);
}
printf("\n");
}
2.2.2.3查询模块
查询通常可细分为分类查找,此题中分为合适查找,被占用查找,未被占用查找。
再与统计信息进行对应,显示对应数据,则用户即可知道合适房间。
[程序]
search()/*查询模块*/
{
intb;
printf("\tsearchthefixedroomput1\n");
printf("\tsearchtheusedroomput2\n");
printf("\tsearchtheunusedroomput3\n");
printf("\tbacktothemainmenuput4\n");
do{
scanf("%d",&b);
switch(b){
case1:
search1();break;
case2:
search2();break;
case3:
search3();break;
case4:
return;
}
}while(b<1||b>4);
}
structHotel*find(char*Room_ID)
{
structHotel*info;
info=start;
while(info){
if(!
strcmp(Room_ID,info->Room_ID))returninfo;
info=info->next;
}
printf("\tcan'tfind\n");
return(NULL);
}
search1()
{
charRoom_ID[10];
structHotel*info;
printf("\tputtheRoom_ID\n");
scanf("%s",Room_ID);
getchar();
info=find(Room_ID);
if(!
info)printf("\tcan'tfind\n");
elsedisplay(info);
}
search2()
{
structHotel*info;
chara[10]="null";
info=start;
while(info){
if(!
strcmp(info->person,a))
display(info);
printf("\n");
info=info->next;
}
}
search3()
{
structHotel*info;
charb[10]="have";
info=start;
while(info){
if(!
strcmp(b,info->person))
display(info);
printf("\n");
info=info->next;
}
}
save()
{
registerintt,size;
structHotel*info;
char*p;
FILE*fp;
if((fp=fopen("mlist","wb"))==0){
printf("\tfilecan'topen\n");
exit(0);
}
printf("\tsaving\n");
size=sizeof(Room[NUM]);
info=start;
while(info){
p=(char*)info;
for(t=0;tputc(*p++,fp);
info=info->next;
}
putc(EOF,fp);
fclose(fp);
printf("\tsaved\n");
}
2.2.2.4修改模块
该模块的功能是显示用户要修改的信息。
用户输入要修改的信息,根据输入信息查对应选项,并提示用户修改该记录的那部分信息,根据用户的选项修改相应的信息。
[流程图]
[程序]
modify()/*修改模块*/
{
structHotel*info;
charRoom_ID[10];chara[10]="have";charc[10]="null";
intb,f;
printf("\texaminetheinformation1\n");/*检验信息*/
printf("\tchangetheinformation2\n");/*修改信息*/
printf("\tbacktothemainmenu3\n");/*返回主菜单*/
scanf("%d",&b);
if(b==1)search();
if(b==2){
printf("\tputtheRoom_ID\n");
scanf("%s",Room_ID);
info=find(Room_ID);
if(!
info)printf("\tcan'tfind\n");
else
{
display(info);printf("\tChangeEntry\n");
if(!
strcmp(a,info->person))
inputs("\tputnull:
\n",info->person,10);
if(!
strcmp(c,info->person))
{
inputs("\tname:
\n",info->Client_list.Name,20);
inputs("\tsex:
\n",info->Client_list.Sex,10);
inputs("\tage:
\n",info->Client_list.Age,10);
inputs("\tId_card:
\n",info->Client_list.ID_card,20);
inputs("\tyear:
\n",info->Client_list.year,10);
inputs("\tmonth:
\n",info->Client_list.month,10);
inputs("\tdate:
\n",info->Client_list.date,10);
inputs("\tTel:
\n",info->Tel,10);
inputs("\tPrice:
\n",info->Price,10);
}
}
}
if(b==3)return;
}
2.2.2.5退出模块
该模块需要有保存,退出,返回三个操作。
[程序]
[程序]
tuichu()/*退出模块*/
{
intd;
printf("\tsuggestyousavethemessage,ifsaveput1,suretoexitput2,backtomainmenuput3\n");
scanf("%d",&d);
if(d==1)save();/*保存*/
if(d==2)
printf("\tThankyouforuseingthesystem!
\n");/*退出*/
if(d==3)
{
printf("\tback\n");/*返回*/
exit(0);
}
}
3.学习心得
在老师的带领下进行了C语言程序实践学习。
在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。
在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。
C语言是需要有一定基础、而且动手能力强的学科。
上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。
课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。
这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。
初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。
我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力有了很大的提高。
4.程序运行结果:
(1)对于客房管理系统的首页数据运行结果见下图:
(2)对于注册模块的操作如下:
输入“1”按下”enter”进入注册操作。
数据运行结果见下图:
(3)对于统计模块的操作如下:
输入“2”按下”enter”进入取车操作。
数据运行结果见下图:
(4)对于查询模块的操作如下:
输入“3”按下”enter”进入取车操作。
数据运行结果见下图:
(5)对于修改模块的操作如下:
输入“4”按下”enter”进入取车操作。
数据运行结果见下图:
(6)对于退出模块的操作如下:
输入“5”按下”enter”进入取车操作。
数据运行结果见下图: