You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jifangjiweiyuding/机房机位预订系统003.cpp

254 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define C 20 //电脑台数
#define T (time-8)/2 //预定的时间段分成按数组形式的六段
void JIEMIAN();
void XINXI();
void YUDING();
void QUXIAO();
void CHAXUN();
void slove(int time);
void dengdai(int i);
int x[6]={0};
int jiwei[6][20]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{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,0,0,0,1,1,1,1,1,0},
{1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0},
{1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1},
{1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0}};//假设0为空机位1为有机位此数组为假设某人某次查询系统时的机位数的情况。
struct wait{
char number[3];
char haoma[20];
}w[C];//等待的结构体
int main(void)
{
JIEMIAN();
return 0;
}
void JIEMIAN()
{
int n,a;
do
{
printf("\t\t—————————————机房机位预约系统—————————————\n");
puts("\t\t —————————————菜单—————————————");
puts("\t\t\t 1.查询某时间段机位信息.");
puts("\t\t\t 2.预订一个空机位.");
puts("\t\t\t 3.查询等待的信息.");
puts("\t\t\t 4.取消预订.");
puts("\t\t\t 5.退出系统.");
puts("\t\t—————————————————————————————————\n");
printf("\t*请输入菜单内的1-5号选项进行服务:\n");
scanf("%d",&n);
if(n<1||n>5)
{
a=1;
printf("输入错误,请重新选择.\n");
getchar();
}
else
a=0;
}while(a==1);
switch(n)
{
case 1:XINXI();break;
case 2:YUDING();break;
case 3:CHAXUN();break;
case 4:QUXIAO();break;
case 5:exit(0);break;
}
}
void XINXI()
{
int time;
printf("请输入8-20点的时间段:");
scanf("%d",&time);
if(time<8||time>=20)
{
printf(" 输入错误!\n");
printf(" 请重新输入正确的时间!");
XINXI();
}
if(time>=8&&time<20)
{
slove (time);
JIEMIAN();
}
}
void YUDING()
{
int time,i,a,b,j;
char c;
FILE *fp; //用文件存数据。
printf("请输入8-20点时间段内你想预订的时间:");
scanf("%d",&time);
if(time<8||time>=20)
{
printf(" 时间输入错误!\n");
printf(" 请重新输入正确的时间!\n");
printf("请输入8-20点时间段内你想预订的时间:");
scanf("%d",&time);
}
slove(time);
i=0;
if(x[T]>0)
{
if((fp=fopen("学生信息.txt","a"))==NULL)
{
printf("-无法打开文件!-\n");
exit(0);
}
printf(" 请输入你的想要预订的机位号和电话(输入机位号和电话之间请使用空格)");
scanf("%s %s",w[i].number,w[i].haoma);
for(i=0;i<1;i++)
fwrite(&w[i],sizeof(struct wait),1,fp);
fclose(fp); //把一个结构体单元加入文件中
printf("\t\t ——请再次输入你想要预订的机位!(两次时间请相同,不然可能导致预订失败!)——\n");
scanf("%d",&a);
getchar();
x[T]--;
jiwei[T][a-1]=1;
printf(" ——预订成功!——\n");
JIEMIAN();
}
else
{
printf("\n\t ——这是最近的时间段没有被预订的电脑!——\n");
for(i=T+1;i<6;i++)
{
time=9+2*i;
slove(time);
if(x[T]>0)
printf("\t 最近的空闲的时间是:%d\n",2*i+8);
break;
}
printf("\t 你想要预订吗?(请输入y/n表示是否预订)\n");
scanf("%s",&c);
getchar();
if(c=='Y'||c=='y')
{
if((fp=fopen("学生信息.txt","r"))==NULL)
{
printf("-无法打开文件!-\n");
exit(0);
}
else
{
printf("以下是等待列表:机位号码 电话号码\n");
for(j=0;!feof(fp);j++)
{
fscanf(fp,"%s %s",&w[j].number,&w[j].haoma);
}
fclose;
}
for(j=0;j<10;j++)
{
dengdai(j);
}
printf("\n\t\t ——请输入你想预订的机位号和你的联系方式。——\n");
if((fp=fopen("学生信息.txt","a"))==NULL)
{
printf("-无法打开文件!-\n");
exit(0);
}
scanf("%s %s",w[j].number,w[j].haoma);
for(j=0;j<1;j++)
fwrite(&w[j],sizeof(struct wait),1,fp);
fclose(fp);
printf("请再次输入你想要预订的机位号!\n");
scanf("%d",&b);
x[T]--;//电脑数减一
jiwei[T][b]=1;
printf("\t 恭喜你预订成功,你将进入等待列表,请等待我们联系你。\n");
JIEMIAN();
}
else JIEMIAN();
}
}
void QUXIAO()
{
int time,n;
printf("请输入你在8-20点时间内已经预订过的时间\n");
scanf("%d",&time);
if(time<8||time>=20)
{
printf(" 时间输入错误!\n");
printf(" 请重新输入正确的时间!");
scanf("%d",&time);
}
if(time>=8&&time<20)
{
printf("\t 请输入你预定的机号:\n");
scanf("%d",&n);
}
x[T]++;
jiwei[T][n-1]=0;
slove(time);
printf("\t 取消成功!\n");
JIEMIAN();
}
void CHAXUN()
{
int time,i;
FILE *fp;
printf(" ————请输入你要查找的时间(8-20点)\n");
scanf("%d",&time);
if(time<8||time>=20)
{
printf(" 时间输入错误!\n");
printf(" 请重新输入正确的时间!");
scanf("%d",&time);
}
if(time>=8&&time<20)
{
if((fp=fopen("学生信息.txt","r"))==NULL)
{
printf("-无法打开文件!-\n");
exit(0);
}
else
{
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s",&w[i].number,&w[i].haoma);
}
fclose;
}
for(i=0;i<10;i++)
{
dengdai(i);
}
JIEMIAN();
}
}
void dengdai(int i)
{
printf("\t\t %s %s \n",w[i].number,w[i].haoma);
}
void slove(int time) //查找六个时间段中每个时间段的空机总数和位数
{
int i,j=0,k,l=0;
int a[50];
for(i=0;i<20;i++)
{
if(jiwei[T][i]==0)
{
l++;
a[j++]=i;
}
}
x[T]=l;
printf("\t 目前正处于空置的电脑台数为:%d\n",x[T]);
for(k=0;k<j;k++)
{
printf("\t 空置的电脑是:%d 号\n",a[k]+1);
}
}