您好,欢迎访问三七文档
合肥学院计算机科学与技术系课程设计报告2012~2013学年第一学期课程C语言课程设计课程设计题目机房机位预订系统学生姓名学号1204032015专业班级网络工程(2)班指导教师2013年1月语言课程设计C目录一、课程设计目的...........................................2二、课程设计名称及内容...............................2三、对任务和要求的分析...............................2四.详细设计及实现..........................................3五、源代码.....................................................18六、程序测试.................................................24七、总结.........................................................25语言课程设计C2一、课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。二、课程设计名称及内容课程设计名称:机房机位预定系统设计内容:设计一个机房机位预定系统,该系统要求对机房电脑机位进行管理和维护。20台机器,从早八点到晚八点,每两个小时一个时间段.任务和要求:20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。设计一个机房机位预定系统,通过该系统实现对机房机位的预定管理。三、对任务和要求的分析可行研究阶段的目标是:使工作人员从繁琐的机位管理工作中解放出来;提高工作质量,使供需双方都获得满意的结果;促进报表,提高工作效率。本系统包含的主要模块有:(1)界面—系统以菜单方式工作。(2)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。(3)查询,根据输入时间,输出机位信息。(4)退出预定,根据输入的时间,机器号撤销该事件的预定!语言课程设计C3(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。程序达到的功能:四.详细设计及实现1.宏定义#includestdio.h#includestdlib.h#includestring.h#definetime6#defineMAX20#defineT(r)(r-8)/2#defineNULL0structxx/*用户信息*/{intjh;chardata[10];structxx*next;};机房机位模拟系统我的预约状态查询空位预约取消预约排队查询等带信息语言课程设计C4structxx*head;structcell/*排队的队列*/{intCNum;structxx*first;/*指向队列开头*/structxx*middle;/*指向排队队列*/structxx*last;/*指向对结尾*/}Time[time];1..主函数主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功能模块用菜单方式选择。本模块通过do-while语句和switch语句实现主菜单的显示和对功能的选择。用户可以根据自己的需求选择相应功能的序号,如果用户输入的数据在0到6的范围内,w将会被系统赋值为1,程序结束循环进入下一步操作;如果用户输入的序号不再0到6的范围内则系统会要求用户重新输入服务序号直到用户输入的数据在0到6的范围内为止。语言课程设计C5【程序】main()//主函数模块{inti;for(i=0;itime;i++){Time[i].CNum=0;Time[i].first=NULL;Time[i].middle=NULL;Time[i].last=NULL;}while(1){printf(请输入序号!:\n);printf(1.预定2.查询空机位3.查询预定的机位4.取消预定5.参加排队6.查询等待者时间列表0.退出\n);scanf(%d,&i);switch(i){case1:booking();break;case2:inquir();break;case3:search();break;case4:cancel();break;case5:paidui();break;显示一系列功能模块根据的值调用各功能模块函数YN输入n的值1-6返回主菜单开始语言课程设计C6case6:search_waiting();break;case0:exit(0);default:printf(error\n);}}}2.查询我的状态模块[数据结构]我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。【分析】根据输入的时间来判断应该查询的结构体,把其首地址赋给pp,然后通过指针的移动,比较输入的学号和存储在该结构体中的pp-data,来判断我的预约状态,子函数voidsearch():本模块的功能是通过调用函数指向队列的指针查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空机位的序号,如果没有空位则在屏幕上显示有零台空机位。[流程图]【程序】voidsearch()输入要查询的时间n,判断n是否8-20n=s(n)根据的n值和输入的学号来查找链表中是否有该值和其的位置,从而达到查询出我的状态的目的Y提示:输入错误,请重新输入N开始语言课程设计C7{intn;charxh[10];structxx*pp;system(cls);printf(输入查询时间(24hours8~20o'clock,include8o'clock)\n);/*验证输入的时间*/scanf(%d,&n);if(n=8&&n20){n=T(n);printf(请输入学号\n);scanf(%s,xh);pp=Time[n].first;for(;pp-next!=NULL;pp=pp-next)/*通过指针后移查找信息*/if(strcmp(pp-jh,xh)==0)break;if(pp-jh!=0)printf(Thecomputernumberis%d\n,pp-jh);elseprintf(对不起.你依旧在等待列表中或者没有预定);}elseprintf(错误,请再次输入.\n);}3.预约模块[数据结构]定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。若有空机位则提示用户输入其想要爱预定的机位号并留下学号并将其信息加入预定者信息链表中;若没有空机位则向用户显示其想要预定的那台机器最短的等待时间并提示是否等待,如果用户愿意等待则提示用户输入其想要爱预定的机位号并留下学号将用户的信息加入等待列表中。[分析]在该模块的设计中,要让预约者按预约的顺序储存在结构体中。当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。[流程图]语言课程设计C8【程序】voidbooking()/*预定模块*/{intn;charxh[10];structxx*pp;structxx*p;system(cls);输入时间8-20调用detail函数,sum[T]的值改变开始输出空机位数,是否等待Y调用指向队列的指针,输入预定机位号学号,追加一个结构体成员。返回主菜单执行一个循环,进入后面的时间段语言课程设计C9printf(输入想要预定的时间\n);scanf(%d,&n);if(n=8&&n20){n=T(n);if(Time[n].CNumMAX){printf(请输入你的学号\n);scanf(%s,xh);if(Time[n].first==NULL){pp=(structxx*)malloc(sizeof(structxx));/*动态申请存储空间*/pp-jh=1;/*预定到第一台机器*/strcpy(pp-data,xh);pp-next=NULL;Time[n].first=pp;Time[n].last=pp;Time[n].CNum++;printf(成功预定\n);}else{pp=(structxx*)malloc(sizeof(structxx));strcpy(pp-data,xh);pp-next=NULL;p=Time[n].last;pp-jh=Time[n].CNum+1;printf(%d,pp-jh);Time[n].last=pp;p-next=pp;Time[n].CNum++;/*被预定的机器数目追加一*/printf(成功预定\n);}}elseprintf(没有空余机位!);}elseprintf(错误.请再次输入.\n);}4.查询空机位模块[分析]根据输入的时间确定n值,然后根据结构体中Time中的Time[n]-Cnum的值,求出最大值与该值的差即为空机位数。本模块的功能是通过调用链表查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空机位的序号,如果没有空位则在屏幕上显示有零台空机位。[流程图]语言课程设计C10【程序】voidinquir(){intn;printf(Pleaseinputthetimeyouwanttosearch.(24hours8~24o’clock,include8‘clock)\n);scanf(%d,&n);if(n=8&&n20){n=S(n);if(TimeQueue[n].CNumMAX)printf(Thereare%demotycomputer.\n,MAX-TimeQueue[n].CNum);elseprintf(Sorry!Thereisnoemptycomputer!\n);}elseprintf(Error.Pleaseinputagain.\n);}输入要查询的时间n判断n是否8-20n=s(n)根据n的值判断TimeQueue[n]-Cnum的值是否小于最大值MAX输出:没有空机位空机位数=MAX-TimeQueue[n]--CNumNYY提示:输入错误,请重新输入N语言课程设计C115.排队模块[分析]该模块主要是针对是否要排队和如何排队设计的。当预约者总数小于最大值时提示不用排队。当预约者的总数大于最大值时就需要排队。把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到time[n]的表尾。用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。输入时间8-20调用detail函数,sum[T]的值改变开始输出空机位数,是否等待Y在Time[n]中追加一个结构体成员。返回主菜单执行一个循环,进入后面的时间段语言课程设计C12【程序】voidpaidui()/*排队模块*/{intn;
本文标题:机房预定位系统
链接地址:https://www.777doc.com/doc-5038087 .html