教师评学管理系统
时间:2020-07-26 13:20:06 来源:雅意学习网 本文已影响 人
教师评学管理系统:
(上传时间 :2012/7/17)
注:本题目源码仅供参考,直接套用者后果自负。
涉及知识:运算符重载、链表、友元、输入输出流等。
#### GUIDIAN ####
要求:
该系统主要处理教师评学信息。
班级信息主要包括:班级编号、班级名称、所在院系、评学成绩等内容。
教师信息主要包括:编号、姓名、电话等内容。
完成以下的操作:班级信息、教师信息、评学信息的录入、修改、删除和查询。
提示:
建立学校类、教师类、班级类、评学类 学校、教师、班级、评学信息的初始化 学校、教师、班级、评学信息的添加、修改、删除、查找 学校、教师、班级、评学信息的输出 对评学信息按评学成绩排序
使用方法:按照注释分别加入到各个头文件中。
附录:源程序
//ChainChart.h #ifndef CHAINCHART_H #define CHAINCHART_H #include"School.h"
//链表类
class Node { public:
Mate m;
Teacher t;
School s;
Evaluate e;
Node *next;
};
class List { private:
char School[32];
char Name[32];
char Tel[32];
int Number;
int Mark;
public:
Node *head;
List();
bool Tof();
//判断 d
void Paixu();
//排序 d
void Del(); // 删除 d
void Add();
//增加 d
void Find();
//查询 d
void Fix();
//修改 d
void Insert();//插入 d
void Print();
//打印 d
int Length();
//长度判断 d
void Save();//保存 d
void Load();//载入 d
};
#endif
//school.h #ifndef SCHOOL_H #define SCHOOL_H
//学校类 #include<ostream.h> class Mate { private:
char Department[32];
double Mark;
public:
char Name[32];
int Number;
void Set();
void Show();
void Set(float);
friend ostream &operator << (ostream & stream,Mate &m)
{
cout<<m.Number<<"\t"<<m.Name<<"\t"<<m.Department<<"\t";
return stream;
} };
class Teacher { private: char Tel[32];
public:
int Number;
char Name[32];
void Show();
void Set(char * ,char * ,int);
friend ostream &operator << (ostream & stream,Teacher &t)
{
cout<<t.Number<<"\t"<<t.Name<<"\t"<<t.Tel<<"\t";
return stream;
} };
class School {
char Name[32];
public:
void Set(char *);
void Show();
friend ostream &operator << (ostream & stream,School &s)
{
cout<<s.Name<<"\t";
return stream;
} };
class Evaluate {
public:
void Set();
void Show();
double Mark;
double Record();
friend ostream &operator << (ostream & stream,Evaluate &e)
{
cout<<e.Mark<<"\t";
return stream;
} }; #endif
//C C hainchart.cpp
#include "ChainChart.h "
#include "School.h" #include <iostream.h> #include <stdio.h>
#include <stdio.h>
List::List() {
head=new Node;
head->next=NULL; };
bool List::Tof()
// 判断是否继续输入 {
char
tof;
cout<<"************* 继续输入信息? yes:y no:n *************"<<endl;
cin>>tof;
if(tof=="n")
{return true;}
else if(tof=="y")
{return false;}
else {return Tof();}
};
int List::Length() //求链表的长度 {
int sum=0;
Node *cur;
cur=head->next;
while(cur!=NULL)
{cur=cur->next ;sum++;}
return sum; }; void
List::Add() //加入新链表 {
Node *pre;
Node *nw=new Node;
head->next=nw;
nw->next=new Node;
char tof;
cout<<"---------下面开始录入:-------"<<endl;
cout<<endl;
cout<<"输入您(老师)的学校:"<<endl;
cin>>School;
cout<<"输入您的编号:"<<endl;
cin>>Number;
cout<<"输入您的电话:"<<endl;
cin>>Tel;
cout<<"输入您的名字:"<<endl;
cin>>Name;
nw->s.Set(School);
//录入学校名字
nw->t.Set(Name,Tel,Number);//录入老师信息
cout<<"---------------------------------您是
"<<Name<<"
老师,下面录入班级信息--------"<<endl; cout<<endl;
nw->m.Set();//录入班级的信息
cout<<"是否直接录入这个班级的成绩 y/n"<<endl;
cin>>tof;
if(tof=="y")
{
nw->e.Set();//录入评学成绩
}
else if(tof=="n")
{
nw->e.Mark=nw->e.Record();
}
pre=nw;
nw=nw->next;
if(Tof())
{
pre->next=NULL;
nw=NULL;
cout<<"
##########评学信息录入完毕,下面进行下一步操作!##########"<<endl;
cout<<endl;
return;
};
while(true)
{
nw->s.Set(School);
//录入学校名字
nw->t.Set(Name,Tel,Number);//录入老师信息
cout<<"--------------------------------您是
"<<Name<<"
老师下面录入班级信息----------"<<endl; cout<<endl;
nw->m.Set();//录入班级的信息
cout<<"是否直接录入这个班级的成绩 y/n"<<endl;
cin>>tof;
if(tof=="y")
{
nw->e.Set();//录入评学成绩
}
else if(tof=="n")
{
nw->e.Mark=nw->e.Record();
}
nw->next=new Node;
pre=nw;
nw=nw->next;
if(Tof())
{
pre->next=NULL;
nw=NULL;
cout<<endl;
cout<<"
##########评学信息录入完毕,下面进行下一步操
作!##########"<<endl;
cout<<endl; cout<<endl; cout<<endl;
return;
}
}
pre->next=NULL;
delete nw;
cout<<endl;
cout<<"
##########评学信息录入完毕,下面进行下一步操作!##########"<<endl;
cout<<endl;
};
void List::Paixu()
//链表排序 {
Node *cur,*pre,*tem,*tem2;
if(head->next->next==NULL)
{return;} //把 if 语句放进去就不执行,i 很小
for(int i=0;i<Length()-1;i++)
//注意 i 的值
{
cur=head->next;
tem=head;
pre=cur;
cur=cur->next;
for(int j=0;j<Length()-1;j++)
{
if(pre->e.Mark>cur->e.Mark )
{
pre->next=cur->next;
cur->next=pre;
tem->next=cur;
tem2=cur;
cur=pre;
pre=tem2;
}
if(j==Length()-2)
//防止排序越界
{break;}
pre=pre->next;
cur=cur->next;
tem=tem->next;
}
}
cout<<"---------------------------排序成功--------------------------------"<<endl;
cur->next=NULL; };
void List::Print() //链表打印 {
Node *cur;
cur=head->next;
int i=1;
if(head->next==NULL)
{cout<<"表中还没有人,怎么打印"<<endl;return;}
cout<<endl; cout<<endl;
cout<<"-----------------------------"<<"下面开始打印各个信息"<<"--------------------------------"<<endl;
cout<<endl;
cout<<"序号"<<"
"<<"学校"<<"
"<<"老师编号"<<"
"<<"名字"<<"
"<<"电话"<<"
"<<"班级编号"<<"
"<<"名称"<<"
"<<"学院"<<"
"<<"成绩"<<endl;
if(cur->next==NULL)
{
cout<<i<<"\t"<<cur->s<<cur->t<<cur->m<<cur->e<<endl;
cout<<endl;
cout<<"------------------------"<<"打印完毕,请继续下一步操作"<<"------------------------------"<<endl;
return;
}
while(cur->next!=NULL)
{
cout<<i<<"\t"<<cur->s<<cur->t<<cur->m<<cur->e<<endl;
cur=cur->next;
i++;
}
cout<<i<<"\t"<<cur->s<<cur->t<<cur->m<<cur->e<<endl;
cout<<"------------------------"<<"打印完毕,请继续下一步操作"<<"------------------------------"<<endl; };
//chainchart2.cpp
#include "ChainChart.h " #include "School.h" #include<iostream.h> #include<string.h> #include<fstream.h>
void List::Insert() {
Node *cur,*nw;
cur=head;
if(cur->next==NULL)
{cout<<" 表中没有人,请先加入!"<<endl;}
while(cur->next!=NULL)
{
cur=cur->next;
}
nw=new Node;
cur->next=nw;
cout<<"输入您的学校:"<<endl;
cin>>School;
cout<<"输入老师的编号:"<<endl;
cin>>Number;
cout<<"输入老师的电话:"<<endl;
cin>>Tel;
cout<<"输入老师的名字:"<<endl;
cin>>Name;
nw->s.Set(School);
//录入学校名字
nw->t.Set(Name,Tel,Number);//录入老师信息
nw->m.Set();//录入班级的信息
nw->e.Set();//录入评学成绩
nw->next=NULL; }
void List::Del()
//删除函数 {
int Number;
Node *cur,*pre;
cout<<"输入要删除班级的编号"<<endl;
cin>>Number;
int j=0;
if(head==NULL)
{
cout<<"表是空的,不能删除"<<endl;
return;
}
cur=pre=head;
while(j<Length())
{
pre=cur;
cur=cur->next;
if(cur->m.Number==Number)
{
if(head==cur)
{head=head->next;}
//如果是头指针指向的节点,则还要重新添加引导
else{pre->next=cur->next;}
cout<<"这个班级的信息已经删除!"<<endl;
return;
}
j++;
}
cout<<"找不到这个班的编号,请重新输入!"<<endl;
Del();
};
void List::Find()
//查找函数 {
Node *cur;
cur=head->next;
cout<<"输入要查找的班级编号"<<endl;
cin>>Number;
int j=0;
if(head==NULL)
{
cout<<"表是空的,不能查找"<<endl;
return;
}
cur=head;
while(j<Length())
//按学号查找
{
cur=cur->next;
if(cur->m.Number==Number)
{
cout<<"已经找到,下面输出信息"<<endl;
cout<<"学校"<<"
"<<"老师编号"<<"
"<<"名字"<<"
"<<"电话"<<"
"<<"班级编号"<<"
"<<"名称"<<"
"<<"学院"<<"
"<<"成绩"<<endl;
cout<<cur->s<<cur->t<<cur->m<<cur->e<<endl;
return;
}
j++;
}
cout<<"%%%%%%找来找去,找不到这班%%%%%%%"<<endl;
return;
};
void List::Fix() {
int i=0;
char choose;
char Nam[32];
int Num;
int Number;
char Name[32];
char Tel[32];
char School[32];
Node *cur;
cur=head->next;
while(1)
{
cout<<"请输入修改的目标,修改班级信息:1
修改老师信息:2"<<endl;
cin>>choose;
i=0;
cur=head->next;
if(choose=="1")
{
i=0;
cout<<"请输入班级的编号:"<<endl;
cin>>Num;
cout<<"请输入班级的名称:"<<endl;
cin>>Nam;
cur=head->next;
while(i<Length())
{
if(cur->m.Number==Num&&strcmp(Nam,cur->m.Name)==0)
{
cout<<"下面录入这个班级要修改的信息:"<<endl;
cur->m.Set();
cout<<"班级信息修改成功!"<<endl;
i=0;
return;
}
i++;
cur=cur->next;
if(i==Length()-1)
{cout<<"查不到这个班,请重新输入"<<endl;i=0;break;}
}
}
else if( choose=="2")
{
i=0;
cur=head->next;
cout<<"请输入老师的编号:"<<endl;
cin>>Num;
cout<<"请输入老师的姓名:"<<endl;
cin>>Nam;
cout<<" ----------下面录入老师要修改的信息:-----------"<<endl;
cout<<"输入您的学校:"<<endl;
cin>>School;
cout<<"输入老师的编号:"<<endl;
cin>>Number;
cout<<"输入老师的电话:"<<endl;
cin>>Tel;
cout<<"输入老师的名字:"<<endl;
cin>>Name;
while(i<Length())
{
if(cur->t.Number==Num&&strcmp(Nam,cur->t.Name)==0)
{
cur->s.Set(School);
//录入学校名字
cur->t.Set(Name,Tel,Number);//录入老师信息
if(i==Length()-1)
{cout<<"********老师信息修改成功!********"<<endl;i=0;return;}
}
i++;
cur=cur->next;
if(i==Length())
{cout<<"%%%%%%%查不到这个老师,请重新输入%%%%%%"<<endl;i=0;break;}
}
}
else
{cout<<"%%%%%%%%信息输入不正确,请重新输入!%%%%%"<<endl;}
} };
void List::Save() {
Node *cur;
ofstream out("data.txt",ios::binary);
cur=head->next;
for(int i=0;i<Length();i++)
{
cout<<cur->s<<cur->t<<cur->m<<cur->e<<endl;
out.write((char *)cur,sizeof(*cur));
cur=cur->next;
}
cout<<"写入文件成功!"<<endl;
out.close();
};
void List::Load() {
Node *cur,*pre,*nw;
head=new Node;
nw=new Node;
head->next=nw;
pre=nw;
cur=nw;
ifstream in("data.txt",ios::binary);
while(in)
{
in.read((char *)cur, sizeof(*cur));
if(!in)
{break;}
nw=new Node;
cur->next=nw;
pre=cur;
cur=cur->next;
}
pre->next=NULL;
cout<<"读出文件成功!"<<endl;
in.close(); };
//S S chool.cpp
#include "School.h" #include <iostream.h> #include <iomanip> #include<ostream> #include<cstring>
void School::Set(char *p) {
strcpy(Name,p);
};
void School::Show() {
cout<<"学校:"<<Name<<endl; };
void Evaluate::Set() {
cout<<"请输入这个班级的成绩"<<endl;
cin>>Mark;
cout<<"这位班级的信息输入完毕!"<<endl;
cout<<"-----------------------------------"<<endl;
};
void Evaluate::Show () {
cout<<"成绩:"<<Mark<<endl; };
void Teacher::Set(char *p,char *q,int n) {
strcpy(Tel,q);
strcpy(Name,p);
Number=n;
};
void Teacher::Show() {
cout<<"老师的名字:"<<"\t"<<"老师的电话:"<<"\t"<<"老师的编号:"<<"\t"<<endl;
cout<<Name<<"\t"<<Tel<<"\t"<<Number<<"\t"<<endl;
};
void Mate::Set() {
cout<<"输入此班级的编号"<<endl;
cin>>Number;
cout<<"输入这个班级的名称"<<endl;
cin>>Name;
cout<<"输入这个班级的学院"<<endl;
cin>>Department; };
void Mate::Show() {
cout<<"班级编号"<<"\t"<<"班级名称"<<"\t"<<"班级学院"<<"\t"<<endl;
cout<<Number<<"\t"<<Name<<"\t"<<Department<<"\t"<<endl;
};
double Evaluate::Record() {
char a[4];
double mark=0;
cout<<"下面开始对班级评分:"<<endl;
cout<<"这班级学生的到课情况:
1:好 2:一般 3:差 "<<endl; //25
cin>>a[0];
cout<<"这班级学生的上课情况:
1:好 2:一般 3:差 "<<endl; //25
cin>>a[1];
cout<<"这班级学生的作业情况:
1:好 2:一般 3:差 "<<endl; //25
cin>>a[2];
cout<<"这班级学生的考试情况:
1:好 2:一般 3:差 "<<endl; //25
cin>>a[3];
for(int i=0;i<4;i++)
{
switch(a[i])
{
case "1" : mark+=25;break;
case "2" : mark+=20;break;
case "3" : mark+=10;break;
}
}
cout<<"这位班级的信息输入完毕!"<<endl;
cout<<"-----------------------------------"<<endl; return mark; } //main.cpp
#include<iostream.h> #include"ChainChart.h" #include"School.h" #include<iomanip.h> #include<stdlib.h> int menu() {
//显示主菜单
char c;
cout << "-------------------------------------\n";
cout << "
教师评学管理系统
v1.0*\n";
cout << "
*\n";
cout << " | -
1. 录入评学信息*\n";
cout << " | -
2. 添加评学信息*\n";
cout << " | -
3. 修改评学信息*\n";
cout << " | -
4. 班级信息排序*\n";
cout << " | -
5. 查找班级信息*\n";
cout << " | -
6. 删除班级信息*\n";
cout << " | -
7. 打印班级信息*\n";
cout << " | -
8. 保存班级信息*\n";
cout << " | -
9. 读取班级信息*\n";
cout << " | -
0. 退出*\n";
cout << "------------------------------------*\n";
cout << "\n 请输入(0~9): ";
do { //键盘输入循环
cin.get(c);
} while(c<"0" || c>"9");
return c-48; }
void main()
//主函数 {
char choice;
List l;
for(;;) { //循环,直到键盘输入结束代码
choice = menu();
switch(choice) { //根据键盘输入,调用相应的功能
case 1: l.Add();break;
case 2: l.Insert();break;
case 3: l.Fix();break;
case 4: l.Paixu();break;
case 5: l.Find();break;
case 6:
l.Del();break;
case 7:
l.Print();break;
case 8:
l.Save();break;
case 9:
l.Load();break;
case 0: exit(0);
}
}