完整版机房预定位系统文档格式.docx
- 文档编号:5778144
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:36
- 大小:298.81KB
完整版机房预定位系统文档格式.docx
《完整版机房预定位系统文档格式.docx》由会员分享,可在线阅读,更多相关《完整版机房预定位系统文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
课程设计名称:
机房机位预定系统
设计内容:
设计一个机房机位预定系统,该系统要求对机房电脑机位进行管理和维护。
20台机器,从早八点到晚八点,每两个小时一个时间段.
任务和要求:
20台机器,编号1到20,从早八点到晚八点。
两小时一个时间段,每次可预定一个时间段。
设计一个机房机位预定系统,通过该系统实现对机房机位的预定管理。
三、对任务和要求的分析
可行研究阶段的目标是:
使工作人员从繁琐的机位管理工作中解放出来;
提高工作质量,使供需双方都获得满意的结果;
促进报表,提高工作效率。
本系统包含的主要模块有:
(1)界面—系统以菜单方式工作。
(2)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:
若用户在非空时间上机,则将用户信息列入等待列表。
(3)查询,根据输入时间,输出机位信息。
(4)退出预定,根据输入的时间,机器号撤销该事件的预定!
(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。
程序达到的功能:
四.详细设计及实现
1.宏定义
#include<
stdio.h>
stdlib.h>
string.h>
#definetime6
#defineMAX20
#defineT(r)(r-8)/2
#defineNULL0
structxx/*用户信息*/
{
intjh;
chardata[10];
structxx*next;
};
structxx*head;
structcell/*排队的队列*/
intCNum;
structxx*first;
/*指向队列开头*/
structxx*middle;
/*指向排队队列*/
structxx*last;
/*指向对结尾*/
}Time[time];
1..主函数
主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功
能模块用菜单方式选择。
本模块通过do-while语句和switch语句实现主菜单的显示和对功能的选择。
用户可以根据自己的需求选择相应功能的序号,如果用户输入的数据在0到6的范围内,w将会被系统赋值为1,程序结束循环进入下一步操作;
如果用户输入的序号不再0到6的范围内则系统会要求用户重新输入服务序号直到用户输入的数据在0到6的范围内为止。
【程序】
main()//主函数模块
inti;
for(i=0;
i<
time;
i++){
Time[i].CNum=0;
Time[i].first=NULL;
Time[i].middle=NULL;
Time[i].last=NULL;
}
while
(1)
printf("
请输入序号!
:
\n"
);
1.预定2.查询空机位3.查询预定的机位4.取消预定5.参加排队6.查询等待者时间列表0.退出\n"
scanf("
%d"
&
i);
switch(i)
case1:
booking();
break;
case2:
inquir();
case3:
search();
case4:
cancel();
case5:
paidui();
case6:
search_waiting();
case0:
exit(0);
default:
error\n"
}
2.查询我的状态模块
[数据结构]
我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。
【分析】
根据输入的时间来判断应该查询的结构体,把其首地址赋给pp,然后通过指针的移动,比较输入的学号和存储在该结构体中的pp->
data,来判断我的预约状态,子函数voidsearch():
本模块的功能是通过调用函数指向队列的指针查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空机位的序号,如果没有空位则在屏幕上显示有零台空机位。
[流程图]
voidsearch()
intn;
charxh[10];
structxx*pp;
system("
cls"
输入查询时间(24hours8~20o'
clock,include8o'
clock)\n"
/*验证输入的时间*/
n);
if(n>
=8&
&
n<
20){
n=T(n);
请输入学号\n"
%s"
xh);
pp=Time[n].first;
for(;
pp->
next!
=NULL;
pp=pp->
next)/*通过指针后移查找信息*/
if(strcmp(pp->
jh,xh)==0)
if(pp->
jh!
=0)
Thecomputernumberis%d\n"
pp->
jh);
elseprintf("
对不起.你依旧在等待列表中或者没有预定"
错误,请再次输入.\n"
3.预约模块
定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。
若有空机位则提示用户输入其想要爱预定的机位号并留下学号并将其信息加入预定者信息链表中;
若没有空机位则向用户显示其想要预定的那台机器最短的等待时间并提示是否等待,如果用户愿意等待则提示用户输入其想要爱预定的机位号并留下学号将用户的信息加入等待列表中。
[分析]
在该模块的设计中,要让预约者按预约的顺序储存在结构体中。
当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。
[流程图]
voidbooking()/*预定模块*/
structxx*p;
system("
输入想要预定的时间\n"
if(Time[n].CNum<
MAX){
请输入你的学号\n"
if(Time[n].first==NULL)
pp=(structxx*)malloc(sizeof(structxx));
/*动态申请存储空间*/
jh=1;
/*预定到第一台机器*/
strcpy(pp->
data,xh);
next=NULL;
Time[n].first=pp;
Time[n].last=pp;
Time[n].CNum++;
成功预定\n"
else{
p=Time[n].last;
jh=Time[n].CNum+1;
p->
next=pp;
/*被预定的机器数目追加一*/
没有空余机位!
"
错误.请再次输入.\n"
4.查询空机位模块
根据输入的时间确定n值,然后根据结构体中Time中的Time[n]->
Cnum的值,求出最大值与该值的差即为空机位数。
本模块的功能是通过调用链表查询用户输入的时间段的机位状态如果有空机位就在屏幕上显示出来当前时刻的空机位的总数和所有的空机位的序号,如果没有空位则在屏幕上显示有零台空机位。
voidinquir()
{
intn;
printf("
Pleaseinputthetimeyouwanttosearch.(24hours8~24o’clock,include8‘clock)\n"
scanf("
if(n>
20){
n=S(n);
if(TimeQueue[n].CNum<
MAX)
Thereare%demotycomputer.\n"
MAX-TimeQueue[n].CNum);
elseprintf("
Sorry!
Thereisnoemptycomputer!
Error.Pleaseinputagain.\n"
5.排队模块
[分析]该模块主要是针对是否要排队和如何排队设计的。
当预约者总数小于最大值时提示不用排队。
当预约者的总数大于最大值时就需要排队。
把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到time[n]的表尾。
用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。
voidpaidui()/*排队模块*/
请输入想要排队的时间\n"
if(Time[n].CNum>
=MAX){
if((Time[n].CNum)==MAX){
jh=0;
/*指向排队队列结尾处*/
Time[n].middle=pp;
成功排队\n"
有空余机位,无须等待\n"
错误.再次输入.\n"
6.取消预约模块
要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。
而指向等待队列首地址的指针就指向原来排队的第二人。
第二种情况就是取消约的人本来就在等待队列中,只需要直接删除该结点即可。
Y
Y
voidcancel()/*取消模块*/
structxx*q;
请输入预定的时间\n"
20)
请输入你的学号.!
q=pp;
for(i=1;
;
q=pp,pp=pp->
next,i++)
data,xh)==0)break;
if(i>
MAX){
next==NULL){
q->
Time[n].last=q;
free(pp);
Time[n].CNum--;
取消成功!
next=pp->
next;
成功退出!
Time[n].middle->
jh=pp->
jh;
Time[n].middle=Time[n].middle->
if(i==1)Time[n].first=pp->
elseq->
成功取消预定!
voidsearch_waiting()/*查询等待模块*/
查询其他等待者的预定时间\n"
等待列表are:
q=Time[n].middle;
q=q->
next)printf("
%s\n"
q->
data);
Time[n].last->
/*输出等待者*/
这个时间段没有预定者\n"
错误。
请再次输入.\n"
7.查询等待信息模块
通过输入的时间,判断储存该时间段的结构体链表,通过比较Time[n]中Cnum的值与最大值的大小关系就可以得到是否有等待者的信息,本模块通过读取用户输入的时间先调用结构体链表在屏幕上显示出用户要查询的时间段的包含用户的机位号和学号。
[流程图]
五、源代码
voidsearch()
prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 机房 预定 系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)