洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目模拟旅馆管理系统专业*****************班级**********学号**********姓名**********完成日期**********课程设计任务书设计题目:模拟旅馆管理系统的一个功能——床位的分配与回收设计内容与要求:某旅馆有n个等级的房间,第I等级有ai个房间,每个等级有bi个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。[基本要求](1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。指导教师:**************年**月**日课程设计评语成绩:指导教师:_______________年月日目录一、问题描述...................................................................................1二、基本要求...................................................................................1三、数据结构................................................................................1四、总体设计...................................................................................2五、详细设计...................................................................................3六、测试与调试..............................................................................6七、心得体会...................................................................................9附录:源程序...................................................................................9洛阳理工学院课程设计报告1一、问题描述某旅馆有n个等级的房间,第I等级有ai个房间,每个等级有bi个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。二、基本要求(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。三、数据结构本次数据结构课程设计,做的是旅店管理系统,定义了三个结构体链表,给等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间链表再嵌套旅客链表。(1)对旅店结构体定义typedefstructhotel_lv{intlv_num;//旅店等级号structhotel_lv*next;//指向下一等级structfangjian*fj_next;//指向房间}hotel_lv;(2)房间结构体定义typedefstructfangjian{intfj_num;//房间号洛阳理工学院课程设计报告2intmax;//房间的最大床位数目intmem_num;//房间内的当前人数structfangjian*next;//指向下一房间structcustomer*cus_next;//指向旅客}fangjian;(3)对旅客结构体定义typedefstructcustomer{charname[15];//旅客姓名intage;//旅客年龄intsex;//旅客性别intlv;//旅客住宿时的等级号intbed_num;//旅客的床位号intyear;//住宿日期intmonth;//住宿日期intday;//住宿日期structcustomer*next;//指向下一旅客}cus;四、总体设计洛阳理工学院课程设计报告3主要功能函数:初始化函数:voidInit(hotel_lv*L)(逐级进行初始化)判断是否客满:intfull(hotel_lv*L)(主机进行查询直到发现空床位截止)打印旅客信息:voidPr_divide(cus*p,fangjian*q)旅客住宿函数:voidPr_divide(cus*p,fangjian*q)(首先调用full()函数,若非满,相应级别查找,有空床位则入住)旅客退房函数:cus*Delete(hotel_lv*L)(逐级查询直至床位,有次床位则删除)查询旅客信息:voidcx_customer(hotel_lv*L)(按名字逐级顺序查询)统计旅店当前入住人数:voidTongji_cus(hotel_lv*L)(逐级按房间顺序统计)主函数:voidmain()(调用各功能函数)五、详细设计初始化旅馆信息主函数旅客入住旅客退房旅客信息查询旅客统计退出本程序判断是旅店是否已满分配房间床号入住是否有此旅客退出成功是否有此旅客显示旅客信息显示旅馆各等级房间入住人数洛阳理工学院课程设计报告41、客人入住:当入住的是某房间的第一个旅客,需要对其特别处理,以其客户信息作为本房间旅客链的第一个结点。若非第一位乘客,则要对空的床号进行查找,首先设置一变量“i”,初始化i=1,使其与现有空房的旅客链的每位旅客的床号比较,若发现有床号与i相等,则i自加1,再进行与本房间所有旅客床号比较,若无旅客床号与i的值相等,则返回i,作为本次入住旅客的床号。2、旅客退房客人入住旅店是否已满输入房间等级房间是否已满打印客户信息房间分配成功打印房客表N结束洛阳理工学院课程设计报告5退房,若是某房间第一个乘客退房,因为首位旅客信息单元是旅客链的第一的链单元,所以删除时应将下一位旅客的地址赋给本房间存储单元中存放客户指针的单元中,以防止客户链的丢失。若非第一个旅客退房,则只需要将本旅客的下一位旅客的地址放到这位旅客的前一位旅客的next域里面,然后释放退出旅客的信息单元就行了。退房输入要退房的等级等级?输入房间号房间?输入床号床号?旅客信息退房?退房成功NNN返回菜单N洛阳理工学院课程设计报告6六、测试与调试1.录入房间信息2.录入旅客信息洛阳理工学院课程设计报告7当房间不足时3.旅客退房洛阳理工学院课程设计报告84.查询旅客信息查询不成功时5.统计房间信息洛阳理工学院课程设计报告9七、心得体会附录:源程序#includestdio.h#includestdlib.h#includestring.htypedefstructhotel_lv//宾馆结构体{intlv_num;structhotel_lv*next;structfangjian*fj_next;}hotel_lv;typedefstructfangjian//房间结构体洛阳理工学院课程设计报告10{intfj_num;intmax;intmem_num;structfangjian*next;structcustomer*cus_next;}fangjian;typedefstructcustomer//旅客结构体{charname[15];intage;intsex;intlv;intbed_num;intyear;intmonth;intday;structcustomer*next;}cus;voidInit(hotel_lv*L)//初始化函数{inti,j,k,l;hotel_lv*p,*q;fangjian*p1,*p2,*p3;printf(请输入房间分为几个等级:\n);scanf(%d,&j);//输入房间共分为几个等级q=L;洛阳理工学院课程设计报告11for(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;洛阳理工学院课程设计报告12}p3-next=NULL;//房间链表尾指针赋为空}q=q-next;}q-next=NULL;//等级链表尾指针域赋为}intfull(hotel_lv*L)//判是否客满{hotel_lv*l;fangjian*f;l=L-next;while(l!=NULL){f=l-fj_next;while(f!=NULL){if(f-mem_num!=f-max)//如果有房间的当前人数不等于房间的最大人数,则返回0return0;elsef=f-next;}l=l-next;}if(!l)//否则返回1return1;}voidPr_divide(cus*p,fangjian*q)//打印旅客信息{洛阳理工学院课程设计报告13printf(_____________________________________________________________\n);printf(旅客房间分配表\n);printf(姓名性别年龄等级号房间号床位号入住时间\n);printf(%5s%5d%2d%2d%5d%2d%4d-%2d-%2d\n,p-name,p-sex,p-age,p-lv,q-fj_num,p-bed_num,p-year,p-month,p-day);printf(_____________________________________________________________\n);printf(\n);}voidinput(hotel_lv*L)//旅客入住函数{charc;intlv;staticinti;cus*s,*p2,*p3;fangjian*p1;hotel_lv*l;l=L-next;if(full(L))//判断是否旅店客满{pri