1、程序设计报告设计者:肖昊班级序号:055071-27学号:20071003651指导老师:刘文中C 语言程序设计编 程 实 践 是 学 习 C 语 言 程 序 设 计 的 一 重 要 环 节 , 为 提 高 学 生 程 序 设 计 能 力 , 通过 课 堂 和 上 机 实 践 练 习 使 学 生 的 程 序 设 计 能 力 上 一 台 阶 。 通 过 前 四 单 元 温 顾 而 知 新 、庖 丁 解 牛 、 举 一 反 三 、 熟 能 生 巧 等 过 程 的 练 习 设 计 下 面 一 个 完 整 的 程 序1.题目要求设计“机房机位预约模拟系统”要求:20 台机器,从早 8 点到晚 8 点,
2、每两个小时一个时间段。 需要实现功能: 1,查询,根据输入时间,输出机位信息。 2,即为预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近空机时间段。另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表. 3,退出预定,根据输入的时间,撤销该时间的预定。 4,查询是否有等待的信息,若有则按顺序显示联系方式,若无则显示提示信息。2 需求分析根 据 题 目 要 求 在 程 序 中 需 实 现 查 询 , 预 定 , 排 队 等 功 能 的 操 作 , 所 以需 要 建 立 相 应 的 模 块 来 实 现 ; 另 外 还 需 提 供 键 盘 式 选 择 菜 单 实
3、现 功 能 ,在 运 行 时 达 到 所 要 目 的 。3 总体设计整个系统可分为 3 个模块 查询模块 预定模块 取消模块机房机位预约模拟系统查询模块 预定模块 取消模块详细设计 主函数比较简洁,只提供输入、功能处理和输出部分的函数调用。显示一系列功能选择输入 n,判断 m 是否是 0 到 6?根据 n 值调用各功能模块函数结束N开始main() int i; for(i=0;i=8Rem=Rem-next) if(strcmp(Rem-data,Infor)=0)break; if(Rem-locat!=0) printf(“The computer number is %dn“,Rem-
4、locat); else printf(“对不起.你依旧在等待列表中或者没有预定 “); else printf(“错误,请再次输入 .n“); void inquir() int n; printf(“输入想要查询的时间(24 hours 820oclock,include 8 oclock)n“); scanf(“%d“, if(n=8 strcpy(Rem-data,Infor); Rem-next=NULL; TimeQueuen.first=Rem; TimeQueuen.last=Rem; TimeQueuen.CNum+; printf(“成功预定n“); else Rem=(s
5、truct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; p=TimeQueuen.last; Rem-locat=TimeQueuen.CNum+1; printf(“%d“,Rem-locat); TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(“成功预定n“); else printf(“没有空余机位!“); else printf(“错误.请再次输入.n“); void waiting() int n; char In
6、for10; struct node *Rem; struct node *p; printf(“请输入想要排队的时间n“); scanf(“%d“, if(n=8 scanf(“%s“,Infor); if(TimeQueuen.CNum)=MAX) Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.middle=Rem;
7、 TimeQueuen.CNum+; printf(“成功排队n“); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(“成功排队n“); else printf(“有空余机位,无须等待 n“); else printf(“错误.再次输入.n“); 取消模块 开始输入预定时间判断是否预
8、定与排队成功取消预定结束Nvoid cancel() int n; int i; char Infor10; struct node *Rem; struct node *q; struct node *p; printf(“请输入预定的时间n“); scanf(“%d“, if(n=8 if(iMAX) if(Rem-next=NULL) q-next=NULL; TimeQueuen.last=q; free(Rem); TimeQueuen.CNum-; printf(“Succeed to out the queue!n“); else q-next=Rem-next; free(Re
9、m); TimeQueuen.CNum-; printf(“Succeed to out the queue!n“); else if(TimeQueuen.CNumMAX) TimeQueuen.middle-locat=Rem-locat; TimeQueuen.middle=TimeQueuen.middle-next; if(i=1) TimeQueuen.first=Rem-next; else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(“成功取消预定!n“);附录源代码:#include #include #inclu
10、de #define LENGTH 6 #define MAX 20 #define S(r) (r-8)/2 #define NULL 0 struct node int locat; char data10; struct node *next; ; struct node *head; struct cell int CNum; struct node *first; struct node *middle; struct node *last; TimeQueueLENGTH; void Inquir() int n; char Infor10; struct node *Rem; p
11、rintf(“输入查询时间(24 hours 820 oclock,include 8oclock)n“); scanf(“%d“, if(n=8Rem=Rem-next) if(strcmp(Rem-data,Infor)=0)break; if(Rem-locat!=0) printf(“The computer number is %dn“,Rem-locat); else printf(“对不起.你依旧在等待列表中或者没有预定 “); else printf(“错误,请再次输入 .n“); void inquir() int n; printf(“输入想要查询的时间(24 hours
12、820oclock,include 8 oclock)n“); scanf(“%d“, if(n=8 strcpy(Rem-data,Infor); Rem-next=NULL; TimeQueuen.first=Rem; TimeQueuen.last=Rem; TimeQueuen.CNum+; printf(“成功预定n“); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; p=TimeQueuen.last; Rem-locat=TimeQueuen.C
13、Num+1; printf(“%d“,Rem-locat); TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(“成功预定n“); else printf(“没有空余机位!“); else printf(“错误.请再次输入.n“); void waiting() int n; char Infor10; struct node *Rem; struct node *p; printf(“请输入想要排队的时间n“); scanf(“%d“, if(n=8 scanf(“%s“,Infor); if(TimeQueuen.CNum)
14、=MAX) Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.middle=Rem; TimeQueuen.CNum+; printf(“成功排队n“); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=
15、NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(“成功排队n“); else printf(“有空余机位,无须等待 n“); else printf(“错误.再次输入.n“); void cancel() int n; int i; char Infor10; struct node *Rem; struct node *q; struct node *p; printf(“请输入预定的时间n“); scanf(“%d“, if(n=8 if(iMAX
16、) if(Rem-next=NULL) q-next=NULL; TimeQueuen.last=q; free(Rem); TimeQueuen.CNum-; printf(“Succeed to out the queue!n“); else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(“Succeed to out the queue!n“); else if(TimeQueuen.CNumMAX) TimeQueuen.middle-locat=Rem-locat; TimeQueuen.middle=TimeQueuen.
17、middle-next; if(i=1) TimeQueuen.first=Rem-next; else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(“成功取消预定!n“); else printf(“错误,请再次输入 .n“); void inquir_waiting() int n; struct node *q; printf(“查询其他等待者的预定时间n“); scanf(“%d“, if(n=8 q=TimeQueuen.middle; for(;q-next!=NULL;q=q-next) printf(“%sn“,q-
18、data); printf(“%sn“,TimeQueuen.last-data); else printf(“这个时间段没有预定者 n“); else printf(“错误。请再次输入 .n“); main() int i; for(i=0;iLENGTH;i+) TimeQueuei.CNum=0; TimeQueuei.first=NULL; TimeQueuei.middle=NULL; TimeQueuei.last=NULL; while(1) printf(“请输入序号!:n“); printf(“1. 查询预定的机位 2.查询空机位 3.预定 4. 取消预定 5.等待列表 6.查询等待者时间列表 0.退出n“); scanf(“%d“, 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; case 0:exit(0); default:printf(“errorn“);