教师教学管理系统实验报告_第1页
教师教学管理系统实验报告_第2页
教师教学管理系统实验报告_第3页
教师教学管理系统实验报告_第4页
教师教学管理系统实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通达学院程序设计报告( 2014 / 2015 学年 第 一 学期) 题 目:教师教学工作管理系统 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 日 期 20141217 评 分 细 则评分项成绩遵守机房规章制度(5分)上机时的表现(5分)学习态度(5分)程序准备情况(5分)程序设计能力(10分)团队合作精神(5分)课题功能实现情况(10分)算法设计合理性(10分)用户界面设计(10分)报告书写认真程度(5分)内容详实程度(10分)文字表达熟练程度(10分)回答问题准确度(10分)评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格学生管理系统1、 课题内容和要

2、求请使用C/C+编写一系统,实现教师教学工作管理,软件的入口界面应包括如下几个方面。(1) 功能要求(1)基本信息维护要求:教师以及教学工作信息数据以文件的形式保存,能实现教师信息以及教学工作的维护。此模块包括子模块有:增加教师信息,删除教师信息,修改教师信息。(2) 教学工作信息管理维护要求:1)输入/修改/删除教师上课信息,包括课程名称,任课教师,职称,上课时间,选课学生人数,课程编号,课程类型,课时数,并根据这些信息计算该课程的业绩点数(有相关公式)。2) 输入/修改/删除教师毕设信息,所带毕设学生名、学号、课题类型、课题名称、毕设总周数、指导教师信息,根据这些信息计算毕设工作业绩点数。

3、3) 教学绩点统计:要求:输入教师姓名和时间,统计其在该时间内的所有教学工作信息。统计所有教师指定学年内所有的业绩点,并按照由高到低进行排序。(2) 其他要求(1) 只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读。(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 学生可自动增加新模块。2、 需求分析系统管理模块,学生基本信息管理模块,课程管理模块,学生成绩管理模块和教工日常管理模块。数据的操作主要是:数据添加、数据修改、数据查询。三、概要设计教师日常教学管理系统基本情况所带毕业设计系统管理课程管理学生基本信息学生成绩管理教师日常信息注册新用户用户登录退出基本课程设置

4、班级课程设置学生基本信息的录入成绩管理成绩查询成绩分析教工基本情况科研业务情况4、 详细设计#include #include #include #include #define LEN sizeof(struct teacher)/宏定义结构体字节数int n=0;struct teacher/定义结构体long num;/教师号char name20;/姓名char sex5;/性别int age;/年龄char edu20;/学历char title20;/职称long wage;/工资char addr100;/地址 char telep15;/电话struct teacher *ne

5、xt;/指向下一个结点*head=NULL;void key()/口令检查的函数int i;long a;for(i=0;inext) if(fwrite(p,sizeof(struct teacher),1,fp)!=1) printf(n此处数据有误n);fclose(fp);exit(0);void read()/从文件读出数据的函数struct teacher teach299,temp;int i=0;FILE *fp;char filename20;printf(n请输入存有教师信息的文件名:);scanf(%s,filename); if(fp=fopen(filename,rb

6、)=NULL)printf(n无法打开文件n);exit(0);fseek(fp,-sizeof(struct teacher),2);/*将位置指针从文件末尾后退一个结构体的字节数*/fread(&temp,sizeof(struct teacher),1,fp);/*从所指向的文件中读出数据存储到结构体变量temp中*/fseek(fp,0,0);/将位置指针移到文件的开头if(fread(&teachi,sizeof(struct teacher),1,fp)=1)/*判断文件开头读入的数据是否为空*/printf(n存有的教师信息如下:n);while(teachi.num!=temp

7、.num)/进行循环读取文件printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,teachi.num,,teachi.sex,teachi.age,); printf(职称:%sn 月薪:%ld,住址:%s,电话:%sn,teachi.title,teachi.wage,teachi.addr,teachi.telep); i=i+1; fread(&teachi,sizeof(struct teacher),1,fp);/*从文件中读入数据存储到结构体变量teach【i】中*/输出文件中的最后一个信息 printf(教师号:

8、%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,teachi.num,,teachi.sex,teachi.age,); printf(职称:%sn 月薪:%ld,住址:%s,电话:%sn,teachi.title,teachi.wage,teachi.addr,teachi.telep); fclose(fp);else printf(该文件中无教师信息n);/文件为空时输出此处void creat()/录入教师信息的函数struct teacher *p1,*p2,*p3;p1=p2=(struct teacher *)malloc(LEN

9、);/*申请一个结构体字节数的空间用来存储一个教师的信息*/printf(请输入一位教师的教师号(结束录入请输入0):);scanf(%ld,&p1-num);if(p1-num!=0)/判断用户是要结束录入还是要存储信息if(head=NULL) head=p1;/*判断链表是否为空,是则将链表头指向p1*/else /链表不为空则将链表尾指向p1p3=head;/p3用来记录链表的尾部while(p3-next!=NULL)/*若p3不是链表尾则将p3指向 下一个结点*/p3=p3-next;p3-next=p1;/将最后一个结点指向p1while(p1-num!=0)/判断用户是否结束录

10、入功能/录入该教师号的教师对应的信息printf(姓名: );scanf(%s,p1-name);printf(性别:);scanf(%s,p1-sex);printf(年龄:);scanf(%d,&p1-age);printf(学历:);scanf(%s,p1-edu);printf(职称:);scanf(%s,p1-title);printf(月薪:);scanf(%ld,&p1-wage);printf(住址:);scanf(%s,p1-addr);printf(电话:);scanf(%s,p1-telep);n=n+1;/给统计录入的教师数n加一/*判断是否为第一个录入的信息,是则将链

11、表头指向p1,否则将p2指向p1*/ if(n=1) head=p1; else p2-next=p1;p2=p1;/p2用来记录链表的最后一个结点p1=(struct teacher *)malloc(LEN);/重新申请空间printf(请输入一位教师的教师号(结束录入请输入0): );scanf(%ld,&p1-num);p2-next=NULL;/将最后一个结点指向空void print()/输出教师信息的函数struct teacher *p;int i;p=head;if(head!=NULL)/判断链表是否为空 printf(n这%d位教师的信息为:n,n);doprintf(教

12、师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep);p=p-next;/将下一个结点的首地址赋给pwhile(p!=NULL);/到链表尾时结束循环else/链表为空时执行以下部分printf(n你此次登录系统还没有录入教师信息,可进行以下操作:n);printf( 1:【浏览以前保存在文件中的教师信息】 2:【开始录入教师信息】n);printf( 3:【退出系统】 4:【返回菜单】n);

13、printf(请选择:);scanf(%d,&i);while(i4)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);if(i=1) read();/调用从文件读取数据的函数 if(i=2) creat();/调用录入信息的函数if(i=3) exit(0);/退出系统void del()/删除教师信息的函数struct teacher *p1,*p2;long i;if(head=NULL)/判断链表是否为空printf(n还未录入过教师信息n);/链表为空时输出return;printf(请输入要删除教师信息的教师号:);scanf(%ld,&i);p1=head

14、;while(i!=p1-num)/直到p1指向的结点是要删除的信息位置if(p1-next=NULL) break;/p1的下个结点为空则退出循环p2=p1;/p2用来记录p1的前一个结点p1=p1-next;/p1指向下一个结点if(i=p1-num)/判断p1是否为要删除的信息if(p1=head) head=p1-next;/*若p1为头结点则将头指针指向p1的下一个结点*/else p2-next=p1-next;/*p1非头结点则将p1后面的结点连接到p1前一个结点的后面*/printf(n已删除教师号为%ld的教师信息n,i);n=n-1;/记录教师数的n要减一/p1不是要删除的

15、信息则表示要删除的信息不再链表中else printf(n已录入的教师信息中没有教师号为%ld的n,i);return;void sort1()/按教师号进行排序的函数struct teacher *p1,*p2,*p3,*p4;int i,j;if(head=NULL)printf(n还未录入过教师信息n);return;if(head-next!=NULL) /判断是否只有一个信息/用冒泡法排序p1=head;/p1记录用来比较的两个结点中的前面一个 p2=head-next;/p2记录比较的两个结点中的后面个 for(i=1;in;i+)/实现n-1趟比较的外循环 for(j=0;jnu

16、mp2-num)/*比较相邻两个结点中教师号大小*/当p1的教师号大时则对调两个结点的位置if(p1=head) head=p2;else p3-next=p2;/*p1为头结点时则将头指针指向p2,否则就将p2连接到用来记录p1前一个结点的p3的后面*/p4=p2-next;/p4用来记录p2后面的结点p2-next=p1;/p1的结点换到原来p2的位置p1-next=p4;/原来p2后面的结点连接到p1p3=p2;/p3记录下p2的位置p2=p4;/p2指向原来位置的下一个结点else/*p1中教师号没有打过p2中教师号,则将p1,p2都指向它们各自位置的下一个结点*/p3=p1;/记录p

17、1后移一位后它前个结点的位置p1=p2;p2=p2-next;p1=head;/p1指向链表头,开始下一趟外循环的准备p2=p1-next;/p2指向链表第二个结点printf(n按教师号排序后的教师信息如下:n);print();/调用教师信息浏览函数void sort2()/按月薪排序的函数,算法跟按教师号排序的一样struct teacher *p1,*p2,*p3,*p4;int i,j;if(head=NULL)printf(n还未录入过教师信息n);return;if(head-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) fo

18、r(j=0;jwagep2-wage)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2=p1-next;printf(n按月薪排序后的教师信息如下:n);print();void sort3()/按年龄排序的函数,算法跟按教师号排序的一样struct teacher *p1,*p2,*p3,*p4;int i,j; if(head=NULL)printf(n还未录入过教师信息n);return;if(head

19、-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) for(j=0;jagep2-age)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2=p1-next;printf(n按年龄排序后的教师信息如下:n);print();void choose1()/选择排序方式的函数int i;printf( 排序方式n);printf( 1:【按教师号排序】 2:【按年龄

20、排序】n);printf( 3:【按月薪排序】n);printf(请选择:);scanf(%d,&i); while(i3)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);switch(i) case 1:sort1();break; case 2:sort3();break; case 3:sort2();break;void search1()/按教师号查找的函数struct teacher *p;long i;/存储用户输入的想要删除的教师号if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的教师信息的教师

21、号:); scanf(%ld,&i);for(p=head;p!=NULL;p=p-next) /p顺序指向结点与i比较,找出有i的数据的结点并输出if(p-num=i) printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep);return;printf(已录入的教师信息中不存在该教师号n);void search2()/按姓名查找的函数struct teacher *p;cha

22、r i20;/记录用户输入的想要删除的姓名int j=0;/j用来记录找到了多少个信息if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的信息的教师姓名:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-name,i)=0)/比较p指向的结点中的姓名跟i的是否一致,是则输出 printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:

23、%s,电话:%sn,p-wage,p-addr,p-telep);j=j+1;/每输出一个教师的信息则j加一if(j=0) printf(已录入的教师信息中不存在该姓名的教师n);void search3()/按职称查找的函数,算法与按姓名查找的一样struct teacher *p;char i20;int j=0;if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的信息的教师职称:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-title,i)=0) printf(教师号:

24、%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep); j=j+1;if(j=0) printf(已录入的教师信息中不存在该职称的教师n);void search4()/按年龄查找的函数,算法与按教师号查找的一样struct teacher *p;int i,j=0;if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的信息的教师年龄:); sc

25、anf(%d,&i);for(p=head;p!=NULL;p=p-next)if(p-age=i)printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep); j=j+1;if(j=0) printf(已录入的教师信息中不存在该年龄的教师n);void choose2()/选择查找方式的函数int i;printf( 查询方式n);printf( 1:【按教师号查询】 2:【按姓名

26、查询】n);printf( 3:【按职称查询】 4:【按年龄查询】n);printf(请选择:);scanf(%d,&i);while(i4)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);switch(i) case 1:search1();break; case 2:search2();break; case 3:search3();break;case 4:search4();break;void menu()/菜单栏函数int i;printf( 菜单n);printf( 1:【教师信息录入】 2:【教师信息输出】n);printf( 3:【教师信息删除】 4

27、:【查询个人信息】n);printf( 5:【排序】 6:【退出系统】n);printf(请选择: );scanf(%d,&i);while(i6)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);switch(i) case 1:creat();break; case 2:print();break; case 3:del();break; case 4:choose2();break; case 5:choose1();break; case 6:save();menu();int shoudsave=0; /* */ struct student char num

28、10;/* 学号 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新时间 */ ; typedef struct node struct student data; struct node *next; Node,*Link; void smenu() printf(t3查询学生资料ttttt4修改学生资料n); printf(t5显示学生资料ttttt6统计学生资料n); printf(t7排序语文成绩ttttt8排序数学成绩n);

29、 printf(t9排序英语成绩ttttt10选出分段分数n); printf(t11保存学生资料ttttt12帮助信息ttn); printf(t0退出系统tttttttn); printf(*n); void printstart() printf(-n); void Wrong() printf(n=提示:输入错误!n); void Nofind() printf(n=提示:没有找到该学生!n); void printc() /* 本函数用于输出中文 */ printf(学号t 姓名t 性别 语文成绩 数学成绩 英语成绩 总分 平均分n); void printe(Node *p)/*

30、本函数用于输出英文 */ printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave); Node* Locate(Link l,char findmess,char nameornum) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */ Node *r; if(strcmp(nameornum,num)=0) /* 按学号查询 */ r=l-next; while(r!=

31、NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查询 */ r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加学生 */ Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 将

32、指针置于最末尾 */ while(1) printf(请你输入学号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(=提示:学号为%s的学生已经存在,若要修改请你选择4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,n

33、um); printf(请你输入姓名:); scanf(%s,); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入语文成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade

34、+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /* 信息输入已经完成 */ p-next=NULL; r-next=p; r=p; shoudsave=1; void Qur(Link l) /* 查询学生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按学号查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 学号 */ printf(请你输入要查找的学

35、号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /* 姓名 */ printf(请你输入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printsta

36、rt(); else Nofind(); else Wrong(); void Del(Link l) /* 删除 */ int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按学号删除n=2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next

37、; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); shoudsave=1; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); shoudsave=1; else Nofind(); else Wrong(); void Mo

38、dify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,); scanf(%s,); getchar(); printf(请你输入新

39、性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); printf(请你输入新的语文成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrad

40、e+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提示:资料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l) int count=0; Node *p; p=l-next; if(!p) printf(n=提示:没有资料可以显示!n); return; printf(tttt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); pri

41、ntf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */Node *r=l-next; if(!r) printf(n=提示:没有资料可以统计!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-统计结果-n); printf(总分最高者:t%s %d分n,,pt-data.totle); printf(平均分最高者:t%s %d分n,,pa-data.ave); printf(英语最高者:t%s %d分n,,pe-data.egrade); printf(数学最高者:t%s %d分n,pm-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论