C++实现学生信息管理系统(完整版)

  #include

  #include

  #include

  #include

  #include

  #include

  using namespace std;

  #define null NULL

  class student

  {

  private:

  int flag;

  friend class studentMessage;

  student *next; //节点指针

  string name; //学生姓名

  string address;  //家庭住址

  int age; //年龄

  int id; //学号

  string sex;

  char grade;                  班级

  //  A    代表大学生

  //  B    代表中学生

  //  C    代表小学生

  double chinese , math , english;  //语文 , 数学 , 英语

  double history , geography ;     //历史  , 地理

  string major; long long int TL;     //  专业  ,  电话

  public:

  static int num_total;  //总数

  static int num_sex;

  static int num_age;

  //小学生初始化

  student(int _id,string _name,string _sex,int _age,char _grade,double _chinese,double _math,double _english)

  {

  name = _name;

  grade = _grade;

  age  = _age;

  sex = _sex;

  id = _id;

  chinese = _chinese;

  math    =  _math;

  english = _english;

  next = NULL;

  }

  //初中生初始化

  student(int _id,string _name,string _sex,int _age,char _grade,double _geography,double _history,string _address)

  {

  name = _name;

  grade = _grade;

  age  = _age;

  sex = _sex;

  id = _id;

  geography = _geography;

  history   = _history;

  address    = _address;

  next = NULL;

  }

  //大学生初始化

  student(int _id,string _name,string _sex,int _age,char _grade,string _major,string _address,long long int _TL)

  {

  name = _name;

  grade = _grade;

  age  = _age;

  sex = _sex;

  id = _id;

  major  = _major;

  address = _address;

  TL     = _TL;

  next = NULL;

  }

  //构造函数

  student() //为studentMessage初始化头结点用

  {

  name = "null";

  sex = "null";

  address = "null";

  age = 0;

  id = 0;

  chinese = 0;

  math = 0;

  english = 0;

  grade = '0';

  geography = 0;

  history = 0;

  major = "null";

  TL = 0;

  next = NULL;

  }

  ~student(){}

  void swap(student*);

  };

  int student::num_total = 0; 初始化

  int student::num_sex = 0;

  int student::num_age = 0;

  void student::swap(student *q)

  {

  string _name,_sex,_address;

  int _age,_id;

  char grade;                  班级

  //  A    代表大学生

  //  B    代表中学生

  //  C    代表小学生

  double _chinese , _math , _english;  //语文 , 数学 , 英语

  double _history , _geography ;     //历史  , 地理

  string _major; long long int _TL;     //  专业  ,  电话

  _chinese   = chinese;

  chinese    = q->chinese;

  q->chinese = _chinese;

  _math   =  math;

  math    =  q->math;

  q->math =  _math;

  _english   =  english;

  english    =  q->english;

  q->english =  _english;

  _history   = history;

  history    = q->history;

  q->history = _history;

  _geography   =  geography;

  geography    =  q->geography;

  q->geography =  _geography;

  _major   =  major;

  major    = q->major;

  q->major =  _major;

  _TL   = TL;

  TL    = q->TL;

  q->TL = _TL;

  _name   = name;

  name    = q->name;

  q->name = _name;

  _sex   = sex;

  sex    = q->sex;

  q->sex = _sex;

  _address   = address;

  address    = q->address;

  q->address = _address;

  _age   = age;

  age    = q->age;

  q->age = _age;

  _id   = id;

  id    = q->id;

  q->id = _id;

  }

  class studentMessage

  {

  private:

  student *first; //头指针

  int num; //信息中的学生人数

  public:

  studentMessage()

  {

  num = 0; //初始化学生人数为0

  first = new student;  //初始化头结点

  }

  ~studentMessage(){delete first;}

  /*管理系统常规操作*/

  void Insret(void); //插入

  void Display(void); //显示

  void Delete(void); //删除

  void Search(void); //搜索

  void Change(void); //改动

  void SearchByid(void); //按照学号查找

  void SearchByname(void); //按照姓名查找

  int menu(void); //初始的菜单

  void clear(void); //清空列表

  void tongji(void);  //统计学生人数

  void save(void);

  void read(void);

  };

  int studentMessage::menu(void)

  {

  system("cls");

  int ch;

  cout<

  cout<<"**********************************************************************"<

  cout<<"======================================================================"<

  cout<<"***************************学生信息管理系统***************************"<

  cout<

  cout<<"                            1.添加功能"<

  cout<<"                            2.查询功能"<

  cout<<"                            3.显示功能"<

  cout<<"                            4.编辑功能"<

  cout<<"                            5.删除功能"<

  cout<<"                            6.统计功能"<

  cout<<"                            7.保存功能"<

  cout<<"                            8.全部删除"<

  cout<<"                            0.退出系统"<

  cout<

  cout<<"***********************************************************************"<

  cout<<"======================================================================="<

  cout<<"***********************************************************************"<

  cout<

  cin >> ch;

  cout<<"

  "<

  return ch;

  }

  void studentMessage::save(void)

  {

  system("cls");

  fstream f("student.txt",ios::out);

  int i;

  if(!f)

  {

  cout<

  cout<<"文件保存失败!!!!按任意键返回..."<

  if(i = getch()) return ;

  }

  if(student::num_total == 0)

  {

  f<<"当前记录中无学生..."<

  }

  else

  {

  student *p = first->next;

  while(p != null)

  {

  f<<"学号:"<id<<"  "<

  f<<"姓名:"<name<

  f<<"性别(boy/girl):"<sex<

  f<<"年龄:"<age<

  f<<"班级:"<grade<

  if(p->grade == 'A')

  {

  f<<"专业:"<major<

  f<<"家庭住址:"<address<

  f<<"联系方式:"<TL<

  }

  else if(p->grade == 'B')

  {

  f<<"地理成绩:"<geography<

  f<<"历史成绩:"<history<

  f<<"家庭住址:"<address<

  }

  else

  {

  f<<"语文成绩:"<chinese<

  f<<"数学成绩:"<math<

  f<<"英语成绩:"<english<

  }

  f<<"------------------------------------------------"<

  p = p->next;

  }

  }

  f.close();

  cout<

  cout<<"学生信息文件已创建,按任意键继续"<

  i = getch();

  }

  void studentMessage::read(void)

  {

  system("cls");

  string name;

  int age;

  int id;

  char grade;

  string sex,address;

  double chinese , math , english;  //语文 , 数学 , 英语

  double history , geography ;     //历史  , 地理

  string major; long long int TL;     //  专业  ,  电话

  int i;

  char ch;

  ifstream f("student.txt");

  while(1)

  {

  f>>ch;

  if(f.eof())

  {

  cout<<"文件为空!按任意键返回"<

  if(i = getch()) return ;

  }

  f>>name;

  f>>sex;

  f>>age;

  f>>id;

  f>>grade;

  if(grade=='A')

  {

  f>>major;

  f>>address;

  f>>TL;

  }

  else if(grade == 'B')

  {

  f>>geography;

  f>>history;

  f>>address;

  }

  else

  {

  f>>chinese;

  f>>math;

  f>>english;

  }

  student::num_total ++;

  if(sex=="boy") student::num_sex++;

  if(age>=18) student::num_age ++;

  student *newstu = new student();

  if(grade == 'A')    newstu = new student(id,name,sex,age,grade,major,address,TL);

  else if(grade == 'B')    newstu = new student(id,name,sex,age,grade,geography,history,address);

  else if(grade == 'C')    newstu = new student(id,name,sex,age,grade,chinese,math,english);

  student *p = first;

  while(p->next != NULL)

  {

  p = p->next;

  }

  p->next = newstu;

  newstu->next = null;

  }

  }

  /统计

  void studentMessage::tongji(void)

  {

  system("cls");//

  cout<<"学生人数一共为:" <

  cout<<"男生一共有:"<

  cout<<"女生一共有:"<

  cout<<"成年人有:"<

  int i;

  cout<

  cout<<"按任意键继续"<

  i = getch();

  }

  //插入

  void studentMessage::Insret(void)

  {

  system("cls");//

  string name;

  int age;

  int id;

  char grade;

  string sex,address;

  double chinese , math , english;  //语文 , 数学 , 英语

  double history , geography ;     //历史  , 地理

  string major; long long int TL;     //  专业  ,  电话

  cout<<"请输入学生姓名: ";

  cin>>name;

  cout<<"请输入学生性别(boy/girl): ";

  cin>>sex;

  cout<<"请输入学生年龄: ";

  cin>>age;

  cout<<"请输入学生学号: ";

  cin>>id;

  cout<<"下面请输入学生班级(大学生输入'A',初中生输入'B',小学生输入'C'): ";

  cout<

  cin>>grade;

  cout<

  if(grade=='A')

  {

  cout<<"请输入专业:"<

  cin>>major;

  cout<<"请输入家庭住址:"<

  cin>>address;

  cout<<"请输入联系电话:"<

  cin>>TL;

  }

  else if(grade == 'B')

  {

  cout<<"请输入地理成绩:"<

  cin>>geography;

  cout<<"请输入历史成绩:"<

  cin>>history;

  cout<<"请输入家庭住址:"<

  cin>>address;

  }

  else

  {

  cout<<"请输入语文成绩:"<

  cin>>chinese;

  cout<<"请输入数学成成绩:"<

  cin>>math;

  cout<<"请输入英语成绩:"<

  cin>>english;

  }

  student::num_total ++;

  if(sex=="boy") student::num_sex++;

  if(age>=18) student::num_age ++;

  student *newstu = new student();

  if(grade == 'A')    newstu = new student(id,name,sex,age,grade,major,address,TL);

  else if(grade == 'B')    newstu = new student(id,name,sex,age,grade,geography,history,address);

  else if(grade == 'C')    newstu = new student(id,name,sex,age,grade,chinese,math,english);

  student *p = first;

  while(p->next != NULL)

  {

  p = p->next;

  }

  p->next = newstu;

  newstu->next = null;

  }

  //00000000000000000000000/

  void studentMessage::Display(void)

  {

  system("cls");

  if(student::num_total == 0)

  {

  cout<<"当前记录中无学生..."<

  }

  else

  {

  student *p = first->next;

  while(p != null)

  {

  cout<<"学号:"<id<<"  "<

  cout<<"姓名:"<name<

  cout<<"性别(boy/girl):"<sex<

  cout<<"年龄:"<age<

  cout<<"班级:"<grade<

  if(p->grade == 'A')

  {

  cout<<"专业:"<major<

  cout<<"家庭住址:"<address<

  cout<<"联系方式:"<TL<

  }

  else if(p->grade == 'B')

  {

  cout<<"地理成绩:"<geography<

  cout<<"历史成绩:"<history<

  cout<<"家庭住址:"<address<

  }

  else

  {

  cout<<"语文成绩:"<chinese<

  cout<<"数学成绩:"<math<

  cout<<"英语成绩:"<english<

  }

  cout<<"------------------------------------------------"<

  p = p->next;

  }

  }

  int i;

  cout<

  cout<<"按任意键继续"<

  i = getch();

  }

  //删除功能~~~~~~~~~~~~~~~~

  void studentMessage::Delete(void)

  {

  string _name;

  system("cls");

  cout<<"请输入需要删除的同学姓名:"<

  cin>>_name;

  int k=0;

  student *p = first;

  student *pre = first;

  while(p->next)

  {

  pre=p->next;

  if(pre->name == _name)

  {

  p->next=pre->next;

  k=1;

  delete pre;

  }

  p=p->next;

  }

  if(k==0&&p->name!=_name)   cout<<"记录为空!"<

  else

  {

  student::num_total--;

  if(p->sex=="boy") student::num_sex--;

  if(p->age>=18)   student::num_age--;

  }

  int i;

  cout<

  cout<<"按任意键继续"<

  i = getch();

  }

  void studentMessage::Search(void)

  {

  system("cls");/

  int temp = 0;

  cout<<"请输入查找的条件,有如下选项..."<

  cout<<"按照学号查找(请输入【1】) 按照姓名查找(请输入【2】) "<

  cout<<" 退出(请输入【666】)"<

  cin>>temp;

  switch(temp)

  {

  case 1: SearchByid(); break;

  case 2: SearchByname(); break;

  case 666: return;

  default: cout<<"输入有误..."<

  }

  }

  void studentMessage::SearchByid(void)

  {

  system("cls");//

  int _id;

  int flag = 0;

  cout<<"请输入待查找学生的学号:";

  cin >> _id;

  student *p = first->next;

  while(p != null)

  {

  if(p->id == _id)

  {

  flag = 1;

  cout<<"下面是查找匹配结果:"<

  cout<

  cout<<"学号:"<id<<"  "<

  cout<<"姓名:"<name<

  cout<<"性别(boy/girl):"<sex<

  cout<<"年龄:"<age<

  cout<<"班级:"<grade<

  if(p->grade == 'A')

  {

  cout<<"专业:"<major<

  cout<<"家庭住址:"<address<

  cout<<"联系方式:"<TL<

  }

  else if(p->grade == 'B')

  {

  cout<<"地理成绩:"<geography<

  cout<<"历史成绩:"<history<

  cout<<"家庭住址:"<address<

  }

  else

  {

  cout<<"语文成绩:"<chinese<

  cout<<"数学成绩:"<math<

  cout<<"英语成绩:"<english<

  }

  }

  p = p->next;

  }

  if(flag == 0)

  {

  cout<<"未找到匹配项..."<

  }

  int i;

  cout<

  cout<<"按任意键继续"<

  i = getch();

  }

  void studentMessage::SearchByname(void)

  {

  system("cls");/

  string _name;

  int flag = 0;

  cout<<"请输入待查找的学生姓名: ";

  cin >> _name;

  student *p = first->next;

  while(p != null)

  {

  if(p->name == _name)

  {

  cout<<"下面是查找匹配结果:"<

  cout<

  cout<<"学号:"<id<<"  "<

  cout<<"姓名:"<name<

  cout<<"性别(boy/girl):"<sex<

  cout<<"年龄:"<age<

  cout<<"班级:"<grade<

  if(p->grade == 'A')

  {

  cout<<"专业:"<major<

  cout<<"家庭住址:"<address<

  cout<<"联系方式:"<TL<

  }

  else if(p->grade == 'B')

  {

  cout<<"地理成绩:"<geography<

  cout<<"历史成绩:"<history<

  cout<<"家庭住址:"<address<

  }

  else

  {

  cout<<"语文成绩:"<chinese<

  cout<<"数学成绩:"<math<

  cout<<"英语成绩:"<english<

  }

  }

  p = p->next;

  }

  if(flag == 0)

  {

  cout<<"未找到匹配项..."<

  }

  int i;

  cout<

  cout<<"按任意键继续"<

  i = getch();

  }

  void studentMessage::Change(void)

  {

  system("cls");//

  string _name,_sex,_address,_major;

  char _grade; long long int _TL;

  double _chinese , _math , _english;  //语文 , 数学 , 英语

  double _history , _geography ;     //历史  , 地理

  int flag = 0,temp;

  int _id,_age;

  int course = 0;

  cout<<"请输入需要改动信息的学生的姓名: ";

  cin >> _name;

  student *p = first->next;

  while(p != null)

  {

  if(p->name == _name)

  {

  flag = 1;

  cout<<"该学生当前信息如下:"<

  cout<<"学号:"<id<<"  "<

  cout<<"姓名:"<name<

  cout<<"性别(boy/girl):"<sex<

  cout<<"年龄:"<age<

  cout<<"班级:"<grade<

  if(p->grade == 'A')

  {

  cout<<"专业:"<major<

  cout<<"家庭住址:"<address<

  cout<<"联系方式:"<TL<

  }

  else if(p->grade == 'B')

  {

  cout<<"地理成绩:"<geography<

  cout<<"历史成绩:"<history<

  cout<<"家庭住址:"<address<

  }

  else

  {

  cout<<"语文成绩:"<chinese<

  cout<<"数学成绩:"<math<

  cout<<"英语成绩:"<english<

  }

  cout<<"请指明哪一项需要修改..."<

  cout<<"修改学号(输入【1】) 修改年龄(输入【2】)修改班级信息(输入【3】) "<

  cout<<" 退出(输入【666】)"<

  cin >> temp;

  switch(temp)

  {

  case 1:

  {

  cout<<"请输入新的学号:"<>_id;

  p->id = _id;

  }

  break;

  case 2:

  {

  cout<<"请输入新的年龄:"<>_age;

  p->age = _age;

  }

  break;

  case 3:

  {

  cout<<"请输入新的班级信息(大学生输入'A',初中生输入'B',小学生输入'C'):"<>_grade;

  p->grade = _grade;

  if(_grade=='A')

  {

  cout<<"请输入专业:"<

  cin>>_major;

  p->major = _major;

  cout<<"请输入家庭住址:"<

  cin>>_address;

  p->address = _address;

  cout<<"请输入联系电话:"<

  cin>>_TL;

  p->TL = _TL;

  }

  else if(_grade == 'B')

  {

  cout<<"请输入地理成绩:"<

  cin>>_geography;

  p->geography = _geography;

  cout<<"请输入历史成绩:"<

  cin>>_history;

  p->history = _history;

  cout<<"请输入家庭住址:"<

  cin>>_address;

  p->address = _address;

  }

  else

  {

  cout<<"请输入语文成绩:"<

  cin>>_chinese;

  p->chinese = _chinese;

  cout<<"请输入数学成成绩:"<

  cin>>_math;

  p->major = _math;

  cout<<"请输入英语成绩:"<

  cin>>_english;

  p->english = _english;

  }

  }

  break;

  case 666: return ;

  cout<<"修改后的信息如下: "<

  cout<<"姓名:"<name<<"  "<

  cout<<"性别:"<sex<<"  "<

  cout<<"年龄:"<age<<"  "<

  cout<<"学号:"<id<<"  "<

  cout<<"地址:"<address<<"  "<

  default:  cout<<"输入有误..."<

  }

  }

  p = p->next;

  }

  if(flag == 0)

  cout<<"当前记录中没有此学生..."<

  }

  void studentMessage::clear(void)

  {

  student *p = first->next;

  while(p != null)

  {

  first->next = p->next;

  p->next = null;

  delete p;

  p = first->next;

  }

  }

  int main()

  {

  studentMessage stulist;

  int ch;

  while(ch = stulist.menu())

  {

  switch(ch)

  {

  case 1: stulist.Insret();  break;

  case 2: stulist.Search();  break;

  case 3: stulist.Display(); break;

  case 4: stulist.Change();  break;

  case 5: stulist.Delete();  break;

  case 6: stulist.tongji();  break;

  case 7: stulist.save();    break;

  case 8: stulist.clear();   break;

  case 0: return 0;

  default: cout<<"请按要求输入..."<

  }

  }

  return 0;

  }