



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、合肥学院计算机科学与技术系课程设计报告20 12 20 13 学年第一 学期课程C 语言课程设计课程设计题目机房机位预订系统学生姓名学号1204032015专业班级网络工程( 2)班指导教师2013年1月语言课程设计C目录一、课程设计目的2二、课程设计名称及内容2三、对任务和要求的分析2四.详细设计及实现3五、源代码18六、程序测试24七、总结25语言课程设计C一、课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加
2、深学生所学专业课程 C 语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用 C 语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。( 6)熟练掌握 C 语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,
3、分块调试)和修改程序。二、课程设计名称及内容课程设计名称:机房机位预定系统设计内容:设计一个机房机位预定系统,该系统要求对机房电脑机位进行管理和维护。 20 台机器 , 从早八点到晚八点 , 每两个小时一个时间段 .任务和要求: 20 台机器,编号 1 到 20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。设计一个机房机位预定系统,通过该系统实现对机房机位的预定管理。三、对任务和要求的分析可行研究阶段的目标是:使工作人员从繁琐的机位管理工作中解放出来;提高工作质量,使供需双方都获得满意的结果;促进报表,提高工作效率。本系统包含的主要模块有:(1)界面系统以菜单方式工作。(2)机位
4、预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。(3)查询,根据输入时间,输出机位信息。(4)退出预定,根据输入的时间,机器号撤销该事件的预定!2语言课程设计C(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短) ,若无则显示提示信息。程序达到的功能:机房机位模拟系统我的 预约查询空位预约取消预约排队查询等带状态信息四 .详细设计及实现1宏定义#include<stdio.h>#include<stdlib.h>#include<string.h>#define ti
5、me 6#define MAX 20#define T(r) (r-8)/2#define NULL 0struct xx/* 用户信息 */int jh;char data10;struct xx *next;3语言课程设计Cstruct xx *head;struct cell/* 排队的队列 */int CNum;struct xx *first; /*指向队列开头*/struct xx *middle; /*指向排队队列*/struct xx *last; /* 指向对结尾 */Timetime;1 .主函数主函数一般设计的比较简洁,只提供输入 ,处理和输出部分的函数调用.其中个功能模
6、块用菜单方式选择。本模块通过do-while语句和 switch语句实现主菜单的显示和对功能的选择。用户可以根据自己的需求选择相应功能的序号,如果用户输入的数据在0到6 的范围内, w将会被系统赋值为 1,程序结束循环进入下一步操作;如果用户输入的序号不再 0 到 6 的范围内则系统会要求用户重新输入服务序号直到用户输入的数据在0 到 6的范围内为止。4开始语言课程设计C显示一系列功能模块N输入 n 的值 1-6Y根据的值调用各功能模块函数返回主菜单【程序】main()/ 主函数模块int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL
7、;Timei.middle=NULL;Timei.last=NULL;while(1)printf(" 请输入序号 !:n");printf("1.预定2.查询空机位3.查询预定的机位4. 取消预定5.参加排队6.查询等待者时间列表0.退出 n");scanf("%d",&i);switch(i)case 1:booking();break;case 2:inquir();break;case 3:search();break;case 4:cancel();break;case 5:paidui();break;5语言课程设
8、计Ccase 6:search_waiting();break;case 0:exit(0);default:printf("errorn");2.查询我的状态模块 数据结构 我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。【分析】根据输入的时间来判断应该查询的结构体,把其首地址赋给 pp,然后通过指针的移动,比较输入的学号和存储在该结构体中的 pp->data,来判断我的预约状态 ,子函数 void search (): 本模块的功能是通过调用函数指向队列的指针查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空
9、机位的序号,如果没有空位则在屏幕上显示有零台空机位。流程图 开始输入要查询的时间n,判断 n 是否 820YNn=s(n)根据的n 值和输入的学号来查找链表中是否有该值和其的位置, 从而达到查询出我的状态的目的提示:输入错误,请重新输入【程序】void search ()6语言课程设计Cint n;char xh10;struct xx *pp;system("cls");printf(" 输入查询时间 (24 hours 820 o'clock,include 8o'clock)n"); /*验证输入的时间*/scanf("%
10、d",&n);if(n>=8&&n<20)n=T(n);printf(" 请输入学号 n");scanf("%s ",xh);pp=Timen.first;for(;pp->next!=NULL;pp=pp->next) /* 通过指针后移查找信息 */ if(strcmp(pp->jh,xh)=0)break;if(pp->jh!=0)printf("The computer number is %dn",pp->jh);else printf("
11、对不起 . 你依旧在等待列表中或者没有预定");else printf("错误,请再次输入 .n");3. 预约模块 数据结构 定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。若有空机位则提示用户输入其想要爱预定的机位号并留下学号并将其信息加入预定者信息链表中;若没有空机位则向用户显示其想要预定的那台机器最短的等待时间并提示是否等待,如果用户愿意等待则提示用户输入其想要爱预定的机位号并留下学号将用户的信息加入等待列表中。 分析在该模块的设计中,要让预约者按预约的顺序储存在结构体中。当预约者的总数小
12、于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。流程图7语言课程设计C开始输入时间 8-20调用 detail 函数 ,sumT 的值改变执行一个循环,进入后面的时间段输出空机位数,是否等待Y调用指向队列的指针,输入预定机位号学号,追加一个结构体成员。返回主菜单【程序】void booking() /*预定模块 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");8语言课程设计Cprintf("输入想要预定的时间 n");
13、scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)printf("请输入你的学号 n");scanf("%s",xh);if(Timen.first=NULL)pp=(struct xx *)malloc(sizeof(struct xx); /*动态申请存储空间 */pp->jh=1; /*预定到第一台机器 */strcpy(pp->data,xh);pp->next=NULL;Timen.first=pp;Time
14、n.last=pp;Timen.CNum+;printf("成功预定 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;p=Timen.last;pp->jh=Timen.CNum+1;printf("%d",pp->jh);Timen.last=pp;p->next=pp;Timen.CNum+; /*被预定的机器数目追加一*/printf("成功预定 n");else printf(&q
15、uot;没有空余机位 !");else printf("错误 . 请再次输入 .n");4. 查询空机位模块 分析根据输入的时间确定 n 值,然后根据结构体中 Time 中的 Time n->Cnum 的值,求出最大值与该值的差即为空机位数。本模块的功能是通过调用链表查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空机位的序号,如果没有空位则在屏幕上显示有零台空机位。流程图9语言课程设计C输入要查询的时间 n 判断 n 是否 820Yn s( n)N根据 n 的值判断 TimeQueuen->Cnum 的值是否
16、小于最大值MAXYN空机位数 =MAX TimeQueuen ->CNum输出:没有空机位提示:输入错误,请重新输入【程序】void inquir()int n;printf("Please input the time you want to search.(24 hours 824oclock,include 8clock)n");scanf("%d",&n);if(n>=8&&n<20)n=S(n);if(TimeQueuen.CNum<MAX)printf("There are %d em
17、oty computer.n",MAX-TimeQueuen.CNum); else printf("Sorry!There is no empty computer!n");else printf("Error.Please input again.n");10语言课程设计C5. 排队模块 分析 该模块主要是针对是否要排队和如何排队设计的。当预约者总数小于最大值时提示不用排队。当预约者的总数大于最大值时就需要排队。把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到time n 的表尾。用指向等待队列的指针指向排队的第一
18、人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。开始输入时间 8-20调用 detail 函数 ,sumT 的值改变执行一个循环,进入后面的时间段输出空机位数,是否等待Y在 Time n 中追加一个结构体成员。返回主菜单11语言课程设计C【程序】void paidui() /*排队模块 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf("请输入想要排队的时间n");scanf("%d",&n);if(n>=8&&n&
19、lt;20)n=T(n);if(Timen.CNum>=MAX)printf("请输入你的学号 n");scanf("%s",xh);if(Timen.CNum)=MAX)pp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last; /*指向排队队列结尾处 */Timen.last=pp;p->next=pp;Timen.middle=pp;Timen.CNum+;printf("成
20、功排队 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last;Timen.last=pp;p->next=pp;Timen.CNum+;printf("成功排队 n");else printf("有空余机位,无须等待 n");else printf("错误 . 再次输入 .n");12语言课程设计C6. 取消预约模块 分析要取消预约,有两种情况,第
21、一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。而指向等待队列首地址的指针就指向原来排队的第二人。第二种情况就是取消约的人本来就在等待队列中,只需要直接删除该结点即可。流程图N输入要查询的时间 n 判断 n 是否 820Yn T(n)提示:输入错误请重新输入输入学号,查找该链表中该信息的位置 i, i 是否不大于MAXYN退出预约,排队者的第一人插入该预约退出预约者的位置。【程序】void cancel() /*取消模块 */int n;int i;char xh10;struct xx *pp;struct xx *q;struct xx *p;syste
22、m("cls");printf("请输入预定的时间 n");scanf("%d",&n);if(n>=8&&n<20)13语言课程设计Cprintf("请输入你的学号 .!n");scanf("%s",xh);n=T(n);pp=Timen.first;q=pp;for(i=1;q=pp,pp=pp->next,i+)if(strcmp(pp->data,xh)=0)break;if(i>MAX)if(pp->next=NULL)q-&
23、gt;next=NULL;Timen.last=q;free(pp);Timen.CNum-;printf("取消成功 !n");elseq->next=pp->next;free(pp);Timen.CNum-;printf("成功退出 !n");elseif(Timen.CNum>MAX)Timen.middle->jh=pp->jh;Timen.middle=Timen.middle->next;if(i=1) Timen.first=pp->next;else q->next=pp->next
24、;free(pp);Timen.CNum-;printf("成功取消预定 !n");else printf("错误,请再次输入 .n");void search_waiting() /*查询等待模块 */int n;14语言课程设计Cstruct xx *q;system("cls");printf("查询其他等待者的预定时间n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf(
25、"等待列表 are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*输出等待者 */else printf("这个时间段没有预定者 n");else printf("错误。请再次输入 .n");7. 查询等待信息模块 分析通过输入的时间,判断储存该时间段的结构体链表,通过比较Timen 中 Cnum的值与最大值的
26、大小关系就可以得到是否有等待者的信息,本模块通过读取用户输入的时间先调用结构体链表在屏幕上显示出用户要查询的时间段的包含用户的机位号和学号。流程图N输入要查询的时间 n 判断 n 是否 820Yn s( n)提示:输入错误请重新输入根据 n 的值判断 Time n->Cnum 的值是否小Y于最大值 MAXN有等待者没有等待者【程序】void search_waiting() /*查询等待模块 */int n;struct xx *q;system("cls");15语言课程设计Cprintf("查询其他等待者的预定时间n");scanf("
27、;%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf("等待列表 are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*输出等待者 */else printf("这个时间段没有预定者 n");else printf(&quo
28、t;错误。请再次输入 .n");main()/主函数模块int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;16语言课程设计C开始N输入时间 8-20Y调用Timen 中 Cnum 输出到屏幕上,显示等待信息返回主菜单【程序】void search_waiting() /* 查询等待模块*/int n;struct xx *q;system("cls");printf(" 查询其他等待者的预定时间n");scanf(
29、"%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf(" 等待列表are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*输出等待者 */17语言课程设计Celse printf(" 这个时间段没有预定者n");el
30、se printf(" 错误。请再次输入.n");main()/ 主函数模块int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;五、源代码#include<stdio.h>#include<stdlib.h>#include<string.h>#define time 6#define MAX 20#define T(r) (r-8)/2#define NULL 0struct xx/* 用户信息 */int
31、jh;char data10;struct xx *next;struct xx *head;struct cell/* 排队的队列 */int CNum;struct xx *first; /*指向队列开头*/struct xx *middle; /*指向排队队列*/struct xx *last; /* 指向对结尾 */Timetime;18语言课程设计Cvoid booking() /* 预定模块 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf(" 输入想要预定的时间n&qu
32、ot;);scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)printf(" 请输入你的学号n");scanf("%s",xh);if(Timen.first=NULL)pp=(struct xx *)malloc(sizeof(struct xx); /* 动态申请存储空间 */ pp->jh=1; /* 预定到第一台机器 */strcpy(pp->data,xh);pp->next=NULL;Timen.first
33、=pp;Timen.last=pp;Timen.CNum+;printf(" 成功预定 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;p=Timen.last;pp->jh=Timen.CNum+1;printf("%d",pp->jh);Timen.last=pp;p->next=pp;Timen.CNum+;/* 被预定的机器数目追加一*/printf(" 成功预定 n");19语言
34、课程设计Celse printf(" 没有空余机位!");else printf(" 错误 .请再次输入 .n");void search()int n;char xh10;struct xx *pp;system("cls");printf(" 输入查询时间 (24 hours 820 o'clock,include 8o'clock)n"); /*验证输入的时间*/scanf("%d",&n);if(n>=8&&n<20)n=T(n);pr
35、intf(" 请输入学号 n");scanf("%s",xh);pp=Timen.first;for(;pp->next!=NULL;pp=pp->next)/* 通过指针后移查找信息*/if(strcmp(pp->jh,xh)=0)break;if(pp->jh!=0)printf("The computer number is %dn",pp->jh);else printf(" 对不起 .你依旧在等待列表中或者没有预定");else printf(" 错误,请再次输入.
36、n");void paidui() /* 排队模块 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf(" 请输入想要排队的时间n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>=MAX)20语言课程设计Cprintf(" 请输入你的学号n");scanf("%s",xh);if(Timen.CNum)=MA
37、X)pp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last; /* 指向排队队列结尾处*/Timen.last=pp;p->next=pp;Timen.middle=pp;Timen.CNum+;printf(" 成功排队 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->j
38、h=0;p=Timen.last;Timen.last=pp;p->next=pp;Timen.CNum+;printf(" 成功排队 n");else printf(" 有空余机位,无须等待n");else printf(" 错误 .再次输入 .n");void inquir() /* 查询空机位模块*/int n;system("cls");printf(" 输入想要查询的时间 (24 hours 820o'clock,include 8 o'clock)n"); sc
39、anf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)21语言课程设计Cprintf("There are %d empty computer!n",MAX-Timen.CNum); else printf(" 对不起 .没有空余机位 n");else printf(" 错误 ,再次输入 .n");void cancel() /* 取消模块 */int n;int i;char xh10;struct xx *pp;stru
40、ct xx *q;struct xx *p;system("cls");printf(" 请输入预定的时间n");scanf("%d",&n);if(n>=8&&n<20)printf(" 请输入你的学号.!n");scanf("%s",xh);n=T(n);pp=Timen.first;q=pp;for(i=1;q=pp,pp=pp->next,i+)if(strcmp(pp->data,xh)=0)break;if(i>MAX)if(pp
41、->next=NULL)q->next=NULL;Timen.last=q;free(pp);Timen.CNum-;printf(" 取消成功 !n");elseq->next=pp->next;free(pp);Timen.CNum-;printf(" 成功退出 !n");elseif(Timen.CNum>MAX)Timen.middle->jh=pp->jh;22语言课程设计CTimen.middle=Timen.middle->next;if(i=1) Timen.first=pp->nex
42、t;else q->next=pp->next;free(pp);Timen.CNum-;printf(" 成功取消预定 !n");else printf(" 错误,请再次输入.n");void search_waiting() /* 查询等待模块*/int n;struct xx *q;system("cls");printf(" 查询其他等待者的预定时间n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Tim
43、en.CNum>MAX)printf(" 等待列表are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*输出等待者 */else printf(" 这个时间段没有预定者n");else printf(" 错误。请再次输入.n");main()/ 主函数模块int i;for(i=0;i<time;i
44、+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;23语言课程设计Cwhile(1)printf(" 请输入序号 !:n");printf("1.预定2.查询空机位3.查询预定的机位4. 取消预定5.参加排队6.查询等待者时间列表0.退出 n");scanf("%d",&i);switch(i)case 1:booking();break;case 2:inquir();break;case 3:search();break;case 4:can
45、cel();break;case 5:paidui();break;case 6:search_waiting();break;case 0:exit(0);default:printf("errorn");六、程序测试1、预定功能2、查询功能24语言课程设计C3、查询预定机位的功能4、取消功能七、总结短短的一个星期的上机实习结束了。复习了理论知识、编程、调试、改错,直至存盘,同样的环节、同样的工作步骤,重复又重复,枯燥而乏味;看似简单的程序题,编写后调试却屡屡出错。如何改如何错,怎么编写怎么调试失败,心烦而意乱。但奇怪的是,越是如此,我越是不甘失败。不断地调试,反复地编写。一旦在黑屏幕的左下角意外地发现所输出的信息正是自己意想中的结果,那份惊喜,那
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023一年级数学上册 3 1-5的认识和加减法第5课时 加法配套教学实录 新人教版
- 关于签订合作伙伴合同的往来文书编写指导
- 2023七年级数学上册 第3章 一元一次方程3.3 一元一次方程的解法第3课时 解含有分母的一元一次方程教学实录 (新版)湘教版
- 某小区绿化工程施工组织设计
- 12《富起来到强起来》(教学设计)-部编版(五四制)道德与法治五年级上册
- 某造纸厂2×110TH锅炉SNCR法脱硝工程设计
- 大学美育 课程大纲、课程标准
- 2024年八年级生物上册 4.1.6《芽的类型和发育》教学实录 (新版)济南版
- 5 《琥珀》第二课时 教学设计-2023-2024学年语文四年级下册统编版
- 2 百分数(二)利率 教学设计-2023-2024学年六年级下册数学人教版
- 重症医学科品管圈PDCA案例四例
- 《医学影像技术学》课件
- 苏教版二年级科学下册第7课《栽小葱》课件PPT
- 《活着》读后感-课件
- 空白表格简历模板
- 网店运营管理(第二版)课件全套 段文忠 第1-9章 网店运营基本原理- 战略化运营 动态竞争
- 煤矿机电事故及其防治措施
- 王思斌社会工作概论第3版课后习题答案完全
- 组织行为学-中国人民大学劳动人事学院许玉林
- 食品安全员守则与食品安全管理任命书
- 比较文学视域中的翻译研究
评论
0/150
提交评论