数据结构旅店管理系统课程设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计报告课程名称数据结构设计题目旅店管理系统——床位的分配与回收专业计算机与信息工程系班级学号姓名完成日期2012年6月8日课程设计报告第1页共35页课程设计任务书设计题目:模拟旅馆管理系统的一个功能——床位的分配与回收_________________________________________________________设计内容与要求:1.【问题描述】某旅馆有n个等级的房间,第I等级有ai个房间,每个等级有bi个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。2.【基本要求】(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。指导教师:2012年6月8日课程设计评语成绩:指导教师:_______________年月日课程设计报告第2页共35页3.数据结构本次数据结构课程设计,做的是旅店管理系统,定义了三个结构体链表,给等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间链表再嵌套旅客链表。(1)对旅客结构体定义typedefstructcustomer{charname[15];//旅客姓名intage;//旅客年龄intsex;//旅客性别intlv;//旅客住宿时的等级号intbed_num;//旅客的床位号intyear;//开始住宿日期:年intmonth;//开始住宿日期:月intday;//开始住宿日期:日structcustomer*next;//指向下一旅客}cus;(2)对旅店结构体定义typedefstructhotel_lv{intlv_num;//旅店等级号structhotel_lv*next;//指向下一等级structfangjian*fj_next;//指向房间}hotel_lv;(3)房间结构体定义typedefstructfangjian{intfj_num;//房间号intmax;//房间的最大床位数目intmem_num;//房间内的当前人数structfangjian*next;//指向下一房间structcustomer*cus_next;//指向旅客}fangjian;课程设计报告第3页共35页4.总体设计(1)主函数初始化旅店main主函数旅客入住事件旅客住宿情况查询旅客退房事件统计旅店当前住宿人数退出管理系统课程设计报告第4页共35页(2)有旅客来住宿时:(3)有旅客来退房时:否否是打印旅客信息姓名性别年龄开始入住时间分配房间成功打印房间分配表是重新输入旅客入住事件是否有空床位输入所需房间等级是否客满无法入住返回主菜单课程设计报告第5页共35页(4)查询旅客信息时:是打印旅客信息姓名性别年龄开始入住时间是重新输入否重新输入否是重新输入否是否是否退房是否有该房间是否有该床位是否有该等级输入要退房的房间等级输入房间号输入床位号旅客退房事件返回主菜单退房成功课程设计报告第6页共35页(5)统计旅店当前入住人数:打印旅客信息姓名性别年龄开始入住时间是否返回主菜单遍历各房间不为空是不为空是输入要查询旅客的姓名遍历各等级遍历各床位不为空是否有待查找人旅客信息查询统计旅店当前入住人数课程设计报告第7页共35页(5)各函数名①初始化函数:voidInit(hotel_lv*L)②判断是否客满:intfull(hotel_lv*L)③打印旅客信息:voidPr_divide(cus*p,fangjian*q)④旅客住宿函数:voidPr_divide(cus*p,fangjian*q)⑤旅客退房函数:cus*Delete(hotel_lv*L)⑥查询旅客信息:voidcx_customer(hotel_lv*L)⑦统计旅店当前入住人数:voidTongji_cus(hotel_lv*L)⑧主函数:voidmain()5.详细设计关键步骤设计(1)初始化旅店函数采用链表方式,进行旅店的初始化操作,给旅店等级设置了头结点。输入房间等级,课程设计报告第8页共35页每个等级的房间数目,每个房间的床位数目。voidInit(hotel_lv*L)//初始化{inti,j,k,l;hotel_lv*p,*q;fangjian*p1,*p2,*p3;printf(请输入房间分为几个等级:\n);scanf(%d,&j);//输入房间共分为几个等级q=L;for(i=1;i=j;i++)//初始化该等级的房间{p=(hotel_lv*)malloc(sizeof(hotel_lv));q-next=p;p-lv_num=i;//给房间等级赋值printf(请输入房间等级为%d的房间个数:\n,p-lv_num);scanf(%d,&l);//输入该等级的房间数目if(l==0)continue;else//初始化该房间内的床位{p2=(fangjian*)malloc(sizeof(fangjian));p2-fj_num=1;printf(请输入房间等级为%d房间号为1的床位个数的最大值:\n,p-lv_num,k);scanf(%d,&(p2-max));//输入房间1的床位数目p2-mem_num=0;//该房间内当前人数赋为零p-fj_next=p2;p3=p2;for(k=2;k=l;k++){p1=(fangjian*)malloc(sizeof(fangjian));p3-next=p1;p1-fj_num=k;printf(请输入房间等级为%d房间号为%d的床位个数的最大值:\n,p-lv_num,k);scanf(%d,&(p1-max));//输入房间k的床位数目p1-mem_num=0;//该房间内的当前人数赋为零p3=p1;}p3-next=NULL;//房间链表尾指针赋为空}q=q-next;}q-next=NULL;//等级链表尾指针域赋为空}(2)旅客住宿情况课程设计报告第9页共35页采用尾插法,判断是否有空床位,有就进行旅客的入住操作。voidinput(hotel_lv*L){charc;cus*s,*p2,*p3;hotel_lv*l;l=L-next;fangjian*p1;inti,lv;if(full(L))//判断是否旅店客满{printf(旅店客满,不能入住。\n);system(pause);}else{printf(请输入旅客所需的房间等级:);//输入旅客所需的等级scanf(%d,&lv);while(l!=NULL)//等级不为空时{if(l-lv_num!=lv)l=l-next;else//有此等级时{p1=l-fj_next;while(p1!=NULL)//房间不为空{if(p1-mem_num==p1-max)//是否有空床位{p1=p1-next;if(p1==NULL){getchar();printf(此等级为%d的所有房间均无空位\n是否愿意更换等级[y/n],lv);scanf(%c,&c);//做出选择if(c=='y')input(L);elsereturn;}}else//进行旅客登记{//因为床位没有设置头结点,所以对于第一个结点要特别判断if(p1-mem_num==0){课程设计报告第10页共35页s=(cus*)malloc(sizeof(cus));printf(\n------------------------------------\n);printf(\n旅客的信息:);printf(\n请输入旅客姓名:);scanf(%s,s-name);printf(\n请输入旅客年龄:);scanf(%d,&(s-age));printf(\n请输入旅客性别(如:男1:女0):);scanf(%d,&(s-sex));printf(\n请输入旅客住宿开始日期(如:19911021):);scanf(%d%d%d,&s-year,&s-month,&s-day);s-lv=lv;//修改指针p1-cus_next=s;p1-mem_num++;//房间当前人数加1s-bed_num=1;s-next=NULL;//尾指针置为空Pr_divide(s,p1);//打印房间分配表system(cls);break;}else{p2=p1-cus_next;p3=p2;i=1;while(i=p1-mem_num){if(i==p3-bed_num){p3=p3-next;i++;}else{i++;break;}}if(p3==NULL){s=(cus*)malloc(sizeof(cus));printf(\n------------------------------------\n);printf(\n旅客的信息:);printf(\n请输入旅客姓名:);scanf(%s,s-name);课程设计报告第11页共35页printf(\n请输入旅客年龄:);scanf(%d,&s-age);printf(\n请输入旅客性别(如:男1:女0):);scanf(%d,&s-sex);printf(\n请输入旅客住宿开始日期(如:19911021):);scanf(%d%d%d,&s-year,&s-month,&s-day);s-lv=lv;while(p2-next!=p3)p2=p2-next;p2-next=s;p1-mem_num++;s-bed_num=i;s-next=NULL;Pr_divide(s,p1);system(cls);break;}else{while(p2-bed_num==i)p2=p2-next;s=(cus*)malloc(sizeof(cus));printf(\n------------------------------------\n);printf(\n旅客的信息:);printf(\n请输入旅客姓名:);scanf(%s,s-name);printf(\n请输入旅客年龄:);scanf(%d,&s-age);printf(\n请输入旅客性别(如:男1:女0):);scanf(%d,&s-sex);printf(\n请输入旅客住宿开始日期(如:19911021):);scanf(%d%d%d,&s-year,&s-month,&s-day);s-lv=lv;s-next=p2-next;p2-next=s;p1-mem_num++;s-bed_num=i-1;Pr_divide(s,p1);system(cls);break;}}}}break;课程设计报告第12页共35页}}}}(3)旅客退房情况输入退房旅客的房间等级号、房间号码、床位号码,进行查找。完成旅客退房操作。cus*Delete(hotel_lv*L){intlv,hotel_num,bed_num;hotel_lv*l;l=L-next;fangjian*f;cus*p,*q;charc;printf(请输入该退房人房间的等级号码:\n);scanf(%d,&lv);//输入退房人的房间等级getchar();while(l!=NULL){if(l-lv_num!=lv)l=l-next;else//找到该等级{f=l-fj_next;printf(请输入该退房人房间的房间号码:\n);scanf(%d,&hotel_num);//输入退房人的房间号码getchar();while(f!=NULL){if(f-fj_num

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功