67教师工作量管理系统.docx
《67教师工作量管理系统.docx》由会员分享,可在线阅读,更多相关《67教师工作量管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
![67教师工作量管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/29/3e3b8ca9-9ecf-447a-a28f-0f2617767981/3e3b8ca9-9ecf-447a-a28f-0f26177679811.gif)
67教师工作量管理系统
沈阳航空工业学院
课程设计
学号200704033067
班级7403302
姓名王秀龙
指导教师王晓岩
2009年3月5日
沈阳航空工业学院
课程设计任务书
院系:
航空宇航工程学院专业:
飞行器设计与工程班级:
7403302
学号:
200704033067题目:
教师工作量管理系统
一、课程设计时间
2008~09第2学期第1周,共计1周,20学时。
二、课程设计内容
计算每个老师在一个学期中所教课程的总工作量(教师的信息为:
教师号、姓名、所授课程、班级数目、理论课时、实验课时、单个教学任务总课时)。
三、课程设计要求
(1)输入教师教学信息,包括教师号、姓名、所授课程、班级数目、理论课时、实验课时。
(2)插入教师授课信息。
(3)教师工作量计算:
①计算单个教学任务总课时。
计算原则如下表:
班级数目
单个教学任务总课时
2
1.5*(理论课时+实验课时)
3
2*(理论课时+实验课时)
>=4
2.5*(理论课时+实验课时)
②计算一个教师一个学期总的教学工作量。
总的教学工作量等于所有单个教学任务总课时之和。
(4)完整的教师信息显示。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段4
四、课设总结8
五、参考文献9
六、源程序9
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,它们的功能分别是:
添加教师数据函数,删除数据函数,排序函数,成绩查询函数,更改教师数据函数以及显示教师信息函数。
在这些函数当中,前四个函数的实现严格按照题目的要求,而后面的两个函数属于附加功能。
1、输入教师教学信息函数主要实现程序最初运行时教师数据的录入;
2、插入教师授课信息实现的功能是教师信息的追加;
3、教师工作量计算函数按照题目的具体要求实现的是对不同教师工作量的计算;
4、更改教师信息函数可以实现对教师记录中除教师号以外的信息进行修改;
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个教师记录都包含教师号、姓名、所授课程、班级数目、理论课时、实验课时,在程序当中,将教师记录类型定义为结构体类型,添加以及追加的教师信息直接写入d盘的student.dat文件中,其它函数每次对教师记录的访问,其数据来源都是student.dat文件,这样做不但可以保证教师数据的一致性,而且可以对教师数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)添加教师数据函数add
图2添加教师数据函数
(2)工作量计算与显示show
图3工作量计算与显示
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
下面分别进行说明。
1、输入教师教学信息函数
在教师信息文件(student.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的教师信息写入该文件当中;具体的程序段如下:
{FILE*fp;
intn,i;
structstudentstu[N];
if((fp=fopen("d:
\\student.txt","w"))!
=NULL)
{
printf("\n请输入要添加的教师信息数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("\n\n请输入第%d个教师的教师号、姓名、所授课程、班级数目、理论课时、实验课时,用空格分开,并按回车键确认:
\n",i);scanf("%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,&stu[i].shumu,&stu[i].lilun,&stu[i].shiyan);
fprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
}
}
fclose(fp);
}
2、插入教师授课信息函数
该函数的核心内容是对教师信息的补充,且保证与源文件数据格式一直,并保证数据的完整性。
具体程序段如下:
voidcontine()
{FILE*fp;
fp=fopen("d:
\\student.txt","a");
structstudentstu[N];
{intn,i,p;
reads(stu,&n);
printf("请输入要添加的教师信息数量,按回车键确认:
");
scanf("%d",&p);
for(i=n+1;i<=n+p;i++)
{printf("\n请输入第%d个教师的教师号、姓名、所授课程、班级数目、理论课时、实验课时,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,&stu[i].shumu,&stu[i].lilun,&stu[i].shiyan);
fprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
}
}
fclose(fp);
}
3、教师工作量计算函数
通过switch语句判断教师所教的班级数目的不同,乘以不同的基数进而进行计算。
同时显示出教师的所有信息。
具体的程序段如下:
voidshow()
{structstudentstu[N];
inti,n;floats[20];
reads(stu,&n);
printf("\n************************教师信息显示*************************\n");
printf("\n序号教师号姓名所授课程班级数目理论课时实验课时工作量");
for(i=0;i<=n+1;i++)
{switch(stu[i].shumu)
{case2:
s[i]=1.5*(stu[i].lilun+stu[i].shiyan);break;
case3:
s[i]=2.0*(stu[i].lilun+stu[i].shiyan);break;
default:
s[i]=2.5*(stu[i].lilun+stu[i].shiyan);
}
}
for(i=0;iprintf("\n%3d%6s%8s%8s%8d%10.2f%9.2f%9.2f\n",i+1,stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan,s[i]);
getch();
}}
4、更改教师信息函数
可以实现对教师记录中除教师号以外的信息进行修改,进而修改其中的部分信息,具体的程序段如下:
voidchange()
{structstudentstu[N],temp;
intn,i;
FILE*fp;
printf("\n请输入要更改信息的教师号,按回车键确认:
");
scanf("%s",temp.num);
reads(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此教师信息!
");
return;
}
printf("\n请输入更改后教师的姓名、所授课程、班级数目、理论课时、实验课时,加空格,按回车键确认:
\n");
scanf("%s%s%d%f%f",temp.name,temp.kecheng,&temp.shumu,&temp.lilun,&temp.shiyan);
stu[i]=temp;
if((fp=fopen("d:
\\student.txt","w"))==NULL)
{printf("打开文件失败!
");
return;
}
for(i=0;ifprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
fclose(fp);
printf("修改教师信息成功!
\n");
}
四、课设总结
在这次课程设计的过程中,我学习到了很多,也领悟到了很多。
这次是大学中的第一次课程设计,再指导老师的指导下,在自己的不懈努力下,最终完成了自己的设计课题。
在以前的学习中,由于时间的限制,对于子程序的作用并没有很好的认识。
这次的课设,虽然3次的调用并不是很多,但是使我深深的认识到了调用子程序的简便性,很多本来需要繁琐嵌套或循环的地方可以单独在子程序中编写,然后简单的调用就可以达到效果,让我不需要再大量的重复编写,并且程序显得干净,有条理。
通过这次课程设计,我可以单独的完成一些简单的程序,特别是我比以前能更好的使用指针并且能更好的了解文件并能够熟练掌握循环结构的使用。
首先对于指针我形成了两点认识:
(1)指针是c语言功能强大的主要表现,指针的一般手段是通过复量名词间变量。
(2)对于文件我了解最深的则是文本文件。
它是先内存单元的数据转换成文本形式,然后将文本数据输出到外存的文件。
除此之外我也对模块化程序设计方法有了进一步了解。
我相信在这次c语言课程设计中我所学到的东西会为我在以后学习计算机的道路中打下坚实的基础,让我对计算机编程更为感兴趣。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#include
#defineN20
intm;
structstudent
{charnum[20];
charname[10];
charkecheng[20];
intshumu;
floatlilun;
floatshiyan;
};
voidmenu();
voidreads(structstudentstu[N],int*n);
voidadd();
voidcontine();
voidshow();
voidchange();
voidmain()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{case1:
add();break;
case2:
contine();break;
case3:
show();break;
case4:
change();break;
case5:
exit(0);
default:
printf("输入错误,请输入列表中存在的序号!
\n");
}
}
}
voidmenu()
{printf("******************************************************************\n");
printf("************您好~~~欢迎您登录教师工作量管理系统***************\n");
printf("******************************************************************\n");
printf("******************************************************************\n");
printf("************************教师信息管理系统**********************\n");
printf("\n1添加教师数据");
printf("\n2插入授课信息");
printf("\n3工作量计算与显示");
printf("\n4更改教师信息");
printf("\n5退出\n");
}
voidreads(structstudentstu[N],int*n)
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\student.txt","r"))==NULL)
{printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,&stu[i].shumu,&stu[i].lilun,&stu[i].shiyan);
}
*n=i;m=i;
fclose(fp);
}
voidadd()
{FILE*fp;
intn,i;
structstudentstu[N];
if((fp=fopen("d:
\\student.txt","w"))!
=NULL)
{
printf("\n请输入要添加的教师信息数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("\n\n请输入第%d个教师的教师号、姓名、所授课程、班级数目、理论课时、实验课时,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,&stu[i].shumu,&stu[i].lilun,&stu[i].shiyan);
fprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
}
}
fclose(fp);
}
voidshow()
{structstudentstu[N];
inti,n;floats[20];
reads(stu,&n);
printf("\n************************教师信息显示*************************\n");
printf("\n序号教师号姓名所授课程班级数目理论课时实验课时工作量");
for(i=0;i<=n+1;i++)
{switch(stu[i].shumu)
{case2:
s[i]=1.5*(stu[i].lilun+stu[i].shiyan);break;
case3:
s[i]=2.0*(stu[i].lilun+stu[i].shiyan);break;
default:
s[i]=2.5*(stu[i].lilun+stu[i].shiyan);
}
}
for(i=0;iprintf("\n%3d%6s%8s%8s%8d%10.2f%9.2f%9.2f\n",i+1,stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan,s[i]);
getch();
}
voidcontine()
{FILE*fp;
fp=fopen("d:
\\student.txt","a");
structstudentstu[N];
{intn,i,p;
reads(stu,&n);
printf("请输入要添加的教师信息数量,按回车键确认:
");
scanf("%d",&p);
for(i=n+1;i<=n+p;i++)
{printf("\n请输入第%d个教师的教师号、姓名、所授课程、班级数目、理论课时、实验课时,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,&stu[i].shumu,&stu[i].lilun,&stu[i].shiyan);
fprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
}
}
fclose(fp);
}
voidchange()
{structstudentstu[N],temp;
intn,i;
FILE*fp;
printf("\n请输入要更改信息的教师号,按回车键确认:
");
scanf("%s",temp.num);
reads(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此教师信息!
");
return;
}
printf("\n请输入更改后教师的姓名、所授课程、班级数目、理论课时、实验课时,加空格,按回车键确认:
\n");
scanf("%s%s%d%f%f",temp.name,temp.kecheng,&temp.shumu,&temp.lilun,&temp.shiyan);
stu[i]=temp;
if((fp=fopen("d:
\\student.txt","w"))==NULL)
{printf("打开文件失败!
");
return;
}
for(i=0;ifprintf(fp,"\n%s%s%s%d%f%f",stu[i].num,stu[i].name,stu[i].kecheng,stu[i].shumu,stu[i].lilun,stu[i].shiyan);
fclose(fp);
printf("修改教师信息成功!
\n");
}