《C++教师信息管理系统.doc》由会员分享,可在线阅读,更多相关《C++教师信息管理系统.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、 课程设计问题描述学院教学信息管理系统是高等学校教务管理的重要组成部分,其内容较多,为了简化计论,要求设计的管理系统能够完成以下功能:(1)输入:输入每一位教师记录,将其信息写入文件中;(2)显示:显示每位教师记录;(3)排序:按职工号或教学效果综合评分进行排序,并显示;(4)查找:完成按姓名或课程查找教师的相关记录,并显示;(5)创建:创建新的纪录,输入数位教师记录,显示在屏幕上并保存;二、 课程设计目的和要求:经过一个学期的C+面向对象实用教程课程的学习,已经有了一定地程序设计基础,但是要学好C+程序设计,不仅要认真阅读课本知识和从事课堂学习,更重要的是要进行上机实践,通过上机实践才能
2、增强和巩固知识。三、 系统设计(算法分析)1、 整体结构整个程序定义四个类(1) CPerson类:包含数据成员name,age,sex,记录姓名,年龄,性别这些信息,并包含构造函数及其他成员函数(定义CPerson类以后若有需要,可再通过继承派生其他类);(2) CTeacher:共有继承CPerson类,包含数据成员title,teano,course,score,分别记录职称,职工号,3门课程和教学效果综合评分等信息,另有其他成员函数;(3) CNode类:节点类,包含2个数据成员,CTeacher类对象p和CNode类指针对象next,作为构建链表的单位;(4) CList类:链表类,
3、声明为CNode类的友元类,数据成员有头结点head,尾节点tail,记录当前节点的p和当前节点前一节点的pre,链表相关的输入,显示,排序,查找,创建全部设为成员函数。总体流程为先打开文件,读取文件中的记录来创建链表,然后对链表进行操作,最后保存至文件中2、流程图开始打开文件读取记录输入choicechoice=0? 是 否查找排序创建新纪录添加记录显示当前记录保存 是保存 否结束3、 各函数的功能和实现学院教学信息管理系统的相关功能由对应的函数来实现。(1) 输入教师信息并显示void Append()通过提示一步步输入信息,由程序构建新节点并加入链表(2) 显示所有记录void Prin
4、t()(3)按职工号或教学效果综合评分排序并显示int SortMenu()void SortMenuControl()void InsertByTeano(CNode *newp)void SortByTeano()void InsertByScore(CNode *newp)void SortByScore()(4)按姓名或课程查找教师记录并显示int SearchMenu()void SearchMenuControl()void SearchByName()void SearchByCourse()四、程序源代码#include stdafx.h#include #include #i
5、nclude #include #include #include using namespace std;class CPersonprivate:string name;int age;char sex;public:CPerson()CPerson(string name,int age=0,char sex=M)this-name=name;this-age=age;this-sex=sex;void SetAge(int age=0)this-age=age;void SetNameAndSex(string name,char sex)this-name=name;this-sex
6、=sex;void ShowInfo()coutnametaget(sex=M?男:女)endl;string GetName()return name;int GetAge()return age;char GetSex()return sex;class CTeacher:public CPersonprivate:string title;/职称string teano;/职工号vector course;/教授课程float score;/教学效果综合评分public:CTeacher()CTeacher(string name,int age=0,char sex=M):CPerso
7、n(name,age,sex)void SetData(string title,string teano)this-title=title;this-teano=teano;void SetCourse(string c1,string c2,string c3)course.push_back(c1);course.push_back(c2);course.push_back(c3);void SetScore(float score)this-score=score;void ShowInfo()coutteanotGetName()tGetAge()t(GetSex()=M?男:)ti
8、tletcourse0tcourse1tcourse2tscoretitle=one.title;this-teano=one.teano;this-course0=one.course0;this-course1=one.course1;this-course2=one.course2;this-score=one.score;vector GetCourse()return course;string GetTitle()return title;string GetTeano()return teano;float GetScore()return score;class CNodefr
9、iend class CList;private:CTeacher data;CNode *next;class CListprivate:CNode *head;CNode *tail;CNode *p;CNode *pre;int num;/当前节点数public:int MainMenu()cout1.显示当前记录endl;cout2.添加记录endl;cout3.排序endl;cout4.查找endl;cout5.创建新纪录endl;cout0.退出endl;coutchoice;return choice;void MainMenuControl()ReadData();while
10、( 1 )int choice=MainMenu();if ( choice=0 )break;switch ( choice )case 1:Print();break;case 2:Append();break;case 3:SortMenuControl();break;case 4:SearchMenuControl();break;case 5:NewList();break;coutc;if ( c=y )Save();void ReadData()head=tail=new CNode;head-next=NULL;num=0;char fname80;coutfname;ifs
11、tream file(fname);if ( !file )cout出现未知错误导致无法打开!teanonameagesextitlecourse0course1course2score;p=new CNode;p-data.SetNameAndSex(name,sex);p-data.SetAge(age);p-data.SetData(title,teano);p-data.SetCourse(course0,course1,course2);p-data.SetScore(score);tail-next=p;tail=p;num+;tail-next=NULL;void Print()
12、for ( p=head-next; p!=NULL; p=p-next)p-data.ShowInfo();coutendl;void Append()while ( 1 )p=new CNode;cout请输入:endl;coutname;coutage;coutsex;p-data.SetNameAndSex(name,sex);p-data.SetAge(age);couttitle;coutteano;p-data.SetData(title,teano);coutcourse0course1course2;p-data.SetCourse(course0,course1,cours
13、e2);coutscore;p-data.SetScore(score);p-next=tail-next;tail-next=p;tail=p;num+;char c;coutc;cin.get();if ( c!=y )break;tail-next=NULL;Print();int SortMenu()cout1.按职工号排序endl;cout2.按教学效果综合评分排序endl;cout0.退出endl;coutchoice;return choice;void SortMenuControl()while ( 1 )int choice=SortMenu();if ( choice=0
14、 )break;switch ( choice )case 1:SortByTeano();break;case 2:SortByScore();break;Print();void InsertByTeano(CNode *newp)for ( pre=head,p=head-next; p!=NULL; pre=p,p=p-next)if ( newp-data.GetTeano() data.GetTeano() )break;newp-next=p;pre-next=newp;void SortByTeano()p=head-next;head-next=NULL;CNode *nex
15、tp;while ( p!=NULL )nextp=p-next;InsertByTeano(p);p=nextp;void InsertByScore(CNode *newp)for ( pre=head,p=head-next; p!=NULL; pre=p,p=p-next)if ( newp-data.GetScore() data.GetScore() )break;newp-next=p;pre-next=newp;void SortByScore()p=head-next;head-next=NULL;CNode *nextp;while ( p!=NULL )nextp=p-n
16、ext;InsertByScore(p);p=nextp;int SearchMenu()cout1.按姓名查找endl;cout2.按课程查找endl;cout0.退出endl;coutchoice;return choice;void SearchMenuControl()while ( 1 )int choice=SearchMenu();if ( choice=0 )break;switch ( choice )case 1:SearchByName();break;case 2:SearchByCourse();break;void SearchByName()int n=0;cou
17、tname;for ( p=head-next; p!=NULL; p=p-next)if ( p-data.GetName()=name)p-data.ShowInfo();n+;if ( n=0 )cout没有相关记录endl;coutendl;void SearchByCourse()int n=0;coutc;for ( p=head-next; p!=NULL; p=p-next)vector course=p-data.GetCourse();for (int i=0; idata.ShowInfo();n+;break;if ( n=0 )cout没有相关记录endl;coutn
18、ext=NULL;while ( 1 )p=new CNode;cout请输入:endl;coutname;coutage;coutsex;p-data.SetNameAndSex(name,sex);p-data.SetAge(age);couttitle;coutteano;p-data.SetData(title,teano);coutcourse0course1course2;p-data.SetCourse(course0,course1,course2);coutscore;p-data.SetScore(score);tail-next=p;tail=p;num+;coutc;c
19、in.get();if ( c!=y )break;tail-next=NULL;void Save()char fname80;coutfname;ofstream file(fname);if ( !file )cout出现未知错误导致无法打开!next; p!=NULL; p=p-next)vector course=p-data.GetCourse();filedata.GetTeano()tdata.GetName()tdata.GetAge()tdata.GetSex()tdata.GetTitle()tcourse0tcourse1tcourse2tdata.GetScore()
20、next; p!=NULL; p=head-next)head-next=p-next;delete p;delete head;head=NULL;tail=NULL;pre=NULL;num=0;CList()for ( p=head-next; p!=NULL; p=head-next)head-next=p-next;delete p;delete head;head=NULL;tail=NULL;pre=NULL;int main(int argc, char* argv)CList list1;list1.MainMenuControl();CList list2;list2.Ma
21、inMenuControl();return 0;五、缺陷1.每次都要读取文件中的记录,若是只想创建新记录,则此部多余;2.判断文件末尾的语句file.peek()!=EOF,当文件末尾为图一所示是可正常读取完,若如图二所示,则会多读一次;图一图二3.没有控制输出格式,输出格式混乱,不美观;4.输入时没有错误输入检测,因此必须正确输入才能保证程序正常运行,如输入文件名时必须完全正确,输入性别是必须输入M/F。- 17 - /须别别入,完完名件件如常序能能入须须此测误没入入观美乱乱出出式输控图图图次次次会所所图完常常是示尾尾文,=) 的的尾余部部此此记创若记记的取次缺缺00 ) ) = = =
22、- - !; ( 0= = - ; ( ) - ) ) . -= - ! ) = ) . ) 入入续是 合合果 0 程教 ) 号 ) 别别 年年 : = ) ( 记有 = - :查请请 0 ( 录录有 =) . - = 名输请 00 ( ) : ) : 00 ) ( 出出 程程 找找姓 ) - = ! ( = ) - = * - - ( - ) - -= ; , ) ( ) 00 ) ( 出00 !() 加加继 分综学学 ) 00 :教 职 :) . )/( : : 输 ( = ( = - + ) -) , . ) . -) ) = ! . )( 取取读读 :/(是 ; ) ; ; ( 0=
23、) ) ( 退退 建建 序 录. 录示. = = - - ) ) ( )= ) - ) . ) . )( ( = ( ,= ( 评综综学教 课授授/ 工/; 职/ ( ( ( 女:男男= 000 =- = ( 代代代( ( ( ( 显显显教程程名( ( ( ( ( 显并并评果教教工( 记记记所链链链点构由信步步示( 显信现现实的对对关统统管学实实实的的结保 保保存记前记记录录显纪纪排排查录录新排 0= ?0 记文录录录取开程件文后,进进对,建录录的的取件开开程数函函成建创创序,的的链 点点一节节 节录记 节节, 有据,的的类 声声,: 位位单链链作 指 和 员成个包包点 数函函其,信分分综学学门号职称别别 员据, 继: )派过过可要若若类 (函成成函造,些些别,姓, 据含 个义定定结结体析法计计设识知知强才才机通实实上要要要习堂和和识阅真不不序+好是是基基序地一已的的用象+ 学求和和计存存存上在记记位数数纪新建建示显记的找找查查名完查示示显序序分评学学或按排排录师位位示显中中文息其记记位每每入能下完统统系系计要论论为多内部组组理管管等高高管信描描描- 17 -