2022年C语言课程设计酒店与房间登记管理系统 .pdf
湖北汽车工业学院电气与信息工程学院C语言课程设计实训报告实训题目:酒店房间登记与计费管理专业:自动化班级:T1023-06 姓名:邹 骏成绩:一、需求分析1、问题(1)根据需求,该系统所应包含的信息有以下一些: 客户入住的基本信息:客户姓名、身份证号(2)根据需求,该系统所应实现的功能有以下一些:各种基本数据的录入。如:客户入住时间、退房时间、入住房间号。(3)判断各种基本数据的合法性。即:允许对已经录入的数据重新进行编辑、修改。例:身份证号为 15 位或 18 位、时间格式为YYYY-MM-DD, 如 2009-01-02 。* 【判断入住时间和退房时间的格式是否合法时,需要判断长度是否为 10 ,第 5 位和第 8 位是否为 -,字符,将 1-4 位表示的年份, 6-7 位表示的月份, 9-10 位表示的日期分别转换成整数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 判断是否满足构成日期的条件闰年月份只能是 1-12 之间的数,如果是闰年,二月可以是 29 天否则不能大于 28 ,1,3,5,7,8,10,12 月可以是 31 天,其余只能小于等于 30(建议写成函数),开始和结束时间,不跨年】(4)如修改入住客户中张三的个人信息判断各种基本数据的合法性。例如将张三的身份证号是否属实基于各种数据的查询。 例如输入张三姓名, 查询张三的入住房间、 入住时间、退房时间、需交住宿费。2、系统采用C 语言实现,开发环境为 VC ,可以运行在操作系统 windows98 及以上皆可。3、运行要求界面友好,操作方便。二、总体设计1、系统流程设计根据系统要求,设计如下的系统流程2、系统模块设计菜单显示用户输入操作退出判 断 用 户 选择的操作执行相应的操作退出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 根据系统的功能设计,如下模块主界面模块:完成系统菜单的显示功能选择模块:根据用户的选择,完成其相应的功能客户入住信息录入: 完成客户从界面输入通讯录, 保存入系统的功能客户入住信息修改:完成用户从界面输入通讯录, 在系统中查询定位,并将录入的数据保存入系统的功能客户入住信息查询: 完成用户从界面输入查询条件,在系统查询符合条件的通讯录信息,并在界面上显示的功能。三、详细设计1. 数据结构设计根据系统要求,系统中需要保存的数据有通讯录的信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注客户姓名name 字符串20 身份证号id 字符串15or18 订房时间date_1 字符串10 退房时间date_2 字符串10 入住天数time 字符串10 消费总额spend 字符串9 开始统计时间begin_time 字符串10 结束统计时间end_time 字符串10 功能选择主菜单客户入住信息查询住宿情况客户退房信息客户入住信息修改计费信息管理酒店房间登记与计费管理名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 使用C语言创建的结构体如下:struct customer char name20; /客户姓名char id20; /身份证号char date_120; /入住时间char date_220; /退房时间struct room num; /入住房间号与价格int time; /入住天数int spend; /费用char begin_time10;/开始统计时间char end_time10;/结束统计时间struct customer *next; ; 2. 界面设计主界面:根据系统要求, 设计一个字符界面, 显示系统的菜单, 为了体现友好性,将在每个菜单前显示该菜单项对应的数字名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 用户输入菜单项前面的数字, 主菜单消失,进入该模块的相应界面,进行相应的操作,完成后,回到主界面。输入界面 : 显示入住客户信息 : 入住客户信息查询 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 入住客户消费统计 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 结束界面 : 三、模块实现 : 主界面实现:调用 printf()函数 ,屏幕上打印需要显示的字符信息,需要在显示之前调用system(cls)函数将前面的界面清空. 对应的实现函数 :menu_show(); 功能选择模块实现:接受从键盘输入的菜单选择, 判断并调用相应的功能函数, 完成其对应的功能。实现功能选择。对应的函数: menu_select(); 客户入住信息录入模块实现:模块说明:从键盘接收输入的客户入住信息,在动态存储区中创建客户入住信息的节点, 遍历链表,将其插入到客户入住信息链表的最后位置。模块流程:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - 对应函数 :add (struct customer *head,struct room num) 客户入住信息显示:模块说明:从键盘接收输入的需要查询入住客户的姓名,遍历链表,判断节点的姓名是否输入的姓名相等,如果相等,则显示该姓名的客户信息。对应函数 : 四、测试结果1. 录入入住客户信息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 输入测试数据:邹忌 111111111111111 201 2011-01-01 2011-12-30 2. 显示入住客户信息:3. 查询入住客户信息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - 4. 客户入住费用统计:五、实训总结通过此次一周的C语言课程设计实训,我在C语言学习方面提升了很多,同时也充分的锻炼了自己的应用学习能力,为今后的工作道路上提供了良好的基础。这几天在微机室的努力工作是很有成效的,吃得苦中苦,方能名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - 做出足够好的成绩。附源程序:#include/I/O函数#include/标准库函数#include/字符串函数#include/字符操作函数#include /*定义数据结构*/ struct room /定义房间函数 char number50; int price; num10; struct room num10= /初始化数组201,100,202,200,203,300,204,400,205,500, 206,600,207,700,208,800,209,900,210,1000; struct date /日期 int year; int month; int day; ; struct customer char id20; /身份证号 char name20; /客户姓名struct room num; /入住房间号与对应的价格char date_120; /订房时间char date_220; /退房时间int spend_time; /消费额名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 24 页 - - - - - - - - - int time; /入住天数char begin_time10;/开始统计时间char end_time10;/结束统计时间struct customer *next; ; void search (struct customer *head);/查询房间住宿情况void add (struct customer *head,struct room num);/新住户登记void list(struct customer *head);/显示现有住宿情况void end_time();/退出时输出函数图像int check(char mem,struct room num);/判断房间号是否正确int check_price(char mem,struct room num);/搜寻符合的房间,并返回房间的编号int day(char *data); int cost (struct customer *head,struct room num);/统计房间产生的住宿费用int menu_show();/菜单函数int menu_select (int sael,struct customer *head);/根据参数选择相应的功能 / 主函数void main() struct customer *head; head=malloc(sizeof(struct customer); head-next=NULL; system(cls); /清屏for( ; ; ) / 死循环 menu_select(menu_show(),head); /调用菜单函数 /*根据参数选择相应名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 24 页 - - - - - - - - - 的功能 */ int menu_select(int sel,struct customer *head) switch(sel) case 1: add(head,num); break; case 2: list(head); break; case 3: search(head); break; case 4: cost(head,num); break; case 5: end_time(); return 0; /*菜单函数*/ int menu_show() char s50; int c; system(cls); printf (); printf ( -和安宾馆- ); printf (); printf ( . 酒. 店. 与. 房. 间. 登.记. 管. 理. 系. 统); printf (); printf (); printf (-1. 客户入住名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 24 页 - - - - - - - - - 信息录入 - ); printf ( - 欢迎光临 - -2. 客户入住信息显示 - - 欢迎光临 - ); printf (-3. 客户入住信息查询 - ); printf ( - 欢迎光临 - -4. 客户入住费用统计 - - 欢迎光临 - ); printf (-5. 退出客户管理系统 - ); printf (); printf (); printf ( * * * * * * * ); printf ( * * * * * ); printf ( = *= *= ); printf ( * * * * ); printf (-热- 烈- 欢- 迎- * * * * -诸- 位- 老- 师-); printf ( * * T1023-06 邹俊制作 ); printf (-指-导-检-查-); do printf(); printf(请进行菜单选择: ); scanf(%s,s); c=atoi(s); / 确保输入数字在1-5 之间while(c6); return c; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - /*客户入住信息录入 */ void add (struct customer *head,struct room member) struct customer *p,*temp; char mem10; int flag,k,m; p=head; while(p-next!=NULL) p=p-next; system(cls); temp=(struct customer*)malloc(sizeof(struct customer); temp-next=NULL; printf( 打雷啦 -n); printf( -客官,进来歇歇吧 -_- n); printf( n); printf( , ,n); printf( n); printf( , , 和安宾馆欢迎您邹忌制作 n); printf(); printf(请输入客户入住信息 n); printf(客户姓名 :n); scanf(%s,temp-name); printf(身份证号 :(15 或 18 位)n); scanf(%s,temp-id); /*判断身份证长度是否合法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - */ while(strlen(temp-id)!=15)&(strlen(temp-id)!=18) printf(n您的输入有误 n 请重新输入 (15 或 18位):n); scanf(%s,temp-id); printf(n请输入房间号 :n 本酒店现有房间201 202 203 204 205 206 207 208 209 210n); do scanf (%s,mem); flag=check(mem,member); if(flag=0) printf(n您的输入有误 (房间号不正确) n 本酒店现有房间 201 202 203 204 205 206 207 208 209 210n请重新输入:); / 函数调用 check,判断房间号是否正确while(flag=0); strcpy(temp-num.number,mem); /*判断退房时间的判断时间的合法性*/ do printf(n开始入住时间 ( 格式为 YYYY-MM-DD)n); scanf(%s,temp-date_1); printf(n退房时间 (格式为 YYYY-MM-DD) n); scanf(%s,temp-date_2); k=strcmp(temp-date_1,temp-date_2); if(k=0) printf(n您的输入有误(退房时间要大于入住时间)n 请重新输入 :); while (strcmp(temp-date_1,temp-date_2)=0); /*计算入住天数*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - temp-time=day(temp-date_2)-day(temp-date_1); m=check_price(mem,member); temp-spend_time=(day(temp-date_2)-day(temp-date_1)*numm.price;/计算房间产生的费用printf(您输入的客户入住信息已经成功录入n); p-next=temp; printf(按任意键返回主菜单 n); getchar(); getchar(); /*显示现有住宿情况*/ void list (struct customer *head) int i=0; struct customer *p; p=head-next; if(head=NULL) printf(记录为空,请重新输入 !n); return; system(cls); printf( 打雷啦 -n); printf( -客官,进来歇歇吧 -_- n); printf( n); printf( , ,n); printf( n); printf( , , 和安宾馆欢迎您邹忌制作 n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 24 页 - - - - - - - - - printf(); printf(*客户入住信息录入 *); printf(姓名身份证号房间号入住时间退房时间入住天数所需费用 ); printf(-); while(p!=NULL) printf(%8s%18s%6s%12s%11s%10d%11d, p-name,p-id,p-num.number,p-date_1,p-date_2,p-time,p-spend_time); p=p-next; printf(*结束*); printf(); printf(按任意键返回主菜单 n); getchar(); getchar(); /*查询房间住宿情况*/ void search (struct customer *head) char Num20; struct customer *p; int flag; p=head; system(cls); printf( 打雷啦 -n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 24 页 - - - - - - - - - printf( -客官,进来歇歇吧 -_- n); printf( n); printf( , ,n); printf( n); printf( , , 和安宾馆欢迎您邹忌制作 n); printf(); printf(请输入待查找的房间号 :n); scanf(%s,Num); while(p!=NULL) if(strcmp(Num,p-num.number)=0) printf(); printf(*客户入住记录信息 *); printf(客户姓名身份证号入住时间退房时间入住天数所需费用); printf(= ); printf(.); printf( %5s%21s%15s%15s%6d%10d n ,p-name,p-id,p-date_1,p-date_2,p-time,p-spend_time); flag=1; else flag=0; p=p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 24 页 - - - - - - - - - if(flag=0) printf(您的输入有误(暂无该房间的相关信息)n); printf(按任意键返回主菜单 n); getchar(); getchar(); /*计算总入住天数*/ int day(char *date) int k,leap; int tab213= 0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31; int year,month,day; year=1000*(date0-0)+100*(date1-0)+10*(date2-0)+date3-0; month=10*(date5-0)+date6-0; day=10*(date8-0)+date9-0; leap=(year%4=0&year%100!=0)|year%400=0); for(k=1;kmonth;k+) day=tableapk+day; return day; /*比对房间号码*/ int check(char mem,struct room member) int i; for(i=0;i10;i+) if(strcmp(numi.number,mem)=0) return 1; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 24 页 - - - - - - - - - /*搜寻符合的房间, 并返回房间的编号 */ int check_price(char mem,struct room num) int q; for(q=0;qnext; printf( 打雷啦 -n); printf( -客官,进来歇歇吧 -_- n); printf( n); printf( , ,n); printf( n); printf( , , 和安宾馆欢迎您邹忌制作 n); printf(); printf(n请输入需要统计费用的房间号:n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 24 页 - - - - - - - - - do scanf (%s,mem); flag=check(mem,num); if(flag=0) printf(n您的输入有误 (房间号不正确) n 本酒店现有房间 201 202 203 204 205 206 207 208 209 210n请重新输入:); / 函数调用 check,判断房间号是否正确while(flag=0); do printf(n请输入开始统计时间 (格式为 YYYY-MM-DD)n); scanf(%s,p-begin_time); printf(n结束统计时间 ( 格式为 YYYY-MM-DD) n); scanf(%s,p-end_time); k=strcmp(p-date_1,p-date_2); if(k=0) printf(n您的输入有误(退房时间要大于入住时间)n 请重新输入 :); while (strcmp(p-date_1,p-date_2)=0); i=check_price(mem,num); if(strcmp(p-date_1,p-begin_time)date_2,p-end_time)0) fee=numi.price*(day(p-end_time)-day(p-begin_time); printf(您的所在房间入住一天的价格为: %5dn 统计时间内您所在房间入住天数为:%5dn 在统计时间内您的费用为:%dn, numi.price,day(p-end_time)-day(p-begin_time),fee); p=p-next; printf(按任意键返回主菜单 n); getchar(); getchar(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 24 页 - - - - - - - - - return 0; /*函数结束*/ void end_time() system(cls); printf( n); printf( n); printf( 海 天 n); printf( . ./ 上涯 n); printf( 生 共 n); printf( 明此 n); printf( 月时n); printf( ); printf(); printf(.心情愉快 .和气生财.); printf(.); printf(* * * * * * * ); printf(* * * * * * * * * * * * ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 24 页 - - - - - - - - - printf(* * * * ); printf(* * * * *); printf(* * * * ); printf(* * * * * ); printf(* * * * ); printf(* * * * * * * * * * ); printf(* * * * * * * * * ); printf(.版权所有 .翻录必究.); printf(.Made by zoujun.); printf(); exit(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 24 页 - - - - - - - - -