c语言课程设计教师工作量计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆科技学院
《程序设计基础》
课程设计报告
学院:_电气与信息工程学院_ 专业班级:计科X 学生姓名: XXX 学号: XX
设计地点(单位)________X_______ __
设计题目:__________________________________ _____
完成日期: 2011 年6月24日
指导教师评语: ______________________ _________________ __________________________________________________________________________________ __________________________________________________________________________________ _____________________________________ __________ _
成绩(五级记分制):______ __________
指导教师(签字):________ ________
摘要
计算教师工作量系统主要用来计算老师工作量,只需要输入某位老师的理论课程门数、每门课的学时数、每门课的学生人数,实践专周的周数、人数,毕业设计的人数和周数,即可计算该老师的总工作量;其中还可以查询,追加信息。

本系统利用了C语言及C++知识,其中包括while循环,switch case语句,结构体,函数调用,文件处理等。

经过调试后,基本实现开发目标中管理员查找等功能,经过部分完善后,可以应用在实际教师工作量管理中。

关键字:C语言C++ 教师工作量
课程设计任务书
设计题目:教师工作量计算系统
学生姓名
课程名称程序设计基础课程设计专业班级计科10
地点I305/I306 起止时间6月20日~6月24日
设计
内容
及要

输入某位老师的理论课程门数、每门课的学时数、每门课的学生人数,实践专周的周数、人数,毕业设计的人数和周数,计算该老师的总工作量。

进一步掌握利用C语言进行程序设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图表示算法。

根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。

设计参数(1)系统分析、设计正确。

(2)结果以图表方式显示。

(3)界面简洁、美观。

(4)报告格式规范。

进度
要求
周一:明确设计任务,学习相关基础知识
周二:熟悉各知识点,进行基础练习
周三:根据题目要求,进行设计和实现
周四:根据题目要求,进行设计和实现
周五:撰写报告,进行答辩
参考资料[1]何钦铭颜晖.《C语言程序设计》.高等教育出版社.2008年
[2]谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年
其它
说明1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

教研室主任:指导教师:伍建全/向毅/陈应祖/李忠/陈刘奎
2011年6月2 4日
目录
摘要 (1)
课程设计任务书 (2)
第一章软件需求分析说明书 4 1.1 软件功能需求 (4)
1.2 模块分析 (4)
第二章系统分析与设计 (5)
2.1 软件界面设计 (5)
2.2 软件的数据(结构)设计 (8)
2.3 软件的算法设计 (9)
第三章软件的实现 (11)
第四章软件使用说明书 (13)
致谢 (16)
附加:程序代码 (17)
第一章软件需求分析说明书
1.1 软件功能需求
教师工作量计算系统包括以下模块:界面显示设计,建立数据库,查找教师工作量,添加教师工作量。

1.2 模块分析
(1)界显示设计
该模块可提示用户的操作方法,课显示用户的录入信息,显示用户所需要的信息。

屏幕最开始显示:“欢迎使用教师工作量计算系统”,“数据录入按【1】查询请按【2】退出请按【3】”。

在运行期间会显示不同信息,用来提醒用户实际操作。

如要退出系统,界面最后将显示“退出系统”字样。

(2)建立数据库
该模块为初建数据库,只需输入某位老师的理论课程门数、每门课的学时数、每门课的学生人数,实践专周的周数、人数,毕业设计的人数和周数,计算该老师的总工作量。

系统就会将总工作量算出来并且存如文件中。

(3)查找教师工作量信息
该模块可查找所需教师工作量信息,并显示在屏幕上。

(4)添加教师工作量
该模块课添加工作量信息,当输入教师信息后,系统会自动计算教师工作量,并存入文件中。

第二章系统分析与设计2.1 软件界面设计
(1)初建数据库
图1.输入初始信息如图1.输入相应信息即可计算并存入教师工作量信息。

注:上图略去清屏操作,实际操作根据系统提示进行。

(2)追加数据
图2.
图3.数据追加
如图2,图3根据屏幕显示操作,即可追加信息。

(3)查询信息
图4. 查询存在信息
图5.查询不存在信息
如图4,5 查询时可分别出信息存在与否而显示不同信息。

(4)退出系统
图6.退出系统
如图6 为退出系统的显示。

2.2 软件的数据(结构)设计
该教师工作量计算系统主要以C++文件输出流ofstream将键盘读入的信息放入相应文本文件teacher.txt中,然后又以输入流ifstream将teacher.txt中的信息读出文件放入相应空间中,调用函数即可将信息在屏幕上输出。

文件的输入一输出均运用的是文本文档的输入输出,所以在相应的文件teacher.txt 中也可以看见老师的信息,不过就没有在屏幕上输出的信息明显。

2.3 软件的算法设计
模块图如下图:
键入选择
1 2 3
键入选择
1 2
模块流程图: (1)数据录入
1 封面
1.数据录入
2.查询信息
3.退出系统
数据录入 1.初始建库
2.追加信息
3.退出程序 查
找数据
初始建库 追加信息 退出系统 开始
数据录入
判断
初始建库
2
(2)信息查询
flag 为 1
Flag 为0
追加信息 输入信息 打开文件 输入信息 打开文件 关闭文件 关闭文件 结束 结束
开始 查询信息 输入姓名 判断 输出教师信息 结束 打开文件 关闭文件
输出“无该姓名教师” 结束
第三章软件的实现
(1)数据录入
1.初始建库
当界面显示菜单功能时,选择1即可进入数据录入,其次再选择1即可进入到初始建库的功能下。

该功能调用了两个子函数:inoput输入信息,fouput写入文件。

input函数运用了switch case语句,if循环语句,C++中的标准输入输出;foutput函数运用的是C++的文件输出流。

2.追加信息
当界面显示菜单功能时,选择1即可进入数据录入,过后选择2即可进入到追加信息的功能。

该功能用到的函数:finputMore和foutput,input函数,前者运用for循环,vector 向量的push_back()函数来叠加文,调用函数input输入信息,然后调用fouput函数将输入的信息放入文件中。

(2)查找信息
当界面显示菜单功能时,选择2即可进入查找信息功能。

该功能调用了finput函数,output函数,运用string,运用输出流ifstream将文件的信息放入内存中,定义一个string类型的nm,判断名字name是否和nm相等,若相等就令flag = 1,若不相等就为0。

;最后根据情况看是否调用函数ouput。

第四章软件测试
对每一个函数、及组装以后的函数、写出测试用例。

1.double getPro( teacher* t );//专业课课时
用例:input 40(人数),20(学时)
output 26(专业课工作量)
2.double getBasic( teacher *t );//基础学时数
用例:input 40, 20
output 22(基础课工作量)
3.double exWork( teacher *t );//实践课学时量
用例:input 40(人数), 10(周数)
output 264(实践课工作量)
4.double gradWork( teacher *t );//毕业设计学时量
用例:input 40(人数), 10(周数)
output 400(毕业设计工作量)
5.void fouput( teacher *t );//输入到文件
用例:input cyx(名字) 1000(工作量)
ouput cyx 1000
6.void finput( teacher *t );//从文件中读出
用例: input Ay(名字) 1000(工作量)
Ouput Ay 1000
7.void input( teacher* t );//从键盘输入
void output( teacher *t );//从屏幕输出
用例:input 1,1,100,20,120,15,120,10
output 教师的名字:sss
该教师的工作量是:3022.1
8.void finputMore();//增加教师工作量
用例:input 1,1,2,120,10,100,15,100,5
output 教师的名字:aa
该教师的工作量是:2646
9.void queryByName( teacher *t );//按姓名查询
用例:input aa
output 教师的名字:aa
该教师的工作量是:2646
第四章软件使用说明书
1.数据录入
图1.选择功能
图2.选择不同功能
根据自己不同的需要选择数据录入下的不同功能,在《系统分析与设计》中有详细的介绍。

2.信息查询(在图1的菜单中选择2.)
图3.输入要查询教师信息
图4.信息输出
根据系统显示的数字功能,就可以完成对该系统的简单操作。

致谢
本次课程设计及论文完成过程中,我遇见的很多我不懂得问题;可是在这些问题面前,我并没有认输,而是努力克服我所遇到的问题。

在这期间中,当我在写程序的时候,帮我最多的就是老师,在我不懂得时候,老师总是很有耐心的给我讲解,而且在写程序的期间,也是很有耐心的等待我写完,然后仔细的帮我纠正错误。

在写论文期间,给我最大帮助的就是我的同学们和朋友们,他们总是很有心的帮我写论文,在看见错误的地方也会提醒我。

总之,这次课程设计并不是只是靠我才完成的,我的成功完成是离不开老师和同学,朋友的帮忙,在这里,我忠心感谢帮助我的人。

岑余霞
2011年6月24日
参考文献
[1] 黄维通. Visual C++面向对象与可视化程序设计. 北京.清华大学出版社.2000.
[2] (美)戴特尔(Deitel,H.M.),(美)戴特尔(Deitel,P.J.)著C程序设计经典教程》,清华大学出版社,2006
附加:程序代码
#include< iostream >
#include< fstream >
#include< string >
#include< vector >
using namespace std;
typedef struct _teacher
{
string name;
int num;//理论课程门数
double basicTime;//理论课学时
double basicNumber;//理论课人数
double proTime;//专业课学时
double proNumber;//专业课人数
double theoryWork;
double exWeek;//实践专周周数
double exNumber;//实践人数
double exWork;
double gradWeek;//毕业设计周数
double gradNumber;//毕业设计人数
double gradWork;
double all;
}teacher;
double getPro( teacher* t );//专业课课时
double getBasic( teacher *t );//基础学时数
double exWork( teacher *t );//实践课学时量
double gradWork( teacher *t );//毕业设计学时量
void fouput( teacher *t );//输入到文件
void finput( teacher *t );//从文件中读出
void output( teacher *t );//从屏幕输出
void input( teacher* t );//从键盘输入
void finputMore();//增加教师工作量
void queryByName( teacher *t );//按姓名查询
int main()
{
teacher t;
int m, n;
cout<<"数据录入按【1】查询请按【2】退出请按【3】"<<endl;
cin>>m;
while( m != 4 )
{
while( m == 1 )
{
system("cls");
cout<<"初始建库请按【1】追加数据请按【2】退出请按【3】"<<endl;
cin>>n;
if( n == 4 )
m = 4;
while(n == 1)//数据建立
{
int x;
double basicWork = 0, proWork = 0;//基础理论课工作量,专业理论课工作量
cout<<"请输入老师名:";
cin>>;
cout<<"请输入该教师的理论课程门数:";
cin>>t.num;
for( int i = 0; i < t.num; i++ )
{
system( "cls" );
cout<<"基础课请选择【 1 】专业理论课请按【 2 】 "<<endl;
cin>>x;
system("cls");
switch(x)
{
case 1:
{
cout<<"请输入基础课,专业课人数和学时:"<<endl;;
cin>>t.basicNumber;
cin>>t.basicTime;
basicWork += getBasic(&t);
break;
}
case 2:
{
cout<<"请输入专业课人数和课时:"<<endl;
cin>>t.proTime>>t.proNumber;
proWork += getPro(&t);
break;
}
}
}
t.theoryWork = basicWork + proWork;//理论课工作量
system( "cls" );
cout<<"请输入实践课人数和周数:"<<endl;
cin>>t.exNumber>>t.exWeek;
system( "cls" );
cout<<"请输入毕业设计人数和周数:"<<endl;
cin>>t.gradNumber>>t.gradWeek;
t.exWork = exWork(&t);
t.gradWork = gradWork(&t);
t.all = t.theoryWork + t.exWork + t.gradWork ;
fouput(&t);
system("cls");
cout<<"数据录入按【1】查询请按【2】退出请按【3】"<<endl; cin>>m;
n = 3;
}
while(n == 2)//数据追加
{
finputMore();
system("cls");
cout<<"数据录入按【1】查询请按【2】退出请按【3】"<<endl;
cin>>m;
n = 3;
}
while(n == 3)
{
system("cls");
cout<<"数据录入按【1】查询请按【2】退出请按【3】"<<endl;
break;
}
}
while(m == 2)//查找
{
system("cls");
queryByName(&t);
cout<<"数据录入按【1】查询请按【2】退出请按【3】"<<endl;
cin>>m;
}
while(m == 3)
{
m = 4;
break;
}
}
return 0;
}
void finputMore()
{
teacher t;
vector<teacher> te;
int n;
cout<<"请输入你所要追加的教师个数:";
cin>>n;
system("cls");
for(int i = 0; i< n; i++ )
{
input(&t);
te.push_back(t);
fouput(&t);
}
}
double getBasic( teacher *t )//计算基础学时数
{
double xs;
double basicWork;
if( t->basicNumber < 41 )
{
xs = 1.0;
basicWork = t->basicTime * xs * 1.1;
}
if( t->basicNumber > 40 && t->basicNumber < 91 )
{
xs = 1 + ( t->basicNumber - 40 ) * 1.0 / 100;
basicWork = t->basicTime * xs * 1.1;
}
if( t->basicNumber > 90 && t->basicNumber < 141 ) {
xs = 1.5 + ( t->basicNumber - 90 ) * 0.5 / 100;
basicWork = t->basicTime * xs * 1.1;
}
if( t->basicNumber > 140 )
{
xs = 1.9;
basicWork = t->basicTime * xs * 1.1;
}
return basicWork;
}
double getPro( teacher* t )//专业课课时
{
double xs;
double proWork;
if( t->proNumber < 41 )
{
xs = 1.0;
proWork = t->proTime * xs * 1.3;
}
if( t->proNumber > 40 && t->proNumber < 91 )
{
xs = 1 + ( t->proNumber - 40 ) * 1.0 / 100;
proWork = t->proTime * xs * 1.3;
}
if( t->proNumber > 90 && t->proNumber < 141 )
{
xs = 1.5 + ( t->proNumber - 90 ) * 0.5 / 100;
proWork = t->proTime * xs * 1.3;
}
if( t->proNumber > 140 )
{
xs = 1.9;
proWork = t->proTime * xs * 1.3;
}
return proWork;
}
double exWork( teacher *t )//实践专周(课程设计、实习、技能考核等)教学工作量为0.66学时/人.周
{
return t->exWeek * t->exNumber * 0.66;
}
double gradWork( teacher *t )//毕业实习、毕业设计、毕业专题实验教学工作量为1学时/人o周
{
return t->exWeek * t->exNumber * 1;
void fouput( teacher *t )
{
ofstream fout("teacher.txt");
fout<<t->name<<"\t";
fout<<t->all<<"\t";
}
void finput( teacher *t )
{
ifstream fin( "teacher.txt" );
fin>>t->name;
fin>>t->all;
}
void output( teacher *t )
{
cout<<"教师的名字:";
cout<<t->name<<endl;
cout<<"该教师的总工作量是:";
cout<<t->all<<endl;
}
void queryByName( teacher *t )//按姓名查询{
ifstream fin("teacher.txt");
finput(t);
string nm;
int flag = 0;
cout<<"请输入你要查找的教师姓名:";
cin>>nm;
while( fin>>t->name )
{
if( nm == t->name )
{
flag = 1;
break;
}
}
if( flag == 1 )
{
output(t);
cout<<endl;
}
else
cout<<"无该姓名的教师!"<<endl;
cout<<endl;
}
void input(teacher* t)//从键盘输入
{
int x;
double basicWork = 0, proWork = 0;//基础理论课工作量,专业理论课工作量cout<<"请输入老师名:";
cin>>t->name;
cout<<"请输入该教师的理论课程门数:";
cin>>t->num;
for( int i = 0; i < t->num; i++ )
{
system( "cls" );
cout<<"基础课请选择【 1 】专业理论课请按【 2 】 "<<endl;
cin>>x;
system("cls");
switch(x)
{
case 1:
{
cout<<"请输入基础课,专业课人数和学时:"<<endl;;
cin>>t->basicNumber;
cin>>t->basicTime;
basicWork += getBasic(t);
break;
}
case 2:
{
cout<<"请输入专业课人数和课时:"<<endl;
cin>>t->proTime>>t->proNumber;
proWork += getPro(t);
break;
}
}
}
t->theoryWork = basicWork + proWork;//理论课工作量
system( "cls" );
cout<<"请输入实践课人数和周数:"<<endl;
cin>>t->exNumber>>t->exWeek;
system( "cls" );
cout<<"请输入毕业设计人数和周数:"<<endl;
cin>>t->gradNumber>>t->gradWeek;
t->exWork = exWork(t);
t->gradWork = gradWork(t);
t->all = t->theoryWork + t->exWork + t->gradWork ; }。

相关文档
最新文档