沈阳航空工业学院
课程设计任务书
电子工程系 专电子信息工程专业 6402103班 学号[1**********]5
一、课程设计题目:教室管理系统
二、课程设计工作自2007年9月10日至2006年9月14日止
三、课程设计内容:
已知学校可用的教室都存放在文件file25_1.txt中;每天的上课时间段存放在文件file25_2.txt中;教学周1~16周;每周仅允许在周1~周5上课。 某位任课教师想通过你编写的软件申请上课教室。教师申请时,将提供以下信息:教学周,星期,课节,教室。例如:第3周,周4,1~2节,B 楼112教室。
如果此教室的此时间段已经被占用,则提示教师,另作其它申请;否则,批准申请,并及时将新的占用信息写入file25_1.txt。
说明:file25_1.txt文件中每行的内容按照顺序为:教学楼号,教室号,若干占用信息。
四、课程设计要求:
程序质量:
● 贯彻结构化程序设计思想。
● 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 ● 代码应适当缩进,并给出必要的注释,以增强程序的可读性。 课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下: ● 封面
● 课程设计任务书
● 目录
● 需求分析(分析题目的要求)
● 程序流程图(总体流程图和主要功能模块流程图)
● 核心技术的实现说明及相应程序段
● 个人总结
● 参考资料
● 源程序及适当的注释
指导教师:________ 学生签名:________
目录
一、需求分析..................................................1
二、程序流程图..............................................5
三、核心技术的实现说明及相应程序段......8
四、个人总结................................................13
五、参考文献................................................14
六、源程序....................................................14
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:读取教室数据函数(load),输入数据函数(write),确定请求函数(complet),显示菜单函数(menu)。
1、读取教室数据函数 主要实现程序最初运行时读取教室占用信息并且将其显示至选课系统界面上.
2、输入数据函数 实现的功能是用户借以确认要选的教室是否被占用.
3、确定请求函数 按照题目的具体要求将新的占用信息写入到指定的文件中去.
4、显示菜单函数 显示友好的用户界面, 引导用户使用该软件
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个教室信息都包括教学楼号,教室号,是被占
用. 在程序当中,将教室使用信息类型定义为结构体类型,添加以及追加的教室信息直接写R 入D 盘的file25_1.txt文件中,其他函数每次对教室占用信息的访问,其数据来源都是file25_1.txt文件,这样做不但可以保证教室信息数据的一致性,而且可以对教室信息进行永久保存,保证每次运行程序都可以采用原来的数据。
程序整体流程图及各子函数流程图
1 程序总体结构图
(1)读取输入请求
打开文件
请 输 入
1 读取数据 返 回
(2)数据分析
输入2
building
B 真
假 111,112
真
information
假 3-4-1~2, 5-4-5~6 真 假
1、 具体功能框图
(1)读取教室数据函数(load )
(2)输入数据函数(write)
输出教学楼号
从键盘输入要查询的教学楼号
输出教室号
从键盘输入要查询的教室号
输出上课信息
从键盘输入要上课的时间段
循环变量i=1
当i 小于8时
真假
输出“对不起,该教室已被占用! 输出“可以使用该教室” 将输入的占用信息保存到原文件中 continue
回到显示菜单函数(menu)
(3) 确定请求函数(complet)
输出 “ 确 定? 1) 是 2) 不是”
2) 不 是 1) 是 D 盘文件flie25_1.txt 真 假 return; 输出“不能打 循环变量i=1 开该文件 当i 小于8时 依次将新的结构体 数组里的信息写到 原文件中 关闭文件
回到显示菜单函数(menu)
return;
(4) 显示菜单函数(menu)
输出表格
真 输入值假 读取教室数据 真 输入值假 函数(load ) 输入值c=3? 输入数据函数 (write ) 确定请求 输入 函数 真 假 complet ) 退出 continue
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,读取教室数据函数(load )、输入数据函数(write)和确定请求函数(complet)是程序中较为核心的部分,下面分别进行说明
1 读取教室数据函数
读取教室数据函数是在文件file25_1.txt已经存在的情况下,此时文件要以读写方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下: void load_()
{
int i;
FILE *fp;
if((fp=fopen("C:\\file25_1.txt","rb"))==NULL)
{printf("不能打开该文件/n");
}
for(i=0;i
fscanf(fp,"%s %d
%s",&cla[i].building,&cla[i].classroom,&cla[i].information) ;
fclose(fp);
printf("教学楼号 教室号 占用信息\n");
for(i=0;i
printf("%s%d%s\n",cla[i].building,cla[i].classroom,cla[i].information);
menu();
}
1、 输入数据函数
该函数的核心部分是一段比较语句
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
,对于题目所给的building ,classroom 和information 三项信息,只能首先要求前两项的一致性,如果前两项信息不一致,就直接退出比较程序而不比较第三项,如果前两项信息一致的话则比较第三项,因为教学楼号和教室号是客观存在的,而上课时间信息是主观因素,这样比较的好处是避免了系统将比较的八项结果依次输出,本人之前就是直接进行了三项比较从而导致用户界面信息的繁杂;strcpy(cla[i].information,c)也是一条重要的语句,它的作用是将用户输入的上课时间段写入file25_1.txt文件中,更新
新的占用信息。具体的程序段如下:
void write_()
{FILE *fp;
int i,b;
char a[8],c[20];
printf("教学楼号:");
scanf("%s",a);
printf("教室号:");
scanf("%d",&b);
printf("占用信息:");
scanf("%s",c);
for(i=0;i
{
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
printf("—————对不起, 该教室已被占
用! —————\n");
else
{printf("————————可以使用该教室
————————\n");
strcpy(cla[i].information,c);
}
}
continue;
}
menu();
}
2、 确定请求函数
该函数的核心程序语句是for(i=0;i
fclose(fp);}该语句的作用是将新的教室信息全部写入
file25_1.txt中,与strcpy(cla[i].information,c)语句做用不同的是后者只是将一项信息写入文件,而前者是将整个信息重新写入file25_1.txt中,保证了文件的完整性。具体的程序段如下:
void complet_()
{
int i;
printf("确 定? 1)是 2)不是\n");
scanf("%d",&i);
if(i==2)
return;
if(i==1)
{FILE*fp;
if((fp=fopen("C:\\file25_1.txt","wb+"))==NULL) {printf("不能打开该文件\n");
return;
}
for(i=0;i
fwrite(&cla[i],sizeof(struct cla),1,fp);
fclose(fp);}
menu();
return;
}
3、 显示菜单函数
该函数使用了一个switch 选择语句,的功能是简化其操作性,帮助用户正确使用该软件,使得该软件操作性更
强,更有人性化。具体的程序段如下:
menu();
}
void menu()
{
int c;
printf("****************欢迎************************\n"); printf("* 1)读取数据 *\n"); printf("* 2)输入数据 *\n"); printf("* 3)请 求 *\n"); printf("* 4)退 出 *\n"); printf("***********************************************\n");
printf("请 输 入:\n");/* 在黑屏出现此选项*/ scanf("%d",&c);/*在黑屏上输入随意的数字*/
if(c>4||c
printf("------错误-----!\n");
switch(c)
{
case 1:load_();break;
case 2:write_();break;
case 3:complet_(); break;
case 4:exit(0);
}
}
四、个人总结
通过本次一周的课程设计,自己在C 语言方面又不小进步!不仅对这门课程产生了更浓厚的兴趣,而且对于这
门语言的了解有了个质的飞跃,由以前简单的理论了解转变成了实质上的应用。
首先是对文件的方面有了更深的了解,因为这次的设计任务主要应用的是文件方面的知识,还有结构体的一些知识例如结构体比较的用法。
除此之外,我了解到同一程序要求可以用不同的语句来实现,而我们应该尽量使用一些比较高级的语句,一来可以减少语句数,另外可以减少一些不必要的错误。
五、参考文献
1 谭浩强.C 程序设计.北京:清华大学出版社,2005 2 刘成等.C 语言程序设计实验指导与习题集.北京:中国铁道出版社,2006
3 www.baidu.com
4大学生校内网课社论坛
六、源程序
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
void write_();
void load_();
void complet_();
void menu();
struct cla
{char building[8];
int classroom;
char information[20];
}cla[8];
main()
{
int j;
int i;
menu();
}
void menu()
{
int c;
printf("*******************欢迎
************************\n");
printf("* 1)读取数据 *\n");
printf("* 2)输入数据 *\n");
printf("* 3)请 求 *\n");
printf("* 4)退 出 *\n");
printf("***********************************************\n");
printf("请 输 入:\n");
scanf("%d",&c);
if(c>4||c
printf("------错误-----!\n");
switch(c)
{
case 1:load_();break;
case 2:write_();break;
case 3:complet_(); break;
case 4:exit(0);
}
}
void load_()
{
int i;
FILE *fp;
if((fp=fopen("C:\\file25_1.txt","rb"))==NULL) {printf("不能打开该文件/n");
}
for(i=0;i
fscanf(fp,"%s %d
%s",&cla[i].building,&cla[i].classroom,&cla[i].information) ;
fclose(fp);
printf("教学楼号 教室号 占用信息\n"); for(i=0;i
printf(" %s %d %s\n",cla[i].building,cla[i].classroom,cla[i].information);
menu();
}
void write_()
{FILE *fp;
int i,b;
char a[8],c[20];
printf("教学楼号:");
scanf("%s",a);
printf("教室号:");
scanf("%d",&b);
printf("占用信息:");
scanf("%s",c);
for(i=0;i
{
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
printf("—————对不起, 该教室已被占
用! —————\n");
else
{printf("————————可以使用该教室
————————\n");
strcpy(cla[i].information,c);
}
}
continue;
}
menu();
}
void complet_()
{
int i;
printf("确 定? 1)是 2)不是\n");
scanf("%d",&i);
if(i==2)
return;
if(i==1)
{FILE*fp;
if((fp=fopen("C:\\file25_1.txt","wb+"))==NULL) {printf("不能打开该文件\n");
return;
}
for(i=0;i
fwrite(&cla[i],sizeof(struct cla),1,fp);
fclose(fp);}
menu();
return;
}
沈阳航空工业学院
课程设计任务书
电子工程系 专电子信息工程专业 6402103班 学号[1**********]5
一、课程设计题目:教室管理系统
二、课程设计工作自2007年9月10日至2006年9月14日止
三、课程设计内容:
已知学校可用的教室都存放在文件file25_1.txt中;每天的上课时间段存放在文件file25_2.txt中;教学周1~16周;每周仅允许在周1~周5上课。 某位任课教师想通过你编写的软件申请上课教室。教师申请时,将提供以下信息:教学周,星期,课节,教室。例如:第3周,周4,1~2节,B 楼112教室。
如果此教室的此时间段已经被占用,则提示教师,另作其它申请;否则,批准申请,并及时将新的占用信息写入file25_1.txt。
说明:file25_1.txt文件中每行的内容按照顺序为:教学楼号,教室号,若干占用信息。
四、课程设计要求:
程序质量:
● 贯彻结构化程序设计思想。
● 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 ● 代码应适当缩进,并给出必要的注释,以增强程序的可读性。 课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下: ● 封面
● 课程设计任务书
● 目录
● 需求分析(分析题目的要求)
● 程序流程图(总体流程图和主要功能模块流程图)
● 核心技术的实现说明及相应程序段
● 个人总结
● 参考资料
● 源程序及适当的注释
指导教师:________ 学生签名:________
目录
一、需求分析..................................................1
二、程序流程图..............................................5
三、核心技术的实现说明及相应程序段......8
四、个人总结................................................13
五、参考文献................................................14
六、源程序....................................................14
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:读取教室数据函数(load),输入数据函数(write),确定请求函数(complet),显示菜单函数(menu)。
1、读取教室数据函数 主要实现程序最初运行时读取教室占用信息并且将其显示至选课系统界面上.
2、输入数据函数 实现的功能是用户借以确认要选的教室是否被占用.
3、确定请求函数 按照题目的具体要求将新的占用信息写入到指定的文件中去.
4、显示菜单函数 显示友好的用户界面, 引导用户使用该软件
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个教室信息都包括教学楼号,教室号,是被占
用. 在程序当中,将教室使用信息类型定义为结构体类型,添加以及追加的教室信息直接写R 入D 盘的file25_1.txt文件中,其他函数每次对教室占用信息的访问,其数据来源都是file25_1.txt文件,这样做不但可以保证教室信息数据的一致性,而且可以对教室信息进行永久保存,保证每次运行程序都可以采用原来的数据。
程序整体流程图及各子函数流程图
1 程序总体结构图
(1)读取输入请求
打开文件
请 输 入
1 读取数据 返 回
(2)数据分析
输入2
building
B 真
假 111,112
真
information
假 3-4-1~2, 5-4-5~6 真 假
1、 具体功能框图
(1)读取教室数据函数(load )
(2)输入数据函数(write)
输出教学楼号
从键盘输入要查询的教学楼号
输出教室号
从键盘输入要查询的教室号
输出上课信息
从键盘输入要上课的时间段
循环变量i=1
当i 小于8时
真假
输出“对不起,该教室已被占用! 输出“可以使用该教室” 将输入的占用信息保存到原文件中 continue
回到显示菜单函数(menu)
(3) 确定请求函数(complet)
输出 “ 确 定? 1) 是 2) 不是”
2) 不 是 1) 是 D 盘文件flie25_1.txt 真 假 return; 输出“不能打 循环变量i=1 开该文件 当i 小于8时 依次将新的结构体 数组里的信息写到 原文件中 关闭文件
回到显示菜单函数(menu)
return;
(4) 显示菜单函数(menu)
输出表格
真 输入值假 读取教室数据 真 输入值假 函数(load ) 输入值c=3? 输入数据函数 (write ) 确定请求 输入 函数 真 假 complet ) 退出 continue
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,读取教室数据函数(load )、输入数据函数(write)和确定请求函数(complet)是程序中较为核心的部分,下面分别进行说明
1 读取教室数据函数
读取教室数据函数是在文件file25_1.txt已经存在的情况下,此时文件要以读写方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下: void load_()
{
int i;
FILE *fp;
if((fp=fopen("C:\\file25_1.txt","rb"))==NULL)
{printf("不能打开该文件/n");
}
for(i=0;i
fscanf(fp,"%s %d
%s",&cla[i].building,&cla[i].classroom,&cla[i].information) ;
fclose(fp);
printf("教学楼号 教室号 占用信息\n");
for(i=0;i
printf("%s%d%s\n",cla[i].building,cla[i].classroom,cla[i].information);
menu();
}
1、 输入数据函数
该函数的核心部分是一段比较语句
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
,对于题目所给的building ,classroom 和information 三项信息,只能首先要求前两项的一致性,如果前两项信息不一致,就直接退出比较程序而不比较第三项,如果前两项信息一致的话则比较第三项,因为教学楼号和教室号是客观存在的,而上课时间信息是主观因素,这样比较的好处是避免了系统将比较的八项结果依次输出,本人之前就是直接进行了三项比较从而导致用户界面信息的繁杂;strcpy(cla[i].information,c)也是一条重要的语句,它的作用是将用户输入的上课时间段写入file25_1.txt文件中,更新
新的占用信息。具体的程序段如下:
void write_()
{FILE *fp;
int i,b;
char a[8],c[20];
printf("教学楼号:");
scanf("%s",a);
printf("教室号:");
scanf("%d",&b);
printf("占用信息:");
scanf("%s",c);
for(i=0;i
{
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
printf("—————对不起, 该教室已被占
用! —————\n");
else
{printf("————————可以使用该教室
————————\n");
strcpy(cla[i].information,c);
}
}
continue;
}
menu();
}
2、 确定请求函数
该函数的核心程序语句是for(i=0;i
fclose(fp);}该语句的作用是将新的教室信息全部写入
file25_1.txt中,与strcpy(cla[i].information,c)语句做用不同的是后者只是将一项信息写入文件,而前者是将整个信息重新写入file25_1.txt中,保证了文件的完整性。具体的程序段如下:
void complet_()
{
int i;
printf("确 定? 1)是 2)不是\n");
scanf("%d",&i);
if(i==2)
return;
if(i==1)
{FILE*fp;
if((fp=fopen("C:\\file25_1.txt","wb+"))==NULL) {printf("不能打开该文件\n");
return;
}
for(i=0;i
fwrite(&cla[i],sizeof(struct cla),1,fp);
fclose(fp);}
menu();
return;
}
3、 显示菜单函数
该函数使用了一个switch 选择语句,的功能是简化其操作性,帮助用户正确使用该软件,使得该软件操作性更
强,更有人性化。具体的程序段如下:
menu();
}
void menu()
{
int c;
printf("****************欢迎************************\n"); printf("* 1)读取数据 *\n"); printf("* 2)输入数据 *\n"); printf("* 3)请 求 *\n"); printf("* 4)退 出 *\n"); printf("***********************************************\n");
printf("请 输 入:\n");/* 在黑屏出现此选项*/ scanf("%d",&c);/*在黑屏上输入随意的数字*/
if(c>4||c
printf("------错误-----!\n");
switch(c)
{
case 1:load_();break;
case 2:write_();break;
case 3:complet_(); break;
case 4:exit(0);
}
}
四、个人总结
通过本次一周的课程设计,自己在C 语言方面又不小进步!不仅对这门课程产生了更浓厚的兴趣,而且对于这
门语言的了解有了个质的飞跃,由以前简单的理论了解转变成了实质上的应用。
首先是对文件的方面有了更深的了解,因为这次的设计任务主要应用的是文件方面的知识,还有结构体的一些知识例如结构体比较的用法。
除此之外,我了解到同一程序要求可以用不同的语句来实现,而我们应该尽量使用一些比较高级的语句,一来可以减少语句数,另外可以减少一些不必要的错误。
五、参考文献
1 谭浩强.C 程序设计.北京:清华大学出版社,2005 2 刘成等.C 语言程序设计实验指导与习题集.北京:中国铁道出版社,2006
3 www.baidu.com
4大学生校内网课社论坛
六、源程序
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
void write_();
void load_();
void complet_();
void menu();
struct cla
{char building[8];
int classroom;
char information[20];
}cla[8];
main()
{
int j;
int i;
menu();
}
void menu()
{
int c;
printf("*******************欢迎
************************\n");
printf("* 1)读取数据 *\n");
printf("* 2)输入数据 *\n");
printf("* 3)请 求 *\n");
printf("* 4)退 出 *\n");
printf("***********************************************\n");
printf("请 输 入:\n");
scanf("%d",&c);
if(c>4||c
printf("------错误-----!\n");
switch(c)
{
case 1:load_();break;
case 2:write_();break;
case 3:complet_(); break;
case 4:exit(0);
}
}
void load_()
{
int i;
FILE *fp;
if((fp=fopen("C:\\file25_1.txt","rb"))==NULL) {printf("不能打开该文件/n");
}
for(i=0;i
fscanf(fp,"%s %d
%s",&cla[i].building,&cla[i].classroom,&cla[i].information) ;
fclose(fp);
printf("教学楼号 教室号 占用信息\n"); for(i=0;i
printf(" %s %d %s\n",cla[i].building,cla[i].classroom,cla[i].information);
menu();
}
void write_()
{FILE *fp;
int i,b;
char a[8],c[20];
printf("教学楼号:");
scanf("%s",a);
printf("教室号:");
scanf("%d",&b);
printf("占用信息:");
scanf("%s",c);
for(i=0;i
{
if((strcmp(cla[i].building,a)==0)&&(cla[i].classroom==b)) {
if((strcmp(cla[i].information,c)==0))
printf("—————对不起, 该教室已被占
用! —————\n");
else
{printf("————————可以使用该教室
————————\n");
strcpy(cla[i].information,c);
}
}
continue;
}
menu();
}
void complet_()
{
int i;
printf("确 定? 1)是 2)不是\n");
scanf("%d",&i);
if(i==2)
return;
if(i==1)
{FILE*fp;
if((fp=fopen("C:\\file25_1.txt","wb+"))==NULL) {printf("不能打开该文件\n");
return;
}
for(i=0;i
fwrite(&cla[i],sizeof(struct cla),1,fp);
fclose(fp);}
menu();
return;
}