c语言课程设计机房机位预约模拟Word文档下载推荐.docx
- 文档编号:5266318
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:20
- 大小:154.05KB
c语言课程设计机房机位预约模拟Word文档下载推荐.docx
《c语言课程设计机房机位预约模拟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言课程设计机房机位预约模拟Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
structnode{
intlocat;
chardata[10];
/*学号,假设为联系方式*/
structnode*next;
};
structnode*head;
structcell{
intCNum;
/*连接在该时段头结点的总机器数目*/
structnode*first;
/*指向整个队列的开头*/
structnode*middle;
/*指向等待预约队列*/
structnode*last;
/*指向整个队列的结尾*/
}TimeQueue[LENGTH];
2..主函数
输入n,判断n是否是0-6
显示一系列功能信息
主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功
能模块用菜单方式选择。
N
Y
根据n的值调用各功能模块函数
【程序】
main()/***************主函数**************/
{
inti;
for(i=0;
i<
LENGTH;
i++){/*初始化*/
TimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
TimeQueue[i].last=NULL;
}
while
(1){
printf("
Pleasechoiceyournumber!
:
\n"
);
1.Searchmybookingstate2.Searchemptyplace3.Book4.Cancelbooking5.Waiting6.Searchwaiting\n"
scanf("
%d"
&
i);
/*选择功能*/
switch(i)
{
case1:
Inquir();
break;
/*查询我的状态模块*/
case2:
inquir();
/*查询空位模块*/
case3:
booking();
/*预约模块*/
case4:
cancel();
/*取消预约模块*/
case5:
waiting();
/*排队模块*/
case6:
inquir_waiting();
/*查询等待信息模块*/
default:
printf("
error\n"
}
3.各功能模块设计
(1)查询我的状态模块
[数据结构]
我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。
【分析】
根据输入的时间来判断应该查询的结构体,把其首地址赋给Rem,然后通过指针的移动,比较输入的学号和存储在该结构体中的Rem->
data,来判断我的预约状态。
[流程图]
输入要查询的时间n,判断n是否8-20
n=s(n)
根据的n值和输入的学号来查找链表中是否有该值和其的位置,从而达到查询出我的状态的目的
提示:
输入错误,请重新输入
voidInquir()
intn;
charInfor[10];
structnode*q;
structnode*Rem;
Pleaseinputthetimeyouwanttosearch!
(24xiaoshizhibetween8and20o’clock,include8o’clock)\n"
scanf("
n);
if(n>
=8&
&
n<
20){
n=S(n);
Pleaseinputyourschool-number!
%s"
Infor);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;
;
q=Rem,Rem=Rem->
next,i++)
if(strcmp(Rem->
data,Infor)==0)break;
if(Rem->
locat!
=0)
Thecomputernumberyouhaveduringthisperiodperiodis%d\n"
Rem->
locat);
elseprintf("
Sorry,youarestillinthewaitingqueue!
"
elseprintf("
Error.Pleaseinputagain.\n"
)
(2)查询空机位模块
[分析]
根据输入的时间确定n值,然后根据结构体中TimeQueue中的TimeQueue[n]->
Cnum的值,求出最大值与该值的差即为空机位数。
输入要查询的时间n判断n是否8-20
n=s(n)
根据n的值判断TimeQueue[n]->
Cnum的值是否小于最大值MAX
空机位数=MAX-TimeQueue[n]
-->
CNum
输出:
没有空机位
voidinquir()
Pleaseinputthetimeyouwanttosearch.(24hours8~24o’clock,include8‘clock)\n"
if(TimeQueue[n].CNum<
MAX)
Thereare%demotycomputer.\n"
MAX-TimeQueue[n].CNum);
Sorry!
Thereisnoemptycomputer!
(3)预约模块
定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。
在该模块的设计中,要让预约者按预约的顺序储存在结构体中。
当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。
输入错误请重新输入
已经没有空机位
输入预约者的学号
TimeQueue[n].first是否为空
把预约者的信息插入到链表的表尾
把预约者信息储存在链表的第一个结点
voidbooking()/**/
structnode*p;
Pleaseinputthetimeyouwanttobook!
MAX){
PleaseinputyourNo.!
if(TimeQueue[n].first==NULL){
Rem=(structnode*)malloc(sizeof(structnode));
Rem->
locat=1;
strcpy(Rem->
data,Infor);
next=NULL;
TimeQueue[n].first=Rem;
TimeQueue[n].last=Rem;
TimeQueue[n].CNum++;
Succeedtobook!
else{
p=TimeQueue[n].last;
locat=TimeQueue[n].CNum+1;
p->
next=Rem;
}
}
(4)排队模块
[分析]该模块主要是针对是否要排队和如何排队设计的。
当预约者总数小于最大值时提示不用排队。
当预约者的总数大于最大值时就需要排队。
把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到TimeQueue[n]的表尾。
用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。
还有空机位,不需要排队。
Cnum是否=MAX
把排队者的信息连接到链表的结尾处,即排队的第一个
把排队者的信息联接到队尾处。
voidwaiting()/**/
Pleaseinputthetimeyouwanttowait!
if(TimeQueue[n].CNum>
=MAX){
PleaseinputyourNo!
if((TimeQueue[n].CNum)==MAX){
locat=0;
TimeQueue[n].middle=Rem;
Succeedtointhequeue。
Thereisstillhaveemptycomputer。
Nowait!
(5)取消预约模块
要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。
而指向等待队列首地址的指针就指向原来排队的第二人。
第二种情况就是取消预约的人本来就在等待队列中,只需要直接删除该结点即可。
Y
输入学号,查找该链表中该信息的位置i,i是否不大于MAX
退出预约,排队者的第一人插入该预约者的位置。
退出预约
voidcancel()
/*记载删除点的队列位置*/
Pleaseinputthetimeyouhavebooked.\n);
if(i>
MAX){/*注意退出预定的情况包括退出在等待队列中预定的情况!
*/
next==NULL){
q->
TimeQueue[n].last=q;
free(Rem);
TimeQueue[n].CNum--;
printf(“Succeedtooutthequeue!
next=Rem->
next;
Succeedtooutthequeue!
else{
TimeQueue[n].middle->
locat=Rem->
locat;
TimeQueue[n].middle=TimeQueue[n].middle->
if(i=1)TimeQueue[n].first=Rem->
elseq->
(6)查询等待信息模块
通过输入的时间,判断储存该时间段的结构体链表,通过比较TimeQueue[n]中Cnum的值与最大值的大小关系就可以得到是否有等待者的信息。
Cnum的值是否小于最大值MAXY
有等待者
没有等待者
voidinquir_waiting()
Pleaseinputthetimeyouwanttosearchthewaiter.\n"
Thewaiterare:
q=TimeQueue[n].middle;
for(;
q->
next!
=NULL;
q=q->
next)printf("
%s\n"
q->
data);
TimeQueue[n].last->
Thereisnowaiterduringthisperiod!
五.上机操作:
(1)主菜单如下:
(2)选3,进入预约模块:
(3)选1,进入“查询我的预约状态”模块:
(4)选2,进入查询空机位模块:
(5)选4,进入取消预约模块:
(6)选5,进入排队等待模块:
(7)选6,进入查询等待信息模块:
(8)选0,结束程序:
按任意键,则结束运行,返回源程序。
六.总结
通过这一周的C语言实习,我在上机操作这一方面有了很大的进步,对C的理论知识的掌握也更加牢固。
学会了把所学的知识用于实践。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 机房 机位 预约 模拟
![提示](https://static.bingdoc.com/images/bang_tan.gif)