本科生课程设计(实践)任务书、设计报告(C/C++ 语言程序设计)题目教师工作量管理系统设计开发学生姓名指导教师学院专业班级学生学号计算机基础教学实验中心教师工作量管理系统设计开发摘要:本课程设计是一个实现对教师工作量数据库库进行一定基本操作的程序设计,本课程设计中,程序设计设计语言采用Visual C++,运用数组、指针、函数结构体和各种变量编写程序,程序通过调试运行,基本实现开发目标中管理员查找,修改,添加,删除等功能,经过部分完善后,可以应用在实际教师工作量管理中。
关键词:简易教师工作量管理程序功能需求分析(功能要求),简易学生成绩管理程序概要设计,简易学生成绩管理程序详细设计及系统功能实现,遇到的问题及解决的办法,总结。
1、教师工作量管理系统程序功能需求分析(功能要求):采用文件和数组(或链表)等建立一个简单的教师工作量管理程序。
程序运行时下述班级成绩表格(或其部分内容)在内存中用数组(或链表)表示,假设一学期开设课程不超过10名。
程序运行结束时将表格保存到文件中以便下次使用。
要求:A、教师信息处理(1) 输入教师授课教学信息,包括教师号、姓名、性别、职称、认教课程、班级、班级数目、理论课时、实验课时。
(2) 插入(修改)教师授课教学信息:(3) 删除教师授课教学信息:(4) 浏览教师授课教学信息:B、教师工作量数据处理:(1) 计算单个教学任务总课时。
计算原则如下表:(2) 计算一个教师一个学期总的教学工作量。
总的教学工作量=所有单个教学任务总课时之和。
(3) 教师数据查询:提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
C、教师综合信息输出提示:输出教师信息到屏幕。
(总分之后的列要用程序语句计算)2、简易学生成绩管理程序程序概要设计:(1)系统模块层次结构图:(2)主模块算法流程:“开始”→“输出菜单及提示信息”→“输入选择”→“输入学生成绩”→“分课程等级”→“添加某学生信息”→“查找某学生信息”→“修改某学生信息”→“按指定顺序排序链表”→“回收链表的内存”→“交换两个结点的内容”→“退出系统”。
(3)全局变量或数据结构说明:#include<iostream>#include<fstream>#include<string>struct Item//保存学生信息的结构体,附加链表链接指针struct Temp//保存学生信息的结构体,用于记录到文件void numberOfRank(Item *p)//计算课程等级情况的函数Item *Create() //创建链表void addAItem(Item *head) //添加一个学生信息,加到链表的末尾void searchTheItem(Item *head,char s[10])//查找学生信息,参数指定的是学号或者姓名void searchTheItem(Item *head,int numberOfA,int numberOfB,int numberOfC,int numberOfD) //重载,按课程等级查找void freshTheItem(Item *head,char s[10])//修改学生信息Item *deleteTheItem(Item *h,char s[10])//删除某学生的信息void memoryTheInformation(Item *head) //存储链表到文件,下次可以使用void createFromHighToLow(Item *head)//按总成绩从高到低排序链表void createFromHighToLow(Item *head , int x)//重载,按每一单科从高到低排序链表void Del(Item *head)//回收链表的内存void change(Item *a,Item *b) // 交换两个结点的内容(4)程序开发和运行的环境:Visual C++ 6.03、简易学生成绩管理程序详细设计及系统功能实现:(1)详细设计:#include <iostream>#include <stdio.h>#include <string>#include <iomanip>using namespace std;struct node // 定义课程情况的存储结构{string Title; // 课程名称(字符串型)int Class_number,Class[40]; // 班级数目以及班级(整型)double Theory,Experiment,Single_summary; // 理论课时实验课时以及该门课的教学任务总课时(浮点型)};struct data // 定义教师信息存储结构{string ID,Name,Sex,Position; // 教师号教师名称性别职称(字符串型)node Course[10]; // 教师所教课程具体信息(可以是多门课程)int Course_number; // 教师所教课程数目(整型)double Summary; // 教师一个学期总的教学工作量(浮点型)}Teacher[2000]; // 用数组存储教师信息void Input() //输入教师信息{int i,j,m,n,k;double mm;k=0;while (Teacher[k].ID != "") k++; // 在存储数组中找出一个空的存储空间来存储输入信息cout <<"请输入教师ID:";cin >>Teacher[k].ID; // 输入教师号cout <<endl<<"请输入教师姓名:";cin >>Teacher[k].Name; // 输入教师姓名cout <<endl<<"请输入教师性别:";cin >>Teacher[k].Sex; // 输入教师性别cout <<endl<<"请输入教师职称:";cin >>Teacher[k].Position; // 输入教师职称cout <<endl<<"请输入共任教几门课程:";cin >>Teacher[k].Course_number; // 输入教师任教课程数Teacher[k].Summary=0;for (i=1;i<=Teacher[k].Course_number;i++) // 循环结构实现任教多门课程的信息录入{cout <<endl<<"请输入第 "<<i<<" 门课程名称:";cin >>Teacher[k].Course[i].Title;cout <<endl<<"请输入该门课程共教几个班:";cin >>Teacher[k].Course[i].Class_number;cout <<endl<<"请输入该门课程所教班级:";for (j=1;j<=Teacher[k].Course[i].Class_number;j++)cin >>Teacher[k].Course[i].Class[j];cout <<endl<<"请输入该门课程的理论课时:";cin >>Teacher[k].Course[i].Theory;cout <<endl<<"请输入该门课程的实验课时:";cin >>Teacher[k].Course[i].Experiment;switch (Teacher[k].Course[i].Class_number)//----------------------------------------------------------------------------{case1:mm=1*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment);break;case2:mm=1.5*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment);break;case 3:mm=2*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment);break; // 计算该门课程的教学任务总课时}if (Teacher[k].Course[i].Class_number > 3)mm=2.5*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment);Teacher[k].Course[i].Single_summary=mm;//-----------------------------------------------------------------------------Teacher[k].Summary += Teacher[k].Course[i].Single_summary; // 累计教师一学期总的教学工作量}}void Output(int x) // 输出教师信息{int i,j;cout <<"教师号:"<<Teacher[x].ID<<endl;cout <<"教师姓名:"<<Teacher[x].Name<<endl;cout <<"教师性别:"<<Teacher[x].Sex<<endl;cout <<"教师职称:"<<Teacher[x].Position<<endl;for (i=1;i <= Teacher[x].Course_number;i++){cout <<setprecision(2);cout <<"所教的第 "<<i<<" 门课程为:"<<Teacher[x].Course[i].Title<<endl;cout <<"共有理论课时为 "<<Teacher[x].Course[i].Theory<<"小时"<<endl<<"共有实验课时为 "<<Teacher[x].Course[i].Experiment<<"小时"<<endl;cout <<"分别给以下班级上课:";for (j=1;j<=Teacher[x].Course[i].Class_number;j++) cout <<Teacher[x].Course[i].Class[j]<<" ";cout <<endl<<"该门课教学任务总课时为:"<<Teacher[x].Course[i].Single_summary<<"小时";cout <<endl;}cout <<"一学期总的教学工作量为:"<<Teacher[x].Summary<<"小时"<<endl;}void Output_all(){int i;for (i=0;i<=1999;i++) // 循环查找记录数组,找出非空区间输出教师信息if (Teacher[i].ID != "") {Output(i);cout <<endl;}}int Find () //查看教师信息!!!{int i,j,m,n,k;string st;cout <<"请输入所要寻找的教师姓名(或ID):";cin >>st;for (i=0;i<=1999;i++) // 利用循环结构根据教师姓名(或者教师号)查找教师信息{if (st == Teacher[i].ID || st == Teacher[i].Name){Output(i);return 0;}}cout <<endl<<"对不起,没有您要查找的教师或者您的输入信息有误,请核对您的输入!"<<endl; }void Delete() //删除教师信息!{int i;string st;cout <<"请输入您要删除的教师姓名或教师号:";cin >>st;for (i=0;i<=1999;i++) // 利用循环结构根据教师姓名(或者教师号)查找教师信息{if (Teacher[i].Name == st || Teacher[i].ID == st) break;}if (Teacher[i].Name == st || Teacher[i].ID == st) // 如果找到目标信息,执行删除命令{ Teacher[i].ID=""; Teacher[i].Name=""; }else cout <<endl<<"对不起,未找到您要删除的教师信息,请核对您的输入!"<<endl;}void Change_name(int x) //更改教师姓名{string st;cout <<"请输入新姓名:";cin >>st;Teacher[x].Name=st;cout <<endl<<"修改成功!!!"<<endl;}void Change_ID(int x) //更改教师号string st;cout <<"请输入新教师号:";cin >>st;Teacher[x].ID=st;cout <<endl<<"修改成功!!!"<<endl;}void Change_sex(int x) //更改教师性别{string st;cout <<"请输入教师性别:";cin >>st;Teacher[x].Sex=st;cout <<endl<<"修改成功!!!"<<endl;}void Change_position(int x) //更改教师职称{string st;cout <<"请输入新职称:";cin >>st;Teacher[x].Position=st;cout <<endl<<"修改成功!!!"<<endl;}void Change_course(int k) //更改教师授课信息大体过程与输入教师授课信息相似{int i,j;string st;double mm;cout <<endl<<"请输入共任教几门课程:";cin >>Teacher[k].Course_number;Teacher[k].Summary=0;for (i=1;i<=Teacher[k].Course_number;i++){cout <<endl<<"请输入第 "<<i<<" 门课程名称:";cin >>Teacher[k].Course[i].Title;cout <<endl<<"请输入该门课程共教几个班:";cin >>Teacher[k].Course[i].Class_number;cout <<endl<<"请输入该门课程所教班级:";for (j=1;j<=Teacher[k].Course[i].Class_number;j++)cin >>Teacher[k].Course[i].Class[j];cout <<endl<<"请输入该门课程的理论课时:";cin >>Teacher[k].Course[i].Theory;cout <<endl<<"请输入该门课程的实验课时:";cin >>Teacher[k].Course[i].Experiment;switch (Teacher[k].Course[i].Class_number){case 1:mm=Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment;case 2:mm=1.5*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment); case 3:mm=2*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment); }if (Teacher[k].Course[i].Class_number > 3)mm=2.5*(Teacher[k].Course[i].Theory+Teacher[k].Course[i].Experiment);Teacher[k].Course[i].Single_summary=mm;Teacher[k].Summary += Teacher[k].Course[i].Single_summary;}cout <<endl<<"修改成功!!!" <<endl;}int Change () //教师信息更改菜单{int i,j;string st;bool bo;char ch;cout <<"请输入您想要修改的教师姓名或教师号:";cin >>st; // 输入希望更改的教师姓名(或者教师号)for (i=0;i<=1999;i++) // 根据教师号(或者姓名)查找教师{if (Teacher[i].Name == st || Teacher[i].ID == st) break;}if (Teacher[i].Name == st || Teacher[i].ID == st) j=1;else {cout <<endl<<"对不起,未找到您要修改的教师信息,请核对您的输入!"<<endl;return 0;}bo=true;while ( bo ){cout <<endl<<"请输入您要修改的信息:A(姓名);B(教师号);C(性别);D(职称);E(任教课程):"<<endl; // 教师信息更改菜单cin >>ch; // 输入更改选项switch (ch){case 'A':Change_name(i);break;case 'B':Change_ID(i);break;case 'C':Change_sex(i);break;case 'D':Change_position(i);break;case 'E':Change_course(i);break;}cout <<endl<<"继续修改请输入 1 退出请输入 0 : ";cin >>bo;}}void work() //工作菜单{char ch;cout <<"请输入您需要的操作:"<<endl;cout <<"A(输入教师信息),B(查找并输出教师信息),C(查找并修改教师信息),D(删除教师信息),E(输出所有教师信息)"<<endl; //操作菜单cin >>ch; //输入操作选项switch (ch){case 'A':Input();break;case 'B':Find();break;case 'C':Change();break;case 'D':Delete();break;case 'E':Output_all();break;}}main (){int i;bool cool=1;for (i=0;i<=1999;i++) { Teacher[i].ID = ""; Teacher[i].Name = ""; } //将教师存储数组置空,方便信息存储判断while (cool){work();cout <<"继续操作请输入 1 ,退出请输入 0 "<<endl;cin >>cool;}}(2)调试和运行该程序,即可实现预期的系统功能。