机房预订系统

机房预订系统

  • 一、系统简介
  • 二、系统功能模块图
    • 1. 流程图
    • 2. 函数模块图
  • 三、详细设计
  • 四、运行结果
  • 五、代码
    • 1. 函数代码
    • 2. 全部代码

一、系统简介

20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能:
(1)系统以菜单方式工作
(2)查询,根据输入时间,输出机位信息。
(3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。
(4)退出预定,根据输入的时间,机器号撤销该事件的预定!
(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。

二、系统功能模块图

1. 流程图

机房预订系统_第1张图片
机房预订系统_第2张图片

2. 函数模块图

按照每个功能模块画每个功能下,函数关系图,简要介绍每个功能模块及里面每个函数设计。格式:
1.倒排索引表设计功能模块:功能描述。包含函数:
(1)函数名:Menu 功能 显示菜单
(2)函数名:yuding 功能 预定机位
(3)函数名:panduan 功能 判断等待信息
(4)函数名:chaxun 功能 查询机位信息
(5)函数名:chexiao 功能 撤销预定信息
(6)函数名:dengdai 功能 查询等待信息
(7)函数名:show 功能 显示等待信息

2.文档搜索功能模块。包含函数:
stdio.h
string.h
stdlib.h

三、详细设计

机房预订系统_第3张图片
将8~20分成6个时间段;
X为机位总数20;
T 用来计算com数组的第一个坐标;
total存储机位剩余个数;
com 第一个下标表示时间段,第二个下标表示20个机位的预定状态,其中0表示未预定,1表示已预定
结构体wait中num是存储的机位号码,pho是存储用户的联系电话

四、运行结果

机位查询:
机房预订系统_第4张图片

机位预定:

  1. 直接预定成功:
    机房预订系统_第5张图片
    机房预订系统_第6张图片

  2. 初次预定失败:
    机房预订系统_第7张图片
    机房预订系统_第8张图片

或者
机房预订系统_第9张图片

或者
机房预订系统_第10张图片

以上是我的个人课设,作为参考,并不是特别完美,欢迎批评指正。以下是函数和总代码。

五、代码

1. 函数代码

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();
}

2. 全部代码

#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();
}

你可能感兴趣的:(c语言课设,编程语言)