c语言程序设计-机房机位预约模拟.doc
C语言课程设计
院系:工程学院
姓名:??恺
学号:2009100????
班号:05209???
指导教师:梁老师
日期:2011年8月
机房机位预约模拟
一.题目要求
20台机器,从早八点到晚八点,每两个小时一个时间段.
需要实现的功能:
查询,根据输入的时间,输出机位信息.
机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段.另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.
退出预定,根据输入的时间,撤消该时间的饿预定.
查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息.
二.需求分析
根据题目要求,需要提供机位信息和预约信息,应该用链表来存储,应提供指针的操作:在程序中,需要查询是否有空机位和等待者和处理预约和取消预约问题,应提供查询,显示,预定,删除,修改等操作;另外还要提供键盘式选择菜单实现功能选择.
三.总体设计
现在分析整个一下整个系统,根据上面的需求分析,可以将这个系统的设计分为如下六大模块:查询我的预约状态,查询空位,预约,取消预约,排队,查询等待信息.
四.详细设计及实现
1.宏定义
#include
#include
#include
#define LENGTH 6/*总时段数*/
#define MAX 2
#define S(r) (r-8)/2/*计算在哪个时段数*/
struct node{
int locat;
char data[10];/*学号,假设为联系方式*/
struct node *next;
};
struct node *head;
struct cell{
int CNum;/*连接在该时段头结点的总机器数目*/
struct node *first;/*指向整个队列的开头*/
struct node *middle;/*指向等待预约队列*/
struct node *last;/*指向整个队列的结尾*/
}TimeQueue[LENGTH];
【程序】
main() /***************主函数**************/
{
int i;
for(i=0;i
TimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
TimeQueue[i].last=NULL;
}
while(1){
printf(":\n");
printf("1.Search my booking state 2.Search empty place 3.Book 4.Cancel booking 5.Waiting 6.Search waiting\n");
scanf("%d",&i);
/*选择功能*/
switch(i)
{
case 1:Inquir();break; /*查询我的状态模块*/
case 2:inquir();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()
{
int n;
int i;
char Infor[10];
struct node *q;
struct node *Rem;
printf("Please input the time you want to search!(24