C++教师信息管理系统.docx
《C++教师信息管理系统.docx》由会员分享,可在线阅读,更多相关《C++教师信息管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
C++教师信息管理系统
...
一、课程设计问题描述
学院教学信息管理系统是高等学校教务管理的重要组成部分,其内容较多,为了简化计论,要求设计的管理系统能够完成以下功能:
(1)输入:
输入每一位教师记录,将其信息写入文件中;
(2)显示:
显示每位教师记录;
(3)排序:
按职工号或教学效果综合评分进行排序,并显示;
(4)查找:
完成按姓名或课程查找教师的相关记录,并显示;
(5)创建:
创建新的纪录,输入数位教师记录,显示在屏幕上并保存;
二、课程设计目的和要求:
经过一个学期的《C++面向对象实用教程》课程的学习,已经有了一定地程序设计基础,但是要学好C++程序设计,不仅要认真阅读课本知识和从事课堂学习,更重要的是要进行上机实践,通过上机实践才能增强和巩固知识。
三、系统设计(算法分析)
1、整体结构
整个程序定义四个类
(1)CPerson类:
包含数据成员name,age,sex,记录姓名,年龄,性别这些信息,并包含构造函数及其他成员函数(定义CPerson类以后若有需要,可再通过继承派生其他类);
(2)CTeacher:
共有继承CPerson类,包含数据成员title,teano,course,score,分别记录职称,职工号,3门课程和教学效果综合评分等信息,另有其他成员函数;
(3)CNode类:
节点类,包含2个数据成员,CTeacher类对象p和CNode类指针对象next,作为构建链表的单位;
(4)CList类:
链表类,声明为CNode类的友元类,数据成员有头结点head,尾节点tail,记录当前节点的p和当前节点前一节点的pre,链表相关的输入,显示,排序,查找,创建全部设为成员函数。
总体流程为先打开文件,读取文件中的记录来创建链表,然后对链表进行操作,最后保存至文件中
..
...
流程图、2开始
打开文件读取记录
choice输入
是?
choice==0
否
显创添示建排查加当新序找前记纪录记录录
保
保
结
..
...
各函数的功能和实现、3学院教学信息管理系统的相关功能由对应的函数来实现。
(1)输入教师信息并显示
voidAppend()
通过提示一步步输入信息,由程序构建新节点并加入链表
(2)显示所有记录
voidPrint()
(3)按职工号或教学效果综合评分排序并显示
intSortMenu()
voidSortMenuControl()
voidInsertByTeano(CNode*newp)
voidSortByTeano()
voidInsertByScore(CNode*newp)
voidSortByScore()
(4)按姓名或课程查找教师记录并显示
intSearchMenu()
voidSearchMenuControl()
voidSearchByName()
voidSearchByCourse()
四、程序源代码
#includestdafx.h
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classCPerson
{
private:
..
...
stringname;
intage;
charsex;
public:
CPerson()
{}
CPerson(stringname,intage=0,charsex='M')
{
this->name=name;
this->age=age;
this->sex=sex;
}
voidSetAge(intage=0)
{
this->age=age;
}
voidSetNameAndSex(stringname,charsex)
{
this->name=name;
this->sex=sex;
}
voidShowInfo()
{
潣瑵?
慮敭?
屜瑜?
愼敧?
屜瑜?
?
敳?
?
?
?
尿男?
女)<}
stringGetName()
{
returnname;
}
intGetAge()
{
returnage;
}
charGetSex()
{
returnsex;
..
...
}
};
classCTeacher:
publicCPerson
{
private:
stringtitle;//职称
stringteano;//职工号
vectorcourse;//教授课程
floatscore;//教学效果综合评分
public:
CTeacher()
{}
CTeacher(stringname,intage=0,char
sex='M'):
CPerson(name,age,sex)
{}
voidSetData(stringtitle,stringteano)
{
this->title=title;
this->teano=teano;
}
voidSetCourse(stringc1,stringc2,stringc3)
{
course.push_back(c1);
course.push_back(c2);
course.push_back(c3);
}
voidSetScore(floatscore)
{
this->score=score;
}
voidShowInfo()
{
cout<尿男:
)<
..
...
}
voidoperator=(CTeacher&one)
{
CPerson(one.GetName(),one.GetAge(),one.GetSex());
this->title=one.title;
this->teano=one.teano;
this->course[0]=one.course[0];
this->course[1]=one.course[1];
this->course[2]=one.course[2];
this->score=one.score;
}
vectorGetCourse()
{
returncourse;
}
stringGetTitle()
{
returntitle;
}
stringGetTeano()
{
returnteano;
}
floatGetScore()
{
returnscore;
}
};
classCNode
{
friendclassCList;
private:
CTeacherdata;
CNode*next;
};
classCList
{
..
...
private:
CNode*head;
CNode*tail;
CNode*p;
CNode*pre;
intnum;//当前节点数
public:
intMainMenu()
{
cout<<.显示当前记录<cout<<.添加记录<cout<<.排序<cout<<.查找<cout<<_x0005_.创建新纪录<cout<<退出<cout<intchoice;
cin>>choice;
returnchoice;
}
voidMainMenuControl()
{
ReadData();
while
(1)
{
intchoice=MainMenu();
if(choice==0)break;
switch(choice)
{
case1:
Print();break;
case2:
Append();break;
case3:
SortMenuControl();break;
case4:
SearchMenuControl();break;
case5:
NewList();break;
}
}
潣瑵?
是否保存?
(Y/N):
;
charc;
cin>>c;
if(c=='y')Save();
}
..
...
voidReadData()
{
head=tail=newCNode;
head->next=NULL;
num=0;
charfname[80];
潣瑵?
请输入要读取的文件:
;
cin>>fname;
ifstreamfile(fname);
if(!
file)
{
潣瑵?
出现未知错误导致无法打开!
<exit
(1);
}
stringname,title,teano,course[3];
intage;
charsex;
floatscore;
while(file.peek()!
=EOF)
{
file>>teano>>name>>age>>sex>>title>>course[0]>>course[1]>>course[2]>>score;
p=newCNode;
p->data.SetNameAndSex(name,sex);
p->data.SetAge(age);
p->data.SetData(title,teano);
p->data.SetCourse(course[0],course[1],course[2]);
p->data.SetScore(score);
tail->next=p;
tail=p;
num++;
}
tail->next=NULL;
}
voidPrint()
{
for(p=head->next;p!
=NULL;p=p->next)
p->data.ShowInfo();
cout<}
voidAppend()
..
...
{
while
(1)
{
p=newCNode;
潣瑵?
请输入:
<潣瑵?
姓名:
;
stringname;
cin>>name;
潣瑵?
年龄:
;
intage;
cin>>age;
潣瑵?
性别(F/M):
;
charsex;
cin>>sex;
p->data.SetNameAndSex(name,sex);
p->data.SetAge(age);
潣瑵?
职称:
;
stringtitle;
cin>>title;
潣瑵?
职工号:
;
stringteano;
cin>>teano;
p->data.SetData(title,teano);
潣瑵?
教授课程:
;
stringcourse[3];
cin>>course[0]>>course[1]>>course[2];
p->data.SetCourse(course[0],course[1],course[2]);
潣瑵?
教学效果综合评分:
;
floatscore;
cin>>score;
p->data.SetScore(score);
p->next=tail->next;
tail->next=p;
tail=p;
num++;
charc;
潣瑵?
是否继续添加?
(Y/N):
;
cin>>c;
cin.get();
if(c!
='y')break;
}
tail->next=NULL;
Print();
}
..
...
intSortMenu()
{
cout<<.按职工号排序<cout<<.按教学效果综合评分排序<cout<<退出<cout<intchoice;
cin>>choice;
returnchoice;
}
voidSortMenuControl()
{
while
(1)
{
intchoice=SortMenu();
if(choice==0)break;
switch(choice)
{
case1:
SortByTeano();break;
case2:
SortByScore();break;
}
Print();
}
}
voidInsertByTeano(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;
}
voidSortByTeano()
{
p=head->next;
head->next=NULL;
CNode*nextp;
while(p!
=NULL)
{
nextp=p->next;
..
...
InsertByTeano(p);
p=nextp;
}
}
voidInsertByScore(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;
}
voidSortByScore()
{
p=head->next;
head->next=NULL;
CNode*nextp;
while(p!
=NULL)
{
nextp=p->next;
InsertByScore(p);
p=nextp;
}
}
intSearchMenu()
{
cout<<.按姓名查找<cout<<.按课程查找<cout<<退出<cout<intchoice;
cin>>choice;
returnchoice;
}
voidSearchMenuControl()
{
while
(1)
{
intchoice=SearchMenu();
break;
if(choice==0)
..
...
switch(choice)
{
case1:
SearchByName();break;
case2:
SearchByCourse();break;
}
}
}
voidSearchByName()
{
intn=0;
潣瑵?
请输入姓名:
;
stringname;
cin>>name;
for(p=head->next;p!
=NULL;p=p->next)
if(p->data.GetName()==name)
{
p->data.ShowInfo();
n++;
}
if(n==0)潣瑵?
没有相关记录<cout<}
voidSearchByCourse()
{
intn=0;
潣瑵?
请输入查找课程:
;
stringc;
cin>>c;
for(p=head->next;p!
=NULL;p=p->next)
{
vectorcourse=p->data.GetCourse();
for(inti=0;i<3;i++)
if(c==course[i])
{
p->data.ShowInfo();
n++;
break;
}
}
if(n==0)潣瑵?
没有相关记录<cout<}
..
...
voidNewList()
{
Destory();
head=tail=newCNode;
head->next=NULL;
while
(1)
{
p=newCNode;
潣瑵?
请输入:
<潣瑵?
姓名:
;
stringname;
cin>>name;
潣瑵?
年龄:
;
intage;
cin>>age;
潣瑵?
性别(F/M):
;
charsex;
cin>>sex;
p->data.SetNameAndSex(name,sex);
p->data.SetAge(age);
潣瑵?
职称:
;
stringtitle;
cin>>title;
潣瑵?
职工号:
;
stringteano;
cin>>teano;
p->data.SetData(title,teano);
潣瑵?
教授课程:
;
stringcourse[3];
cin>>course[0]>>course[1]>>course[2];
p->data.SetCourse(course[0],course[1],course[2]);
潣瑵?
教学效果综合评分:
;
floatscore;
cin>>score;
p->data.SetScore(score);
tail->next=p;
tail=p;
num++;
潣瑵?
是否继续输入?
(Y/N):
;
charc;
cin>>c;
cin.get();
if(c!
='y')break;
..
...
}
tail->next=NULL;
}
voidSave()
{
charfname[80];
潣瑵?
保存到:
;
cin>>fname;
ofstreamfile(fname);
if(!
file)
{
潣瑵?
出现未知错误导致无法打开!
<exit
(1);
}
for(p=head->next;p!
=NULL;p=p->next)
{
vectorcourse=p->data.GetCourse();
file<data.GetTeano()<<\
<data.GetName()<<\
<data.GetAge()<<\
<data.GetSex()<<\
<data.GetTitle()<<\
<<data.GetScore()<}
file.close();
}
voidDestory()
{
for(p=head->next;p!
=NULL;p=head->next)
{
head->next=p->next;
deletep;
}
deletehead;
head=NULL;
tail=NULL;
pre=NULL;
num=0;
}
~CList()
..
...
{
for(p=head->next;p!
=NULL;p=head->next)
{
head->next=p->next;
deletep;
}
deletehead;
head=NULL;
tail=NULL;
pre=NULL;
}
};
intmain(intargc,char*argv[