数据结构优秀课程设计.doc
《数据结构优秀课程设计.doc》由会员分享,可在线阅读,更多相关《数据结构优秀课程设计.doc(24页珍藏版)》请在咨信网上搜索。
课 程 设 计 说 明 书 课程名称 数据结构课程设计 设计课题 模拟旅馆管理系统 课 程 设 计 任 务 书 设计题目:模拟旅馆管理系统一个功效——床位分配和回收 设计内容和要求: 某旅馆有n个等级房间,第I等级有ai个房间,每个等级有bi个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收功效,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)算法。 [基础要求] (1)输入数据 分配时,输入旅客姓名、年纪、性别、抵达日期和所需房间等级。 回收时,输入房间等级、房间号和床位号。 (2)输出数据 分配成功时打印旅客姓名、年纪、抵达日期、房间等级、房间号码和床位号码。 分配不成功时,如全部等级均无床位,则打印“客满”信息;如旅客需要等级均无空床位,则打印“是否愿意更换等级?”问询信息。若旅客愿意更换,则重新输入相关信息,再进行分配,不然分配工作结束。 年 12 月16日 课 程 设 计 评 语 成绩: 指导老师: 年 月 日 【问题描述】 某旅馆有n个等级房间,第I等级有ai个房间,每个等级有bi个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收功效,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)算法。 【基础要求】 (1)输入数据 分配时,输入旅客姓名、年纪、性别、抵达日期和所需房间等级。 回收时,输入房间等级、房间号和床位号。 (2)输出数据 分配成功时打印旅客姓名、年纪、抵达日期、房间等级、房间号码和床位号码。 分配不成功时,如全部等级均无床位,则打印“客满”信息;如旅客需要等级均无空床位,则打印“是否愿意更换等级?”问询信息。若旅客愿意更换,则重新输入相关信息,再进行分配,不然分配工作结束。 【测试数据】 旅客姓名:w性别:男 年纪:20入住时间: 3 4所需等级:1 旅客姓名:d性别:男 年纪:22入住时间: 1 2所需等级:2 【模块划分】 本程序关键划分为四个模块 主函数 旅 客 住 房 登 记 旅 客 退 房 管 理 旅 客 住 房 查 询 旅 客 住 宿 统 计 【算法思想】 采取链表方法,进行旅店初始化操作。给旅店等级设置了头结点。该程序有三条链表,等级组成一条链表,房间组成一条链表,旅客组成一条链表。入住时,先输入旅客所需等级,判定是否有该等级,依次判定有没有房间和床位。有该等级房间时,采取尾插法判定是否有空床位,有就进行旅客入住操作。床位没有设头结点,所以第一个床位要进行判定。退房时,需要输入等级号、房间号、床位号来进行查找,从而完成退房操作。查询时,经过输入旅客姓名进行查询,存在此人时,打印客人信息。统计宾馆人数时,先一个等级一个等级统计,统计这个等级每一个房间和每个房间目前全部些人数。 旅客住宿登记 是 下一个房间 旅客住宿 无法入住 输入所需等级 分配客人 返回主菜单 打印客人信息 是 否 是否有房间 是否有床位 是 是否更换等级 否 否 无法入住 是 是否有客满 否 旅客退房 否 重新输入 是否退房 退房成功 打印客人信息 是否有该房号 输入床位号 是否有该床号 输入房间号 是否有该等级 输入退房等级 旅客退房 重新输入 否 否 是 是 是 是 是 重新输入 打印客人信息 否 旅客信息查询 输入旅客姓名 是否有待查找人 未找到此人 是否有待查等级 是否有待查房间 是 是 否 否 旅客信息查询 旅客信息统计 统计下一个房间 统计人数 是 等级存在 房间人数是否为0 房间存在 结束 否 否 是 是 旅客信息统计 。 【数据结构】 typedef struct traver//旅客结构体 {char name[20];//姓名 int sex; //性别 int age; //年纪 int g;//旅客住宿等级 int bednum;//床号 int year; int month; int day; struct traver*next;//下一个旅客 }tra; typedef struct hotel//旅店结构体 {int l_num;//旅店等级 struct hotel*next;//下一个等级 struct room*r_next;//指向房间 }hotel; typedef struct room//房间结构体 {int r_num;//房间号 int max;//房间最大床位数 int renshu;//房间目前人数 struct room*next;//下一个房间 struct traver*tra_next;//指向旅客 }room; 【测试情况】 房间初始化。 旅客入住登记测试 旅客退房测试统计 查询测试 统计测试 【心得】 这周是我们自己选题做课程设计时间,我选题目是做一个旅店管理系统,对床位进行分配和回收。本程序采取了三个链表,刚拿到这个题目时,我认为很这个应该和学生管理系统差不多,不过,在对床位分配时,要采取链表。刚开始我原来想把房间作为一个数组,将床位组成一个单链表。当初,没有考虑到房间等级,最终又想了一下,改变了我原来想法。将房间等级、房间、旅客各组成一个链表,采取链表好处是节省空间,有多个人就申请多大空间,不会造成很大浪费。在编写代码过程中,先对旅馆每个等级每个房间进行初始化,旅客住宿这个函数对于我是最难,因为要先判定旅客所需等级房间存不存在,存在时,要判定这个房间有没有空床位,没有空床位时,链表指针指向下一个房间。假如没有这个等级房间时,咨询旅客是否要更换房间等级。在她同意更换情况下,再反复上述过程进行登记。给旅客进行床位分配时,是根据床位号大小次序依次分配。假如这个房间全部床位全部住满话,再给相同级另一间房间进行分配。在写退房函数时,要输入等级、房间号、床位号,找到对应旅客打印旅客信息确定正确再进行退房操作。统计住宿人数时,统计相同级每一个房间全部旅客。旅客链表不空时,计数器就加加。 进行编程时候,一定要先清楚自己思绪,比如我写住宿函数,要入住就必需先判定有没有空房间和空床位,有话才能进行分配。该程序链表比较多,自己写时候,一个一个子函数写,写完调试好了再进行下一个函数编写。定义了三个结构体,一定要清楚每个结构体中所包含量,切不可混淆。编写时if和else语句比较多,要清楚哪个和哪个对应,每个循环结束条件。调试代码时候有时就是一个很小错造成整个程序不能运行,每当程序错误时我全部很焦躁,甚至想到了放弃,但我最终还是一步一步慢慢来,经过无数次检验程序错误原因后慢慢知道了耐心是一个人成功肯定含有条件!同时,经过此次课程设计使我了解到数据结构能够说是计算机里一门基础课程,它需要把理论变为上机调试,所以一定要把基础知识学扎实。即使我现在还不会成功编写一个完整程序,不过在看程序过程中,不停上网查资料和翻阅相关书籍,经过不停模索,测试,发觉问题,处理问题和在老师帮助下一步一步慢慢正确运行程序。 在本课程设计中,我明白了理论和实际应用相结合关键性,并提升了自己组织数据及编写大型程序能力。培养了基础、良好程序设计技能和合作能力。这次课程设计一样提升了我综合利用所学知识能力。并对VC有了更深入了解。《数据结构》是一门实践性很强课程,上机实习是对学生全方面综合素质进行训练一个最基础方法,是和课堂听讲、自学和练习相辅相成、必不可少一个教学步骤。上机实习首先能使书本上知识变“活”,起到深化了解和灵活掌握教学内容目标;其次,上机实习是对学生软件设计综合能力训练,包含问题分析,总体结构设计,程序设计基础技能和技巧训练。另外,还有更关键一点是:机器是比任何老师更严厉检验者。所以,在“数据结构”学习过程中,必需严格根据老师要求,主动地、主动地、认真地做好每一个试验,以不停提升自己编程能力和专业素质。 【源程序】 #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> typedef struct traver//旅客结构体 {char name[20];//姓名 int sex; //性别 int age; //年纪 int g;//旅客住宿等级 int bednum;//床号 int year; int month; int day; struct traver*next;//下一个旅客 }tra; typedef struct hotel//旅店结构体 {int l_num;//旅店等级 struct hotel*next;//下一个等级 struct room*r_next;//指向房间 }hotel; typedef struct room//房间结构体 {int r_num;//房间号 int max;//房间最大床位数 int renshu;//房间目前人数 struct room*next;//下一个房间 struct traver*tra_next;//指向旅客 }room; void menu_select()//菜单函数 { printf("************旅客管理查询系统************\n"); //菜单选择 printf("1.进行订房登记服务\n"); printf("2.进行退房结账服务\n"); printf("3.查询旅客信息\n"); printf("4.统计旅客信息\n"); printf("****************************************\n"); } void Init(hotel*L)//旅店等级设置头结点 {int i,j,k,n;//k床位数,j房间等级,n房间个数 hotel*p,*q; room*p1,*p2,*p3; printf("请输入房间等级:\n"); scanf("%d",&j); q=L; for(i=1;i<=j;i++) //初始化房间等级 {p=(hotel*)malloc(sizeof(hotel)); q->next=p; p->l_num=i;//房间等级赋值 printf("请输入房间等级为%d房间个数:\n",p->l_num); scanf("%d",&n);//输入该等级房间数 if(n==0)//不存在该等级房间数时 continue; else{//初始化床位 p2=(room*)malloc(sizeof(room));//为该等级房间申请空间 p2->r_num=1; printf("请输入房间等级为%d房间号为1床位数:\n",p->l_num,k); scanf("%d",&(p2->max));//房号为l床位数 p2->renshu=0;//房间目前人数为0 p->r_next=p2;//指向该等级下一个房间 p3=p2; for(k=2;k<=n;k++)//房间号为2房间信息初始化 {p1=(room*)malloc(sizeof(room)); p3->next=p1; p1->r_num=k; printf("请输入房间等级为%d房间号为%d床位数:\n",p->l_num,k); scanf("%d",&(p1->max)); p1->renshu=0; p3=p1;} p3->next=NULL;}//房间链表尾指针为空 q=q->next;}//指向下一个等级 q->next=NULL;//等级链表尾指针为空 system("cls");} int full(hotel*L)//判定客满 {hotel*l; l=L->next; room *t; while(l!=NULL) {t=l->r_next;//指向房间 while(t!=NULL) {if(t->renshu!=t->max) return 0; else t=t->next;}//指向下一个房间 l=l->next;} if(!l) return 1;} void print(tra*s,room*p) {printf("输出旅客信息:\n"); printf("姓名%s,性别%d,年纪%d,房间等级%d,房间号码%d,床号%d,入住时间%d,%d,%d\n",s->name,s->sex,s->age,s->g,p->r_num, s->bednum,s->year,s->month,s->day);} void zhusu(hotel*L) {tra *q1,*q2,*q3; char c; hotel*l; l=L->next; room *t; int i,g; if(full(L)) {printf("客满,不能入住!\n");} else {printf("请输入房间等级\n");//输入旅客所需要等级 scanf("%d",&g); while(g!=NULL)//等级不空时 {if(l->l_num!=g) l=l->next; else {t=l->r_next;//有该等级时 while(t!=NULL)//房间不空 {if(t->renshu==t->max)//*是否有空床位 {t=t->next;//指向下一个房间 if(t==NULL) {getchar(); printf("等级为全部房间均无空位\n是否愿意更换等级[y/n]",g); scanf("%c",&c);//是否更换等级 if(c=='y') zhusu(L); else return;}} else//进行旅客登记 {if(t->renshu==0)//床位没有设置头结点,所以要进行判定 {q1=(tra*)malloc(sizeof(tra)); printf("请输客人姓名\n"); scanf("%s",q1->name); printf("请输入性别:1为男,0为女\n"); scanf("%d",&(q1->sex)); printf("请输客人年纪\n"); scanf("%d",&(q1->age)); printf("请输入旅客入住时间(如1990 12 13):"); scanf("%d %d %d",&q1->year,&q1->month,&q1->day); q1->g=g;//修改指针 t->tra_next=q1;// t->renshu++;//房间人数加1 q1->bednum=1; q1->next=NULL;//尾指针为空 print(q1,t); break;} else { q2=t->tra_next; q3=q2; i=1; for(;q3!=NULL;q3=q3->next) {if(i==q3->bednum) {++i; q3=q2;} } for(;q2->next!=NULL;q2=q2->next); q1=(tra*)malloc(sizeof(tra)); printf("请输入旅客姓名:\n"); q1=(tra*)malloc(sizeof(tra)); printf("请输客人姓名\n"); scanf("%s",q1->name); printf("请输入性别:1为男,0为女\n"); scanf("%d",&(q1->sex)); printf("请输客人年纪\n"); scanf("%d",&(q1->age)); printf("请输入旅客入住时间:"); scanf("%d %d %d",&q1->year,&q1->month,&q1->day); q1->g=g; q2->next=q1; q1->next=NULL; t->renshu++; q1->bednum=i; print(q1,t);break;}}} system("cls");break;}}}} tra*tuifang(hotel*L) {int g,hotel_num,bednum; hotel*l; l=L->next; room *t; tra*p,*q; char c; printf("请输入该退房人房间等级号码:\n"); scanf("%d",&g); //输入退房人房间等级 getchar(); while(l!=NULL) { if(l->l_num!=g) l=l->next; else //找到该等级 { t=l->r_next; printf("请输入该退房人房间房间号码:\n"); scanf("%d",&hotel_num); //输入退房人房间号码 getchar(); while(t!=NULL) { if(t->r_num!=hotel_num) t=t->next; else //找到该房间 {p=t->tra_next; q=t->tra_next; printf("请输入该退房人床位号码:\n"); scanf("%d",&bednum); //输入退房人床位号码 getchar(); while(q!=NULL) { if(q->bednum!=bednum) q=q->next; else //查找该床位 {if(bednum==p->bednum) //因为床位没有设置头结点,所以对于第一个结点要 尤其判定 { //直接打印旅客信息 printf("等级、房间、床位旅客信息为:\n"); printf("姓名\t性别\t年纪\t入住时间\n"); printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day); printf("是否和要退房人信息相符?[y/n]\n"); scanf("%c",&c); if(c=='y') //做出是否退房选择 { t->tra_next=q->next; t->renshu--; printf("退房成功!\n"); return(q); } else return NULL; } else //假如床位不为1 {while(p->next!=q) //指向下一床位 p=p->next; //打印旅客信息 printf("等级、房间、床位旅客信息为:\n"); printf("该名用户信息:\n"); printf("姓名\t性别\t年纪\t入住时间\n"); printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day); printf("是否和要退房人信息相符?[y/n]\n"); scanf("%c",&c); if(c=='y') //做出是否退房选择 {p->next=q->next; t->renshu--; printf("退房成功!\n"); return(q);} else return NULL; } } } if(q==NULL) //假如该房间内床位为空 { printf("未找到该床位号!\n"); } } } if(t==NULL) //假如该等级房间为空 { printf("未找到该房间号!\n"); } } } if(l==NULL) //假如等级链表为空 { printf("未找到该房间等级!\n"); } } void chaxun(hotel *L) //查询旅客信息函数 { char c[15]; hotel *l; room *t; tra *s; int flag=0;//设置标志量 printf("请输入要查询旅客姓名:\n"); scanf("%s",c); getchar(); l=L->next; while(l!=NULL) //等级不为空时,指向房间 { t=l->r_next; while(t!=NULL)//房间不为空时,指向床位 { if(t->renshu==0) //若此房间目前人数为零,指向下一房间 t=t->next; else { s=t->tra_next; while(s!=NULL) {if(!strcmp(s->name,c)) //假如找到该旅客 {print(s,t); //打印信息 s=s->next; //指向下一人,继续查找 flag++; //标志量加1 } else s=s->next; } t=t->next; //指向下一个房间 } } l=l->next; //指向下一个等级 } if(!flag) //标志量为零,则未查找到 {printf("未找到该旅客!\n"); } } void Tongji(hotel *L) //统计旅店目前住宿人数函数 { char c[15]; hotel *l; room*t; tra *s; int i=0,j=0; int flag; l=L->next; while(l!=NULL) { flag=0; i++; t=l->r_next; while(t!=NULL)//房间不空 { if(t->renshu==0) t=t->next; else { s=t->tra_next; while(s!=NULL) //旅客不空 { flag++; j=j+flag; s=s->next; } t=t->next; }} printf("等级为%d房间入住人数为%d\n",i,flag); l=l->next; } if(!j) printf("此时无人住宿。\n");} void main() { hotel*L; tra*p; L=(hotel*)malloc(sizeof(hotel)); Init(L); int choice; int flag=1; menu_select();//调用菜单函数 while(flag) { printf("请输入处理种类(1-4):\n"); scanf("%d",&choice); switch(choice) { case 1: printf("进行订房登记服务:\n");zhusu(L);menu_select();break; case 2: printf("进行退房结账服务:\n");tuifang(L);system("cls");menu_select();break; case 3: printf("查询旅客信息:\n");chaxun(L);system("cls");menu_select();break; case 4: printf("统计旅客信息:\n");Tongji(L);system("cls");menu_select();break; flag=0;} }}- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 优秀 课程设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文