c语言实习报告机房机位预约模拟

上传人:wuy****ng 文档编号:157475217 上传时间:2022-09-29 格式:DOC 页数:17 大小:274.02KB
收藏 版权申诉 举报 下载
c语言实习报告机房机位预约模拟_第1页
第1页 / 共17页
c语言实习报告机房机位预约模拟_第2页
第2页 / 共17页
c语言实习报告机房机位预约模拟_第3页
第3页 / 共17页
资源描述:

《c语言实习报告机房机位预约模拟》由会员分享,可在线阅读,更多相关《c语言实习报告机房机位预约模拟(17页珍藏版)》请在装配图网上搜索。

1、C语言课程设计院系:工程学院姓名:杨文和学号:20051003679班号:05205222指导教师:王老师日期:2007年9月 机房机位预约模拟 一.题目要求20台机器,从早八点到晚八点,每两个小时一个时间段.需要实现的功能:(1) 查询,根据输入的时间,输出机位信息.(2) 机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段.另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.(3) 退出预定,根据输入的时间,撤消该时间的饿预定.(4) 查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息.二.需求分析根据题目要求,需要提供机位信

2、息和预约信息,应该用链表来存储,应提供指针的操作:在程序中,需要查询是否有空机位和等待者和处理预约和取消预约问题,应提供查询,显示,预定,删除,修改等操作;另外还要提供键盘式选择菜单实现功能选择.三.总体设计现在分析整个一下整个系统,根据上面的需求分析,可以将这个系统的设计分为如下六大模块:查询我的预约状态,查询空位,预约,取消预约,排队,查询等待信息.机房机位模拟系统我的预约状态查询空位预约取消预约排队查询等带信息四.详细设计1宏定义#include#include#include#define LENGTH 6/*总时段数*/#define MAX 2 #define S(r) (r-8)

3、/2/*计算在哪个时段数*/ struct node int locat; char data10;/*学号,假设为联系方式*/ struct node *next;struct node *head;struct cell int CNum;/*连接在该时段头结点的总机器数目*/ struct node *first;/*指向整个队列的开头*/ struct node *middle;/*指向等待预约队列*/ struct node *last;/*指向整个队列的结尾*/TimeQueueLENGTH;2.主函数输入n,判断n是否是0-6显示一系列功能信息主函数一般设计的比较简洁,只提供输入

4、,处理和输出部分的函数调用.其中个功能模块用菜单方式选择。NY根据n的值调用各功能模块函数【程序】 main() /*主函数*/ int i; for(i=0;idata,来判断我的预约状态。 流程图输入要查询的时间n,判断n是否820YNn=s(n)根据的n值和输入的学号来查找链表中是否有该值和其的位置,从而达到查询出我的状态的目的提示:输入错误,请重新输入【程序】void Inquir() int n; int i; char Infor10; struct node *q; struct node *Rem; printf(Please input the time you want t

5、o search!(24 xiao shi zhi between8 and 20 oclock,include 8oclock)n); scanf(%d,&n); if(n=8&nnext,i+) if(strcmp(Rem-data,Infor)=0)break; if(Rem-locat!=0) printf(The computer number you have during this period period is %dn,Rem-locat); else printf(Sorry,you are still in the waiting queue!);else printf(

6、Error.Please input again.n)(2)查询空机位模块分析根据输入的时间确定n值,然后根据结构体中TimeQueue中的TimeQueuen-Cnum的值,求出最大值与该值的差即为空机位数。流程图输入要查询的时间n判断n是否820Yns(n)N根据n的值判断TimeQueuen-Cnum的值是否小于最大值MAXYN空机位数=MAXTimeQueuen-CNum输出:没有空机位提示:输入错误,请重新输入【程序】 void inquir() int n; printf(Please input the time you want to search.(24 hours 824

7、oclock,include 8 clock)n); scanf(%d,&n); if(n=8&n20) n=S(n); if(TimeQueuen.CNumCnum的值是否小于最大值MAX提示:已经没有空机位输入预约者的学号TimeQueuen.first是否为空YN把预约者的信息插入到链表的表尾把预约者信息储存在链表的第一个结点【程序】void booking()/*/ int n; char Infor10; struct node *Rem; struct node *p; printf(Please input the time you want to book!n); scanf(

8、%d,&n); if(n=8&n20) n=S(n); if(TimeQueuen.CNumlocat=1; strcpy(Rem-data,Infor); Rem-next=NULL; TimeQueuen.first=Rem; TimeQueuen.last=Rem; TimeQueuen.CNum+; printf(Succeed to book!n); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; p=TimeQueuen.last; Rem-loca

9、t=TimeQueuen.CNum+1; printf(%d,Rem-locat); TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(Succeed to book!n); else printf(There is no empty computer!n); else printf(Error.Please input again.n); (4)排队模块 分析该模块主要是针对是否要排队和如何排队设计的。当预约者总数小于最大值时提示不用排队。当预约者的总数大于最大值时就需要排队。把排队者的信息储存在由指向结构体的指针指向的动态分

10、配的存储区域,然后连接到TimeQueuen的表尾。用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。流程图N输入要查询的时间n判断n是否820Y提示:输入错误请重新输入ns(n)根据n的值判断TimeQueuen-Cnum的值是否小于最大值MAXNYNY提示:还有空机位,不需要排队。Cnum是否MAX把排队者的信息连接到链表的结尾处,即排队的第一个把排队者的信息联接到队尾处。【程序】 void waiting()/*/ int n; char Infor10; struct node *Rem; struct node *p; printf(Pleas

11、e input the time you want to wait!n); scanf(%d,&n); if(n=8&n=MAX) printf(Please input your No!n); scanf(%s,Infor); if(TimeQueuen.CNum)=MAX) Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueue

12、n.middle=Rem; TimeQueuen.CNum+; printf(Succeed to in the queue。n); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(Succeed to in the queue。n); else printf(There is sti

13、ll have empty computer。No wait!); else printf(Error.Please input again.n); (5)取消预约模块分析 要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。而指向等待队列首地址的指针就指向原来排队的第二人。第二种情况就是取消预约的人本来就在等待队列中,只需要直接删除该结点即可。流程图N输入要查询的时间n判断n是否820 Y提示:输入错误请重新输入ns(n)输入学号,查找该链表中该信息的位置i,i是否不大于MAXNY退出预约,排队者的第一人插入该预约者的位置。 退出预约

14、【程序】void cancel() int n; int i;/*记载删除点的队列位置*/ char Infor10; struct node *Rem; struct node *q; struct node *p; printf(Please input the time you have booked.n); scanf(%d,&n); if(n=8&nnext,i+) if(strcmp(Rem-data,Infor)=0)break; if(iMAX)/*注意退出预定的情况包括退出在等待队列中预定的情况!*/ if(Rem-next=NULL) q-next=NULL; TimeQu

15、euen.last=q; free(Rem); TimeQueuen.CNum-; printf(“Succeed to out the queue!n); else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(Succeed to out the queue!n); else if(TimeQueuen.CNumMAX) TimeQueuen.middle-locat=Rem-locat; TimeQueuen.middle=TimeQueuen.middle-next; if(i=1) TimeQueuen.first=Rem-

16、next; else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(Succeed to out the queue!n); else printf(Error.Please input again.n); (6)查询等待信息模块分析通过输入的时间,判断储存该时间段的结构体链表,通过比较TimeQueuen中Cnum的值与最大值的大小关系就可以得到是否有等待者的信息。流程图N输入要查询的时间n判断n是否820Yns(n)提示:输入错误请重新输入根据n的值判断TimeQueuen-Cnum的值是否小于最大值MAX YYN有等待者没有等待

17、者【程序】void inquir_waiting() int n; struct node *q; printf(Please input the time you want to search the waiter.n); scanf(%d,&n); if(n=8&nMAX) printf(The waiter are:n); q=TimeQueuen.middle; for(;q-next!=NULL;q=q-next) printf(%sn,q-data); printf(%sn,TimeQueuen.last-data); else printf(There is no waiter during this period!n); else printf(Error.Please input again.n); 五上机操作: (1)主菜单如下: (2)选3,进入预约模块: (3)选1,进入“查询我的预约状态”模块: (4)选2,进入查询空机位模块: (5)选4,进入取消预约模块: (6)选5,进入排队等待模块: (7)选6,进入查询等待信息模块: (8)选0,结束程序: 按任意键,则结束运行,返回源程序。六总结通过这一周的C语言实习,我在上机操作这一方面有了很大的进步,对C的理论知识的掌握也更加牢固。学会了把所学的知识用于实践。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!