中 北 大 学
课程设计说明书
学 院 、 系 :
专 业:
学 生 姓 名:
学 号:
设 计 题 目 :
机房机位预定系统
起 迄 日 期:
指 导 教 师:
日期: 2016 年 3 月 11 日
1 设计目的
学习综合运用 c 语言及其他课程知识,提高分析和解决问题的能力,进一步巩固,加深,扩展所学
知识,进一步加强结构化程序设计的思想,加深对 c 语言的理解与认识。掌握程序设计中的常用
算法与 c 语言编程技巧及上机调试程序的方法。
2 任务概述
20 台机器,编号 1 到 20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能
要求:
(1)系统以菜单方式工作
(2)查询,根据输入时间,输出机位信息。
(3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:
若用户在非空时间上机,则将用户信息列入等待列表。
(4)退出预定,根据输入的时间,机器号撤销该事件的预定!
(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。
3 模块划分
图 3.1 模块划分
4 主要函数说明及其 N-S 图
1.主函数
int main()
{
Menu(); /*当前状态函数*/
}
void Menu() /*主界面*/
{
int n,w;
do
{
puts("\t\t****************机房机位预约系统*******************\n");
puts("\t\t*************************菜单***************************\n");
puts("\t\t\t 1.查询某时间段机位状态"); /*查询某时间段机位状态*/
puts("\t\t\t 2.预定空机位"); /*预定空机位*/
puts("\t\t\t 3.取消预订"); /*取消预订*/
puts("\t\t\t 4.查询等待信息"); /*查询等待信息*/
Commented [A1]: N-S 图要有编号、图名;
具体格式例如:图 4.1 图的名称
puts("\t\t\t 5.退出"); /*退出*/
puts("\t\t********************************************************\n");
printf("选择菜单号(1-5):");
scanf("%d",&n);
if(n<1||n>5)
{w=1;getchar();}
else
w=0;
}while(w==1);
switch(n)
{
case 1:Situation();break;
case 2:Book();break;
case 3:Cancel();break;
case 4:SearchWaiting();break;
case 5:exit(0);break;
}
getch();
}
图 4.1 主函数 N-S 图
2.机位查询
void Situation()
{
int time;
printf("输在 (8-20)范围内的时间:");
scanf("%d",&time);
if(time<8||time>20)
{printf("\t 时间输入错误!\n");
printf("输入在 (8-20)范围内的时间:");
scanf("%d",&time);
}
detail(time); /*函数调用*/
getchar();
Menu();}
图 4.2 机位查询 N-S 图
3.机位预定
void Book()
{int time,i=0,x,y;
FILE *fp;
char c;
printf("在(8-20)时间范围内输入你想要预定的时间:");
scanf("%d",&time);
if(time<8||time>20)
{
printf("\t 时间输入错误!\n");
printf("\t 在(8-20)时间范围内输入你想要预定的时间:");
scanf("%d",&time);
}
detail(time); /*函数调用*/
if(sum[T]>0)
{ if((fp=fopen("waitlist.txt","a"))==NULL)
{
printf("\n 无法打开文件!\n");
exit(0);
}
printf("\n\t 请输入你想要预定的机号,并且留下你的电话号码!:\n");
scanf("%s %s",wait[i].number,wait[i].telephonenumber);
for(i=0;i<1;i++)
fwrite(&wait[i],sizeof(struct waitlist),1,fp);
fclose(fp);/*向文本文档添加一个结构体单元*/
printf("\t 再次输入你想要预定的时间!\n");
scanf("%d",&x);
sum[T]--; /*预定后该时间段空机位数减 1*/
computer[T][x]=1; /*预定后该机状态变为 1*/
printf("\t 预订成功!\n");
getchar();
Menu();
}
else
{
printf("这是在这个时间段内未预定的电脑!\n");
for(i=T+1;i<6;i++)
{ time=9+2*i;
detail(time); /*函数调用*/
if(sum[T]>0)
printf("\tThe latest free time is %d,%d\n",2*i+8,2*i+10);break;
}
printf("\t 你想要预定吗?:y/n?");
scanf("%s",&c);
getchar();
if(c=='Y'||c=='y')
{
if((fp=fopen("waitlist.txt","r"))==NULL)
{
printf("\n 无法打开文件!\n");
exit(0);
}
else
{ printf("waitlist: number telephonenumber\n");
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);
}
fclose(fp);
}
for(i=0;i<10;i++)
{ prione(i);}
printf("\n\t 请输入你想要预定的机号,并且留下你的电话号码!:\n");
if((fp=fopen("waitlist.txt","a"))==NULL)
{
printf("\n 无法打开文件!\n");
exit(0);
}
scanf("%s %s",wait[i].number,wait[i].telephonenumber);