当前位置:文档之家› 机房机位预约模拟1.

机房机位预约模拟1.

C语言课程设计院系:资源学院姓名:学号:班号:指导教师:日期:机房机位预约模拟一.题目要求20台机器,从早八点到晚八点,每两个小时一个时间段.需要实现的功能:(1)查询,根据输入的时间,输出机位信息.(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段.另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.(3)退出预定,根据输入的时间,撤消该时间的饿预定.(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息.二.需求分析根据题目要求,需要提供机位信息和预约信息,应该用链表来存储,应提供指针的操作:在程序中,需要查询是否有空机位和等待者和处理预约和取消预约问题,应提供查询,显示,预定,删除,修改等操作;另外还要提供键盘式选择菜单实现功能选择.三.总体设计现在分析整个一下整个系统,根据上面的需求分析,可以将这个系统的设计分为如下六大模块:查询我的预约状态,查询空位,预约,取消预约,排队,查询等待信息.四.详细设计1.宏定义【分析】由题可知,结构函数包含学生信息:机位,学号,还有下名学生信息;学生时间(LENGTH)段顺序:人数,第一名学生,排队的学生,最后一名学生。

需要建立能存储多种变量的结构体#include<stdio.h>#include<stdlib.h> 访问动态内存的头文件#include<string.h> 初始化头文件#define LENGTH 6/*总时段数*/#define MAX 2#define S(r) (r-8)/2/*计算在哪个时段数*/#define NULL 0struct xinxi{int jiwei;char xuehao[10];/*学号,假设为联系方式*/struct xinxi *next;};struct xinxi *head;struct cell{int CNum;/*连接在该时段头结点的总机器数目*/struct xinxi *first;/*指向整个队列的开头*/struct xinxi *middle;/*指向等待预约队列*/struct xinxi *last;/*指向整个队列的结尾*/}TimeQueue[LENGTH];2.主函数主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功能模块用菜单方式选择。

【程序】main() /***************主函数**************/{int i;for(i=0;i<LENGTH;i++){/*初始化*/TimeQueue[i].CNum=0;(定义)TimeQueue[i].first=NULL;TimeQueue[i].middle=NULL;TimeQueue[i].last=NULL;}while(1){printf("Please choice your number!:\n");printf("1.Search my booking state 2.Search empty place 3.Book4.Cancel booking5.Waiting6.Search waiting\n");scanf("%d",&i);/*选择功能*/switch(i){case 1:Inquir_booking();break; /*查询我的状态模块*/case 2:inquir_existing();break; /*查询空位模块*/case 3:booking();break; /*预约模块*/case 4:cancel();break; /*取消预约模块*/case 5:waiting();break; /*排队模块*/case 6:inquir_waiting();break; /*查询等待信息模块*/default:printf("error\n");}}}3.各功能模块设计(1)查询我的状态模块[数据结构]我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。

【分析】根据输入的时间来判断应该查询的结构体,把其首地址赋给Rem,然后通过指针的移动,比较输入的学号和存储在该结构体中的Rem->data,来判断我的预约状态。

[流程图]【程序】void Inquir_booking(){int n;int i;char Infor[10];(学号)struct xinxi *q;struct xinxi *Rem;printf("Please input the time you want to search!(24 xiao shi zhi between8 and 20 o’clock,include 8o’clock)\n");scanf("%d",&n);if(n>=8&&n<20){n=S(n);printf("Please input your school-number!\n");scanf("%s",xuehao);Rem=TimeQueue[n].first;q=Rem;for(i=1;;q=Rem,Rem=Rem->next,i++)if(strcmp(Rem->xuehao,Infor)==0)break;if(Rem->jiwei!=0)printf("The computer number you have during this period period is %d\n",Rem->jiwei);else printf("Sorry,you are still in the waiting queue!");}else printf("Error.Please input again.\n")}(2)查询空机位模块[分析]根据输入的时间确定n值,然后根据结构体中TimeQueue中的TimeQueue[n]->Cnum的值,求出最大值与该值的差即为空机位数。

[流程图]【程序】void inquir_existing(){int n;printf("Please input the time you want to search.(24 hours 8~24 o’clock,include 8 ‘clock)\n");scanf("%d",&n);if(n>=8&&n<20){n=S(n);if(TimeQueue[n].CNum<MAX)printf("There are %d emoty computer.\n",MAX-TimeQueue[n].CNum); else printf("Sorry!There is no empty computer!\n");}else printf("Error.Please input again.\n");}(3)预约模块[数据结构]定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。

[分析]在该模块的设计中,要让预约者按预约的顺序储存在结构体中。

当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。

[流程图]void booking()/**/{int n;char Infor[10];struct xinxi *Rem;struct xinxi *p;printf("Please input the time you want to book!\n");scanf("%d",&n);if(n>=8&&n<20){n=S(n);if(TimeQueue[n].CNum<MAX){printf("Please input your No.!\n");scanf("%s",Infor);if(TimeQueue[n].first==NULL){Rem=(struct xinxi *)malloc(sizeof(struct xinxi));(malloc: “动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存”) (sizeof(类型说明符,数组名或表达式);)Rem->jiwei=1;strcpy(Rem->xuehao,Infor);Rem->next=NULL;TimeQueue[n].first=Rem;TimeQueue[n].last=Rem;TimeQueue[n].CNum++;printf("Succeed to book!\n");}else{Rem=(struct xinxi *)malloc(sizeof(struct xinxi));strcpy(Rem->xuehao,Infor);Rem->next=NULL;p=TimeQueue[n].last;Rem->jiwei=TimeQueue[n].CNum+1;printf("%d",Rem->jiwei);TimeQueue[n].last=Rem;p->next=Rem;TimeQueue[n].CNum++;printf("Succeed to book!\n");}}else printf("There is no empty computer!\n");}else printf("Error.Please input again.\n");}(4)排队模块[分析]该模块主要是针对是否要排队和如何排队设计的。

当预约者总数小于最大值时提示不用排队。

当预约者的总数大于最大值时就需要排队。

把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到TimeQueue[n]的表尾。

用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。

相关主题