1、中北大学程序设计实训说 明 书学 院 、 系 : 软件学院专 业 : 软件工程学 生 姓 名:学 号:1314010xxx设 计 题 目 : 某学院教学信息管理系统起 迄 日 期 : 2014年 11月 21日2015 年 1月 17日指 导 教 师 : 何志英2015 年 1 月 10 日1一、选题要求题目一:某学院教学信息管理系统功能:1、每一条记录包括一位教师的职工号、姓名、职称、性别、3 门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果) ,教学效果综合评分。 2、输入功能:可以一次完成若干条记录的输入。 3、显示功能:完成全部教师记录的显示。 4、查找功能:完成按
2、姓名或课程查找教师的相关记录,并显示。 5、排序功能:按职工号或教学效果综合评分进行排序。 6、插入功能:按教学效果综合评分高低插入一条教师记录。 7、将教师记录存在文件中。 8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 要求:1、用 C 语言实现系统; 2、利用结构体数组实现教学信息的数据结构设计; 3、系统具有增加,查询,插入,排序等基本功能; 4、系统的各个功能模块要求用函数的形式实现; 5、将教学信息存在文件中。 考试题目要求:1、按教师性别统计统计评分的总算2、删除一个函数,程序仍能正常运行二、程序设计方法及主要函数介绍程序设计方法1. 数据结构的
3、设计:程序要求文档中要求使用结构体数组完成设计,每一条记录包括一位教师的职工号、姓名、职称、性别、3 门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果) ,教学效果综合评分。数据结构设计如下:typedef struct Course /课程的定义与描述 char courseName40; /课程名称2int semester; /开课学期char type8; /课程性质char teceff; /教学效果 Course; typedef struct Teacher /教师的定义与描述 char name8; /姓名 int num; /职工号char sex2; /
4、性别int tecscore; /教学效果综合评分char position8; /职称 Course course3; /3 门主讲课程 Teacher; 2. 主函数与其他函数的关系:3. 结构化的程序设计方法将实用功能封装在每一个子函数中,主函数通过调用子函数来实现相对应的功能。体现了“自顶向下,逐步求精”的结构化程序设计思想。4. “高内聚,低耦合”的程序设计原则将各个使用功能封装在函数中来让主函数调用,而不是将所有实用功能聚集在主函数中,使得各个模块相对独立,耦合性得以降低,有利于程序的维护。3主要函数介绍:1.以卡片形式输出全部教师信息 注:由于版面原因,输出函数显得有些乱,但是这
5、并不影响程序的运行结果,真实的运行结果是很整齐的。 (下图是 DevC+ V5.5.3 版本下的编码界面)void PrintInfor(Teacher T) /输出全部教师信息(以卡片形式) printf(“-“);printf(“| 所有教师记录 |“);printf(“-+“);printf(“| 全院现有在职教师%d 名,全部信息如下 |“,TeacherNum);printf(“-4-+nn“);for(int i=0;i请按要求输入教师信息:n“);printf(“-请输入教师的职工号(3 位数字): “);scanf(“%d“,printf(“-请输入教师的姓名: “);scan
6、f(“%s“,TB.name); printf(“-请输入教师的性别(男或女): “);scanf(“%s“,TB.sex);printf(“-请输入教师的职称: “);scanf(“%s“,TB.position);for(int j=0;j请输入该教师第%d 门主讲课程的信息: n“,j+1);InputClassInfor(TB.coursej);printf(“n“);/for printf(“-请输入教师的教学效果综合评分(0-100): “);scanf(“%d“,printf(“-为保证结果正确,程序将对您的教师按教学效果综合评分进行排序:n“);Teacher temp;for
7、(int i=0;i=Ti.tecscore)flag=i;/if /forprintf(“插入位置:%dn“,flag);if(flag=-1)flag=TeacherNum; /在末尾插入 elsefor(int i=TeacherNum-1;i=flag;i-) /移动插入位置后面的所有数据strcpy(Ti+1.name,Ti.name); Ti+1.num=Ti.num;strcpy(Ti+1.sex,Ti.sex);Ti+1.tecscore=Ti.tecscore;strcpy(Ti+1.position,Ti.position);for(int j=0;j插入后的结果如下:n“
8、);PrintInfor(T);/InsertInfor三、程序源代码(包括注释)/-引入头文件- #include /使用了 system( )和 exit( )函数#include /使用了 printf( )、scanf( ) 以及文件读写函数#include /使用了 strcmp( )、strcpy( )等字符串处理函数/-宏定义- #define MAXTEACHERNUM 300 /一个学院最大教师数,上限可调 /-自定义数据类型- /- 教师和课程的定义 - typedef struct Course /课程的定义与描述 char courseName40; /课程名称int
9、semester; /开课学期char type8; /课程性质char teceff; /教学效果 Course; 10typedef struct Teacher /教师的定义与描述 char name8; /姓名 int num; /职工号char sex2; /性别int tecscore; /教学效果综合评分char position8; /职称 Course course3; /3 门主讲课程 Teacher; /-部分全局变量- int TeacherNum; /教师记录条数/-基本操作及其子函数- /-1.输入教师信息 - void InputClassInfor(Course
10、 scanf(“%s“,c.courseName); getchar( ); /吃掉回车符printf(“请输入课程的学期(输入数字 1-8 中一个): “);scanf(“%d“,printf(“请输入课程的学科性质(输入非学位课或学位课) : “);scanf(“%s“,c.type); getchar( ); /吃掉回车符fflush(stdin);printf(“请输入课程的教学效果(输入 A、B、C、D 中任一个) : “);c.teceff=getchar( ); getchar( ); /吃掉回车符/InputClassInforvoid InputInfor(Teacher T
11、MAXTEACHERNUM) /输入教师信息 int i=0,flag=1;TeacherNum = 0;char ch,ch1;11while(flag) /不断输入教师信息,直到输入“n“ printf(“-请输入教师的职工号(3 位数字): “);scanf(“%d“,printf(“-请输入教师的姓名: “);scanf(“%s“,Ti.name); printf(“-请输入教师的性别(男或女): “);scanf(“%s“,Ti.sex);printf(“-请输入教师的职称: “);scanf(“%s“,Ti.position);for(int j=0;j请输入该教师第%d 门主讲课
12、程的信息: n“,j+1);InputClassInfor(Ti.coursej);printf(“n“);/for printf(“-请输入教师的教学效果综合评分(0-100): “);scanf(“%d“,TeacherNum+; /教师记录+1 i+; /计数器自增 fflush(stdin); printf(“您还想继续输入吗?(Y(y)/N(n)“);ch=getchar();getchar(); /吃掉回车符 if(ch=N|ch=n) /确认是否退出 flag=0; /修改标志,结束循环 /while/InputTecInfor/-2.输出教师信息- void PrintInfo
13、r(Teacher T) /输出全部教师信息(以卡片形式) printf(“-“);12printf(“| 所有教师记录 |“);printf(“-+“);printf(“| 全院现有在职教师%d 名,全部信息如下 |“,TeacherNum);printf(“-+nn“);for(int i=0;i请输入教师姓名:“);scanf(“%s“,name1);for(int i=0;i请输入教师职工号:“);scanf(“%d“,for(int i=0;iTj.tecscore)temp=Tj;Tj=Tj+1; Tj+1=temp; 19/if/forfor(int i=0;i请按要求输入教师信
14、息:n“);printf(“-请输入教师的职工号(3 位数字): “);scanf(“%d“,printf(“-请输入教师的姓名: “);scanf(“%s“,TB.name); printf(“-请输入教师的性别(男或女): “);scanf(“%s“,TB.sex);printf(“-请输入教师的职称: “);scanf(“%s“,TB.position);for(int j=0;j请输入该教师第%d 门主讲课程的信息: n“,j+1);InputClassInfor(TB.coursej);printf(“n“);/for 20printf(“-请输入教师的教学效果综合评分(0-100)
15、: “);scanf(“%d“,printf(“-为保证结果正确,程序将对您的教师按教学效果综合评分进行排序:n“);Teacher temp;for(int i=0;i=Ti.tecscore)flag=i;/if /forprintf(“插入位置:%d“,flag);if(flag=-1)flag=TeacherNum; /在末尾插入 elsefor(int i=TeacherNum-1;i=flag;i-) /移动插入位置后面的所有数据strcpy(Ti+1.name,Ti.name); Ti+1.num=Ti.num;strcpy(Ti+1.sex,Ti.sex);Ti+1.tecsc
16、ore=Ti.tecscore;strcpy(Ti+1.position,Ti.position);for(int j=0;j正在载入数据.n“);fscanf(fp1,“%d“, /先载入教师数 for(int i=0;i按照性别统计评分的总算结果如下:n“);printf(“-男性教师的信息如下:n“);for(int i=0;i女性教师的信息如下:n“);24for(int i=0;i恭喜您,您需要的信息统计完毕!n“);/TecScoreEstimate int main(int argc,char * argv)bool flag1=true; /定义标志,用以控制菜单执行Teach
17、er TMAXTEACHERNUM; /教师的结构体数组 char ch;TeacherNum=0;char MainMenu= “nttt 软件学院教学信息管理系统nn“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *“* *“* 1.打开文件并载入数据 *“* 2.输入教学信息 *“* 3.显示学院的全部教师记录 *“* 4.查找教师信息 *“* 5.按要求教师进行排序 *“* 6.按教学效果综合评分高低插入一条教师记录 *“* 7.保存到文件 *“* 8.按照性别统计评分总算 *
18、“* 9.退出系统 *“* *“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n“25“请选择您想要执行的操作:(请输入 1-8 中任意一个整数,并按回车确定)“; while(flag1)printf(MainMenu);switch(ch=getchar(),getchar(),ch)case 1:OpenFile(T); /打开文件,读取文件到内存 break;/ casecase 2:InputInfor(T); /输入教师信息 break;/ casecase 3:Prin
19、tInfor(T); /输出教师信息 break;/ casecase 4:SearchInfor(T); /查找教师信息 break;/ casecase 5: /考试要求:删除一个函数(已删除 SortInfor() char ch;int flag=1;while(flag)system(“cls“);printf(“nttt1.按职工号排序教师信息n“);printf(“ttt2.按教学效果综合评分排序教师信息n“); printf(“ttt3.返回主菜单n“);printf(“请选择您需要的操作:“);switch(ch=getchar(),ch)26case 1:Sort_N(T,
20、1); /按职工号排序教师信息break;/case 1case 2:Sort_N(T,2); /按教学效果综合评分排序教师信息break;/case 2case 3:flag=0;break;/case 3default: printf(“非法输入!n“);/default/switchsystem(“PAUSE“);fflush(stdin); /while break; / casecase 6:InsertInfor(T); /按教学效果综合评分高低插入一条教师记录 break;/ casecase 7:SaveFile(T); /保存文件功能,将教师信息保存到文件 break;/ c
21、asecase 8:27TecScoreEstimate(T); /按照性别统计评分总算break; / casecase 9:printf(“tttt 谢谢使用,再见!“); /退出功能 exit(0);/ casedefault:system(“cls“); /清屏,重新打印菜单 printf(“您输入了非法信息,请重新输入!n“); /提示用户输入非法 break;/default/switch fflush(stdin); /清空缓冲区,避免多输入的字符影响菜单运行 system(“PAUSE“); /让程序暂停,方便查看结果 system(“cls“); /查看完成后清屏,重新打印菜单,进行下一次操作 /while return 0;/main四、程序运行界面1.菜单演示282.测试打开文件功能3.测试输入教师记录功能29