资源描述
沈 阳 航 空 航天大 学
课程设计
学 号:
班 级:
姓 名:
指导教师:
2011年 3 月11日
沈阳航空航天大学
课程设计任务书
系:动力与能源工程学院 专业:飞行器动力工程
班级:
学号: 题目:教师工作量管理系统
一、课程设计时间
2010~11第2学期第1周,即3月7日~3月11日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
计算每个老师在一个学期中所教课程的总工作量(教师的信息为:教师号、姓名、所授课程、班级数目、理论课时、实验课时、单个教学任务总课时).
(1)输入教师教学信息,包括教师号、姓名、所授课程、班级数目、理论课时、实验课时.
(2)插入教师授课信息.
(3)教师工作量计算:
① 计算单个教学任务总课时.计算原则如下表:
班级数目
单个教学任务总课时
2
1.5*(理论课时+实验课时)
3
2*(理论课时+实验课时)
〉=4
2。5*(理论课时+实验课时)
② 计算一个教师一个学期总的教学工作量。总的教学工作量等于所有单个教学任务总课时之和.
(4)完整的教师信息显示。
三、课程设计要求
程序质量:
1.贯彻结构化程序设计思想.
2.用户界面友好,功能明确,操作方便;可以加以其它功能或修饰.
3.用户界面中的菜单至少应包括“输入教师信息”、“插入授课信息”、“工作量计算与显示"、“退出”4项。
4.代码应适当缩进,并给出必要的注释,以增强程序的可读性.
课程设计说明书:
² 课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、成绩
六、教师评语
沈阳航空航天大学设计用纸
目录
一、需求分析1
二、设计分析2
三、主要界面截图4
四、技术要点6
五、个人总结9
六、参考文献10
七、源程序11
14
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统主要适用于学校教务处的工作人员统计教师的课程量,系统首先应功能齐全,操作简便,还应该具有安全、稳定的特点。
1. 安全性分析
系统管理的数据涉及到学院的所有教师,数据量较大且是一种基础性数据,能够为其它方面的学生管理工作提供重要参考,所以要通过设置密码等手段确保数据不能被随意的删减和修改.
2。 稳定性分析
指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃.
3.主要功能分析
(1)数据输入:在使用系统时,操作人员需要根据系统提示,按要求输入教师的个人信息以及教师的授课信息.若输入出现错误,操作人员可以根正,但必要是需要退出系统后重新进入系统输入.
(2)数据保存:对于输入的数据,或被修改的数据以及统计结果应该保存到某个磁盘文件中,实现永久存储。文件的具体格式题目未作具体要求,所以可采用随机文件,也可采用文本文件.不管采用哪种文件形式,文件中的数据应有固定的格式,以便于程序自动读取或人工阅读.
二、设计分析
主要有6个功能模块,每个模块对应一个C语言自定义函数.这些函数原型及其功能简述如下:
1、程序总体结构图(传统流程图或N—S框图)
图1程序总体结构图
2、主要功能模块框图(传统流程图或N—S框图)
(1)输入教师信息模块
输入教师号
p[i]。jsh=tea。jsh
输入教师姓名
strcpy(p[i]。name,tea。name)
输入该名教师所授课程数目
p[i]。a=tea。a
图2输入教师信息模块
(2)插入授课信息模块
输入课程题目
strcpy(w[j]。kctm,kc.kctm)
输入该课程的班级数目
w[j]。bjsm=kc。bjsm
输入该课程理论课时数目
w[j].llks=kc。llks
输入该课程实验课时数目
w[j]。syks=kc。syks
图3插入授课信息模块
(3)教师工作量计算模块
图4教师工作量计算模块
三、主要界面截图
图1 程序主界面
图2 错误提示界面
图3 退出系统界面
图4 教师信息输入界面(输入系统校验数据)
图5 信息输出界面
四、技术要点
1、结构体的应用
定义了结构体用来描述教师的姓名、教师号、所授课程、班级数目、理论课时、实验课时.具体的定义如下:
struct kcxx
{
char kctm[15];
int bjsm;
int llks;
int syks;
};
struct teacher
{
int jsh;
char name[15];
int a;
struct kcxx shouke[5];
};
struct teacher tea[100];
struct teacher *p;
float sum[100];/*存放教师的工作量*/
所定义的结构体主要用于定义数组。
2、文件操作
此程序的文件操作主要是对教师信息及其授课信息的保存,将系统使用的数据及统计结果录入磁盘文件中以便查阅。具体的程序如下:
void save(float *sum,int n,int *b)
{
int z,i;
FILE *fp, *fc, *fq;
printf("请确认信息,如需文件保存请输入1并回车,无需保存输入2并回车。\n”);
/*教师信息及统计结果的保存*/
scanf(”%d”,&z);
if(z==1)
{
if((fp=fopen(”teacher_xx”,”wb"))==NULL)
{
printf(”文件打开失败\n”);
printf(”未保存\n”);
}
else
{
fc=fopen(”kechen_xx","wb”);
fq=fopen("teacher_gzl”,"wb");
for(i=1;i〈=n;i++)
if(fwrite(&tea[i],sizeof(struct teacher),1,fp)!=1)
printf(”文件输出失败\n");
else
fwrite(&sum[i],4,1,fq);
fclose(fp);
fclose(fc);
fclose(fq);
printf(”保存成功\n”);
}
}
else
printf(”未保存\n”);
}
3、教师教学任务的算法
教师教学任务的计算是根据教学计算原则计算的.首先自定义函数计算单课时的教学任务,然后在主函数中循环调用该函数计算出所有课时的任务量,最后将其求和即可。具体程序如下:
自定义函数部分:
float dan(int bjs,int llks,int syks)
{
float dgks;
if(bjs>=4)
dgks=(llks+syks)*2.5;
else
if(bjs>=3)
dgks=2*(llks+syks);
else
dgks=(llks+syks)*1。5;
return dgks;
}
主函数调用部分:
case 3:/*计算*/
{if((cd1==1)&&(cd2==2))
{for(e=1;e〈=n;e++)
{for(f=1;f〈=b[e];f++)/*e指定的是人数,f指定的是课程数*/{c=p[e]。shouke[f]。bjsm; a[f]=dan(c,p[e]。shouke[f]。llks,p[e].shouke[f]。syks);} sum[e]=0;
for(f=1;f〈=b[e];f++)
sum[e]+=a[f];
printf(”第 %d 位教师的工作量=%。2f\n",e,sum[e]);
五、个人总结
经过一周的课程设计后,我对C语言有了更加深入的认识。以前我们学习C语言只是仅限于书本的理论认识,上机调试一些简单的程序,对于把书中的知识真正运用到现实中去,去解决生活中的问题还未有过。这次的课程设计让我们切身感觉到了理论知识的实际作用,那些生活中的许多现象也不再那么神奇。
由于C语言学了有些时日,所以在设计过程中参考了一些资料。面对这样陌生的课题,刚开始也是茫然一片,思路很混乱,不知道从何处开始.经过一段时间的思考,我确定了编程思路,先解决程序的各分支问题,然后再将各部分的程序组合在一起从而完成程序的设计.当然,这也不是顺利的,编程需要无数次的修改,有时候还要完全推翻之前的模块设计重新开始,有时候也会因为出现一点小错误而无法通过编译时对着电脑苦思冥想。不过付出终是有回报的,自己编写的程序基本完成了所需要的功能,至于程序的一些优化和修饰就感觉简单多了.
虽然变好了程序,获得了运行的结果,但是我也自知其中存在许多的不足之处,比如程序过于冗长,运行过程中界面有些混乱,容易让操作人员产生误解,某些功能不太完善。当然也有其有点所在,如程序结构清晰,有明确的操作提示等。
总之,经过几天的课程设计,我对C语言有了更加浓厚的兴趣,它是一件非常有用的工具,学好它对我们以后的工作大有裨益。
六、参考文献
1, 谭浩强.C程序设计.北京:清华大学出版社,2005
七、源程序
(所书写的全部源程序,排版要规范)
#include <stdio。h〉
#include〈stdlib。h〉
#include 〈string.h>
/*定义全局变量以指代教师的个人信息和其授课信息*/
struct kcxx
{char kctm[15];
int bjsm;
int llks;
int syks;};
struct teacher
{int jsh;
char name[15];
int a;
struct kcxx shouke[5];};
struct teacher tea[100];
struct teacher *p;
float sum[100];/*存放教师的工作量*/
/*主函数开始*/
void main()
{int i,j,b[10],n,c,e,f,l=0;
int cd1,cd2,cd3,cd4;
float a[10];
p=tea;
/*申明函数部分*/
void shuru1(int i);
void shuru2(int i,int j);
float dan(int bjs,int llks,int syks);
void shuchu(int *b,int n,float *sum);
void save(float *sum,int n,int *b);
/*输出界面*/
printf("╭**********╳╳╳***************╳╳╳************╮\n\n");
printf(” ★\n");
printf(”│◎◎☆欢迎进入教师工作量管理系统☆◎◎│\n\n\n”);
printf(”╰********╳╳╳*****************╳╳╳************╯\n\n\n”);
while(1)
/*输出系统菜单*/
printf(” 系统菜单\n”);
printf(" ╔**********╦*************━***********╦***********╗\n”);
printf(” * ㈠。 输入教师信息 *\n”);
printf(" * ㈡。 插入授课信息 *\n”);
printf(" ╠ ㈢。 教师工作量计算 ╣\n”);
printf(” ╠ ㈣. 输出统计结果 ╣\n");
printf(” * ㈤。 保存教师信息及统计结果 *\n”);
printf(" * ㈥. 退出 *\n”);
printf(” ╚********╩*************━***********╩***********╝\n\n”);
printf(” 说明:请按菜单序号依次执行,且必须首先执行前三项,重复输入将覆盖之前的输入信息.\n\n”);
printf(” ★★ 请选择需要执行的菜单项:\n\n”);
scanf("%d",&l);
switch(l)
{case 1:
{printf(” 请输入所需统计的教师人数,且人数小于一百\n”);
scanf("%d",&n);
for(i=1;i〈=n;i++)
printf("请输入第 %d 位教师信息\n”,i);
shuru1(i);/*输入教师信息*/
b[i]=p[i].a;/*b表示的是教师所授课程的数目,i指定第几位教师*/
if(i==n)
break;
}cd1=1;
printf(”输入结束,请进入下一项\n<<〈<〈〈〈<〈〈<〈〈〈<<<<〈〈〈〈〈<<〈<<<〈〈〈<〈<〈<〈〈〈〈<〈<<<〈〈〈〈<〈<〈〈〈〈〈〈〈<<〈〈<<〈<\n");
}break;
case 2:
{if(cd1==1)
{printf("请对应输入教师的授课信息\n");
for(i=1;i〈=n;i++)
{printf("请输入第 %d 位教师的课程信息\n”,i);
for(j=1;j<=b[i];j++)
{shuru2(i,j);/*输入课程信息*/
if(j==b[i])
break;
printf("请输入下一课程信息!\n”);}
if(i==n)
break;}
cd2=2;
printf(”输入结束,请进入下一项\n〈〈〈<<〈〈〈〈〈〈<〈〈<〈〈<〈<<〈〈<〈〈<<<〈<〈〈<〈<〈〈〈<〈〈<〈<<〈<〈〈<〈<〈<〈〈<〈〈〈〈〈〈〈〈<〈\n”);}
else
printf(” o(︶︿︶)o 请先输入教师信息!\n〈<<<〈<〈〈〈〈<<〈<<〈〈<〈〈〈〈<〈〈<〈<<〈〈〈〈〈<<〈〈〈〈〈〈〈<〈〈〈〈〈<〈〈<〈〈〈<<<<〈<〈〈〈<〈〈\n\n");}break;
case 3:{if((cd1==1)&&(cd2==2))
{for(e=1;e<=n;e++)
{for(f=1;f〈=b[e];f++)
{c=p[e].shouke[f].bjsm;
a[f]=dan(c,p[e]。shouke[f].llks,p[e].shouke[f]。syks);}
sum[e]=0;
for(f=1;f〈=b[e];f++)
sum[e]+=a[f];
printf(”第 %d 位教师的工作量=%。2f\n”,e,sum[e]);}cd3=3;
printf("计算完成,请进入下一项\n<〈<<〈〈〈〈〈〈<〈<〈<〈〈〈〈〈〈<<<〈〈<〈〈〈〈<〈<<<〈<〈〈〈<<〈<<<〈〈〈〈〈〈〈<<<〈〈〈〈<〈〈〈〈<〈\n”);}
else
printf(” o(︶︿︶)o请先输入教师信息及其授课信息!\n〈<〈<〈〈〈<<<<〈<<〈〈<〈<〈〈〈<<〈<<〈<<<<<〈<〈〈<<〈〈<〈〈〈〈<<<〈〈<〈〈〈<<〈〈<〈〈〈<<<〈〈\n\n\n");}break;
case 4:
{if((cd1==1)&&(cd2==2)&&(cd3==3))
{shuchu(b,n,sum);/*调用输出函数,输出完整的教师信息*/
cd4=4;
printf(”输出完成,请进入下一项\n〈<〈〈〈〈〈<<〈〈<〈<<<〈<〈〈<<〈〈<<〈<〈<<<<〈〈<〈〈〈〈<〈〈〈〈〈〈<〈〈〈<〈〈<〈〈〈〈〈〈<〈〈〈<〈〈\n”);}
else
printf(” o(︶︿︶)o请先完善输入信息!\n<〈〈〈〈〈〈〈〈〈<<〈〈〈<〈〈〈<〈〈〈〈<<<〈<〈〈〈〈<〈<〈〈<〈<〈〈〈〈〈〈〈<<<〈〈〈〈<〈〈<〈〈〈〈〈<<〈〈\n\n\n");}break;
case 5:
if((cd1==1)&&(cd2==2)&&(cd3==3))
save(sum,n,b);
else
printf(” o(︶︿︶)o请先完善信息并运算!\n〈〈〈<<<〈〈〈<〈〈<<〈〈<<〈〈<〈〈<<〈<〈〈<〈〈<<<〈<<<〈〈〈〈<〈<〈〈<〈〈〈〈<〈〈<<〈<〈〈〈<〈〈<〈\n\n\n”);break;
case 6:
printf(” 程序结束*******谢谢使用\n");
printf(” ^_^ ^_^ ^_^ ^_^ ^_^ \n\n\n\n”);
exit(0);
default: printf("输入错误,请输入菜单中存在的序号!\n〈〈〈〈〈〈〈〈<〈<〈〈〈〈〈〈<<〈〈<〈〈〈<<<〈〈〈〈〈<<〈〈〈〈〈<〈〈<〈<<〈〈<〈〈〈<〈〈〈〈<〈<〈<〈〈〈〈<\n ”);}}}
/*输入教师信息*/
void shuru1(int i)
{struct teacher
{int jsh;
char name[20];
int a;
}tea;
printf(”请输入教师号:\n”);
scanf(”%d”,&tea.jsh);
p[i].jsh=tea。jsh;
printf(”请输入教师姓名:\n”);
scanf(”%s”,&tea.name);
strcpy(p[i]。name,tea。name);
printf("请输入该名教师所授课程数目,且课程数目小于6:\n”);
scanf(”%d",&tea。a);
p[i]。a=tea.a;}
/*输入课程信息*/
void shuru2 (int j)
{struct kcxx
{ char kctm[20];
int bjsm;
nt llks;
int syks; }kc;
printf(”请输入课程题目:\n");
scanf(”%s",&kc.kctm);
strcpy(p[i]。shouke[j]。kctm,kc.kctm);
printf(”请输入该课程的班级数目:\n”);
scanf("%d”,&kc.bjsm);
p[i].shouke[j]。bjsm=kc.bjsm;
printf(”请输入该课程理论课时数目:\n”);
scanf("%d”,&kc。llks);
p[i]。shouke[j].llks=kc。llks;
printf(”请输入该课程实验课时数目:\n”);
scanf(”%d",&kc。syks);
p[i]。shouke[j]。syks=kc.syks;}
/*单个教学任务总课时计算*/
float dan(int bjs,int llks,int syks)
{float dgks;
if(bjs〉=4)
dgks=(llks+syks)*2。5;
else
if(bjs>=3)
dgks=2*(llks+syks);
else
dgks=(llks+syks)*1。5;
return dgks;}
/*输出函数*/
void shuchu(int *b,int n,float *sum)
{int i,j;
printf(”\n\n\n”);
printf(” 信息输出如下:\n\n”);
printf(”:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n”);
for(i=1;i<=n;i++)
{printf("教师号 教师姓名\n”);
printf(”%5d %10s\n\n",p[i].jsh,p[i]。name);
printf(”所授课程 班级数目 理论课时 实验课时\n”);
for(j=1;j〈=b[i];j++)
{printf(”%5s %10d %10d %10d\n\n”,p[i]。shouke[j]。kctm,p[i].shouke[j]。bjsm,p[i].shouke[j].llks,p[i].shouke[j]。syks);}
printf(”总教学工作量=%。2f课时\n",sum[i]);
printf(”:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");
printf("\n\n");}}}
/*保存信息*/
void save(float *sum,int n,int *b)
{int z,i;
FILE *fp, *fq;
printf(”请确认信息,如需文件保存请输入1并回车,否则输入2并回车.\n");
/*教师信息及统计结果的保存*/
scanf(”%d”,&z);
if(z==1)
{if((fp=fopen(”teacher_xx”,”wb"))==NULL)
{printf(”文件打开失败\n”);
printf("未保存\n");}
else
{fq=fopen(”teacher_gzl”,"wb”);
for(i=1;i〈=n;i++)
if(fwrite(&tea[i],sizeof(struct teacher),1,fp)!=1)
printf(”文件输出失败\n”);
else
fwrite(&sum[i],4,1,fq);}
fclose(fp);
fclose(fq);
printf(”保存成功\n”);}}
else
printf("未保存\n”);
}
展开阅读全文