资源描述
高级语言程序设计课程设计说明书设计题目:机房机位预约模拟管理系统设计目录目录课程设计题目课程设计题目*3需求分析需求分析*5详细设计详细设计*5用户使用说明用户使用说明*12测试结果测试结果*13设计小结设计小结*172参考文献参考文献*18附录(源程序)附录(源程序)*18一机房机位预约模拟管理系统设计一机房机位预约模拟管理系统设计1、数据结构 顾客信息结构体:Struct CusInfo Char name20;/顾客姓名 Int sex;/性别 Char tel11;/电话 CInfo;机位信息结构体:Struct 3Int State6;/机位状态,每 2 个小时为一个时间段,08:00-20:00 共 6 个时间段。0 表示有空机位,1 表示没有空机位 CInfo waitlist6;/各个时间段的运行客户 Int year;Int month;Int day;/日期 PCInfo;PCInfo info100;/存放 100 天的机位信息 2、具体实现(1)查询 输入时间,则遍历 info 数组,查看日期(year/month/day),如果日期匹配,则把机位信息输出。(2)机位预订 输入日期(或时间段)查询机位信息文件,如果日期符合,再查看状态字段,若相应字段为 0,则预约(即把该用户信息加入写入机位 waitlist 相应时间段中);若相应字段为 1,则查看本天其他时间段,寻找最近空时间段。如果用户要求在非空时间上机,则查找 info 数组中该时间段为空的元素,把该时间段的状态字段设为 1,把用户信息加入机位当天 waitlist 相应时间段中。(3)退出预订 根据预订日期和客户信息找到预订信息,把客户信息删除,并把该时间段的状态置为 0。4(4)查询 输入日期和时间段,查看该时间段的状态如为 1,则把相应时间段的运行客户信息打 印输出。如为 0,则显示“该时间段空闲!。”二二 需求分析需求分析根据题目要求,程序需要四个结构体来完成,分别对应四个功能。另外,这个程序还要根据时间更新各个列表的信息。机房机位预约模拟系机房机位预约模拟系统统查询模块排队模块预定模块取消模块查询空位模块查询预订机模块5三详细设计三详细设计 主函数比较简洁,只提供输入、功能处理和输出部分的函数调用。显示一系列功能选择输入 n,判断 m 是否是 0 到 6?根据 n 值调用各功能模块函数结束N开始#include#include#include 6#define SJD 6/*宏定义定义 SJD Z NULL D(r)*/#define Z 20#define D(s)(s-8)/2/*将输入的时间划分时间段;分别为 0,1,2,3,4,5 时间段*/#define NULL 0 struct xinxiint jihao;char xuehao20;struct xinxi*next;/*结构函数包含学生信息:机位,学号,还有下名学生信息*/struct cellint RS;/*RS 表示总人数*/struct xinxi*first;/*第一个预订者记录*/struct xinxi*middle;/*等待队列列表*/struct xinxi*last;/*最后预订者记录*/DUILEISJD;/*学生时间(SJD)段顺序:人数,第一名学生,排队的学生,最后一名学生*/预定模块开始输入预定时间判断时间属于 820 oclock 与空机位输入学号预定成功,排队成功结束iongyudinN选择排队/*预定模块*/void yuding()7int n;char m20;/*学号*/struct xinxi*R;struct xinxi*p;printf(输入想要预定的时间n);scanf(%d,&n);if(n=8&n20)n=D(n);/*将输入的时间划分时间段*/if(DUILEIn.RSjihao=1;strcpy(R-xuehao,m);/*将输入的学号复制到 R-xuehao*/R-next=NULL;DUILEIn.first=R;DUILEIn.last=R;DUILEIn.RS+;printf(成功预定n);else R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);/*将输入的学号复制到 R-xuehao*/R-next=NULL;p=DUILEIn.last;/*将最后预订记录赋值给 p*/R-jihao=DUILEIn.RS+1;printf(%d,R-jihao);/*表示该时间段第几位预订*/DUILEIn.last=R;/*将当前的记录做为最后记录以便形成链表形式指向下一个*/p-next=R;DUILEIn.RS+;/*记录人数*/printf(预定成功n);else printf(没有空余机位!n);else printf(错误.请输入 819,再次输入.n);取消8查询模块开始输入查询序号或查询时间判断是否预定,是否有空余机位?显示数据结束N/*查询空位*/void chaxunkongwei()int n;printf(输入想要查询的时间(819 点,包括 8 点)n);scanf(%d,&n);if(n=8&n20)n=D(n);if(DUILEIn.RS=8&nnext!=NULL;R=R-next)/*从第一名学生开始查询直到找到符合的学号,以便确认是否预订*/if(strcmp(R-xuehao,m)=0)break;if(R-jihao!=0)/*已预订,输出相应的信息*/printf(你的机位是%dn,R-jihao);else printf(对不起.你依旧在等待列表中或者没有预定);else printf(错误,请再次输入.n);/*排队系统模块*/void paiduixitong()int n;char m20;struct xinxi*R;struct xinxi*p;printf(请输入想要排队的时间n);scanf(%d,&n);if(n=8&n=Z)/*该时间段没有空位机,需要预订等待*/printf(请输入你的学号n);scanf(%s,m);if(DUILEIn.RS)=Z)R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);R-next=NULL;R-jihao=0;p=DUILEIn.last;DUILEIn.last=R;p-next=R;DUILEIn.middle=R;/*等待预订列表*/DUILEIn.RS+;printf(成功排队n);/*将刚输入学生信息拍到最后一名后,成最后一名*/else10 R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);R-next=NULL;R-jihao=0;p=DUILEIn.last;DUILEIn.last=R;p-next=R;DUILEIn.RS+;printf(成功排队n);else printf(有空余机位,无须等待n);else printf(错误.再次输入.n);取消模块 开始输入预定时间 判断是否预定与排队成功取消预定结束N/*取消预订模块*/void cancel()11int n;int i;char m20;struct xinxi*R;struct xinxi*q;struct xinxi*p;printf(请输入预定的时间n);scanf(%d,&n);if(n=8&nnext,i+)/*查找符合信息*/if(strcmp(R-xuehao,m)=0)break;if(iZ)/*iz 表示在等待列表中*/if(R-next=NULL)q-next=NULL;DUILEIn.last=q;free(R);DUILEIn.RS-;printf(取消成功!n);/*如果是排在 20 名后,且是最后一名*/else q-next=R-next;free(R);DUILEIn.RS-;printf(取消成功!n);/*如果排在 20 名后,但不是最后*/else/*正在上机者取消预订*/if(DUILEIn.RSZ)DUILEIn.middle-jihao=R-jihao;DUILEIn.middle=DUILEIn.middle-next;/*如果排在 20 名内,但总人数(包括等待列表人数)大于 20*/if(i=1)DUILEIn.first=R-next;else q-next=R-next;free(R);12DUILEIn.RS-;printf(成功取消预定!n);else printf(错误,请再次输入.n);四用户使用说明四用户使用说明点击运行进入主菜单函数,然后按数字键选择所需要的服务。1 查询空机位。2 预订系统 3取消预订,取消已预订机位 4 查询所预订机位 5 排队系统,查看所需上机时间排队情况 6等机者列表,查询其他等待者的预定时间 0 退出系统五测试结果五测试结果1 主界面函数132 查询空机位3 预订系统144 取消预订5 查询所预订机位156 排队系统7 等机者列表168 退出系统六设计小结六设计小结这套程序应用起来并不是很方便,总的说来,大致上实现了题目的要求,各个功能有相应的代号来直接调用,对于初次进入主函数页面的使用者来说,显得不大好用。不过用熟之后,都不是问题。对策:对于 c 语言编出的程序来说,使用方法大致上都是一样的,所以想做改进只能从程序方面入手,尽量把指令编的简单明了,方便易用。本人对这一程序还是相当满意的,想弄的更好的话可以尝试一下用其他编辑程序来完成。短短的一个星期的上机实习结束了。复习理论知识、编程、调试、改错,直至存盘,同样的环节、同样的工作步骤,重复又重复,枯燥而乏味;看似简单的程序题,编写后调试却屡屡出错。如何改如何错,怎么编写怎么调试失败,心烦而意乱。但奇怪的是,越是如此,我越是不甘失败。不断地调试,反复地编写。一旦在黑屏幕的左下角意外地发现所输出的信息正是自己意想中的结果,那份惊喜,那份满足感,真是令人难以形容。好比幼儿经过长时间堆积不断倒塌的积木后,终于垒起了一座“大楼”。那份心底里的成就感,可以让你顿时忘记了所有的烦躁,因为那一切付出都是值得的。在实习的过程中,我得到的不仅仅是将理论与实践结合在一起的技巧与方法,而更可贵的是做事情的态度缓和懂得与人相处的重要性。上学期在学习 C 语言程序设计理论时,总觉17得这一切都太简单了,原来什神秘的 IT 领域是那么的简单易懂,只要掌握了其中的方法,上机并不成问题。结果却是大大出乎我的意料。编写的程序从理论上来说并未出错,但一到上机调试时却无法运行;即算是课本的问题原封不动地照搬,也可能回得到截然不同的结果这让我对于毛泽东同志所提倡的做事态度“解放思想,实事求是”顿时有了一种清晰的认识。正因为编程的困难与复杂,同学间的合作与互助就显得尤为有效。对于同一道程序题,合作互助让我们掌握更多种方法;对于复杂乏味的调试,合作互助让我们更容易找到错误所在,从而提高编程效率。合作互助更增进了同学之间(不管之前认识与否)的感情与友谊,拉近了彼此的距离。在这次实习过程中,我尤其要感谢刘远兴老师对我的悉心指导和耐心讲解。他扎实的计算机基础知识和熟练的上机技巧,及通俗易懂的讲解,都让我受益匪浅。更令我高兴的是,对于以前一些基本的、经常出现的,但又无法理解的计算机问题,经过刘老师的指点,顿时茅塞顿开。真心希望学校以后还有更的多上机实习机会。七参考文献七参考文献1谭浩强.C 程序设计(第二版).北京:清华大学出版社,19992刘瑞挺.计算机二级教程.南开大学出版社,19963陈朔鹰等.C 语言程序设计基础教程.兵器工业出版社,19944姜仲秋等.C 语言程序设计.南京大学出版社,1998八附录(源程序)八附录(源程序)#include#include#include#define SJD 6/*宏定义定义 SJD Z NULL D(r)*/#define Z 20#define D(s)(s-8)/2 /*将输入的时间划分时间段;分别为 0,1,2,3,4,5 时间段*/#define NULL 0 struct xinxiint jihao;char xuehao20;struct xinxi*next;/*结构函数包含学生信息:机位,学号,还有下名学生信息*/struct cell18int RS;/*RS 表示总人数*/struct xinxi*first;/*第一个预订者记录*/struct xinxi*middle;/*等待队列列表*/struct xinxi*last;/*最后预订者记录*/DUILEISJD;/*学生时间(SJD)段顺序:人数,第一名学生,排队的学生,最后一名学生*/*预定模块*/void yuding()int n;char m20;/*学号*/struct xinxi*R;struct xinxi*p;printf(输入想要预定的时间n);scanf(%d,&n);if(n=8&n20)n=D(n);/*将输入的时间划分时间段*/if(DUILEIn.RSjihao=1;strcpy(R-xuehao,m);/*将输入的学号复制到 R-xuehao*/R-next=NULL;DUILEIn.first=R;DUILEIn.last=R;DUILEIn.RS+;printf(成功预定n);else R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);/*将输入的学号复制到 R-xuehao*/R-next=NULL;p=DUILEIn.last;/*将最后预订记录赋值给 p*/R-jihao=DUILEIn.RS+1;printf(%d,R-jihao);/*表示该时间段第几位预订*/DUILEIn.last=R;/*将当前的记录做为最后记录以便形成链表形式指向下一个*/p-next=R;19 DUILEIn.RS+;/*记录人数*/printf(预定成功n);else printf(没有空余机位!n);else printf(错误.请输入 819,再次输入.n);/*查询空位模块*/void chaxunkongwei()int n;printf(输入想要查询的时间(819 点,包括 8 点)n);scanf(%d,&n);if(n=8&n20)n=D(n);if(DUILEIn.RS=8&nnext!=NULL;R=R-next)/*从第一名学生开始查询直到找到符合的学号,以便确认是否预订*/if(strcmp(R-xuehao,m)=0)break;20if(R-jihao!=0)/*已预订,输出相应的信息*/printf(你的机位是%dn,R-jihao);else printf(对不起.你依旧在等待列表中或者没有预定);else printf(错误,请再次输入.n);/*排队系统模块*/void paiduixitong()int n;char m20;struct xinxi*R;struct xinxi*p;printf(请输入想要排队的时间n);scanf(%d,&n);if(n=8&n=Z)/*该时间段没有空位机,需要预订等待*/printf(请输入你的学号n);scanf(%s,m);if(DUILEIn.RS)=Z)R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);R-next=NULL;R-jihao=0;p=DUILEIn.last;DUILEIn.last=R;p-next=R;DUILEIn.middle=R;/*等待预订列表*/DUILEIn.RS+;printf(成功排队n);/*将刚输入学生信息拍到最后一名后,成最后一名*/else R=(struct xinxi*)malloc(sizeof(struct xinxi);strcpy(R-xuehao,m);R-next=NULL;R-jihao=0;p=DUILEIn.last;DUILEIn.last=R;p-next=R;21DUILEIn.RS+;printf(成功排队n);else printf(有空余机位,无须等待n);else printf(错误.再次输入.n);/*取消预订模块*/void cancel()int n;int i;char m20;struct xinxi*R;struct xinxi*q;struct xinxi*p;printf(请输入预定的时间n);scanf(%d,&n);if(n=8&nnext,i+)/*查找符合信息*/if(strcmp(R-xuehao,m)=0)break;if(iZ)/*iz 表示在等待列表中*/if(R-next=NULL)q-next=NULL;DUILEIn.last=q;free(R);DUILEIn.RS-;printf(取消成功!n);/*如果是排在 20 名后,且是最后一名*/else q-next=R-next;free(R);DUILEIn.RS-;printf(取消成功!n);/*如果排在 20 名后,但不是最后*/22 else /*正在上机者取消预订*/if(DUILEIn.RSZ)DUILEIn.middle-jihao=R-jihao;DUILEIn.middle=DUILEIn.middle-next;/*如果排在 20 名内,但总人数(包括等待列表人数)大于 20*/if(i=1)DUILEIn.first=R-next;else q-next=R-next;free(R);DUILEIn.RS-;printf(成功取消预定!n);else printf(错误,请再次输入.n);/*待机者列表模块*/void daijizheliebiao()int n;struct xinxi*q;printf(查询其他等待者的预定时间n);scanf(%d,&n);if(n=8&nZ)/*表示有等待上机者*/printf(等待列表:n);q=DUILEIn.middle;for(;q-next!=NULL;q=q-next)printf(%sn,q-xuehao);/*逐个输出等待列表者信息*/printf(%sn,DUILEIn.last-xuehao);else printf(这个时间段没有预定者n);else printf(错误。请再次输入.n);int main()int i;for(i=0;iSJD;i+)DUILEIi.RS=0;23DUILEIi.first=NULL;DUILEIi.middle=NULL;DUILEIi.last=NULL;while(1)printf(*n);printf(*机房机位预定系统 *n);printf(*n);printf(*1 查询空机位 2 预定系统 *n);printf(*3 取消预定 4 查询所预定机位 *n);printf(*5 排队系统 6 等机者列表 *n);printf(*0 退出系统 *n);printf(*n);printf(*请输入序号(0-6):*n);printf(*n);printf(请输入序号!:n);scanf(%d,&i);switch(i)case 1:chaxunkongwei();break;case 2:yuding();break;case 3:cancel();break;case 4:chaxunyuding();break;case 5:paiduixitong();break;case 6:daijizheliebiao();break;case 0:exit(0);default:printf(错误n);return 0;
展开阅读全文