教师评学管理系统

 教师评学管理系统:

 (上传时间 :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);

  }

 }

推荐访问:管理系统 教师