教室系统管理.docx
《教室系统管理.docx》由会员分享,可在线阅读,更多相关《教室系统管理.docx(17页珍藏版)》请在冰豆网上搜索。
教室系统管理
课程设计
学号
班级
姓名
指导教师
2007年9月14日
课程设计任务书
一、课程设计题目:
教室系统管理
二、课程设计工作自2007年9月10日起至2007年9月14日止
三、课程设计内容:
用C语言编写软件完成以下任务:
已知学校可用的教室都存放在文件file25_1.txt中;每天的上课时间段存放在文件file25_2.txt中;教学周1~16周;每周仅允许在周1~周5上课。
某位任课教师想通过你编写的软件申请上课教室。
教师申请时,将提供以下信息:
教学周,星期,课节,教室。
例如:
第3周,周4,1~2节,B楼112教室。
如果此教室的此时间段已经被占用,则提示教师,另作其它申请;否则,批准申请,并及时将新的占用信息写入file25_1.txt。
说明:
file25_1.txt文件中每行的内容按照顺序为:
教学楼号,教室号,若干占用信息。
四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“运算选项”、“数据输入”、“保存结果”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
________学生签名:
________
目录
一、需求分析1
二、程序整体流程图及各子函数流程3
三、核心技术的实现说明及相应程序段7
四、个人总结11
五、参考文献12
六、源程序12
七、运行截图………………………………………16
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为3个模块,其中每一个模块对应一个函数,他们的功能分别是,读取所有教室的信息函数reads(),输入自己的申请情况并及时进行回应申请的函数input(),保存成功的申请函数save(),最后是退出功能界面。
这些函数都是严格按照任务书的要求进行编写的,在执行着不同的功能,并且它们在结构上是一体的,是分级进行从而来成功地完成教室申请的!
1、解决本题首先要知道如何读取文件,读取文件这一步我们可用FILE*fp=fopen(),括号里加上文件的位置来实现需求,此函数就是将文件打开并显示在屏幕上。
因为教师在申请教室时,首先需要了解教学楼号,教室号以及若干的占用信息,以便在申请时候输入数据不出现错误,从而也不影响存取功能。
但是这步又是非常麻烦的一步,稍有不慎很可能就不能打开。
所以这是本题的难点。
在读取文件时要做一个循环,再构造一个主菜单的程序,即在用户界面首页输出简单的操作界面,为了能使用户在使用更加明了方便,可再构造子菜单。
2、输入申请并回应申请函数此函数是程序的主体,是将输入的信息与数组中的信息进行比较从而来判断申请教室是否能成功的。
3、保存函数题目的要求还有将新的占用信息及时地写入文件中,目的是防止他人再申请同一时间段的同一个教室,所以此函数就必不可少了。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
还有就是那个简单的功能界面函数menu(),使教室申请人知道如何进行操作!
文件中的每一个教室记录都包含3项内容,教学楼号,教室号和若干的占用信息,所以将教室记录类型定义为结构体类型,最后将新的教室占用信息写入结构体中教室占用信息后面,从而更新了d盘下面的file_25-1.txt文件,其他函数每次对教室记录访问时,其数据来源都是file_25-1.txt文件,这样就可以避免教师申请同一时间段的同一间教室,从而形成一个完整的教室管理系统。
二、程序整体流程图及各子函数流程图
1.程序整体流程图
2.各子函数流程图
数据分析
读取教室情况的函数reads()
图2读取教室
图3输入申请并回应申请
保存申请的函数save()
图4保存申请
三、核心技术的实现说明及相应程序段
1、输入申请并回应申请函数
输入要求必须按照文件file25-1里数据的形式,重点是应用了strstr()函数,来判断最后输入的信息是否在文件中的教室占用信息中出现过,函数原型为char*strstr(char*str1,char*str2),功能是找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。
因为教室占用信息可能有n组,所以不能用strcmp()函数。
还有一个重点是continue语句的添加,意思是在不符合判断条件的情况下需要进行下一组的判断,这样才保证了判断的完全。
具体的程序段如下:
voidinput()
{
FILE*fp;
inti;
printf("请按照左面一栏输入教学楼号:
AorB\n");
scanf("%s",&clas.building);
printf("请按照中间一栏输入教室号:
like111\n");
scanf("%d",&clas.classroom);
printf("请按照最后一栏输入周-星期-节次:
(week-day-time)\n");
scanf("%s",clas.time);
if((fp=fopen("D:
\\file25_1.txt","r"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(i=0;i{
fscanf(fp,"%c%d%s\n",&cla[i].building,&cla[i].classroom,cla[i].time);
if((clas.building==cla[i].building)&&(clas.classroom==cla[i].classroom)&&(strstr(cla[i].time,clas.time)==0))
{printf("申请成功。
您能够使用这个教室\n\n\n\n\n\n\n\n\n\n\n\n");}
else
continue;}
printf("该教室被占,请令作其它申请\n");
return;
}
2、保存申请的函数
用fscanf()函数将文件中的教室信息读入到结构体数组中了,实现了保存。
最后是关闭文件,防止缓冲区中的数据丢失。
具体程序段如下:
voidsave()
{
FILE*fp;intj;
if((fp=fopen("D:
\\file25_1.txt","w+"))==NULL)
{printf("cannotopen\n");
return;
}
for(j=0;j<=SIZE;j++)
fwrite(&cla[j],sizeof(structclass_type),1,fp);
fclose(fp);
printf("保存成功\n");
}
四、个人总结
通这次学习活动我学习到了很多东西,在程序设计过程中不仅仅是体验到那严谨,认真与一丝不苟,还有那成功的喜悦。
在和老师的交流过程中使我掌握了更多的学习技巧,这对我今后的学习是有很大的帮助的,这时候我发现我已经在不知不觉中爱上了电脑,爱上了程序,爱上了C语言。
又重新温习了C语言的一些基础知识,对《数组》《函数》《文件》这3章进行了详细的学习,学会了用理论知识来指导编程,学到了许多新的知识,总之是收获很多。
这还锻炼了克服困难的能力,因为程序在调试时难免会遇到许多错误,经过单步运行和监视变量,逐一的修改错误才得到一个正确的程序。
在程序编写过程中也暴露了很多不足,如程序编写中保存教室出现失误。
而且在答辩过程中暴露出了对程序的理解不够深刻,没有达到最优化的精简程序,所以对于我想彻底学习好C语言,以后还需要更加努力。
最后,我想说的是,我在这次课程设计活动中无论是学习还是实践方面都受益匪浅。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#include
#defineSIZE8/
structclass_type
{charbuilding;
intclassroom;
chartime[10];
}cla[SIZE];
structclas
{charbuilding;
intclassroom;
chartime[10];}clas;
voidmenu();
voidload();
voidinput();
voidsave();
intk;
voidmain()
{
intj;
while
(1)
{menu();
scanf("%d",&j);
switch(j)//调用菜单函数,并利用其返回值确定操作项目。
{
case1:
load();break;//如返回1,运行初始化函数
case2:
input();break;//如返回2,运行功能函数
case3:
save();break;
case4:
exit(0);
default:
printf("输入错误,请重新选择\n");
}
}
}
voidmenu()//其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
{
printf("************欢迎您来到教室管理系统************\n");
printf("********请选择1234来实现不同的功能********\n");
printf("*1:
读取教室的信息*\n");
printf("*2:
输入申请并回应*\n");
printf("*3:
保存申请*\n");
printf("*4退出教室管理系统*\n");
}
voidload()
{
FILE*fp;
inti;
if((fp=fopen("D:
\\file25_1.txt","r"))==NULL)
{
printf("cannotopenfile\n");
return;
}
printf("教学楼号教室号占用信息\n");
for(i=0;i{
fscanf(fp,"%c%d%s\n",&cla[i].building,&cla[i].classroom,cla[i].time);
printf("%c\t%d\t\t%s\n",cla[i].building,cla[i].classroom,cla[i].time);
}
fclose(fp);
}
voidinput()
{
FILE*fp;
inti;
printf("请按照左面一栏输入教学楼号:
AorB\n");
scanf("%s",&clas.building);
printf("请按照中间一栏输入教室号:
like111\n");
scanf("%d",&clas.classroom);
printf("请按照最后一栏输入周-星期-节次:
(week-day-time)\n");
scanf("%s",clas.time);
if((fp=fopen("D:
\\file25_1.txt","r"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(i=0;i{
fscanf(fp,"%c%d%s\n",&cla[i].building,&cla[i].classroom,cla[i].time);
if((clas.building==cla[i].building)&&(clas.classroom==cla[i].classroom)&&(strstr(cla[i].time,clas.time)==0))
//将输入的信息与数组中的信息进行比较从而来判断申请教室是否能成功的。
{printf("申请成功。
您能够使用这个教室\n\n\n\n\n\n\n\n\n\n\n\n");}
else
continue;}
printf("该教室被占,请令作其它申请\n");
return;
}
voidsave()
{
FILE*fp;intj;
if((fp=fopen("D:
\\file25_1.txt","w+"))==NULL)
{printf("cannotopen\n");
return;
}
for(j=0;j<=SIZE;j++)
fwrite(&cla[j],sizeof(structclass_type),1,fp);
fclose(fp);
printf("保存成功\n");
}
七、运行截图