目 录
摘 要 ................................................................................................................... 4
课程设计任务书………………………………………………………………...4
1 软件需求分析说明书 ....................................................................................... 6
1.1登记入住信息 ......................................................................................... 6
1.2客房状态查询 ........................................................................................... 6
1.3住户信息查询 ........................................................................................... 6
1.4结账退房系统 ........................................................................................... 6
2 系统分析与设计 ............................................................................................... 7
2.1软件的数据(结构)设计 ....................................................................... 7
2.1软件的算法设计 ....................................................................................... 8
2.2.1软件模块图 ...................................................................................... 8
2.2.2程序流程图 ...................................................................................... 8
3 程序代码 ......................................................................................................... 10
4程序调试及修改记录 ...................................................................................... 18
5输入数据及输出结果………………………………………………………..18
6实训收获及心得……………………………………………………………..18
1
摘 要
随着个人计算机的的普及,越来越多的重复性工作被交由计算机来完成。在这种大趋势下,传统的纸质档案管理方式已不适应现代服务业的发展。数字化的管理成为酒店等行业的必要条件。酒店客房管理的电脑化对于优化员工工作效率、降低成本及改善服务质量等方面都有十分积极的作用。
本程序是用于酒店客房管理的软件。它可以实现定退房业务处理,用户信息的记录、查询及房间状态管理等功能。虽然比较简陋但已具备应用程序的雏形。
本程序运用Microsoft Visual C++编译器编写,涉及C语言的文件读写,结构数组运用及字符串函数相关知识。
关键词:数字化管理 酒店客房管理 C语言
课程设计任务书
2
3
1 软件需求分析说明书
1.1登记入住信息
登记并记录顾客姓名
登记并记录顾客的证件类型及号码
显示现有空置房间
选择所需要的房间并更改房间状态信息
计算并记录住房费
由于本软件针对操作员设计,所以界面应尽可能简单明了。住房及顾客信息由于涉及多种类型的数据,因此应用结构数组处理。用文件记录相关数据。
1.2客房状态查询
分别显示已入住客房与空置客房
读取住房信息文件的内容并判断分类,借此可以清晰明了的显示客房状态。
1.3住户信息查询
查询顾客所租房房号
查询顾客住房费用
顾客可以通过输入自己的姓名来查询个人的住房信息。
1.4结账退房系统
退房
更新所退房间状态
删除退房用户记录
显示账单
顾客可以输入姓名来完成退房操作,房间状态将更改为未入住。系统将删除该用户信息记录并读取生成账单。
4
2 系统分析与设计
2.1软件的数据(结构)设计
本软件运用了C语言文件的读取与写入功能,各文件的作用如下:
count.txt:用于存储房客数量,内部存储一个int*数据。
room.txt:用于存储房间信息,内部依次存储:
房间状态char*(1位) 房间号char*(4位) 房间类型char*(1位) 房间描述char*(6位) 房间日租金int* 房间月租金int*。
customer.txt:用于存储房客信息,内部依次存储:
姓名char* 证件类型char* 证件号码int* 房间号char*(4位) 房租int*
5
2.2软件的算法设计
2.2.1软件模块图
2.2.2程序流程图
登记入住信息:
6
客房状态查询
:
显示入住费用:
7
3程序代码
#include<stdio.h>
#include<string.h> //在使用中要用到的字符串都包含在本文件中
#include<stdlib.h> //exit()函数就包含在此文件中 #define M 81
int z[81]={0}; //定义一个数组存放使用的房间的标记的信息,且初始化为0
int j,s; //定义两个全局变量
FILE *fp; //定义一个指向文件的指针变量 struct date
{int month;
int day;
int year;
}final;
struct hotel
{int price;
int room_ID;
struct client
{char name[20];
int sex;
int age;
char ID_card[20];
int count;
struct date start;
}personal;
}room[M]; //定义全局结构体变量,且里面又调用两个结构体
//声明刷新函数fflush( fp),且指向指针变量指向的位置 void save();
void search_situ( ); //声明查看客房入住情况函数
void regist_infor( ); //声明客房登记入住函数
void modify_infor( ); //声明客房信息修改函数函数
void modify_one( ); //声明修改客房信息函数中的修改个人函数 void modify_hotel( ); //声明修改客房信息函数中的修改客房函数 void disp_money( ); //声明显示入住费用函数
int main()
{
8
int menu(); //声明主菜单函数
void print_star();
void print_message();
printf("\n\n\n\n\n");
print_star();
printf("\n");
print_message();
printf("\n");
print_star();
menu(); //把主菜单用函数来实现
save();
return 0;
}
void print_star()
{int i;
for(i=1;i<30;i++)
printf("\t*");
}
void print_message()
{
printf("\t\t\t\t欢迎入住**酒店\n");
}
menu()
{
int n;
do
{
printf("\n");
printf("\t\t*********************菜单********************\n\n\n"); printf("\t\t\t\t1:查看客房入住情况\n\n\n");
printf("\t\t\t\t2:登记入住信息\n\n\n");
printf("\t\t\t\t3:修改客房信息\n\n\n");
printf("\t\t\t\t4:显示入住费用\n\n\n");
printf("\t\t\t\t5:退出\n\n\n");
printf("\t\t\t\t6:返回\n\n\n");
printf("\t\t*********************菜单********************\n"); printf("\n\n\t\t\t 请选择输入选项[1\\2\\3\\4\\5\\6]:\n");
scanf("%d",&n);
while(n<1||n>6)
{printf("请重新输入选项!");
9
scanf("%d",&n);}
switch(n)
{
case 1:search_situ();break; //调用查看函数
case 2:regist_infor();break; //调用登记函数
case 3:modify_infor();break; //调用修改函数
case 4:disp_money();break; //调用显示入住费用函数
case 5:exit(0);
case 6:break;
}
}while(n!=6);
scanf("%d",&n);
return 0;
}
void search_situ( ) //查看函数
{
int g,count=0;
for(g=1;g<=80;g++)
{
if(z[g]==0)
++count;
else
if(z[g]==1)
printf("\n正在使用的房间号:%d",g);
}
printf("\n\n未使用的房间数:%d",count); //通过循环输出未使用的房间数
printf("\n\n");
printf("\n请输入需查询的房间号:\n"); //查询输入的房间号的信息,且输出该房间的相关信息
scanf("%d",&s);
if(z[s]==1)
{printf("姓名:%s",room[s].personal.name);
printf("\n性别(其中:1表示男,2表示女!):%d",room[s].personal.sex);
printf("\n年龄:%d",room[s].personal.age);
printf("\n身份证号:%s",room[s].personal.ID_card);
printf("\n入住年份:%d",room[s].personal.start.year);
printf("月:%d",room[s].personal.start.month);
printf("日:%d",room[s].personal.start.day);
printf("\n房间号:%d",room[s].room_ID);
printf("\n客房单价:%d",room[s].price);
10
printf("\n入住人数:%d",room[s].personal.count);
menu();
}
else
printf("该房间未被使用!");
save(); //调用保存函数
}
void regist_infor( ) // 登记函数
{
printf("请输入登记相关信息:\n");
printf("\n房间号:");
scanf("%d",&j);
room[j].room_ID=j;
printf("\n姓名:");
scanf("%s",&room[j].personal.name);
printf("\n性别(其中:1表示男,2表示女!):");
scanf("%d",&room[j].personal.sex);
printf("\n年龄:");
scanf("%d",&room[j].personal.age);
printf("\n身份证号:");
scanf("%s",&room[j].personal.ID_card);
printf("\n入住年份:");
scanf("%d",&room[j].personal.start.year);
printf("月:");
scanf("%d",&room[j].personal.start.month);
printf("日:");
scanf("%d",&room[j].personal.start.day);
printf("\n客房单价:");
scanf("%d",&room[j].price);
printf("请输入入住人数\n");
scanf("%d",&room[j].personal.count);
z[j]=1; //标记使用的房间为1
save();
}
void modify_infor( ) //修改函数
{
int r,m;
do
{
printf("\t\t\t *******************菜单******************\n\n\n");
11
printf("\t\t\t\t\t 1:修改客户信息\n\n\n");
printf("\t\t\t\t\t 2:修改客房信息\n\n\n");
printf("\t\t\t\t\t 3:menu()\n\n\n");
printf("\t\t\t\t\t4:退出\n\n\n");
printf("\t\t\t *****************************************\n\n\n"); printf("\t\t\t 请选择输入选项[1\\2\\3\\4]:\n");
scanf("%d",&m);
if(m<1||m>3)
{
r=1;getchar();
}
else r=0;
}while(r==1);
switch(m)
{
case 1:modify_one();break;
case 2:modify_hotel();break;
case 3:menu();
case 4:exit(0);
}
save();
}
void modify_one() //修改个人信息函数
{
int q;
char a[20];
printf("\n请选择您要修改的个人选项\n");
printf("1:姓名 2:性别(其中:1表示男,2表示女!) 3:年龄 4:身份证号 5:入住年份 6:入住月份 7入住日 8:入住人数\n");
printf("\t请选择输入选项[1\\2\\3\\4\\5\\6\\7\\8]:\n\b\b");
scanf("%d",&q);
switch(q)
{
int t,p;
char k;
case 1:printf("请输入新名字\n");
for(t=0;t<20;t++)scanf("%s",&a[t]);
strcpy(room[j].personal.name,a);break;
case 2:printf("请选择新性别(其中:1表示男,2表示女!)\n"); scanf("%d",&k);room[j].personal.sex=k;break;
case 3:printf("请输入新年龄\n");
scanf("%d",&p);room[j].personal.age=p;break;
12
case 4:printf("请输入新身份证号\n");
scanf("%d",&p);room[j].personal.ID_card[20]=p;break;
case 5:printf("请输入新年份\n");
scanf("%d",&p);room[j].personal.start.year=p;break;
case 6:printf("请输入新月份\n");
scanf("%d",&p);room[j].personal.start.month=p;break;
case 7:printf("请输入新日子\n");
scanf("%d",&p);room[j].personal.start.day=p;break;
case 8:printf("请输入新入住人数\n");
scanf("%d",&p);room[j].personal.count=p;break;
}
menu();
}
void modify_hotel() //修改客房信息函数
{
int l;
printf("\n\t\t\t\t请选择您要修改的客房信息\n\n");
printf("\t\t\t\t1:房间号\n\n \t\t\t\t2:客房单价\n\n \t\t\t\t3:入住人数\n\n \t\t\t\t4:返回\n\n");
printf("\t\t\t请选择输入选项[1\\2\\3\\4]:\n\b\b");
scanf("%d",&l);
switch(l)
{
case 1:printf("请输入旧房号\n");
scanf("%d",&j);
printf("请输入新房号\n");
scanf("%d",&s);
strcpy(room[s].personal.name,room[j].personal.name);
room[s].personal.sex=room[j].personal.sex;
room[j].personal.sex=0;
room[s].personal.age=room[j].personal.age;
room[j].personal.age=0;
strcpy(room[s].personal.ID_card,room[j].personal.ID_card); room[s].personal.start.year=room[j].personal.start.year; room[j].personal.start.year=0;
room[s].personal.start.month=room[j].personal.start.month; room[j].personal.start.month=0;
room[s].personal.start.day=room[j].personal.start.day;
room[j].personal.start.day=0;
room[s].room_ID=s;
room[s].price=room[j].price;
room[s].personal.count=room[j].personal.count;
13
z[s]=1; z[j]=0; break;
case 2:printf("请输入房号\n");
scanf("%d",&s);
printf("请输入新单价\n");
scanf("%d",&s);room[s].price=s;break;
case 3:printf("请输入房号\n");
scanf("%d",&s);
printf("请输入新入住人数\n");
scanf("%d",&s);
room[s].personal.count=s;break;
case 4:break;
}
save();
menu();
}
void disp_money( ) //显示入住费用函数 {
int i,sum;
printf("请输入房间号;\n");
scanf("%d",&room[j].room_ID);
printf("\n入住年份:%d",room[j].personal.start.year); printf("月:%d",room[j].personal.start.month); printf("日:%d",room[j].personal.start.day);
printf("房间单价为:");
printf("%d",room[j].price);
printf("\n请输入退房时间:\n");
printf("请输入年份:");
scanf("%d",&final.year);
printf("请输入月份:");
scanf("%d",&final.month);
printf("请输入日:");
scanf("%d",&final.day);
printf("\n请输入住房天数:\n");
scanf("%d",&i);
sum=room[j].price*i;
printf("总费用sum=%d\n",sum);
save();
menu();
}
void save() //保存函数
14
{
FILE *fp;
int i;
if((fp=fopen("客房管理.txt","w+"))==NULL) //打开输出文件"客房管理.txt" {printf("cannot open file\n");
exit(0);
}
for(i=0;i<M;i++)
{
if(fwrite((&room[i]), sizeof(room[M]),1,fp)!=1)
printf("file write error\n");
fflush(fp);
}
fclose(fp); //关闭文件
}
15
四、程序调试及修改记录:
错误就没有了,可以运行,运行结果如下:
五、输入数据及输出结果:
输入1
输出未使用的房间数:80 请输入需查询的房间号,
16
输入2 输出请输入登记相关信息 房间号:20 姓名AA性别:1 年龄:18 身份证号:44xxxxxxxxxxxx
入住年份:2012 月:1 日:12 客房单价:
20 请输入入住人数 行......
输入3 查询入住费用:
17
六、实训收获及心得 通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。 运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
致谢
此次的程序设计题目做的很是辛苦。由于本人基础很差,所以花费了大量的时间,但最后总算成功完成。这与老师的耐心指导是分不开的,同时我也在老师身上学到不少东西。因此特在此对我的任课老师表示感谢!同时也要感谢所有帮助过我的同学。
参考文献
[1]何钦铭 颜晖.《C语言程序设计》.高等教育出版社.20xx年
[2]谭浩强 张基温.《C语言程序设计教程》.高等教育出版社.20xx年
18