printf("Thereare%demptycomputer!
\n",MAX-Time[n].CNum);
elseprintf("对不起.没有空余机位\n");
}
elseprintf("错误,再次输入.\n");
}
5.排队模块
[分析]该模块主要是针对是否要排队和如何排队设计的。
当预约者总数小于最大值时提示不用排队。
当预约者的总数大于最大值时就需要排队。
把排队者的信息储存在由指向结构体的指针指向的动态分配的存储区域,然后连接到time[n]的表尾。
用指向等待队列的指针指向排队的第一人,通过指针的移动,用指向表尾的指针指向真个链表的结尾。
【程序】
voidpaidui()/*排队模块*/
{
intn;
charxh[10];
structyonghu*pp;
structyonghu*p;
system("cls");
printf("请输入想要排队的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=T(n);
if(Time[n].CNum>=MAX){
printf("请输入你的学号\n");
scanf("%s",xh);
if((Time[n].CNum)==MAX){
pp=(structyonghu*)malloc(sizeof(structyonghu));
strcpy(pp->data,xh);
pp->next=NULL;
pp->jh=0;
p=Time[n].last;/*指向排队队列结尾处*/
Time[n].last=pp;
p->next=pp;
Time[n].middle=pp;
Time[n].CNum++;
printf("成功排队\n");
}
else{
pp=(structyonghu*)malloc(sizeof(structyonghu));
strcpy(pp->data,xh);
pp->next=NULL;
pp->jh=0;
p=Time[n].last;
Time[n].last=pp;
p->next=pp;
Time[n].CNum++;
printf("成功排队\n");
}
}
elseprintf("有空余机位,无须等待\n");
}
elseprintf("错误.再次输入.\n");
}
6.取消预约模块
[分析]
要取消预约,有两种情况,第一是从有机位的人要取消预约,在该种情况下,排队的第一人的位置就插入到该取消者的位置。
而指向等待队列首地址的指针就指向原来排队的第二人。
第二种情况就是取消约的人本来就在等待队列中,只需要直接删除该结点即可。
[流程图]
【程序】
voidcancel()/*取消模块*/
{
intn;
inti;
charxh[10];
structyonghu*pp;
structyonghu*q;
structyonghu*p;
system("cls");
printf("请输入预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20)
{
printf("请输入你的学号.!
\n");
scanf("%s",xh);
n=T(n);
pp=Time[n].first;
q=pp;
for(i=1;;q=pp,pp=pp->next,i++)
if(strcmp(pp->data,xh)==0)break;
if(i>MAX){
if(pp->next==NULL){
q->next=NULL;
Time[n].last=q;
free(pp);
Time[n].CNum--;
printf("取消成功!
\n");
}
else{
q->next=pp->next;
free(pp);
Time[n].CNum--;
printf("成功退出!
\n");
}
}
else{
if(Time[n].CNum>MAX){
Time[n].middle->jh=pp->jh;
Time[n].middle=Time[n].middle->next;
}
if(i==1)Time[n].first=pp->next;
elseq->next=pp->next;
free(pp);
Time[n].CNum--;
printf("成功取消预定!
\n");
}
}
elseprintf("错误,请再次输入.\n");
}
7.查询等待信息模块
[分析]
通过输入的时间,判断储存该时间段的结构体链表,通过比较Time[n]中Cnum的值与最大值的大小关系就可以得到是否有等待者的信息,本模块通过读取用户输入的时间先调用结构体链表在屏幕上显示出用户要查询的时间段的包含用户的机位号和学号。
[流程图]
Y
【程序】
voidsearch_waiting()/*查询等待模块*/
{
intn;
structyonghu*q;
system("cls");
printf("查询其他等待者的预定时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=T(n);
if(Time[n].CNum>MAX){
printf("等待列表are:
\n");
q=Time[n].middle;
for(;q->next!
=NULL;q=q->next)printf("%s\n",q->data);
printf("%s\n",Time[n].last->data);/*输出等待者*/
}
elseprintf("这个时间段没有预定者\n");
}
elseprintf("错误。
请再次输入.\n");
}
五、用户手册
请根据系统提示正确输入以防止程序无法进行。
六、调试及测试
菜单界面
1、预定功能:
2、查询功能
3、查询预定机位的功能
4、取消功能
七、总结
短短的一个星期的上机实习结束了。
复习了理论知识、编程、调试、改错,直至存盘,同样的环节、同样的工作步骤,重复又重复,枯燥而乏味;看似简单的程序题,编写后调试却屡屡出错。
如何改如何错,怎么编写怎么调试失败,心烦而意乱。
但奇怪的是,越是如此,我越是不甘失败。
不断地调试,反复地编写。
一旦在黑屏幕的左下角意外地发现所输出的信息正是自己意想中的结果,那份惊喜,那份满足感,真是令人难以形容。
好比幼儿经过长时间堆积不断倒塌的积木后,终于垒起了一座“大楼”。
那份心底里的成就感,可以让你顿时忘记了所有的烦躁,因为那一切付出都是值得的。
在实习的过程中,我得到的不仅仅是将理论与实践结合在一起的技巧与方法,而更可贵的是做事情的态度缓和懂得与人相处的重要性。
在学习C语言程序设计理论时,总觉得这一切都太简单了,原来什神秘的IT领域是那么的简单易懂,只要掌握了其中的方法,上机并不成问题。
结果却是大大出乎我的意料。
编写的程序从理论上来说并未出错,但一到上机调试时却无法运行;即算是课本的问题原封不动地照搬,也可能回得到截然不同的结果……这让我对于邓小平同志所提倡的做事态度“解放思想,实事求是”顿时有了一种清晰的认识。
正因为编程的困难与复杂,同学间的合作与互助就显得尤为有效。
对于同一道程序题,合作互助让我们掌握更多种方法;对于复杂乏味的调试,合作互助让我们更容易找到错误所在,从而提高编程效率。
合作互助更增进了同学之间(不管之前认识与否)的感情与友谊,拉近了彼此的距离。
经过一学期的C语言学习,我们对C语言这门课程有了一定的了解。
从开始接触C语言到现在,经过一学期的学习。
对C语言了解也越来越多。
在我看来C语言是一门很难学的学科,不仅需要我们动手去写,更需要我们用脑去思考,用心去体会。
慢慢理解吸收。
如同枢纽一样,C串联许多重要的内容。
我们要很好的学好这一学科,就必须下大工夫,把点滴内容掌握扎实,用心学习。
编程是我们之前在与电脑的相处中未曾触碰到的一个领域,通过这一学期的学习,初步体会到了编程的方法和魅力的地方,也消除了一些之前对“电脑是怎么工作”的疑问。
可以说,它开阔了我们的视野,使我们进入了一个全新的世界,这个世界里还有很多事物等着我们去发现和学习,许多东西等着我们去研究,很多道路等着我们去开拓!
那么通过这一个学期的学习我们的收获如何呢?
学校安排的这门新课程—C语言课程设计,正是对我们之前学习的一种考验。
对于我们自己来说,这也是一次自我考验的机会;不仅仅是对语言知识的考验,它更加重要的是对我们动手能力的考验!
在程序的调试与测试以及心得体会。
1、我是在C程序设计系统中调试程序的。
开始时错误很多,我一下子被吓住了,从开始学习C语言到现在从未遇到过那么多的错误,我都不知道如何去改正错误。
那么多的错误意味着我有好多知识没掌握。
但是对于这份程序,我必须去慢慢逐个检查,慢慢缩减错误。
要让这个程序能通过运行。
在这个信念的支持下,我开始在改正错误的道路上前行,虽然进度缓慢,但也不是没有成就。
一些简单的错误在我的细心努力下,错误一点一点的减少。
再次运行后还有一些错误,这些错误都是不常见的,所以改正起来并没有那么简单。
但世上无难事,只怕有心人。
经过努力,还是让程序成功运行。
2、心得体会:
编写C语言程序首先要有思路,只要要了基本的骨架,那接下来的工作就简单了。
但很多方面仍需要我们注意,例如一些语法上的错误要尽量避免。
第一次遇到这么难的题目,难免心里觉得畏惧。
有上网XX搜索的想法,但我觉得这毕竟是一份作业,更侧重的是锻炼我们的学习能力,检查我们上学期的知识掌握情况,如果随便在XX上搜索,难免有些对自己不负责任。
对自己学习的马虎。
对于C语言作业应该先自己思考,即使刚开始一点思路也没有,也要这样做,在老师的耐心帮助下我最终克服了我在完成这一次的课程设计作业的过程中遇到的各种困难。
因此,在此我也要向帮助过我的高老师和屠老师表示感谢。
参考文献:
[1]黄明等编著《C语言课程设计》北京:
电子工业出版社
[2]郭翠英编著《C语言课程设计案例精编》北京:
中国水利水电出版社
[3]宁正元《数据结构(c语言)》南京:
东南大学出版社。
2000年6月第1版
[4]严蔚敏等《数据结构(c语言版)》北京:
清华大学出版社,1997年4月第1版
[5]谭浩强编著《C程序设计题解与上机指导(第3版)》北京:
清华大学出版社
[6]谭浩强编著《C程序设计(第3版)》北京:
清华大学出版社
源程序:
#include
#include
#include
#definetime6
#defineMAX20
#defineT(r)(r-8)/2
#defineNULL0
structyonghu/*用户信息*/
{
intjh;
chardata[10];
structyonghu*next;
};
structyonghu*head;
structcell/*排队的队列*/
{
intCNum;
structyonhu*first;/*指向队列开头*/
structyonghu*middle;/*指向排队队列*/
structyonghu*last;/*指向对结尾*/
}Time[time];
voidbooking()/*预定模块*/
{
intn;
charxh[10];
structyonghu*pp;
structyonghu*p;
system("cls");
printf("输入想要预定的时间\n");
scanf("%d",&n);
if(n>=8&&n<20){
n=T(n);
if(Time[n].CNumprintf(