郑州科技学院
课程设计说明书
课程名称: C语言课程设计
设计题目: 机房机位预约模拟管理系统
系(院): 信息工程学院
专业班级: 14计算机科学与技术2班
姓 名: 高叶匡
学 号: 201415030
指导教师: 周丽
成 绩:
时 间: 8月31日 至 9月13日 共_ 2 周
说 明
1. 课程设计进行期间,学生应按教学计划,将每天的学习情况(包括学习内容、遇到的问题及解决方法、心得体会等)如实进行记录。
2. 结束时,根据课程设计内容和学习记录编写课程设计说明书。
3. 指导教师应综合考虑学生的学习态度、设计质量、答辩情况等,给出评语和成绩。
课程设计成绩评定表
评定项目 | 内容 | 满分 | 评分 | 总分 |
学习态度 | 学习认真,态度端正,遵守纪律。 | 10 | ||
设计情况 | 认真查阅资料,勤学好问,独立思考,分析解决问题的能力较强。 | 40 | ||
说明书质量 | 设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;工作量等达到课程设计任务书规定的要求;图、表、文字表达准确规范,内容完善。 | 40 | ||
答辩情况 | 回答问题准确,基本概念清楚,有理有据,有一定深度。 | 10 | ||
总成绩 | 采用五级分制;优、良、中、及格、不及格。 90分以上为优秀;80-89为良好;70-79为中等;60-69为及格;60分以下为不及格。 | |||
指导教师评语: 签 名: 年 月 日 | ||||
郑州科技学院
C语言课程设计
设计(论文)题目: 机房机位预约模拟管理系统
所 在 院: 信息工程学院
专 业 班 级: 14计算机科学与技术2班
学 生 姓 名: 高叶匡
学 号: 201415030
指 导 教 师: 周丽
2015年9月13日
郑州科技学院
课程设计(论文)任务书
设计题目: 机房机位预约模拟管理系统
专业班级: 14计算机科学与技术2班
学号 201415030 姓名 高叶匡
主要内容
设计机房机台预约模拟管理系统,主要包含:输入预定模块、查询模块、排队模块、取消模块。
采用字符用户界面,通过菜单选择相应的操作,直观且操作简单。数据的存储选用数据文件方式;编辑平台选用Microsoft Visual C++ 6.0 。所用到的知识点有:三种基本程序结构,数组,函数,指针,结构体,文件操作和链表。
基本要求:
按照内容要求,设计完整的机房机位预约模拟管理系统。要求调试通过,不存在漏洞,方便用户操作。功能的实现上力求容错能力要强且提示信息完备。
完成期限: 2015年9月13日
指导教师签名:
评审小组负责人签名:
为了彻底解决长期困扰机房教学工作当中安全性,可靠性,规范性的问题:为了使管理人员可以随时看到机房机台的使用情况,提高机台的利用率,减轻工作人员的工作负担。再次设计了机房机台预约模拟管理系统,使从事机台管理工作的工作人员更从容,省事省心。
市场分析在可行性研究中的重要地位在于,任何一个项目,其生产规模的确定、技术的选择、机房机台预约模拟管理统统估算。都必须在对市场需求情况有了充分了解以后才能决定。而且市场分析的结果,还可以决定产品的价格、销售收入,最终影响到项目的盈利性和可行性。在可行性报告中,要详细研究当前市场现状,以此作为后期决策的依据。
系统能够最大限度的利用有限资源快速准确收集、处理、分析统计机房机台使用的信息资源。提供各种数据查询方式,方便管理人员进行查询。能够形成各种数据报表,及时准确反映机房机台的使用情况。系统各模块功能相互独立,利用数据流相互关联,最大的限制错误录入,实现内部资源共享。安全性方面,系统采用计算机管理避免手工输入的弊病,利用计算机进行科学的优化业务流程,构筑合理的管理架构和完善的管理制度。
在当前的限制条件下,本系统的功能目标能够达到;利用现有的技术,本系统的功能能够实现;系统现阶段的发展过程中,利用现有人力和物力是完全具备的能力开发出来的,作为阶段性产品,日后的发展空间大,实现方法逐步简单容易,所以机房管理系统在技术上是完全可行的。小组开发人员的数量和质量完全能够满足开发本系统的要求,并且能够在规定的期限开发完成。
根据题目要求,程序需要四个结构体来完成,分别对应四个功能。另外,这个程序还要根据时间更新各个列表的信息。
根据上面的需求分析,这个系统的设计需要四个结构体和四个列表
机器信息结构体:包括 机器编号,是否被占用,机器其他信息
用户信息结构体:包括 用户姓名,用户其他信息 预定信息结构体:包括 机器编号,预订人姓名,预定时间段
等待信息结构体:包括 等待者姓名,等待信息添加时间
再建立四个列表 分别以上述四个结构体为节点 对应的问题 第一个,查询机器信息列表,查看机器是否被占用,再根据预定信息列表中的内容得到机器是否被预定 第二个,遍历机器列表,查看每一个机器在输入的时间是否有预定信息,如果没有则将预定信息插入第二个列表 第三个,根据用户和预定时间信息删除第三个列表中的信息 第四个,将等待信息列表的内容显示
3.3功能分配
1)查询,根据输入时间,输出机位信息。
(2)机位预定,根据输入的日期和时间段查询是否有空机位有则预约,若无则提供最近空机时间段。另:若用户要求在非空时间上机,则将用户信息插入该时间段的等待列表。
(3)退出预定,根据输入的时间,撤销该时间的预定。(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息。
主函数比较简洁,只提供输入、功能处理和输出部分的函数调用。
#include
#include
#include
#define SJD 6 /*宏定义定义SJD Z NULL D(r)*/
#define Z 20
#define D(s) (s-8)/2 /*将输入的时间划分时间段;分别为0,1,2,3,4,5时间段*/
#define NULL 0
struct xinxi{
int jihao;
char xuehao[20];
struct xinxi *next;
}; /*结构函数包含学生信息:机位,学号,还有下名学生信息*/
struct cell{
int RS; /*RS表示总人数*/
struct xinxi *first; /*第一个预订者记录*/
struct xinxi *middle; /*等待队列列表*/
struct xinxi *last; /*最后预订者记录*/
} DUILEI[SJD]; /*学生时间(SJD)段顺序:人数,第一名学生,排队的学生,最后一名学生*/
/***************************预定模块******************************/
void yuding()
{
int n;
char m[20]; /*学号*/
struct xinxi *R;
struct xinxi *p;
printf("输入想要预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=D(n); /*将输入的时间划分时间段*/
if(DUILEI[n].RS
{
printf("请输入你的学号\n");
scanf("%s",m);
if(DUILEI[n].first==NULL) /*还没有人预订*/
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));/*给R划分适当的内存*/
R->jihao=1;
strcpy(R->xuehao,m); /*将输入的学号复制到R->xuehao */
R->next=NULL;
DUILEI[n].first=R;
DUILEI[n].last=R;
DUILEI[n].RS++;
printf("成功预定\n");
}
else
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m); /*将输入的学号复制到R->xuehao */
R->next=NULL;
p= DUILEI[n].last; /*将最后预订记录赋值给p*/
R->jihao= DUILEI[n].RS+1;
printf("%d",R->jihao); /*表示该时间段第几位预订*/
DUILEI[n].last=R; /*将当前的记录做为最后记录以便形成链表形式指向下一个*/
p->next=R;
DUILEI[n].RS++; /*记录人数*/
printf("预定成功\n");
}
}
else printf("没有空余机位!\n");
}
else printf("错误.请输入8~19,再次输入.\n");
}
取消
/*********************************查询空位**********************************/
void chaxunkongwei()
{
int n;
printf("输入想要查询的时间(8~19点,包括8点)\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
if(DUILEI[n].RS
printf("这里还有%d台空电脑!\n",Z-DUILEI[n].RS);
else printf("对不起.没有空余机位!\n");
}
else printf("错误,请输入8~19,再次输入.\n");
}
/*********************查询预定机位模块*************************************/
void chaxunyuding()
{
int n;
char m[20];
struct xinxi *R;
printf("输入查询时间(8~19点,包括8点)\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
printf("请输入学号\n")
scanf("%s",m);
R= DUILEI[n].first; /*将第一名学生的信息赋予R*/
if(DUILEI[n].first==0) printf(" 还没有人预定\n"); /*判断有没有人预订,如果还没有人预订,则输出还没有人预定*/
else{
for(;R->next!=NULL;R=R->next) /*从第一名学生开始查询直到找到符合的学号,以便确认是否预订*/
if(strcmp(R->xuehao,m)==0)break;
if(R->jihao!=0) /*已预订,输出相应的信息*/
printf("你的机位是%d\n",R->jihao);
else printf("对不起.你依旧在等待列表中或者没有预定");
}
}
else printf("错误,请再次输入.\n");
}
/*****************************排队系统模块************************************/
void paiduixitong()
{
int n;
char m[20];
struct xinxi *R; struct xinxi *p;
printf("请输入想要排队的时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
if(DUILEI[n].RS>=Z) /*该时间段没有空位机,需要预订等待*/
{
printf("请输入你的学号\n"); scanf("%s",m);
if((DUILEI[n].RS)==Z)
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m);
R->next=NULL;
R->jihao=0;
p= DUILEI[n].last;
DUILEI[n].last=R;
p->next=R;
DUILEI[n].middle=R; /*等待预订列表*/
DUILEI[n].RS++;
printf("成功排队\n");
}/*将刚输入学生信息拍到最后一名后,成最后一名*/
else
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m);
R->next=NULL;
R->jihao=0;
p= DUILEI[n].last;
DUILEI[n].last=R;
p->next=R;
DUILEI[n].RS++;
printf("成功排队\n");
}
}
else printf("有空余机位,无须等待\n");
}
else printf("错误.再次输入.\n");
}
/******************************取消预订模块**********************************/
void cancel()
{
int n;
int i;
char m[20];
struct xinxi *R;
struct xinxi *q;
struct xinxi *p;
printf("请输入预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
printf("请输入你的学号!\n");
scanf("%s",m);
n=D(n);
R= DUILEI[n].first;
q=R;
for(i=1;;q=R,R=R->next,i++) /*查找符合信息*/
if(strcmp(R->xuehao,m)==0)break;
if(i>Z) /*i>z表示在等待列表中*/
{
if(R->next==NULL)
{
q->next=NULL;
DUILEI[n].last=q;
free(R);
DUILEI[n].RS--;
printf("取消成功!\n"); /*如果是排在20名后,且是最后一名*/
}
else{
q->next=R->next;
free(R);
DUILEI[n].RS--;
printf("取消成功!\n"); /*如果排在20名后,但不是最后*/
}
}
else /*正在上机者取消预订*/
{
if(DUILEI[n].RS>Z)
{
DUILEI[n].middle->jihao=R->jihao;
DUILEI[n].middle= DUILEI[n].middle->next;
} /*如果排在20名内,但总人数(包括等待列表人数)大于20 */
if(i==1) DUILEI[n].first=R->next;
else q->next=R->next;
free(R);
DUILEI[n].RS--;
printf("成功取消预定!\n");
}
}
else printf("错误,请再次输入.\n");
}
2查询空机位
3预订系统
4取消预定
5查询所预订机位
6排队系统
7等机者列表
8.退出系统
这套程序应用起来并不是很方便,总的说来,大致上实现了题目的要求,各个功能有相应的代号来直接调用,对于初次进入主函数页面的使用者来说,显得不大好用。不过用熟之后,都不是问题。对策:对于c语言编出的程序来说,使用方法大致上都是一样的,所以想做改进只能从程序方面入手,尽量把指令编的简单明了,方便易用。本人对这一程序还是相当满意的,想弄的更好的话可以尝试一下用其他编辑程序来完成。
短短的一个星期的上机实习结束了。复习理论知识、编程、调试、改错,直至存盘,同样的环节、同样的工作步骤,重复又重复,枯燥而乏味;看似简单的程序题,编写后调试却屡屡出错。如何改如何错,怎么编写怎么调试失败,心烦而意乱。但奇怪的是,越是如此,我越是不甘失败。不断地调试,反复地编写。一旦在黑屏幕的左下角意外地发现所输出的信息正是自己意想中的结果,那份惊喜,那份满足感,真是令人难以形容。好比幼儿经过长时间堆积不断倒塌的积木后,终于垒起了一座“大楼”。那份心底里的成就感,可以让你顿时忘记了所有的烦躁,因为那一切付出都是值得的。
在实习的过程中,我得到的不仅仅是将理论与实践结合在一起的技巧与方法,而更可贵的是做事情的态度缓和懂得与人相处的重要性。上学期在学习C语言程序设计理论时,总觉得这一切都太简单了,原来什神秘的IT领域是那么的简单易懂,只要掌握了其中的方法,上机并不成问题。结果却是大大出乎我的意料。编写的程序从理论上来说并未出错,但一到上机调试时却无法运行;即算是课本的问题原封不动地照搬,也可能回得到截然不同的结果……这让我对于毛泽东同志所提倡的做事态度“解放思想,实事求是”顿时有了一种清晰的认识。正因为编程的困难与复杂,同学间的合作与互助就显得尤为有效。对于同一道程序题,合作互助让我们掌握更多种方法;对于复杂乏味的调试,合作互助让我们更容易找到错误所在,从而提高编程效率。合作互助更增进了同学之间(不管之前认识与否)的感情与友谊,拉近了彼此的距离。
在这次实习过程中,我尤其要感谢周丽老师对我的悉心指导和耐心讲解。他扎实的计算机基础知识和熟练的上机技巧,及通俗易懂的讲解,都让我受益匪浅。更令我高兴的是,对于以前一些基本的、经常出现的,但又无法理解的计算机问题,经过周老师的指点,顿时茅塞顿开。真心希望学校以后还有更的多上机实习机会。
[1]谭浩强.C程序设计(第二版).北京:清华大学出版社,1999
[2]刘瑞挺.计算机二级教程.南开大学出版社,1996
[3]陈朔鹰等.C语言程序设计基础教程.兵器工业出版社,1994
[4]姜仲秋等.C语言程序设计.南京大学出版社,1998
#include
#include
#include
#define SJD 6 /*宏定义定义SJD Z NULL D(r)*/
#define Z 20
#define D(s) (s-8)/2 /*将输入的时间划分时间段;分别为0,1,2,3,4,5时间段*/
#define NULL 0
struct xinxi{
int jihao;
char xuehao[20];
struct xinxi *next;
}; /*结构函数包含学生信息:机位,学号,还有下名学生信息*/
struct cell{
int RS; /*RS表示总人数*/
struct xinxi *first; /*第一个预订者记录*/
struct xinxi *middle; /*等待队列列表*/
struct xinxi *last; /*最后预订者记录*/
} DUILEI[SJD]; /*学生时间(SJD)段顺序:人数,第一名学生,排队的学生,最后一名学生*/
/***************************预定模块******************************/
void yuding()
{
int n;
char m[20]; /*学号*/
struct xinxi *R;
struct xinxi *p;
printf("输入想要预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=D(n); /*将输入的时间划分时间段*/
if(DUILEI[n].RS
{
printf("请输入你的学号\n");
scanf("%s",m);
if(DUILEI[n].first==NULL) /*还没有人预订*/
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));/*给R划分适当的内存*/
R->jihao=1;
strcpy(R->xuehao,m); /*将输入的学号复制到R->xuehao */
R->next=NULL;
DUILEI[n].first=R;
DUILEI[n].last=R;
DUILEI[n].RS++;
printf("成功预定\n");
}
else
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m); /*将输入的学号复制到R->xuehao */
R->next=NULL;
p= DUILEI[n].last; /*将最后预订记录赋值给p*/
R->jihao= DUILEI[n].RS+1;
printf("%d",R->jihao); /*表示该时间段第几位预订*/
DUILEI[n].last=R; /*将当前的记录做为最后记录以便形成链表形式指向下一个*/
p->next=R;
DUILEI[n].RS++; /*记录人数*/
printf("预定成功\n");
}
}
else printf("没有空余机位!\n");
}
else printf("错误.请输入8~19,再次输入.\n");
}
/*********************************查询空位模块***********************************/
void chaxunkongwei()
{
int n;
printf("输入想要查询的时间(8~19点,包括8点)\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
if(DUILEI[n].RS
printf("这里还有%d台空电脑!\n",Z-DUILEI[n].RS);
else printf("对不起.没有空余机位!\n");
}
else printf("错误,请输入8~19,再次输入.\n");
}
/*********************查询预定机位模块*************************************/
void chaxunyuding()
{
int n;
char m[20];
struct xinxi *R;
printf("输入查询时间(8~19点,包括8点)\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
printf("请输入学号\n");
scanf("%s",m);
R= DUILEI[n].first; /*将第一名学生的信息赋予R*/
if(DUILEI[n].first==0) printf(" 还没有人预定\n"); /*判断有没有人预订,如果还没有人预订,则输出还没有人预定*/
else{
for(;R->next!=NULL;R=R->next) /*从第一名学生开始查询直到找到符合的学号,以便确认是否预订*/
if(strcmp(R->xuehao,m)==0)break;
if(R->jihao!=0) /*已预订,输出相应的信息*/
printf("你的机位是%d\n",R->jihao);
else printf("对不起.你依旧在等待列表中或者没有预定");
}
}
else printf("错误,请再次输入.\n");
}
/*****************************排队系统模块**************************************/
void paiduixitong()
{
int n;
char m[20];
struct xinxi *R; struct xinxi *p;
printf("请输入想要排队的时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
if(DUILEI[n].RS>=Z) /*该时间段没有空位机,需要预订等待*/
{
printf("请输入你的学号\n"); scanf("%s",m);
if((DUILEI[n].RS)==Z)
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m);
R->next=NULL;
R->jihao=0;
p= DUILEI[n].last;
DUILEI[n].last=R;
p->next=R;
DUILEI[n].middle=R; /*等待预订列表*/
DUILEI[n].RS++;
printf("成功排队\n");
}/*将刚输入学生信息拍到最后一名后,成最后一名*/
else
{
R=(struct xinxi *)malloc(sizeof(struct xinxi));
strcpy(R->xuehao,m);
R->next=NULL;
R->jihao=0;
p= DUILEI[n].last;
DUILEI[n].last=R;
p->next=R;
DUILEI[n].RS++;
printf("成功排队\n");
}
}
else printf("有空余机位,无须等待\n");
}
else printf("错误.再次输入.\n");
}
/******************************取消预订模块****************************************/
void cancel()
{
int n;
int i;
char m[20];
struct xinxi *R;
struct xinxi *q;
struct xinxi *p;
printf("请输入预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
printf("请输入你的学号!\n");
scanf("%s",m);
n=D(n);
R= DUILEI[n].first;
q=R;
for(i=1;;q=R,R=R->next,i++) /*查找符合信息*/
if(strcmp(R->xuehao,m)==0)break;
if(i>Z) /*i>z表示在等待列表中*/
{
if(R->next==NULL)
{
q->next=NULL;
DUILEI[n].last=q;
free(R);
DUILEI[n].RS--;
printf("取消成功!\n"); /*如果是排在20名后,且是最后一名*/
}
else{
q->next=R->next;
free(R);
DUILEI[n].RS--;
printf("取消成功!\n"); /*如果排在20名后,但不是最后*/
}
}
else /*正在上机者取消预订*/
{
if(DUILEI[n].RS>Z)
{
DUILEI[n].middle->jihao=R->jihao;
DUILEI[n].middle= DUILEI[n].middle->next;
} /*如果排在20名内,但总人数(包括等待列表人数)大于20 */
if(i==1) DUILEI[n].first=R->next;
else q->next=R->next;
free(R);
DUILEI[n].RS--;
printf("成功取消预定!\n");
}
}
else printf("错误,请再次输入.\n");
}
/********************************待机者列表模块****************************/
void daijizheliebiao()
{
int n;
struct xinxi *q;
printf("查询其他等待者的预定时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
n=D(n);
if(DUILEI[n].RS>Z) /*表示有等待上机者*/
{
printf("等待列表:\n");
q=DUILEI[n].middle;
for(;q->next!=NULL;q=q->next) printf("%s\n",q->xuehao); /*逐个输出等待列表者信息*/
printf("%s\n", DUILEI[n].last->xuehao);
}
else printf("这个时间段没有预定者\n");
}
else printf("错误。请再次输入.\n");
}
int main()
{
int i;
for(i=0;i
DUILEI[i].RS=0;
DUILEI[i].first=NULL;
DUILEI[i].middle=NULL;
DUILEI[i].last=NULL;
}
while(1){
printf(" **************************************\n");
printf(" * 机房机位预定系统 *\n");
printf(" * *\n");
printf(" * 1 查询空机位 2 预定系统 *\n");
printf(" * 3 取消预定 4 查询所预定机位 *\n");
printf(" * 5 排队系统 6 等机者列表 *\n");
printf(" * 0 退出系统 *\n");
printf(" * *\n");
printf(" * 请输入序号(0--6): *\n");
printf(" **************************************\n");
printf("请输入序号!:\n");
scanf("%d",&i);
switch(i)
{
case 1:chaxunkongwei();break;
case 2:yuding();break;
case 3:cancel();break;
case 4:chaxunyuding();break;
case 5:paiduixitong();break;
case 6:daijizheliebiao();break;
case 0:exit(0);
default:printf("错误\n");
}
}
return 0;
}
本文来源:https://www.2haoxitong.net/k/doc/e93e4f31bdd126fff705cc1755270722192e5995.html
文档为doc格式