c语言程序设计-机房机位预约模拟
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
(3)预约模块
[数据结构]
定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。
[分析]
在该模块的设计中,要让预约者按预约的顺序储存在结构体中。当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。
struct node *first;/*指向整个队列的开头*/
struct node *middle;/*指向等待预约队列*/
struct node *last;/*指向整个队列的结尾*/
}TimeQueue[LENGTH];
2..主函数
主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功
printf("Succeed to in the queue。\n");
}
else{
Rem=(struct node *)malloc(sizeof(struct node));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
#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;/*连接在该时段头结点的总机器数目*/
scanf("%d",&i);
/*选择功能*/
switch(i)
{
case 1:Inquir();break;/*查询我的状态模块*/
case 2:inquir();break;/*查询空位模块*/
case 3:booking();break;/*预约模块*/
case 4:cancel();break;/*取消预约模块*/
n=S(nΒιβλιοθήκη Baidu;
if(TimeQueue[n].CNum<MAX)
printf("There are%demoty computer.\n",MAX-TimeQueue[n].CNum);
else printf("Sorry!There is no empty computer!\n");
}
else printf("Error.Please input again.\n");
n=S(n);
if(TimeQueue[n].CNum<MAX){
printf("Please input your No.!\n");
scanf("%s",Infor);
if(TimeQueue[n].first==NULL){
Rem=(struct node *)malloc(sizeof(struct node));
case 5:waiting();break;/*排队模块*/
case 6:inquir_waiting();break;/*查询等待信息模块*/
default:printf("error\n");
}
}
}
3.各功能模块设计
(1)查询我的状态模块
[数据结构]
我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。
}
else printf("Error.Please input again.\n");
}
(5)取消预约模块
[分析]
要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。而指向等待队列首地址的指针就指向原来排队的第二人。第二种情况就是取消预约的人本来就在等待队列中,只需要直接删除该结点即可。
[流程图]
Y
Y
【程序】
void cancel()
{
int n;
int i;/*记载删除点的队列位置*/
char Infor[10];
struct node *Rem;
struct node *q;
struct node *p;
printf("Please input the time you have booked.\n);
能模块用菜单方式选择。
【程序】
main()/***************主函数**************/
{
int i;
for(i=0;i<LENGTH;i++){/*初始化*/
TimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
printf("Please input the time you want to search!(24xiao shi zhi between8and20o’clock,include8o’clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
printf("Please input your school-number!\n");
Rem->locat=1;
strcpy(Rem->data,Infor);
Rem->next=NULL;
TimeQueue[n].first=Rem;
TimeQueue[n].last=Rem;
TimeQueue[n].CNum++;
printf("Succeed to book!\n");
}
else{
(3)退出预定,根据输入的时间,撤消该时间的饿预定.
(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息.
二.需求分析
根据题目要求,需要提供机位信息和预约信息,应该用链表来存储,应提供指针的操作:在程序中,需要查询是否有空机位和等待者和处理预约和取消预约问题,应提供查询,显示,预定,删除,修改等操作;另外还要提供键盘式选择菜单实现功能选择.
scanf("%s",Infor);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
if(strcmp(Rem->data,Infor)==0)break;
if(Rem->locat!=0)
printf("The computer number you have during thisperiodperiodis%d\n",Rem->locat);
else printf("Sorry,you are still in the waiting queue!");
}
else printf("Error.Please input again.\n")
}
(2)查询空机位模块
[分析]
根据输入的时间确定n值,然后根据结构体中TimeQueue中的TimeQueue[n]->Cnum的值,求出最大值与该值的差即为空机位数。
【分析】
根据输入的时间来判断应该查询的结构体,把其首地址赋给Rem,然后通过指针的移动,比较输入的学号和存储在该结构体中的Rem->data,来判断我的预约状态。
[流程图]
【程序】
void Inquir()
{
int n;
int i;
char Infor[10];
struct node *q;
struct node *Rem;
TimeQueue[i].last=NULL;
}
while(1){
printf("Please choice your number!:\n");
printf("1.Searchmy booking state2.Search empty place3.Book4.Cancel booking5.Waiting6.Search waiting\n");
[流程图]
【程序】
void inquir()
{
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){
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].middle=Rem;
TimeQueue[n].CNum++;
三.总体设计
现在分析整个一下整个系统,根据上面的需求分析,可以将这个系统的设计分为如下六大模块:查询我的预约状态,查询空位,预约,取消预约,排队,查询等待信息.
四.详细设计及实现
1.宏定义
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENGTH 6/*总时段数*/
C语言课程设计
机房机位预约模拟
一.题目要求
20台机器,从早八点到晚八点,每两个小时一个时间段.
需要实现的功能:
(1)查询,根据输入的时间,输出机位信息.
(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段.另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.
Rem=(struct node *)malloc(sizeof(struct node));
strcpy(Rem->data,Infor);
Rem->next=NULL;
p=TimeQueue[n].last;
Rem->locat=TimeQueue[n].CNum+1;
printf("%d",Rem->locat);
[流程图]
【程序】
void booking()/**/
{
int n;
char Infor[10];
struct node *Rem;
struct node *p;
printf("Please input the time you want to book!\n");
scanf("%d",&n);
if(n>=8&&n<20){
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("Succeed to in the queue。\n");
}
}
else printf("There is still have empty computer。No wait!");
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");
[流程图]
【程序】
void waiting()/**/
{
int n;
char Infor[10];
struct node *Rem;
struct node *p;
printf("Please input the time you want to wait!\n");
scanf("%d",&n);
if(n>=8&&n<20){
scanf("%d",&n);
if(n>=8&&n<20){
printf("Please input your No.!\n");
scanf("%s",Infor);
n=S(n);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
}
(4)排队模块
[分析]该模块主要是针对是否要排队和如何排队设计的。当预约者总数小于最大值时提示不用排队。当预约者的总数大于最大值时就需要排队。把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到TimeQueue[n]的表尾。用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。
n=S(n);
if(TimeQueue[n].CNum>=MAX){
printf("Please input your No!\n");
scanf("%s",Infor);
if((TimeQueue[n].CNum)==MAX){
Rem=(struct node *)malloc(sizeof(struct node));
(3)预约模块
[数据结构]
定义两个指向结构体的指针,用强制类型转换使他们指向动态分配的存储空间的首地址,把预约者的信息储存在其中一个结构体中。
[分析]
在该模块的设计中,要让预约者按预约的顺序储存在结构体中。当预约者的总数小于最大值时,就要用到通过指针的移动来把预约者的信息按顺序储存起来,用两个不同的指针分别指向链表的开始,链表的结尾处。
struct node *first;/*指向整个队列的开头*/
struct node *middle;/*指向等待预约队列*/
struct node *last;/*指向整个队列的结尾*/
}TimeQueue[LENGTH];
2..主函数
主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用.其中个功
printf("Succeed to in the queue。\n");
}
else{
Rem=(struct node *)malloc(sizeof(struct node));
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
#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;/*连接在该时段头结点的总机器数目*/
scanf("%d",&i);
/*选择功能*/
switch(i)
{
case 1:Inquir();break;/*查询我的状态模块*/
case 2:inquir();break;/*查询空位模块*/
case 3:booking();break;/*预约模块*/
case 4:cancel();break;/*取消预约模块*/
n=S(nΒιβλιοθήκη Baidu;
if(TimeQueue[n].CNum<MAX)
printf("There are%demoty computer.\n",MAX-TimeQueue[n].CNum);
else printf("Sorry!There is no empty computer!\n");
}
else printf("Error.Please input again.\n");
n=S(n);
if(TimeQueue[n].CNum<MAX){
printf("Please input your No.!\n");
scanf("%s",Infor);
if(TimeQueue[n].first==NULL){
Rem=(struct node *)malloc(sizeof(struct node));
case 5:waiting();break;/*排队模块*/
case 6:inquir_waiting();break;/*查询等待信息模块*/
default:printf("error\n");
}
}
}
3.各功能模块设计
(1)查询我的状态模块
[数据结构]
我的原始数据是预约者预约的信息,将它储存在用指针处理的链表中。
}
else printf("Error.Please input again.\n");
}
(5)取消预约模块
[分析]
要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。而指向等待队列首地址的指针就指向原来排队的第二人。第二种情况就是取消预约的人本来就在等待队列中,只需要直接删除该结点即可。
[流程图]
Y
Y
【程序】
void cancel()
{
int n;
int i;/*记载删除点的队列位置*/
char Infor[10];
struct node *Rem;
struct node *q;
struct node *p;
printf("Please input the time you have booked.\n);
能模块用菜单方式选择。
【程序】
main()/***************主函数**************/
{
int i;
for(i=0;i<LENGTH;i++){/*初始化*/
TimeQueue[i].CNum=0;
TimeQueue[i].first=NULL;
TimeQueue[i].middle=NULL;
printf("Please input the time you want to search!(24xiao shi zhi between8and20o’clock,include8o’clock)\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=S(n);
printf("Please input your school-number!\n");
Rem->locat=1;
strcpy(Rem->data,Infor);
Rem->next=NULL;
TimeQueue[n].first=Rem;
TimeQueue[n].last=Rem;
TimeQueue[n].CNum++;
printf("Succeed to book!\n");
}
else{
(3)退出预定,根据输入的时间,撤消该时间的饿预定.
(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息.
二.需求分析
根据题目要求,需要提供机位信息和预约信息,应该用链表来存储,应提供指针的操作:在程序中,需要查询是否有空机位和等待者和处理预约和取消预约问题,应提供查询,显示,预定,删除,修改等操作;另外还要提供键盘式选择菜单实现功能选择.
scanf("%s",Infor);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
if(strcmp(Rem->data,Infor)==0)break;
if(Rem->locat!=0)
printf("The computer number you have during thisperiodperiodis%d\n",Rem->locat);
else printf("Sorry,you are still in the waiting queue!");
}
else printf("Error.Please input again.\n")
}
(2)查询空机位模块
[分析]
根据输入的时间确定n值,然后根据结构体中TimeQueue中的TimeQueue[n]->Cnum的值,求出最大值与该值的差即为空机位数。
【分析】
根据输入的时间来判断应该查询的结构体,把其首地址赋给Rem,然后通过指针的移动,比较输入的学号和存储在该结构体中的Rem->data,来判断我的预约状态。
[流程图]
【程序】
void Inquir()
{
int n;
int i;
char Infor[10];
struct node *q;
struct node *Rem;
TimeQueue[i].last=NULL;
}
while(1){
printf("Please choice your number!:\n");
printf("1.Searchmy booking state2.Search empty place3.Book4.Cancel booking5.Waiting6.Search waiting\n");
[流程图]
【程序】
void inquir()
{
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){
strcpy(Rem->data,Infor);
Rem->next=NULL;
Rem->locat=0;
p=TimeQueue[n].last;
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].middle=Rem;
TimeQueue[n].CNum++;
三.总体设计
现在分析整个一下整个系统,根据上面的需求分析,可以将这个系统的设计分为如下六大模块:查询我的预约状态,查询空位,预约,取消预约,排队,查询等待信息.
四.详细设计及实现
1.宏定义
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENGTH 6/*总时段数*/
C语言课程设计
机房机位预约模拟
一.题目要求
20台机器,从早八点到晚八点,每两个小时一个时间段.
需要实现的功能:
(1)查询,根据输入的时间,输出机位信息.
(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段.另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表.
Rem=(struct node *)malloc(sizeof(struct node));
strcpy(Rem->data,Infor);
Rem->next=NULL;
p=TimeQueue[n].last;
Rem->locat=TimeQueue[n].CNum+1;
printf("%d",Rem->locat);
[流程图]
【程序】
void booking()/**/
{
int n;
char Infor[10];
struct node *Rem;
struct node *p;
printf("Please input the time you want to book!\n");
scanf("%d",&n);
if(n>=8&&n<20){
TimeQueue[n].last=Rem;
p->next=Rem;
TimeQueue[n].CNum++;
printf("Succeed to in the queue。\n");
}
}
else printf("There is still have empty computer。No wait!");
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");
[流程图]
【程序】
void waiting()/**/
{
int n;
char Infor[10];
struct node *Rem;
struct node *p;
printf("Please input the time you want to wait!\n");
scanf("%d",&n);
if(n>=8&&n<20){
scanf("%d",&n);
if(n>=8&&n<20){
printf("Please input your No.!\n");
scanf("%s",Infor);
n=S(n);
Rem=TimeQueue[n].first;
q=Rem;
for(i=1;;q=Rem,Rem=Rem->next,i++)
}
(4)排队模块
[分析]该模块主要是针对是否要排队和如何排队设计的。当预约者总数小于最大值时提示不用排队。当预约者的总数大于最大值时就需要排队。把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到TimeQueue[n]的表尾。用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。
n=S(n);
if(TimeQueue[n].CNum>=MAX){
printf("Please input your No!\n");
scanf("%s",Infor);
if((TimeQueue[n].CNum)==MAX){
Rem=(struct node *)malloc(sizeof(struct node));