机房机位预约模拟系统.docx
《机房机位预约模拟系统.docx》由会员分享,可在线阅读,更多相关《机房机位预约模拟系统.docx(22页珍藏版)》请在冰豆网上搜索。
机房机位预约模拟系统
C语言程序设计
编程实践是学习C语言程序设计的一重要环节,为提高学生程序设计能力,通过课堂和上机实践练习使学生的程序设计能力上一台阶。
通过前四单元温顾而知新、庖丁解牛、举一反三、熟能生巧等过程的练习设计下面一个完整的程序
1.题目要求
设计“机房机位预约模拟系统”
要求:
20台机器,从早8点到晚8点,每两个小时一个时间段。
需要实现功能:
1,查询,根据输入时间,输出机位信息。
2,即为预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段。
另:
若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.
3,退出预定,根据输入的时间,撤销该时间的预定。
4,查询是否有等待的信息,若有则按顺序显示联系方式,若无则显示提示信息。
2需求分析
根据题目要求在程序中需实现查询,预定,排队等功能的操作,所以需要建立相应的模块来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
3总体设计
整个系统可分为3个模块查询模块预定模块取消模块
详细设计
主函数比较简洁,只提供输入、功能处理和输出部分的函数调用。
main()
{
inti;
for(i=0;iTimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
TimeQueue[i].last=NULL;
}
while
(1){
printf("请输入序号!
:
\n");
printf("1.查询预定的机位2.查询空机位3.预定4.取消预定5.等待列表6.查询等待者列表0.退出\n");
scanf("%d",&i);
switch(i)
{
case1:
Inquir();break;
case2:
inquir();break;
case3:
booking();break;
case4:
cancel();break;
case5:
waiting();break;
case6:
inquir_waiting();break;
case0:
exit(0);
default:
printf("error\n");
}
}
}
voidInquir()
{
intn;
charInfor[10];
structnode*Rem;
printf("输入查询时间(24hours8~20o'clock,include8o'clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
printf("请输入学号\n");
scanf("%s",Infor);
Rem=TimeQueue[n].first;
for(;Rem->next!
=NULL;Rem=Rem->next)
if(strcmp(Rem->data,Infor)==0)break;
if(Rem->locat!
=0)
printf("Thecomputernumberis%d\n",Rem->locat);
elseprintf("对不起.你依旧在等待列表中或者没有预定");
}
elseprintf("错误,请再次输入.\n");
}
voidinquir()
{
intn;
printf("输入想要查询的时间(24hours8~20o'clock,include8o'clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNumprintf("Thereare%demptycomputer!
\n",MAX-TimeQueue[n].CNum);
elseprintf("对不起.没有空余机位\n");
}
elseprintf("错误,再次输入.\n");
}
预定模块
voidbooking()
{
intn;
charInfor[10];
structnode*Rem;
structnode*p;
printf("输入想要预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNumprintf("请输入你的学号\n");
scanf("%s",Infor);
if(TimeQueue[n].first==NULL){
Rem=(structnode*)malloc(sizeof(structnode));
Rem->locat=1;
strcpy(Rem->data,Infor);
Rem->next=NULL;
TimeQueue[n].first=Rem;
TimeQueue[n].last=Rem;
TimeQueue[n].CNum++;
printf("成功预定\n");
}
else{
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
p=TimeQueue[n].last;
Rem->locat=TimeQueue[n].CNum+1;
printf("%d",Rem->locat);
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("成功预定\n");
}
}
elseprintf("没有空余机位!
");
}
elseprintf("错误.请再次输入.\n");
}
voidwaiting()
{
intn;
charInfor[10];
structnode*Rem;
structnode*p;
printf("请输入想要排队的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNum>=MAX){
printf("请输入你的学号\n");
scanf("%s",Infor);
if((TimeQueue[n].CNum)==MAX){
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].middle=Rem;
TimeQueue[n].CNum++;
printf("成功排队\n");
}
else{
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("成功排队\n");
}
}
elseprintf("有空余机位,无须等待\n");
}
elseprintf("错误.再次输入.\n");
}
取消模块
voidcancel()
{
intn;
inti;
charInfor[10];
structnode*Rem;
structnode*q;
structnode*p;
printf("请输入预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
printf("PleaseinputyourNo.!
\n");
scanf("%s",Infor);
n=S(n);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
if(strcmp(Rem->data,Infor)==0)break;
if(i>MAX){
if(Rem->next==NULL){
q->next=NULL;
TimeQueue[n].last=q;
free(Rem);
TimeQueue[n].CNum--;
printf("Succeedtooutthequeue!
\n");
}
else{
q->next=Rem->next;
free(Rem);
TimeQueue[n].CNum--;
printf("Succeedtooutthequeue!
\n");
}
}
else{
if(TimeQueue[n].CNum>MAX){
TimeQueue[n].middle->locat=Rem->locat;
TimeQueue[n].middle=TimeQueue[n].middle->next;
}
if(i==1)TimeQueue[n].first=Rem->next;
elseq->next=Rem->next;
free(Rem);
TimeQueue[n].CNum--;
printf("成功取消预定!
\n");
附录源代码:
#include
#include
#include
#defineLENGTH6
#defineMAX20
#defineS(r)(r-8)/2
#defineNULL0
structnode{
intlocat;
chardata[10];
structnode*next;
};
structnode*head;
structcell{
intCNum;
structnode*first;
structnode*middle;
structnode*last;
}TimeQueue[LENGTH];
voidInquir()
{
intn;
charInfor[10];
structnode*Rem;
printf("输入查询时间(24hours8~20o'clock,include8o'clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
printf("请输入学号\n");
scanf("%s",Infor);
Rem=TimeQueue[n].first;
for(;Rem->next!
=NULL;Rem=Rem->next)
if(strcmp(Rem->data,Infor)==0)break;
if(Rem->locat!
=0)
printf("Thecomputernumberis%d\n",Rem->locat);
elseprintf("对不起.你依旧在等待列表中或者没有预定");
}
elseprintf("错误,请再次输入.\n");
}
voidinquir()
{
intn;
printf("输入想要查询的时间(24hours8~20o'clock,include8o'clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNumprintf("Thereare%demptycomputer!
\n",MAX-TimeQueue[n].CNum);
elseprintf("对不起.没有空余机位\n");
}
elseprintf("错误,再次输入.\n");
}
voidbooking()
{
intn;
charInfor[10];
structnode*Rem;
structnode*p;
printf("输入想要预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNumprintf("请输入你的学号\n");
scanf("%s",Infor);
if(TimeQueue[n].first==NULL){
Rem=(structnode*)malloc(sizeof(structnode));
Rem->locat=1;
strcpy(Rem->data,Infor);
Rem->next=NULL;
TimeQueue[n].first=Rem;
TimeQueue[n].last=Rem;
TimeQueue[n].CNum++;
printf("成功预定\n");
}
else{
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
p=TimeQueue[n].last;
Rem->locat=TimeQueue[n].CNum+1;
printf("%d",Rem->locat);
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("成功预定\n");
}
}
elseprintf("没有空余机位!
");
}
elseprintf("错误.请再次输入.\n");
}
voidwaiting()
{
intn;
charInfor[10];
structnode*Rem;
structnode*p;
printf("请输入想要排队的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNum>=MAX){
printf("请输入你的学号\n");
scanf("%s",Infor);
if((TimeQueue[n].CNum)==MAX){
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].middle=Rem;
TimeQueue[n].CNum++;
printf("成功排队\n");
}
else{
Rem=(structnode*)malloc(sizeof(structnode));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("成功排队\n");
}
}
elseprintf("有空余机位,无须等待\n");
}
elseprintf("错误.再次输入.\n");
}
voidcancel()
{
intn;
inti;
charInfor[10];
structnode*Rem;
structnode*q;
structnode*p;
printf("请输入预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
printf("PleaseinputyourNo.!
\n");
scanf("%s",Infor);
n=S(n);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
if(strcmp(Rem->data,Infor)==0)break;
if(i>MAX){
if(Rem->next==NULL){
q->next=NULL;
TimeQueue[n].last=q;
free(Rem);
TimeQueue[n].CNum--;
printf("Succeedtooutthequeue!
\n");
}
else{
q->next=Rem->next;
free(Rem);
TimeQueue[n].CNum--;
printf("Succeedtooutthequeue!
\n");
}
}
else{
if(TimeQueue[n].CNum>MAX){
TimeQueue[n].middle->locat=Rem->locat;
TimeQueue[n].middle=TimeQueue[n].middle->next;
}
if(i==1)TimeQueue[n].first=Rem->next;
elseq->next=Rem->next;
free(Rem);
TimeQueue[n].CNum--;
printf("成功取消预定!
\n");
}
}
elseprintf("错误,请再次输入.\n");
}
voidinquir_waiting()
{
intn;
structnode*q;
printf("查询其他等待者的预定时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
if(TimeQueue[n].CNum>MAX){
printf("等待列表are:
\n");
q=TimeQueue[n].middle;
for(;q->next!
=NULL;q=q->next)printf("%s\n",q->data);
printf("%s\n",TimeQueue[n].last->data);
}
elseprintf("这个时间段没有预定者\n");
}
elseprintf("错误。
请再次输入.\n");
}
main()
{
inti;
for(i=0;iTimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
TimeQueue[i].last=NULL;
}
while
(1){
printf("请输入序号!
:
\n");
printf("1.查询预定的机位\n2.查询空机位\n3.预定\n4.取消预定\n5.等待列表\n6.查询等待者时间列表0.退出\n");
scanf("%d",&i);
switch(i)
{
case1:
Inquir();break;
case2:
inquir();break;
case3:
booking();break;
case4:
cancel();break;
case5:
waiting();break;
case6:
inquir_waiting();break;
case0:
exit(0);
default:
printf("error\n");
}
}
}