20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能:
(1)系统以菜单方式工作
(2)查询,根据输入时间,输出机位信息。
(3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。
(4)退出预定,根据输入的时间,机器号撤销该事件的预定!
(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。
按照每个功能模块画每个功能下,函数关系图,简要介绍每个功能模块及里面每个函数设计。格式:
1.倒排索引表设计功能模块:功能描述。包含函数:
(1)函数名:Menu 功能 显示菜单
(2)函数名:yuding 功能 预定机位
(3)函数名:panduan 功能 判断等待信息
(4)函数名:chaxun 功能 查询机位信息
(5)函数名:chexiao 功能 撤销预定信息
(6)函数名:dengdai 功能 查询等待信息
(7)函数名:show 功能 显示等待信息
2.文档搜索功能模块。包含函数:
stdio.h
string.h
stdlib.h
将8~20分成6个时间段;
X为机位总数20;
T 用来计算com数组的第一个坐标;
total存储机位剩余个数;
com 第一个下标表示时间段,第二个下标表示20个机位的预定状态,其中0表示未预定,1表示已预定
结构体wait中num是存储的机位号码,pho是存储用户的联系电话
机位预定:
以上是我的个人课设,作为参考,并不是特别完美,欢迎批评指正。以下是函数和总代码。
1.判断等待信息
void panduan(int time)
{
int i,j=0,x,y=0;
int ch[30];
for(i=0;i<20;i++)
{
if(com[T][i]==0)
{
y++;
ch[j++]=i;
}
}
total[T]=y;
printf("在%d时~%d时内闲置机位有%d个\n",time/2*2,time/2*2+2,total[T]);
for(x=0;x<j;x++)
{
printf("闲置的电脑为:%d\n",ch[x]+1);
}
}
2.显示等待信息
void show(int i)
{
printf(" %s %s \n",wait[i].num,wait[i].pho);
}
3.菜单
void Menu()
{
printf("************菜单************\n");
printf("********机房预定系统********\n");
printf("1.预定空机位\n");
printf("2.查询机位状态\n");
printf("3.撤销预定\n");
printf("4.查询等待状态\n");
printf("请输入1、2、3、4查询\n");
printf("输入0退出程序。\n");
printf("****************************\n");
int num;
scanf("%d",&num);
while(num!=1&&num!=2&&num!=3&&num!=4&&num!=0)
{
printf("请输入规定数字:如0、1、2、3、4\n");
printf("输入0退出程序。\n");
scanf("%d",&num);
}
switch(num)
{
case 0:
printf("已退出\n");
break;
case 1:
yuding();
//printf("%d",num);
break;
case 2:
chaxun();
//printf("%d",num);
break;
case 3:
chexiao();
//printf("%d",num);
break;
case 4:
dengdai();
//printf("%d",num);
break;
}
}
4.预定机位
void yuding()
{
FILE *fp=NULL;
int time,x;
int count=0,flag;
char c;
int i=0;
char ch[3];
printf("请输入预定的时间段,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入预定的时间段,范围8~19:\n");
scanf("%d",&time);
}
panduan(time);
if(total[T]>0)
{
fp=fopen("机位.txt","a");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("再次确认输入预定时间:\n");
scanf("%d",&x);
if(time!=x)
{
for(int j=3;j>0;j--)
{
if(time!=x)
{
printf("两次输入的时间不一样哦,重新再输入吧:(剩余%d次机会)\n",j);
printf("第一次输入的是%d\n如果错误输入0可重新预定\n",time);
scanf("%d",&x);
}
if(x==0)
{
yuding();
break;
}
else if(time==x)
{
break;
}
}
}
printf("输入要预定的机位,如1表示预定1号机位\n");
scanf("%s",wait[i].num);
//printf("%s",wait[i].num);
printf("留个联系方式呗(手机号码)\n");
scanf("%s",wait[i].pho);
fwrite(&wait[i],sizeof(struct wait),1,fp);
printf("请再输入一次预定的机位:");
scanf("%d",&x);
fclose(fp);
total[T]--;
//printf("%d\n",com[T][x-1]);
com[T][x-1]=1;
//printf("%d\n",com[T][x-1]);
printf("预定成功!!\n");
printf("您预定的是%d~%d两个小时的%s号机位\n",time/2*2,time/2*2+2,wait[i].num);
//printf("\n");
}
} //预定成功
else
{
printf("很抱歉这个时间段没有剩余机位了\n");
for(i=T+1;i<6;i++)
{
printf("这是该机房未预定电脑\n");
time=9+2*i;
panduan(time);
//printf("%d\n",T);
if(total[T]>0)
{
count=1; //判断附近是否存在机位
printf("最近有空机位的时间是 %d~%d两个小时\n",2*i+8,2*i+10);
//break;
printf("是否预定该时间段的机位(y/n)?\n");
getchar();
scanf("%c",&c);
//printf("%c",c);
if(c=='y'||c=='Y')
{
//panduan(2*i+8);
//printf("helloworld\n");
fp=fopen("机位.txt","r");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("稍等一会\n");
printf("等待的情况:机位 手机号码\n");
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&wait[i].num,&wait[i].pho);
}
fclose(fp);
}
for(int y=0;y<10;y++)
show(y);
fp=fopen("机位.txt","a");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("输入要预定的机位,如1表示预定1号机位\n");
scanf("%s",wait[i].num);
//printf("%s",wait[i].num);
printf("留个联系方式呗(手机号码)\n");
scanf("%s",wait[i].pho);
fwrite(&wait[i],sizeof(struct wait),1,fp);
printf("请再输入一次预定的机位:");
scanf("%d",&x);
fclose(fp);
total[T]--;
//printf("%d\n",com[T][x-1]);
com[T][x-1]=1;
//printf("%d\n",com[T][x-1]);
printf("预定成功!!\n");
printf("您预定的是%d~%d两个小时的%s号机位\n",time/2*2,time/2*2+2,wait[i].num);
Menu();
}
}
else
{
printf("感谢使用机房预定系统!下面是菜单\n");
}
break;
}
}
if(count==0)
printf("很抱歉这个机房的机位被全部预定了,输入0返回菜单,输入1查询等待信息\n");
scanf("%d",&flag);
if(flag)
dengdai();
else
Menu();
}
Menu();
}
5.查询机位信息
void chaxun()
{
FILE *fp=NULL;
int time;
int num;
printf("请输入查询的时间段,范围8~20:\n");
scanf("%d",&time);
while(time<8||time>20)
{
printf("时间输入错误!!\n请输入查询的时间段,范围8~20:\n");
scanf("%d",&time);
}
fp=fopen("机位.txt","r");
if(fp==NULL)
printf("程序异常。\n");
else
{
panduan(time);
}
Menu();
}
6.撤销预定信息
注:该撤销只实现了在程序空间中撤销,并没有实现对文件进行修改,各位可以完善哦。
void chexiao()
{
int time,number;
printf("请输入撤销的时间段,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入撤销的时间段,范围8~19:\n");
scanf("%d",&time);
}
printf("输入已预定的机位:\n");
scanf("%d",&number);
panduan(time);
total[T]++;
com[T][number-1]=0;
printf("取消成功\n");
getchar();
Menu();
}
7.查询等待信息
void dengdai()
{
int time,number;
FILE *fp;
printf("输入您要搜索的时间,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入搜索的时间,范围8~19:\n");
scanf("%d",&time);
}
fp=fopen("机位.txt","r");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("等待的情况:机位 手机号码\n");
for(int i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&wait[i].num,&wait[i].pho);
}
fclose(fp);
}
for(int y=0;y<10;y++)
show(y);
Menu();
}
#include
#include
#include
#define X 20
#define T (time-8)/2
int total[6]={0};
int com[6][20]={{0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1},
{1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
void Menu(); //菜单
void yuding(); //预定
void panduan(int time); //判断等待信息
void chaxun(); //查询机位信息
void chexiao(); //撤销预定信息
void dengdai(); //查询等待信息
void show(int i); //显示等待信息
struct wait
{
char num[3];
char pho[11];
}wait[X];
int main() //主函数
{
Menu();
}
void panduan(int time)
{
int i,j=0,x,y=0;
int ch[30];
for(i=0;i<20;i++)
{
if(com[T][i]==0)
{
y++;
ch[j++]=i;
}
}
total[T]=y;
printf("在%d时~%d时内闲置机位有%d个\n",time/2*2,time/2*2+2,total[T]);
for(x=0;x<j;x++)
{
printf("闲置的电脑为:%d\n",ch[x]+1);
}
}
void show(int i)
{
printf(" %s %s \n",wait[i].num,wait[i].pho);
}
void Menu()
{
printf("************菜单************\n");
printf("********机房预定系统********\n");
printf("1.预定空机位\n");
printf("2.查询机位状态\n");
printf("3.撤销预定\n");
printf("4.查询等待状态\n");
printf("请输入1、2、3、4查询\n");
printf("输入0退出程序。\n");
printf("****************************\n");
int num;
scanf("%d",&num);
while(num!=1&&num!=2&&num!=3&&num!=4&&num!=0)
{
printf("请输入规定数字:如0、1、2、3、4\n");
printf("输入0退出程序。\n");
scanf("%d",&num);
}
switch(num)
{
case 0:
printf("已退出\n");
break;
case 1:
yuding();
//printf("%d",num);
break;
case 2:
chaxun();
//printf("%d",num);
break;
case 3:
chexiao();
//printf("%d",num);
break;
case 4:
dengdai();
//printf("%d",num);
break;
}
}
void yuding()
{
FILE *fp=NULL;
int time,x;
int count=0,flag;
char c;
int i=0;
char ch[3];
printf("请输入预定的时间段,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入预定的时间段,范围8~19:\n");
scanf("%d",&time);
}
panduan(time);
if(total[T]>0)
{
fp=fopen("机位.txt","a");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("再次确认输入预定时间:\n");
scanf("%d",&x);
if(time!=x)
{
for(int j=3;j>0;j--)
{
if(time!=x)
{
printf("两次输入的时间不一样哦,重新再输入吧:(剩余%d次机会)\n",j);
printf("第一次输入的是%d\n如果错误输入0可重新预定\n",time);
scanf("%d",&x);
}
if(x==0)
{
yuding();
break;
}
else if(time==x)
{
break;
}
}
}
printf("输入要预定的机位,如1表示预定1号机位\n");
scanf("%s",wait[i].num);
//printf("%s",wait[i].num);
printf("留个联系方式呗(手机号码)\n");
scanf("%s",wait[i].pho);
fwrite(&wait[i],sizeof(struct wait),1,fp);
printf("请再输入一次预定的机位:");
scanf("%d",&x);
fclose(fp);
total[T]--;
//printf("%d\n",com[T][x-1]);
com[T][x-1]=1;
//printf("%d\n",com[T][x-1]);
printf("预定成功!!\n");
printf("您预定的是%d~%d两个小时的%s号机位\n",time/2*2,time/2*2+2,wait[i].num);
//printf("\n");
}
} //预定成功
else
{
printf("很抱歉这个时间段没有剩余机位了\n");
for(i=T+1;i<6;i++)
{
printf("这是该机房未预定电脑\n");
time=9+2*i;
panduan(time);
//printf("%d\n",T);
if(total[T]>0)
{
count=1; //判断附近是否存在机位
printf("最近有空机位的时间是 %d~%d两个小时\n",2*i+8,2*i+10);
//break;
printf("是否预定该时间段的机位(y/n)?\n");
getchar();
scanf("%c",&c);
//printf("%c",c);
if(c=='y'||c=='Y')
{
//panduan(2*i+8);
//printf("helloworld\n");
fp=fopen("机位.txt","r");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("稍等一会\n");
printf("等待的情况:机位 手机号码\n");
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&wait[i].num,&wait[i].pho);
}
fclose(fp);
}
for(int y=0;y<10;y++)
show(y);
fp=fopen("机位.txt","a");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("输入要预定的机位,如1表示预定1号机位\n");
scanf("%s",wait[i].num);
//printf("%s",wait[i].num);
printf("留个联系方式呗(手机号码)\n");
scanf("%s",wait[i].pho);
fwrite(&wait[i],sizeof(struct wait),1,fp);
printf("请再输入一次预定的机位:");
scanf("%d",&x);
fclose(fp);
total[T]--;
//printf("%d\n",com[T][x-1]);
com[T][x-1]=1;
//printf("%d\n",com[T][x-1]);
printf("预定成功!!\n");
printf("您预定的是%d~%d两个小时的%s号机位\n",time/2*2,time/2*2+2,wait[i].num);
Menu();
}
}
else
{
printf("感谢使用机房预定系统!下面是菜单\n");
}
break;
}
}
if(count==0)
printf("很抱歉这个机房的机位被全部预定了,输入0返回菜单,输入1查询等待信息\n");
scanf("%d",&flag);
if(flag)
dengdai();
else
Menu();
}
Menu();
}
void chaxun()
{
FILE *fp=NULL;
int time;
int num;
printf("请输入查询的时间段,范围8~20:\n");
scanf("%d",&time);
while(time<8||time>20)
{
printf("时间输入错误!!\n请输入查询的时间段,范围8~20:\n");
scanf("%d",&time);
}
fp=fopen("机位.txt","r");
if(fp==NULL)
printf("程序异常。\n");
else
{
panduan(time);
}
Menu();
}
void chexiao()
{
int time,number;
printf("请输入撤销的时间段,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入撤销的时间段,范围8~19:\n");
scanf("%d",&time);
}
printf("输入已预定的机位:\n");
scanf("%d",&number);
panduan(time);
total[T]++;
com[T][number-1]=0;
printf("取消成功\n");
getchar();
Menu();
}
void dengdai()
{
int time,number;
FILE *fp;
printf("输入您要搜索的时间,范围8~19:\n");
scanf("%d",&time);
while(time<8||time>19)
{
printf("时间输入错误!!\n请输入搜索的时间,范围8~19:\n");
scanf("%d",&time);
}
fp=fopen("机位.txt","r");
if(fp==NULL)
{
printf("程序异常。\n");
exit(0);
}
else
{
printf("等待的情况:机位 手机号码\n");
for(int i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&wait[i].num,&wait[i].pho);
}
fclose(fp);
}
for(int y=0;y<10;y++)
show(y);
Menu();
}