酒店房间登记与计费管理系统《C语言课程设计》.docx
《酒店房间登记与计费管理系统《C语言课程设计》.docx》由会员分享,可在线阅读,更多相关《酒店房间登记与计费管理系统《C语言课程设计》.docx(44页珍藏版)》请在冰豆网上搜索。
酒店房间登记与计费管理系统《C语言课程设计》
《C语言程序设计》
课程设计报告
学院:
_专业班级:
学生姓名:
学号:
设计地点(单位)________计算机自主学习中心________
设计题目:
___ 酒店房间登记与计费管理系统设计
完成日期:
年 月日
指导教师评语:
______________________
_________________________________________________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
______ __________
指导教师(签字):
________________
摘要
本次C语言课程设计我选择的设计任务是客房管理系统设计,这个管理系统是用C语言在VC6.0c++的编译器编译而成的。
客房管理系统包括客户基本信息的录入、房间统计、用户个人费用及住房信息查询、自动结账、退出系统功能等。
系统的开发主要由分析、查阅相关书籍和参考资料、程序设计、编写代码、运行实施、调试和测试、维护和修改等阶段组成,其中信息管理和自动运行为开发的重点。
在程序设计中结构体的调用与各函数、数组的调用为编译的重点部分。
关键词:
结构体 函数数组
课程设计任务书
设计题目:
酒店房间登记与计费管理系统设计
学生姓名
课程名称
C语言程序设计课程设计
专业班级
计科11
地 点
I305/I306
起止时间
2012年1月9日~1月13日
设计内容及要求
请你为XX酒店设计一个房间登记与计费管理系统。
该系统中应包括所有房间的信息(房号、房型、基本描述、挂牌房价、入住状态)等,客人入住后应产生一条入住记录(基本信息包括:
房号、客人姓名、客人证件类别、客人证件号、入住日期、押金情况),客人退房后要修正房间的入住状态并产生相应的账单。
【题目要求】
(1)屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。
(2)对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记的入住的时候进行选择。
ﻩ (3)在结账退房时,根据入住的时间,计费方式和房间单价计算出总费用。
要求用C语言的文件操作语句将以上所有结果分别保存在文件中。
【输入/输出要求】
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。
进入每个操作后,根据程序的提示输入相应的信息;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。
设计
参数
(1)系统分析、设计正确。
(2)结果以图表方式显示。
(3)界面简洁、美观。
(4)报告格式规范。
进度
要求
周一:
明确设计任务,学习相关基础知识
周二:
熟悉各知识点,进行基础练习
周三:
根据题目要求,进行设计和实现
周四:
根据题目要求,进行设计和实现
周五:
撰写报告,进行答辩
参考资料
[1]何钦铭 颜晖.《C语言程序设计》.高等教育出版社.2008年
[2]谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年
其它
难点提示:
首先分析题目的数据结构,看看要操作那些值;然后根据题意设计操作对象的结构。
可以使用结构体来描述其中较为复杂的对象例如往来帐目;确定结构体的定义;可以使用数组来保存数据,使用结构体数组来保存各类数据。
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:
指导教师:
伍建全/雷亮/焦晓军
陈应祖/杨治明 2012年1月1日
1. 软件需求说明书7
1.1需求分析ﻩ7
1.2.3查询当前费用7
1.2.4结账退房7
1.3界面、数据结构要求7
2.系统分析与设计ﻩ8
2.1软件界面设计ﻩ8
2.1.1首页欢迎界面ﻩ8
2.1.2登记入住界面ﻩ8
2.1.3客户入住信息查询界面ﻩ9
2.1.4客户个人费用查询界面ﻩ10
2.1.5 客户退房结账界面10
2.1.6客户结账收退支付费用结账界面ﻩ11
2.1.7用户退出系统界面ﻩ11
2.2软件的数据(结构)设计ﻩ12
2.3软件的算法设计ﻩ13
2.3.1主要结构模块框图ﻩ13
2.3.2 主要流程图13
2.3.2具体模块使用结构流程13
3.软件的实现15
3.1核心功能再现15
3.2关键代码分析ﻩ31
3.2.1int dengji()ﻩ31
3.2.2intlookfor_room()31
3.2.3int lookfor_price()ﻩ31
3.2.4 int tuifang()ﻩ32
4.软件测试33
4.1 函数简介33
4.2测试用例ﻩ33
4.2.2int dengji()33
4.2.4 intlookfor_price(); //用来查询当前费用33
4.2.5inttuifang(); //用来结账退房34
4.2.6 voidyingzhifu(); //用来结账付款ﻩ34
4.2.7 intquit(); //退出函数34
5.软件使用说明书ﻩ35
6.致谢ﻩ37
7.参考文献ﻩ38
7.1 何钦铭 颜晖.《C语言程序设计》.高等教育出版社.2008年38
7.2 谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年38
7.3AlKelley等《C语言解析教程》,AlKelley等,机械工业出版社,2006.138
1 软件需求说明书
1.1需求分析
随着时代的进步、科学的发展,对信息技术的要求也越来越高。
而顾客对各大酒店和客房的要求也越来越高,酒店以前的全人工服务已经不能满足顾客和以及现代信息化时代的要求。
顾客选择入住酒店时也会选择更加现代化和信息化的更加方便快捷的现代化服务酒店。
所以现在各大酒店也都向着信息化和现代化的方向发展,引进更加先进和方便的酒店管理和服务系统。
计算机的自动化管理系统提高了酒店管理的管理水平和工作效率,增强酒店的竞争能力降低成本,为客户提供更加优质的服务。
所以需要开发一个计算机系统来代替人工管理酒店客户入住登记和信息查询等方面的工作。
使用该系统可以使酒店的服务更加快捷、准确和方便,减少大量的人工操作,提高了工作效率。
1.2软件功能简介
1.2.1 登记入住
自动登记顾客的各人信息,包括顾客姓名、身份证件、证件号码、选择房间种类、计费方式、押金交付等功能。
1.2.2查询房间入住情况
1.2.3 查询当前费用
1.2.4结账退房
1.3界面、数据结构要求
屏幕上显示一个界面,界面要求简洁美观,让操作员能够根据具体的提示信息方便的选择所需要进行的操作。
用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
2.系统分析与设计
2.1软件界面设计
2.1.1首页欢迎界面
2.1.2登记入住界面
2.1.3客户入住信息查询界面
2.1.4客户个人费用查询界面
2.1.5客户退房结账界面
2.1.6客户结账收退支付费用结账界面
2.1.7用户退出系统界面
2.2软件的数据(结构)设计
主要所用的结构体、函数和变量的数据类型
structdate//定义结构体date,记录入住和结账时间
{
int mon; //整形int格式控制符为%d
intday;
inthour;
};
structcostoem//定义结构体costoem
{
intnum;//房间号 格式控制符为%d
int kind;//房间种类1-单人间2-双人间
char name[20];//客户信息//字符型char 格式控制符为%s
char ID[19];//身份证号
inth_money;//按小时收费价格
intd_money;//按天收费价格 格式控制符为%d
structdatetime;//入住时间time被说明为data结构类型。
成员名可与程序中其它变量同名,互不干扰。
intflag;//入住状态,flag:
0—无人入住1—按小时入住2—按天入住
intdeposit;//押金
}room[M];
2.3软件的算法设计
2.3.1主要结构模块框图
结账退房
2.3.2主要流程图
2.3.2具体模块使用结构流程
3.软件的实现
3.1 核心功能再现
#include<stdlib.h>
#include
#include#include<assert.h>
#defineM60
//程序所有功能所用函数
voidwelcome(); //首页欢迎界面
intdengji();//用来登记入住
intlookfor_room();//用来查询房间入住情况
intlookfor_price();//用来查询当前费用
inttuifang();//用来结账退房
intfind();//用来查找入住人数
longh_jifei();//按小时计费
longd_jifei();//按天计费
intper_infor();//显示个人信息
voidyingzhifu(); //用来结账付款
int quit();//退出函数
struct date//定义结构体date,记录入住和结账时间
{
intmon;
int day;
inthour;
};
struct costoem//定义结构体costoem
{
int num; //房间号
intkind;//房间种类1-单人间 2-双人间
ﻩcharname[20];//客户信息
charID[19]; //身份证号
inth_money;//按小时收费价格
int d_money;//按天收费价格
struct datetime; //入住时间
intflag; //入住状态,flag:
0—无人入住1—按小时入住2—按天入住
int deposit;//押金
}room[M];
/*个人信息函数*/
intper_infor(int k)
{
charzhonglei[30],fangshi[30];
ﻩswitch(room[k].flag)//选择计费方式
ﻩ{
case 1:
strcpy(fangshi,"按小时计费");break;
case2:
strcpy(fangshi,"按天计费");break;
ﻩﻩdefault:
break;//输入与原定比较不符合跳出循环
}
switch(room[k].kind)//选择房间种类
ﻩ{
case 1:
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----计费方式:
");
puts(fangshi);printf("\n\n");
printf("\t\t----押金:
");
printf("%d元",room[k].deposit);printf("\n\n");
ﻩprintf("\t\t入住时间:
");
printf("2012年%d月%d日%d时\n\n",room[k].time.mon,room[k].time.day,room[k].time.hour);return(0);
}
/*查询入住人数函数*/
intfind()
{
intcount=0,i;//查询房间数
for(i=0;i<M;i++)
if(room[i].flag!
=0)
count++;
return count;
}
/*按天计费*/
longd_jifei(structdateend,structdatestart,int money)
{
longfeiyong;
inta,b;
a=end.hour-start.hour;//计算小时
b=end.day-start.day;// 计算天数
if(a>=10)
feiyong=(b+1)*money; //如果小时数大于10,则算为一天
else
ﻩﻩ if(a>=0)
ﻩﻩ feiyong=b*money; //如果小时数大于0而小于10,则不计算小时
else
ﻩ {
ﻩa=a+24;//如果小时数小于0,则小时数加24,天数减一,按天数计费重新计算
b=b-1;
if(a>=10)
ﻩﻩfeiyong=(b+1)*money;
else
ﻩfeiyong=b*money;
ﻩ }
returnfeiyong;//返回费用值
}
/*按小时计费*/
long h_jifei(struct date end,structdatestart,intmoney)
{
longfeiyong;
inta,b;
a=end.hour-start.hour;//计算小时
b=end.day-start.day;//计算天数
if(a<0)
ﻩ{
a=a+24; //如果小时数小于0,则小时数加24,天数减一,按小时计费重新计算
b=b-1;
}
feiyong=(a+b*24)*money;
returnfeiyong;//返回费用值
}
/*结账时所有开销收费*/
voidyingzhifu(longmoney,int dep)
{
longdif=(long)dep-money;
if(dif==0)
ﻩprintf("押金余总费用相等");//判断应支付是否大于押金金额
else
if(dif>0)
ﻩprintf("酒店应找还顾客%ld元",dif);//押金金额大于应支付
else
ﻩ printf(" 顾客应再支付%ld元",dif*(-1));//押金金额小于应支付
}
/*退出函数,返回欢迎主菜单页面函数*/
intquit()
{
intz;
printf("您需要返回欢迎界面吗?
1-是 2-否\n\n");
scanf("%d",&z);
ﻩ if(z==1) //返回欢迎界面
welcome();
else
ﻩprintf("******谢谢您的惠顾,欢迎您下次光临!
******!
\n\n");
exit(0);
}
/*欢迎主菜单页面*/
void welcome()
{
int n=find();
inti,j;
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&#############################&&&&&&&&&&&&&&&&&&&&&&&");
printf("\n\n\t\t------------欢迎来到**酒店-----------\n\n");
printf("\t\t\t 1.登记入住 \n\n");
ﻩprintf("\t\t\t2.查询房间入住情况\n\n");
printf("\t\t\t 3. 查询当前费用\n\n");
printf("\t\t\t4.结账退房 \n\n");
printf("\t\t\t5. 退出系统 \n\n");
printf("\t\t总房间数:
%d\t入住人数:
%d\t空房间数:
%d",M,n,M-n);
printf("\n\n&&&&&&&&&&&&&&&&&&&&&&&&############################&&&&&&&&&&&&&&&&&&&&&&&&&&\n\n");
printf("\t\t\t 请选择您所需的服务:
");
scanf("%d",&i);
switch(i) //控制选择项目
ﻩ{
case1:
j=dengji();break;//进入相应操作目录
case2:
j=lookfor_room();break;
case3:
j=lookfor_price();break;
case4:
j=tuifang();break;
default:
printf("欢迎您下次光临\n\n");输入错误退出
exit(0);
}
while(j!
=0)
{
welcome();//进入欢迎菜单主界面
scanf("%d",&i);
switch(i)
ﻩ{
case1:
j=dengji();break;
case2:
j=lookfor_room();break;
case3:
j=lookfor_price();break;
case 4:
j=tuifang();break;
ﻩﻩdefault:
printf("\n\n*************欢迎您下次光临*************\n\n");
exit(0);
}
}
}
/*顾客登记入住函数*/
intdengji()
{
int i,j,k,yajin,s,a,n;
charch,fangshi[30];
printf("\n\n############登记入住 #############\n\n");
if(find()==M)//入住人数与房间总数相等
ﻩ{
printf("当前房间已满,是否返回(Y/N):
");
ch=getchar();
if(ch=='y')
ﻩ return
(1);//返回主菜单
else
ﻩ exit(0);
}
printf("请选择房间类型:
\n\n");
printf("1.单人间2.双人间\n\n");
scanf("%d",&n);
printf("可供您选择的房间有:
\n\n");
for(i=30*(n-1)+1,j=0;i<30*n+1;i++) //单人间的j入住人数,i剩余房间数
if(room[i-1].flag==0)
ﻩ{
printf("%d\t",i);
j=j+1;
if(j%5==0)printf("\n\n");
ﻩ}
printf("请输入您准备入住的房间号:
");//房间号k—room[k-1]
scanf("%d",&k);
room[k-1].kind=n;
room[k-1].num=k;
printf("\n\n请选择您的计费方式:
(1.按小时收费为%d元/时--2.按天计费为%d元/天)\t",room[k-1].h_money,room[k-1].d_money);
scanf("%d",&s);
while(s!
=1&&s!
=2)
ﻩ{
printf("输入有误,请重新输入:
");
scanf("%d",&s);
ﻩ}
if(s==1)
ﻩ room[k-1].flag=1;
else
ﻩ room[k-1].flag=2;
printf("\n\n请输入您的姓名:
");
scanf("%s",room[k-1].name);
printf("\n\n请输入您的身份证号:
");
scanf("%s",room[k-1].ID);
switch(n)
{
case1:
yajin=80;break;
case2:
yajin=100;break;
ﻩ }
printf("\n\n您应当缴纳的押金金额为 %d元",yajin);
printf("\n\n请输入您实际缴纳的押金金额:
");
scanf("%d",&room[k-1].deposit);
while(room[k-1].d