C语言实验分析报告酒店管理系统.docx
《C语言实验分析报告酒店管理系统.docx》由会员分享,可在线阅读,更多相关《C语言实验分析报告酒店管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
C语言实验分析报告酒店管理系统
C语言实验报告-酒店管理系统
————————————————————————————————作者:
————————————————————————————————日期:
武汉科技大学
C语言程序设计
课程设计
题目酒店管理系统
班级信息与计算科学2班
姓名陈诚
学号201407119043
成绩
2015年6月23日
一、总体设计
1、程序的总体设计
(1)程序总体设计思路:
酒店房间登记管理系统,实现的是房间登记与管理(包括登记入住、查询)
为了体现模块化设计,把所有要实现的功能做成函数,采用分步实施的方法逐步细化。
具体分布实施有以下5步。
1,编写模块
2,定义实现个功能模块所要函数
3,编写各个函数
4,理清思路,逐步修改
5,调试整个程序。
核心部分是各个函数:
1、欢迎界面函数:
通过switch进入不同界面。
2、登记入住函数:
使用户在入住前登记个人信息,选择房间信息
3、查询入住情况函数:
顾客可通过两种方式查找到自己的个人信息。
4、查询当前费用函数:
顾客可随时查询所用费用
5、结账退房函数:
所有信息清零。
2、数据结构
此系统,选择用结构体存放不同类型的数据,房间信息。
在这过程中由于对指针的运用与操作还不熟练,不方便修改,所以没用指针。
(1)创建房间信息结构体
/*结构体hotel房间号、房间种类、客户姓名、身份证号、入住状态、实际收房费,押金等*/
structhotel
{
intnum;/*房间号*/
intkind;/*房间种类1(表示单人间)2(表示双人间)*/
charname[20];/*姓名*/
charID[19];/*身份证号*/
intflag;/*flag0(表示有人入住)0(表示无人入住)*/
intdingjia;/*房间定价*/
intshiji;/*实际缴纳费用*/
}room[M];
3、函数原型声明
voidwelcome();//主界面
intdengji();//登记入住函数
intnow_room();//查询当前房间入住情况
intnow_feiyong();//查询当前费用
inttuifang();//结账退房
intfind();//查询当前入住人数
intkfxinxi();//客户信息
voidjiezhang();//结账付款
intquit();//退出函数
intmima();//密码//
voidsave();//保存//
二、详细设计
1、主函数设计
主函数说明:
为满足顾客登记入住,查询房间入住情况,查询当前费用,结账退房等功能的实现,设计此函数。
开始进入欢迎界面让顾客选择,进入顾客所选界面。
主函数流程图
2、子函数流程图
(1)登记入住函数说明:
登记入住流程图
(2)查询房间入住情况:
2种查询方式(1.按房号查询2.客户信息查询),最终输出
结账退房流程图
三、测试
出现欢迎界面
测试1:
选择选项1,入住登记
“1”按提示输入信息(如:
1-单人间,1-房间号,陈诚,522225************,200元,登记成功)
测试2:
选择选项2,查询房间入住情况
“1”按房间号查询,1、房间号出现刚登记的个人信息
2、房间号该房为空房
“2”按客户信息查询,身份证号522225199609230037出现个人信
“3”退出,返回欢迎界面
测试3:
选择选项3,查询客户当前费用
“1”号房间,当前费用100元
测试4:
选择选项4,结账退房
“2”号房间,空房,重输
“1”号房间,应支付100元,退房成功
四、小结
此程序满足课程设计要求,实现登记、查询、结账等操作,并对不同房间实施不同收费标准,计算总费用等功能。
程序优点:
整个程序界面友好,与顾客有良好的界面交流。
程序虽简单,但功能齐全。
程序缺点:
(1)数据结构单一。
主要是学习c语言时间短,知识程度不深,不够全面,知道的不多。
(2)不会调用系统时间。
在做课设的过程中,我对c语言有了更深入的了解。
它很考察逻辑的严密性,思路条理要清晰是很重要的,它包含你编写程序的大致方向。
严谨认真的态度也不可或缺。
调试程序过程中也可以提升自己的理解已经加深自身熟练度。
遇到问题要想方设法将它解决,看书找资料,请教同学,与同学讨论,从这些方面我又可以学会合作。
源码:
//主函数//
#defineM40
#include
#include
#include
#include"dingyi.h"
#include"jiegouti.h"
#include"find.h"
#include"kfxinxi.h"
#include"zuizhongfeiyong.h"
#include"quit.h"
#include"zhujiemian.h"
#include"dengji.h"
#include"dangqianruzhu.h"
#include"dangqianfeiyong.h"
#include"tuifang.h"
#include"mima.h"
#include"save.h"
#include"duru.h"
/*主函数*/
voidmain()
{
inti,j;
mima();//密码//
duru();//读入数据//
welcome();//载入主界面//
scanf("%d",&i);
switch(i)
{
case1:
j=dengji();break;
case2:
j=now_room();break;
case3:
j=now_feiyong();break;
case4:
j=tuifang();break;
case5:
exit(0);
default:
quit();
}
while(j!
=0)//操作结束可返回主界面//
{
welcome();
scanf("%d",&i);
switch(i)
{
case1:
j=dengji();break;
case2:
j=now_room();break;
case3:
j=now_feiyong();break;
case4:
j=tuifang();break;
case5:
exit(0);
default:
quit();
}
}
}
/*登记入住*/
intdengji()
{
inti,j,a,k,n;
system("cls");
printf("\n\n☆☆☆☆☆☆☆登记入住☆☆☆☆☆☆☆\n\n");
printf("请选择房间类型:
\n\n");
printf("1.单人间2.双人间\n\n");
scanf("%d",&n);
switch(n)
{
case1:
printf("现在空闲的单人房间有:
\n");
for(i=1,j=0;i<=M;i=i+2)
if(room[i-1].flag==0)
{
printf("%d\t",i);j++;
if(j%5==0)
printf("\n");
}//控制每行输出个数//
printf("安排客户想要的房间:
");
scanf("%d",&k);
while(k%2==0)
{printf("!
房号输入错误,请重新输入\n");
scanf("%d",&k);}
room[k-1].kind=1;
room[k-1].num=k;
printf("\n请输入客户的姓名:
");
scanf("%s",room[k-1].name);
printf("\n请输入客户的身份证号:
");
scanf("%s",room[k-1].ID);
while(strlen(room[k-1].ID)!
=18)
{printf("!
输入有误,请重新输入\n");
scanf("%s",room[k-1].ID);}
room[k-1].dingjia=100;
printf("\n\n应当缴纳房费%d元",room[k-1].dingjia);
printf("\n\n实际缴纳的金额为:
");
scanf("%d",&room[k-1].shiji);
while(room[k-1].shiji{printf("\t\t\n\n!
输入有误,请重新输入!
\n\n");
printf("\n\n实际缴纳的金额:
");
scanf("%d",&room[k-1].shiji);}
printf("\n\n是否确认入住(1-是2-否)\n");
scanf("%d",&a);
while(a!
=1&&a!
=2)
{
printf("\n\n\t\t!
输入有误,请重新输入:
");
scanf("%d",&a);
}
if(a==1)
{room[k-1].flag=1;
printf("\n已成功登记!
\n\n");
save();
}
break;
case2:
printf("现在空闲的双人房间有:
\n\n");
for(i=2,j=0;i<=M;i=i+2)
if(room[i-1].flag==0)
{
printf("%d\t",i);j++;
if(j%5==0)
printf("\n\n");
}//控制每行输出个数//
printf("安排客户想要的房间:
");
scanf("%d",&k);
while(k%2!
=0)
{printf("!
房号输入错误,请重新输入:
\n");
scanf("%d",&k);}
room[k-1].kind=2;
room[k-1].num=k;
printf("\n请输入客户的姓名:
");
scanf("%s",room[k-1].name);
printf("\n请输入客户的身份证号:
");
scanf("%s",room[k-1].ID);
while(strlen(room[k-1].ID)!
=18)
{
printf("!
输入有误,请重新输入:
\n");
scanf("%s",room[k-1].ID);
}
room[k-1].dingjia=200;
printf("\n\n应当缴纳房费%d元",room[k-1].dingjia);
printf("\n\n实际缴纳的金额为:
");
scanf("%d",&room[k-1].shiji);
while(room[k-1].shiji{printf("\t\t\n\n!
输入有误,请重新输入:
\n\n");
printf("\n\n实际缴纳金额为:
");
scanf("%d",&room[k-1].shiji);}
printf("\n\n是否确认入住(1-是2-否)\n");
scanf("%d",&a);
while(a!
=1&&a!
=2)
{
printf("\n\n\t\t!
输入有误,请重新输入:
");
scanf("%d",&a);
}
if(a==1)
{room[k-1].flag=1;
printf("\n已成功登记!
\n\n");
save();
}break;
default:
quit();
}
quit();
return1;
}
//读取函数//
voidduru()
{
FILE*fp;
inti;
if((fp=fopen("kf_dat","rb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(i=0;i{
fread(&room[i],sizeof(structhotel),1,fp);
}
fclose(fp);
}
/*查询入住人数*/
intfind()
{
intnumber=0;
inti;
for(i=0;iif(room[i].flag!
=0)
number++;
return(number);
}
/*客户信息*/
intkfxinxi(intk)
{
charzhonglei[10];
switch(room[k].kind)
{
case1:
strcpy(zhonglei,"单人间");break;
case2:
strcpy(zhonglei,"双人间");break;
}
printf("\n\n\t\t----姓名:
");
puts(room[k].name);printf("\n\n");
printf("\t\t----身份证号:
");
puts(room[k].ID);printf("\n\n");
printf("\t\t----房间种类:
");
puts(zhonglei);printf("\n\n");
printf("\t\t----房间号:
");
printf("%d",k+1);printf("\n\n");
printf("\t\t----实收房费:
");
printf("%d元",room[k].shiji);
printf("\n\n");
return
(1);
}
//密码//
intmima()
{
system("color8f");
charname[10],mima[20];
printf("进入系统前请输入用户名和密码:
\n");
scanf("%s%s",name,mima);
while((strcmp(name,"CC")!
=0)||(strcmp(mima,"02200059")!
=0))//比较输入的和用户密码是否一致//
{
printf("输入错误,重新输入!
\n");
scanf("%s%s",name,mima);
}
system("cls");
return
(1);
}
/*查询当前费用*/
intnow_feiyong()
{
intmoney,n;
inti,s;
system("cls");
printf("\n\n☆☆☆☆☆☆☆查询当前客户费用☆☆☆☆☆☆☆\n\n");
if(find()==0)
printf("全为空房!
\n\n");
else
{
printf("请输入房间号:
");
scanf("%d",&i);
while
(1)
{
if(room[i-1].flag==0)
{
printf("\n\n该房为空房,1.重输2.退出\n\n");
scanf("%d",&s);
if(s==1)
{
printf("请输入房间号:
");
scanf("%d",&i);}
else
break;
}
else
{
printf("\n\n查询的个人信息为:
");
kfxinxi(i-1);
printf("\n\n当前房间定价为:
%d",room[n-1].dingjia);
break;
}
break;
}
}
quit();
return1;
}
/*查询当前房间入住情况*/
intnow_room()
{
inti,j,k,s;
chara[20];
system("cls");
printf("\n\n☆☆☆☆☆☆☆查询房间入住☆☆☆☆☆☆☆\n\n");
printf("\t\t1.按房号查询\n\n\t\t2.按客户信息查询\n\n\t\t3.退出");
printf("\n\n请选择:
");
scanf("%d",&i);
while
(1)
{if(i>4||i<1){printf("\n\n\t\t输入有误,请重新输入:
");
scanf("%d",&i);}
elseif(i==1)
{
printf("\n\n请输入房间号:
");//按房号查询
scanf("%d",&j);
if(room[j-1].flag==0)
printf("\n\n此房间无人住\n\n");
else
{
printf("您的个人信息为:
");
kfxinxi(j-1);
}
break;
}
elseif(i==2)
{
printf("\n\n请输入您的身份证号:
");//按客户信息查询
scanf("%s",a);
while
(1)
{
for(k=0;kif(strcmp(a,room[k].ID)==0)break;
if(k!
=M)
{printf("\n\n您的个人信息为:
");
kfxinxi(k);break;
}
else
{printf("\t\t\n\n1.输入有误,请重新输入2.不存在此人信息,退出\n\n");
scanf("%d",&s);
if(s==1)
{
printf("\n\n请输入您的身份证号:
");
scanf("%s",a);}
elsereturn
(1);}}break;}
elseif(i==3)break;
else{
printf("\t\t\n\n1.输入有误,请重新输入\n\n");
printf("\t\t1.按房号查询\n\n\t\t2.按客户信息查询\n\n\t\t3.按入住时间查询\n\n\t\t4.退出");
printf("\n\n请选择:
");
scanf("%d",&i);
}
}quit();}
/*退出函数*/
intquit()
{
inty;
printf("是否需要返回主界面?
1-是2-否\n\n");
scanf("%d",&y);
if(y==1)
welcome();
else
printf("******欢迎下次光临武科大酒店******!
\n\n");
return1;
}
//保存函数//
voidsave()
{
FILE*fp;
inti;
if((fp=fopen("kf_dat","wb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&room[i],sizeof(structhotel),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
/*最终收的费用*/
voidshoufei(intdingjia,intshiji)
{
intyu;
yu=shiji-dingjia;
if(yu==0)
printf("费用刚刚好,不用找零或补钱\n");
elseif(yu>0)
printf("找还顾客%d元\n",yu);
elseprintf("顾客应再支付%d元\n",yu*(-1));
}
/*结账退房*/
inttuifang()
{
charzhonglei[30];
intn,m;
system("cls");
printf("\n\n☆☆☆☆☆☆☆结账退房☆☆☆☆☆☆☆\n\n");
if(find()==0)
printf("房间都是空的!
\n\n");
else
{
printf("请输入需要退房的房号:
");
scanf("%d",&n);
if(n>M||n<1)
{
printf("\n\n输入有误,请重新输入:
",M);
scanf("%d",&n);
}
if(room[n-1].flag==0)
printf("空房,无法办理退房!
\n\n");
switch(room[n-1].kind)
{
case1:
strcpy(zhonglei,"单人间");break;
case2:
strcpy(zhonglei,"双人间");break;
}
printf("房间号:
%d\n房间类型:
%s\n客人姓名:
%s\n身份证号:
%s\n",room[n-1].num,zhonglei,room[n-1].name,room[n-1].ID);
printf("\n\t房间定价为:
%d\n",room[n-1].dingjia);
if(room[n-1].flag==1)
shoufei(room[n-1].dingjia,room[n-1].shiji);
printf("\n\n是否退房(1.是2.否):
");
scanf("%d",&m);
if(m==1)
{
room[n-1].flag=0;
strcpy(room[n-1].name,"0");
room[n-1].shiji=0;
printf("\n\n您已成功退房,欢迎下次光临!
\n\n");
save();
}
}
quit();
return1;
}
/*主界面*/
voidwelcome()
{
intn;
n=find();
system("color4F");
printf("--------------------------------------------------------------------------------");
printf("▼▼▼▼▼▼▼▼▼▼▼▼▼▼欢迎进入武科大酒店管理系统▼▼▼▼▼▼▼▼▼▼▼▼▼\n");
printf("\t★★★1.入住登记\n\n");//dengji()//
printf("\t★★★2.查询当前房