C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的方法-創(chuàng)新互聯(lián)

了解C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

創(chuàng)新互聯(lián)公司于2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元磐安做網(wǎng)站,已為上家服務(wù),為磐安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):028-86922220

該系統(tǒng)主要用到C++的繼承,虛函數(shù)。所有學(xué)生的信息保存在一個(gè)異質(zhì)鏈表中,并且鏈表也進(jìn)行了封裝

課設(shè)題目

設(shè)計(jì)一個(gè)學(xué)生管理系統(tǒng),要求如下:

1、學(xué)生來(lái)自英語(yǔ)系,數(shù)學(xué)系、計(jì)算機(jī)系:

a) 每個(gè)學(xué)生的公共信息部分包括:學(xué)號(hào)、姓名、年齡、系別,高數(shù)成績(jī)、英語(yǔ)成績(jī)、體育成績(jī);
b) 英語(yǔ)系學(xué)生有綜合英語(yǔ)、口語(yǔ)等課程成績(jī);
c) 數(shù)學(xué)系學(xué)生有實(shí)變函數(shù)、泛函分析、微分幾何等課程成績(jī);
d) 計(jì)算機(jī)系學(xué)生有計(jì)算機(jī)組成原理、計(jì)算機(jī)體系結(jié)構(gòu)、匯編語(yǔ)言等課程成績(jī)。


每個(gè)學(xué)生可以查詢(xún)相應(yīng)信息(學(xué)號(hào)、姓名、年齡、系別及成績(jī)信息);可以查詢(xún)各門(mén)課程的平均成績(jī)。
用類(lèi)及類(lèi)的派生實(shí)現(xiàn)上述功能,要求使用類(lèi)的繼承、虛函數(shù)、虛基類(lèi)的C++語(yǔ)言特性;要求每個(gè)類(lèi)采用不同的方式實(shí)現(xiàn)構(gòu)造函數(shù);


2、設(shè)計(jì)一個(gè)學(xué)生管理類(lèi),其中包含可變學(xué)生數(shù)目,要求實(shí)現(xiàn):

1)初始化,所有學(xué)生的信息組織以鏈表方式實(shí)現(xiàn);
2)實(shí)現(xiàn)指定學(xué)生的信息查詢(xún)(如利用學(xué)號(hào)、姓名等方式);
3)按照公共課平均成績(jī)排序;
4)按照學(xué)生所有課程的平均成績(jī)排序;
5)增加學(xué)生;
6)刪除指定學(xué)生。


3、注意構(gòu)造函數(shù)和析構(gòu)函數(shù)的實(shí)現(xiàn)方式。每個(gè)類(lèi)的申明需放在單獨(dú)的頭文件中(即一個(gè)類(lèi)的申明放在一個(gè)后綴名為h的文件中),每個(gè)類(lèi)的實(shí)現(xiàn)放在一個(gè)單獨(dú)的cpp文件中。測(cè)試程序(即包含main函數(shù)的程序)單獨(dú)放在一個(gè)cpp文件中。

整體分析

根據(jù)題目要求該學(xué)生信息管理系統(tǒng)可分為五個(gè)功能模塊:

1、 信息讀取及輸出功能:從文件中讀取學(xué)生信息
將學(xué)生信息打印到屏幕上


2、 信息維護(hù)功能:增加學(xué)生信息
刪除學(xué)生信息


3、 信息查詢(xún)功能:根據(jù)學(xué)號(hào)查詢(xún)學(xué)生信息
根據(jù)姓名查詢(xún)學(xué)生信息


4、 成績(jī)統(tǒng)計(jì)功能:計(jì)算各學(xué)科的平均分

5、 排序功能:按照公共課平均成績(jī)進(jìn)行排序
按照全部課程的平均成績(jī)進(jìn)行排序
為實(shí)現(xiàn)以上功能,使用了類(lèi)的繼承,虛函數(shù)的C++語(yǔ)言特性


共使用五個(gè)類(lèi):

1、 Student類(lèi):包含學(xué)生共同信息的類(lèi),共派生出三個(gè)類(lèi)
2、 Csstudent類(lèi):計(jì)算機(jī)系學(xué)生類(lèi),由Student類(lèi)派生而來(lái)
3、 Enstudent類(lèi):英語(yǔ)系學(xué)生類(lèi),由Student類(lèi)派生而來(lái)
4、Mstudent類(lèi):數(shù)學(xué)系學(xué)生類(lèi),由Student類(lèi)派生而來(lái)
4、 List類(lèi):鏈表類(lèi),包含對(duì)學(xué)生信息鏈表的各種操作


共使用到13個(gè)文件:<

1、 menu.cpp:內(nèi)含多個(gè)創(chuàng)建菜單函數(shù),用于實(shí)現(xiàn)不同模塊的功能顯示
2、 main.cpp:調(diào)用所有的函數(shù),并進(jìn)行適當(dāng)?shù)慕M合實(shí)現(xiàn)完整的學(xué)生成績(jī)管理系統(tǒng)
3、 student.h:包含用于保存學(xué)生公共信息及相關(guān)操作函數(shù)的Student類(lèi)
4、 student.cpp:包含Student類(lèi)的成員函數(shù)的實(shí)現(xiàn)
5、 csstudent.h:包含用于保存計(jì)算機(jī)系學(xué)生信息及相關(guān)操作的Csstudent類(lèi)
6、 csstudent.cpp:包含Csstudent類(lèi)的成員函數(shù)的實(shí)現(xiàn)
7、 enstudent.h:包含用于保存英語(yǔ)系學(xué)生信息及相關(guān)操作的Enstudent類(lèi)
8、 enstudent.cpp:包含Enstudent類(lèi)的成員函數(shù)的實(shí)現(xiàn)
9、 mstudent.h:包含用于保存數(shù)學(xué)系學(xué)生信息及相關(guān)操作的Mstudent類(lèi)
10、 mstudent.cpp:包含Mstudent類(lèi)的成員函數(shù)的實(shí)現(xiàn)
11、 list.h:包含用于操作學(xué)生信息的的List類(lèi)
12、 list.cpp:包含List類(lèi)的成員函數(shù)的實(shí)現(xiàn)
13、 student.txt:包含學(xué)生的全部信息


多個(gè)類(lèi)的繼承關(guān)系圖如下:

C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的方法

源代碼

main.cpp

#include<iostream>
using namespace std;
//主界面
void menu()
{
 cout<<"\n\n\t\t----------------學(xué)生成績(jī)管理系統(tǒng)------------------"<<endl<<endl;
 cout<<"\t\t1、信息維護(hù)功能"<<" "<<"\t2、信息查詢(xún)功能"<<endl<<endl;
 cout<<"\t\t3、成績(jī)統(tǒng)計(jì)功能"<<" "<<"\t4、排序功能"<<endl<<endl;
 cout<<"\t\t5、退出"<<endl<<endl;
 return;
}

 
//信息維護(hù)功能界面
void menu1()
{
 cout<<"\n\n\t\t信息維護(hù)功能"<<endl<<endl;
 cout<<"\t\t1、增加學(xué)生信息"<<endl<<endl;
 cout<<"\t\t2、刪除學(xué)生信息"<<endl<<endl;
 cout<<"\t\t3、返回"<<endl<<endl;
 return;
}

//信息查詢(xún)功能界面
void menu2()
{
 cout<<"\n\n\t\t信息查詢(xún)功能"<<endl<<endl;
 cout<<"\t\t1、按姓名查詢(xún)"<<endl<<endl;
 cout<<"\t\t2、按學(xué)號(hào)查詢(xún)"<<endl<<endl;
 cout<<"\t\t3、返回"<<endl<<endl;
 return;
}

//成績(jī)統(tǒng)計(jì)功能界面
void menu3()
{
 cout<<"\n\n\t\t成績(jī)統(tǒng)計(jì)功能"<<endl<<endl;
 cout<<"\t\t1、各科目的平均成績(jī)"<<endl<<endl;
 cout<<"\t\t2、返回"<<endl<<endl;
 return;
}


//排序功能界面
void menu4()
{
 cout<<"\n\n\t\t排序功能"<<endl<<endl;
 cout<<"\t\t1、根據(jù)公共課平均成績(jī)排序"<<endl<<endl;
 cout<<"\t\t2、根據(jù)全部科目平均成績(jī)排序"<<endl<<endl;
 cout<<"\t\t3、返回"<<endl<<endl;
 return;
}

main.cpp

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include"student.h"
#include"csstudent.h"
#include"list.h"
using namespace std;

void menu();
void menu1();
void menu2();
void menu3();
void menu4();

int main(void)
{

 int choice,choice1,choice2,choice3,choice4;
 List pHead;
 string subj;
 pHead.input_info();

 while(1)
 {
 menu();
 cout<<"請(qǐng)選擇你要進(jìn)行的操作:";
 cin>>choice;
 switch(choice)
 {
 //信息維護(hù)功能
 case 1:
 while(1)
 {
  pHead.input_info();
  system("cls");
  menu1();
  cout<<"請(qǐng)選擇你要進(jìn)行的操作:";
  cin>>choice1;
  switch(choice1)
  {
  //增加學(xué)生信息
  case 1:
  pHead.output_info();//遍歷鏈表,并打印學(xué)生的信息
  pHead.add_info();//增加學(xué)生信息
  system("cls");
  cout<<"\n\n\n\t\t學(xué)生成績(jī)信息表(更新)"<<endl;
  pHead.output_info();//遍歷鏈表,并打印學(xué)生的信息
  pHead.save_list();//將改動(dòng)保存到文件中
  cout<<"\n改動(dòng)已保存到文件中"<<endl<<endl;
  system("pause");
  break;
  //刪除學(xué)生信息
  case 2:
  pHead.output_info();//遍歷鏈表,并打印學(xué)生的信息
  pHead.delete_info();//刪除學(xué)生信息
  system("cls");
  cout<<"\n\n\n\t\t學(xué)生成績(jī)信息表(更新)"<<endl;
  pHead.output_info();//遍歷鏈表,并打印學(xué)生的信息
  pHead.save_list();//將改動(dòng)保存到文件中
  cout<<"\n改動(dòng)已保存到文件中"<<endl<<endl;
  system("pause");
  break;
  default:
  system("cls");
  break;
  }
  if(choice1!=1&&choice1!=2)
  break;
 }
 break;

 //信息查詢(xún)功能
 case 2:
 while(1)
 {
  system("cls");
  menu2();
  cout<<"請(qǐng)選擇你要進(jìn)行的操作:";
  cin>>choice2;
  switch(choice2)
  {
  //按姓名進(jìn)行查詢(xún)
  case 1:
  pHead.search_by_name();
  system("pause");
  break;
  //按學(xué)號(hào)進(jìn)行查詢(xún)
  case 2:
  pHead.search_by_ID();
  system("pause");
  //system("cls");
  break;
  default:
  system("cls");
  break;
  }
  if(choice2!=1&&choice2!=2)
  break;
  //break;
 }
 break;

 //成績(jī)統(tǒng)計(jì)功能
 case 3:
 while(1)
 {
  system("cls");
  menu3();
  cout<<"請(qǐng)選擇你要進(jìn)行的操作:";
  cin>>choice3;
  switch(choice3)
  {
  //計(jì)算各科目的平均成績(jī)
  case 1:
  pHead.count_sub_avg();//計(jì)算各學(xué)科的平均成績(jī)
  system("pause");
  break;
  default:
  system("cls");
  break;
  }
  if(choice3!=1)
  break;
 }
 break;

 //排序功能
 case 4:
 while(1)
 {
  system("cls");
  menu4();
  cout<<"請(qǐng)選擇你要進(jìn)行的操作:";
  cin>>choice4;
  switch(choice4)
  {
  //根據(jù)公共課平均成績(jī)排序
  case 1:
  pHead.sort_by_public();
  pHead.output_info();
  cout<<endl;
  system("pause");
  break;
  case 2:
  //根據(jù)全部科目平均成績(jī)排序
  pHead.sort_by_all();
  pHead.output_info();
  cout<<endl;
  system("pause");
  break;
  default:
  system("cls");
  break;
  }
  if(choice4!=1&&choice4!=2)
  break;
 }
 break;
 default:
 return 0;
 }
 }
 pHead.delete_list();
 return 0;
}

(三)student.h

#ifndef _STUDENT_H
#define _STUDENT_H
#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
using namespace std;
class Student
{
private:
 //共同的學(xué)生信息
 int num;//學(xué)生的編號(hào)
 string stuID;//學(xué)生的學(xué)號(hào)
 string name;//學(xué)生的姓名
 int age;//學(xué)生的年齡
 string department;//學(xué)生所屬學(xué)院
 //共有的科目成績(jī)
 double math;//高數(shù)成績(jī)
 double english;//英語(yǔ)成績(jī)
 double PE;//體育成績(jī)
 double sum_part;//總分
 double average_part;//公共成績(jī)的平均分
public:
 Student(){}//無(wú)參數(shù)的構(gòu)造函數(shù)
 Student(string _name,string _stuID,int _age,string _department,double _math,double _english,double _pe);//含參數(shù)的構(gòu)造函數(shù)
 Student(const Student& stu);//拷貝構(gòu)造函數(shù)
 virtual ~Student(){}//析構(gòu)函數(shù)
public:
 //設(shè)置學(xué)生信息相關(guān)函數(shù)
 void set_num(int n);//設(shè)置學(xué)生的編號(hào)
 void set_stuID(string ID);//設(shè)置學(xué)生的學(xué)號(hào)
 void set_name(string na);//設(shè)置學(xué)生的姓名
 void set_age(int a);//設(shè)置學(xué)生的年齡
 void set_department(string dept);//設(shè)置學(xué)生所屬的學(xué)院
 void set_scores_part(double m,double en,double pe);//設(shè)置學(xué)生的各科成績(jī)

 virtual void count_sum();//計(jì)算公共科目的總分
 virtual void count_average();//計(jì)算公共科目的平均分

 //獲取學(xué)生信息相關(guān)函數(shù)
 int get_num();//獲取學(xué)生的編號(hào)
 string get_stuID();//獲得學(xué)生的學(xué)號(hào)
 string get_name();//獲得學(xué)生的姓名
 int get_age();//獲得學(xué)生的年齡
 string get_department();//獲得學(xué)生的所屬學(xué)院
 virtual void get_scores(double *m,double *en,double *pe);//獲得學(xué)生的公共科目的各項(xiàng)成績(jī)
 virtual double get_sum();//獲得公共成績(jī)的總分
 virtual double get_average();//獲得公共成績(jī)的平均分

 virtual void display_info();//將學(xué)生信息打印到屏幕上
 virtual void save_node(ofstream& fout);//將學(xué)生信息保存到文件中

};
#endif // _STUDENT_H

student.cpp

#include<iostream>
#include<cstring>
#include<sstream>
#include"student.h"
#include<fstream>
using namespace std;
//含參數(shù)的構(gòu)造函數(shù)
Student::Student(string _name,string _stuID,int _age,string _department,double _math,double _english,double _pe)
{
 stuID=_stuID;
 name=_name;
 age=_age;
 department=_department;
 math=_math;
 english=_english;
 PE=_pe;
}
//拷貝構(gòu)造函數(shù)
Student::Student(const Student& stu)
{
 stuID=stu.stuID;
 name=stu.name;
 age=stu.age;
 department=stu.department;
 math=stu.math;
 english=stu.english;
 PE=stu.PE;
}
//設(shè)置學(xué)生的編號(hào)
void Student::set_num(int n)
{
 num=n;
}
//設(shè)置學(xué)生的學(xué)號(hào)
void Student::set_stuID(string ID)
{
 stuID=ID;
}
//設(shè)置學(xué)生的姓名
void Student::set_name(string na)
{
 name=na;
}
//設(shè)置學(xué)生的年齡
void Student::set_age(int a)
{
 age=a;
}
//設(shè)置學(xué)生所屬的學(xué)院
void Student::set_department(string dept)
{
 department=dept;
}
//設(shè)置學(xué)生的各科成績(jī)
void Student::set_scores_part(double m,double en,double pe=0)
{
 math=m;
 english=en;
 PE=pe;
}
//計(jì)算公共科目的總分
void Student::count_sum()
{
 sum_part=math+english+PE;
}
//計(jì)算公共科目的平均分
void Student::count_average()
{
 average_part=(math+english+PE)/3;
}

//獲取學(xué)生的編號(hào)
int Student::get_num()
{
 return num;
}
//獲得學(xué)生的學(xué)號(hào)
string Student::get_stuID()
{
 return stuID;
}
//獲得學(xué)生的姓名
string Student::get_name()
{
 return name;
}
//獲得學(xué)生的年齡
int Student::get_age()
{
 return age;
}
//獲得學(xué)生的所屬學(xué)院
string Student::get_department()
{
 return department;
}
//獲得學(xué)生的各項(xiàng)成績(jī)
void Student::get_scores(double *m,double *en,double *pe)
{
 *m=math;
 *en=english;
 *pe=PE;
}
//獲取學(xué)生的編號(hào)
double Student::get_sum()
{
 return sum_part;
}
//獲得公共成績(jī)的平均分
double Student::get_average()
{
 return average_part;
}
//將學(xué)生信息打印到屏幕上
void Student::display_info()
{
 cout<<num<<'\t'<<name<<'\t'<<stuID<<'\t'<<age<<'\t'<<department<<"\t\t"<<math<<'\t'<<english<<'\t'<<PE<<'\t'<<average_part<<'\t';
}
//將學(xué)生信息保存到文件中
void Student::save_node(ofstream& fout)
{
 fout<<name<<' '<<stuID<<' '<<age<<' '<<department<<' '<<math<<' '<<english<<' '<<PE<<' ';
}

csstudent.h

#ifndef _CSSTUDENT_H
#define _CSSTUDENT_H
#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
using namespace std;
class Csstudent:public Student
{
public:
 Csstudent(){}//無(wú)參數(shù)的構(gòu)造函數(shù)
 //帶初始化列表的構(gòu)造函數(shù)
 Csstudent(string _name,string _stuID,int _age,string _department,double _math,double _english,double _pe,double c_c,double c_a,double ass):
 Student(_name,_stuID,_age,_department,_math,_english,_pe)
 {
 c_composition=c_c;
 c_architecture=c_a;
 assembly_lan=ass;
 }

 virtual ~Csstudent(){}//析構(gòu)函數(shù)
public:
 //設(shè)置學(xué)生信息相關(guān)函數(shù)
 virtual void count_sum();//計(jì)算總分
 virtual void count_average();//計(jì)算平均分

 //獲取學(xué)生信息相關(guān)函數(shù)
 virtual double get_sum();//獲得總分
 virtual double get_average();//獲得平均分
 virtual void get_scores(double* c_c,double*c_a,double *ass);//獲取學(xué)生的專(zhuān)業(yè)成績(jī)
public:
 virtual void display_info();//將學(xué)生信息打印到屏幕上
 virtual void save_node(ofstream& fout);//將學(xué)生信息保存到文件中
private:
 double sum;//全部科目的總分
 double average;//全部科目的平均分
 double c_composition;//計(jì)算機(jī)組成原理成績(jī)
 double c_architecture;//計(jì)算機(jī)體系結(jié)構(gòu)成績(jī)
 double assembly_lan;//匯編語(yǔ)言成績(jī)
};
#endif

csstudent.cpp

#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
#include"csstudent.h"

//計(jì)算所有科目的總分
void Csstudent::count_sum()
{
 double part=Student::get_sum();
 sum=part+c_composition+c_architecture+assembly_lan;
}
//計(jì)算全部科目的平均分
void Csstudent::count_average()
{
 average=sum/6;
}

//獲得學(xué)生全部科目的總分
double Csstudent::get_sum()
{
 return sum;
}
//獲得學(xué)生全部科目的平均分
double Csstudent::get_average()
{
 return average;
}
//獲取學(xué)生的專(zhuān)業(yè)成績(jī)
void Csstudent::get_scores(double* c_c,double*c_a,double *ass)
{
 *c_c=c_composition;
 *c_a=c_architecture;
 *ass=assembly_lan;
}
//將學(xué)生信息打印到屏幕上
void Csstudent::display_info()
{
 Student::display_info();
 cout<<c_composition<<'\t'<<c_architecture<<'\t'<<assembly_lan<<'\t'<<average<<endl;
}
//將學(xué)生信息保存到文件中
void Csstudent::save_node(ofstream& fout)
{
 Student::save_node(fout);
 fout<<c_composition<<' '<<c_architecture<<' '<<assembly_lan<<endl;
}

enstudent.h

#ifndef _ENSTUDENT_H
#define _ENSTUDENT_H
#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
using namespace std;
class Enstudent:public Student
{
public:
 Enstudent(){}//不含參數(shù)的構(gòu)造函數(shù)
 //帶初始化列表的構(gòu)造函數(shù)
 Enstudent(string _name,string _stuID,int _age,string _department,double _math,double _english,double _pe,double c_e,double s_e):
 Student(_name,_stuID,_age,_department,_math,_english,_pe)
 {
 comprehensive_en=c_e;
 spoken_en=s_e;
 }

 virtual ~Enstudent(){}//析構(gòu)函數(shù)
public:
 //設(shè)置學(xué)生信息相關(guān)函數(shù)
 virtual void count_sum();//計(jì)算總分
 virtual void count_average();//計(jì)算平均分

 //獲取學(xué)生信息相關(guān)函數(shù)
 virtual double get_sum();//獲得總分
 virtual double get_average();//獲得平均分
 virtual void get_scores(double* c_e,double* s_e,double* no);//獲得學(xué)生的專(zhuān)業(yè)成績(jī)
public:
 virtual void display_info();//將學(xué)生信息打印到屏幕上
 virtual void save_node(ofstream& fout);//將學(xué)生信息保存到文件中
private:
 double sum;//全部科目的總分
 double average;//全部科目的平均分
 double comprehensive_en;//綜合英語(yǔ)成績(jī)
 double spoken_en;//口語(yǔ)成績(jī)
};
#endif
(八)enstudent.cpp
#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
#include"enstudent.h"

//計(jì)算所有科目的總分
void Enstudent::count_sum()
{
 double part=Student::get_sum();
 sum=part+comprehensive_en+spoken_en;
}
//計(jì)算全部科目的平均分
void Enstudent::count_average()
{
 average=sum/5;
}

//獲得學(xué)生全部科目的總分
double Enstudent::get_sum()
{
 return sum;
}
//獲得學(xué)生全部科目的平均分
double Enstudent::get_average()
{
 return average;
}
//獲得學(xué)生的專(zhuān)業(yè)成績(jī)
void Enstudent::get_scores(double* c_e,double* s_e,double* no)
{
 *c_e=comprehensive_en;
 *s_e=spoken_en;
}
//將學(xué)生信息打印到屏幕上
void Enstudent::display_info()
{
 Student::display_info();
 cout<<comprehensive_en<<'\t'<<spoken_en<<"\t\t"<<average<<endl;
}
//將學(xué)生信息保存到文件中
void Enstudent::save_node(ofstream& fout)
{
 Student::save_node(fout);
 fout<<comprehensive_en<<' '<<spoken_en<<endl;
}

mstudent.h

#ifndef _MSTUDENT_H
#define _MSTUDENT_H
#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
using namespace std;
class Mstudent:public Student
{
public:
 Mstudent(){}//不含參數(shù)的構(gòu)造函數(shù)
 //帶初始化列表的構(gòu)造函數(shù)
 Mstudent(string _name,string _stuID,int _age,string _department,double _math,double _english,double _pe,double r_f,double f_a,double d_g):
 Student(_name,_stuID,_age,_department,_math,_english,_pe)
 {
 real_variable_f=r_f;
 f_analysis=f_a;
 diff_geometry=d_g;
 }

 virtual ~Mstudent(){}//析構(gòu)函數(shù)
public:
 //設(shè)置學(xué)生信息相關(guān)函數(shù)
 virtual void count_sum();//計(jì)算總分
 virtual void count_average();//計(jì)算平均分

 //獲取學(xué)生信息相關(guān)函數(shù)
 virtual double get_sum();//獲得總分
 virtual double get_average();//獲得平均分
 virtual void get_scores(double* r_f,double* f_a,double* d_g);//獲得學(xué)生的專(zhuān)業(yè)成績(jī)
public:
 virtual void display_info();//將學(xué)生信息打印到屏幕上
 virtual void save_node(ofstream& fout);//將學(xué)生信息保存到文件中
private:
 double sum;//全部科目的總分
 double average;//全部科目的平均分
 double real_variable_f;//實(shí)變函數(shù)成績(jī)
 double f_analysis;//泛函分析成績(jī)
 double diff_geometry;//微分幾何成績(jī)
};
#endif

mstudent.cpp

#include<iostream>
#include<cstring>
#include<sstream>
#include<fstream>
#include"student.h"
#include"mstudent.h"
//設(shè)置所有科目的總分

//計(jì)算所有科目的總分
void Mstudent::count_sum()
{
 double part=Student::get_sum();
 sum=part+real_variable_f+f_analysis+diff_geometry;
}
//計(jì)算全部科目的平均分
void Mstudent::count_average()
{
 average=sum/6;
}

//獲得學(xué)生全部科目的總分
double Mstudent::get_sum()
{
 return sum;
}
//獲得學(xué)生全部科目的平均分
double Mstudent::get_average()
{
 return average;
}
//獲得學(xué)生的專(zhuān)業(yè)成績(jī)
void Mstudent::get_scores(double* r_f,double* f_a,double* d_g)
{
 *r_f=real_variable_f;
 *f_a=f_analysis;
 *d_g=diff_geometry;
}
//將學(xué)生信息打印到屏幕上
void Mstudent::display_info()
{
 Student::display_info();
 cout<<real_variable_f<<'\t'<<f_analysis<<'\t'<<diff_geometry<<'\t'<<average<<endl;
}
 
//將學(xué)生信息保存到文件中
void Mstudent::save_node(ofstream& fout)
{
 Student::save_node(fout);
 fout<<real_variable_f<<' '<<f_analysis<<' '<<diff_geometry<<endl;
}

list.h

#ifndef _LIST_H
#define _LIST_H
#include<iostream>
#include"student.h"
#include"csstudent.h"
#include"enstudent.h"
#include"mstudent.h"
using namespace std;
class List
{
public:
 List(){}//無(wú)參數(shù)構(gòu)造函數(shù)
public:
 void input_info();//從文件導(dǎo)入學(xué)生信息,保存到鏈表中
 void output_info();//將鏈表中的數(shù)據(jù)打印到屏幕上
 void count_sub_avg();//計(jì)算各個(gè)科目的平均分
public:
 void search_by_ID();//根據(jù)學(xué)號(hào)查找學(xué)生信息
 void search_by_name();//根據(jù)姓名查找學(xué)生信息
public:
 void sort_by_public();//根據(jù)專(zhuān)業(yè)課成績(jī)平均分進(jìn)行排序
 void sort_by_all();//根據(jù)學(xué)生所有科目的平均分進(jìn)行排序
public:
 void add_info();//增加學(xué)生信息
 void delete_info();//刪除指定學(xué)生的信息
 //void modify_info();//修改學(xué)生信息
public:
 void save_list();//將鏈表保存到文件中
 void delete_list();//銷(xiāo)毀鏈表

private:
 List *pHead;//鏈表的頭指針
 Student *data;//指向?qū)W生信息的指針
 List *pNext;//指向下一個(gè)結(jié)點(diǎn)的指針
};
 
#endif // _LIST_H

(十二)list.cpp

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<stdio.h>
#include<sstream>
#include"list.h"
#include"student.h"
#include"csstudent.h"
#include"enstudent.h"
#include"mstudent.h"
using namespace std;

//從文件導(dǎo)入學(xué)生信息,保存到鏈表中
void List::input_info()
{
 int num=0;//學(xué)生的編號(hào)
 string stuID;//學(xué)生的學(xué)號(hào)
 string name;//學(xué)生的姓名
 int age;//學(xué)生的年齡
 string department;//學(xué)生所屬學(xué)院

 double math;//高數(shù)成績(jī)
 double english;//英語(yǔ)成績(jī)
 double pe;//體育成績(jī)

 double c_c;//計(jì)算機(jī)組成原理成績(jī)
 double c_a;//計(jì)算機(jī)體系結(jié)構(gòu)成績(jī)
 double ass;//匯編語(yǔ)言成績(jī)

 double c_e;//綜合英語(yǔ)成績(jī)
 double s_e;//口語(yǔ)成績(jī)

 double r_f;//實(shí)變函數(shù)成績(jī)
 double f_a;//泛函分析成績(jī)
 double d_g;//微分幾何成績(jī)

 List *current=NULL;//指向當(dāng)前結(jié)點(diǎn)的指針
 List *previous=NULL;//指向前一個(gè)結(jié)點(diǎn)的指針
 ifstream fin;
 fin.open("student.txt",ios::in);
 if(!fin)
 {
 cout<<"Fail to open the file!"<<endl;
 exit(0);
 }
 //創(chuàng)建鏈表
 while(1)
 {
 //判斷是否讀完文件
 if(!(fin>>name>>stuID>>age>>department>>math>>english>>pe))
 break;
 else
 {
 ++num;
 //根據(jù)不同專(zhuān)業(yè)的學(xué)生 new 不同的對(duì)象,根據(jù)不同院系設(shè)置各科分?jǐn)?shù)
 if(department=="計(jì)算機(jī)")
 {
 current=new List;//創(chuàng)建新結(jié)點(diǎn)
 fin>>c_c>>c_a>>ass;
 current->data=new Csstudent(name,stuID,age,department,math,english,pe,c_c,c_a,ass);
 }
 else if(department=="英語(yǔ)系")
 {
 current=new List;//創(chuàng)建新結(jié)點(diǎn)
 fin>>c_e>>s_e;
 current->data=new Enstudent(name,stuID,age,department,math,english,pe,c_e,s_e);
 }
 else if(department=="數(shù)學(xué)系")
 {
 current=new List;//創(chuàng)建新結(jié)點(diǎn)
 fin>>r_f>>f_a>>d_g;
 current->data=new Mstudent(name,stuID,age,department,math,english,pe,r_f,f_a,d_g);
 }
 else
 {
 cout<<"Don't have this department"<<endl;
 exit(0);
 }
 }

 if(previous==NULL)
 pHead=current;//保存頭結(jié)點(diǎn)
 if(previous!=NULL)
 previous->pNext=current;//保存前一個(gè)結(jié)點(diǎn)的地址

 current->data->set_num(num);
 current->data->Student::count_sum();//計(jì)算公共科目的總分
 current->data->Student::count_average();//計(jì)算公共科目的平均分
 current->data->count_sum();//計(jì)算全部科目的總分
 current->data->count_average();//計(jì)算全部科目的平均分

 current->pNext=NULL;
 previous=current;
 }
 fin.close();//關(guān)閉文件
}
//將鏈表中的數(shù)據(jù)打印到屏幕上
void List::output_info()
{
 List *p=pHead;//保存頭節(jié)點(diǎn)
 int num=0;//設(shè)置編號(hào)
 cout<<"編號(hào)\t"<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"系別\t\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"平均分\t"<<"專(zhuān)業(yè)課1\t"<<"專(zhuān)業(yè)課2\t"<<"專(zhuān)業(yè)課3\t"<<"平均分\t"<<endl;
 while(p!=NULL)
 {
 ++num;
 p->data->set_num(num);
 p->data->display_info();
 p=p->pNext;
 }
}
//計(jì)算各個(gè)科目的平均分
void List::count_sub_avg()
{
 string stuID;//學(xué)生的學(xué)號(hào)
 string department;//學(xué)生所屬學(xué)院

 double math,english,pe;//高數(shù)成績(jī),英語(yǔ)成績(jī),體育成績(jī)
 double math_sum=0,english_sum=0,pe_sum=0;//高數(shù)、英語(yǔ)、體育總分
 double math_avg,english_avg,pe_avg;//高數(shù)、英語(yǔ)、體育平均分

 double c_c,c_a,ass;//計(jì)算機(jī)組成原理成績(jī),計(jì)算機(jī)體系結(jié)構(gòu)成績(jī),匯編語(yǔ)言成績(jī)
 double c_c_sum=0,c_a_sum=0,ass_sum=0;//計(jì)算機(jī)組成原理成績(jī),計(jì)算機(jī)體系結(jié)構(gòu)成績(jī),匯編語(yǔ)言總分
 double c_c_avg,c_a_avg,ass_avg;//計(jì)算機(jī)組成原理成績(jī),計(jì)算機(jī)體系結(jié)構(gòu)成績(jī),匯編語(yǔ)言平均分

 double c_e,s_e;//綜合英語(yǔ)成績(jī),口語(yǔ)成績(jī)
 double c_e_sum=0,s_e_sum=0;//綜合英語(yǔ)成績(jī),口語(yǔ)總分
 double c_e_avg,s_e_avg;//綜合英語(yǔ)成績(jī),口語(yǔ)平均分

 double r_f,f_a,d_g;//實(shí)變函數(shù)成績(jī),泛函分析成績(jī),微分幾何成績(jī)
 double r_f_sum=0,f_a_sum=0,d_g_sum=0;//實(shí)變函數(shù)成績(jī),泛函分析成績(jī),微分幾何成績(jī)總分
 double r_f_avg,f_a_avg,d_g_avg;//實(shí)變函數(shù)成績(jī),泛函分析成績(jī),微分幾何成績(jī)平均分

 int n=0;//記錄所有學(xué)生的數(shù)量
 int cn=0;//記錄計(jì)算機(jī)系的學(xué)生數(shù)量
 int en=0;//記錄英語(yǔ)系的學(xué)生數(shù)量
 int mn=0;//記錄數(shù)學(xué)系的學(xué)生數(shù)量

 List* p=pHead;
 while(p!=NULL)
 {
 ++n;
 department=p->data->get_department();
 p->data->Student::get_scores(&math,&english,&pe);
 math_sum+=math;
 english_sum+=english;
 pe_sum+=pe;
 if(department=="計(jì)算機(jī)")
 {
 p->data->get_scores(&c_c,&c_a,&ass);
 c_c_sum+=c_c;
 c_a_sum+=c_a;
 ass_sum+=ass;
 ++cn;
 }
 else if(department=="英語(yǔ)系")
 {
 p->data->get_scores(&c_e,&s_e,NULL);
 c_e_sum+=c_e;
 s_e_sum+=s_e;
 ++en;
 }
 else if(department=="數(shù)學(xué)系")
 {
 p->data->get_scores(&r_f,&f_a,&d_g);
 r_f_sum+=r_f;
 f_a_sum+=f_a;
 d_g_sum+=d_g;
 ++mn;
 }
 else
 {
 cout<<"Don't have this department!"<<endl;
 exit(0);
 }
 p=p->pNext;
 }
 math_avg=math_sum/n;//數(shù)學(xué)平均成績(jī)
 english_avg=english_sum/n;
 pe_avg=pe_sum/n;

 c_c_avg=c_c_sum/cn;
 c_a_avg=c_a_sum/cn;
 ass_avg=ass_sum/cn;

 c_e_avg=c_e_sum/en;
 s_e_avg=s_e_sum/en;

 r_f_avg=r_f_sum/mn;
 f_a_avg=f_a_sum/mn;
 d_g_avg=d_g_sum/mn;
 cout<<"公共課平均成績(jī):"<<endl;
 cout<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育"<<endl;
 cout<<math_avg<<'\t'<<english_avg<<'\t'<<pe_avg<<endl<<endl;

 cout<<"計(jì)算機(jī)系專(zhuān)業(yè)課平均成績(jī):"<<endl;
 cout<<"計(jì)算機(jī)組成原理:"<<c_c_avg<<endl;
 cout<<"計(jì)算機(jī)體系結(jié)構(gòu):"<<c_a_avg<<endl;
 cout<<"匯編語(yǔ)言:"<<ass_avg<<endl<<endl;

 cout<<"數(shù)學(xué)系專(zhuān)業(yè)課平均成績(jī):"<<endl;
 cout<<"實(shí)變函數(shù):"<<r_f_avg<<endl;
 cout<<"泛函分析:"<<f_a_avg<<endl;
 cout<<"微分幾何:"<<d_g_avg<<endl<<endl;

 cout<<"英語(yǔ)系專(zhuān)業(yè)課平均成績(jī):"<<endl;
 cout<<"綜合英語(yǔ):"<<c_e_avg<<endl;
 cout<<"英語(yǔ)口語(yǔ):"<<s_e_avg<<endl;
}
//根據(jù)學(xué)號(hào)查找學(xué)生信息
void List::search_by_ID()
{
 List *p=pHead;//保存頭節(jié)點(diǎn)
 int flag=0;//用來(lái)標(biāo)記是否找到對(duì)應(yīng)的學(xué)生
 string ID;//保存學(xué)生的學(xué)號(hào)
 cout<<"請(qǐng)輸入你要查詢(xún)的學(xué)生的學(xué)號(hào):";
 cin>>ID;
 cout<<"編號(hào)\t"<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"系別\t\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"平均分\t"<<"專(zhuān)業(yè)課1\t"<<"專(zhuān)業(yè)課2\t"<<"專(zhuān)業(yè)課3\t"<<"平均分\t"<<endl;
 while(p!=NULL)
 {
 if(ID==p->data->get_stuID())
 {
 ++flag;
 p->data->display_info();
 break;
 }
 p=p->pNext;
 }
 if(flag==0)
 cout<<"Can't find this student!"<<endl;
}
//根據(jù)姓名查找學(xué)生信息
void List::search_by_name()
{
 List *p=pHead;//保存頭節(jié)點(diǎn)
 int flag=0;//用來(lái)標(biāo)記是否找到對(duì)應(yīng)的學(xué)生
 string name;//保存學(xué)生的學(xué)號(hào)
 cout<<"請(qǐng)輸入你要查詢(xún)的學(xué)生的姓名:";
 cin>>name;
 cout<<"編號(hào)\t"<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"系別\t\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"平均分\t"<<"專(zhuān)業(yè)課1\t"<<"專(zhuān)業(yè)課2\t"<<"專(zhuān)業(yè)課3\t"<<"平均分\t"<<endl;
 while(p!=NULL)
 {
 if(name==p->data->get_name())
 {
 ++flag;
 p->data->display_info();
 break;
 }
 p=p->pNext;
 }
 if(flag==0)
 cout<<"Can't find this student!"<<endl;
}

//根據(jù)公共課成績(jī)平均分進(jìn)行降序排序
void List::sort_by_public()
{
 List *p=NULL;
 List *q=NULL;
 double avg1,avg2;
 for(p=pHead;p->pNext!=NULL;p=p->pNext)
 for(q=p->pNext;q!=NULL;q=q->pNext)
 {
 avg1=p->data->Student::get_average();//調(diào)用基類(lèi)的函數(shù)得到學(xué)生公共課的平均成績(jī)
 avg2=q->data->Student::get_average();
 if(avg1<avg2)
 {
 List temp;//臨時(shí)結(jié)點(diǎn)對(duì)象
 temp.data=p->data;
 p->data=q->data;
 q->data=temp.data;
 }
 }
}
//根據(jù)學(xué)生所有科目的平均分進(jìn)行排序
void List::sort_by_all()
{
 List *p=NULL;
 List *q=NULL;
 double avg1,avg2;
 for(p=pHead;p->pNext!=NULL;p=p->pNext)
 for(q=p->pNext;q!=NULL;q=q->pNext)
 {
 avg1=p->data->get_average();//調(diào)用派生類(lèi)的函數(shù),得到學(xué)生所有科目的平均分
 avg2=q->data->get_average();
 if(avg1<avg2)
 {
 List temp;//臨時(shí)結(jié)點(diǎn)對(duì)象
 temp.data=p->data;
 p->data=q->data;
 q->data=temp.data;
 }
 }
}
//增加學(xué)生信息
void List::add_info()
{
 int num=0;//學(xué)生的編號(hào)
 string stuID;//學(xué)生的學(xué)號(hào)
 string name;//學(xué)生的姓名
 int age;//學(xué)生的年齡
 string department;//學(xué)生所屬學(xué)院

 double math;//高數(shù)成績(jī)
 double english;//英語(yǔ)成績(jī)
 double pe;//體育成績(jī)

 double c_c;//計(jì)算機(jī)組成原理成績(jī)
 double c_a;//計(jì)算機(jī)體系結(jié)構(gòu)成績(jī)
 double ass;//匯編語(yǔ)言成績(jī)

 double c_e;//綜合英語(yǔ)成績(jī)
 double s_e;//口語(yǔ)成績(jī)

 double r_f;//實(shí)變函數(shù)成績(jī)
 double f_a;//泛函分析成績(jī)
 double d_g;//微分幾何成績(jī)

 int location=0;//位置編號(hào)
 int flag=0;//標(biāo)記是否有對(duì)應(yīng)的編號(hào)

 List *p=pHead;//指向當(dāng)前結(jié)點(diǎn)的指針
 List *pf=NULL;//指向前一個(gè)結(jié)點(diǎn)的指針
 List *new_node;//指向新增結(jié)點(diǎn)的指針
 cout<<"請(qǐng)輸入你想增加的信息的位置(位置編號(hào),大于0):";
 cin>>location;

 while(p!=NULL)//遍歷鏈表
 {
 num=p->data->get_num();
 if(num==location)
 {
 ++flag;

 cout<<"請(qǐng)輸入新增學(xué)生所屬系別(計(jì)算機(jī)/英語(yǔ)系/數(shù)學(xué)系):";
 cin>>department;
 cout<<"請(qǐng)輸入學(xué)生的信息"<<endl;
 if(department=="計(jì)算機(jī)")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"計(jì)算機(jī)組成原理\t"<<"計(jì)算機(jī)體系結(jié)構(gòu)\t"<<"匯編語(yǔ)言\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>c_c>>c_a>>ass;
 new_node->data=new Csstudent(name,stuID,age,department,math,english,pe,c_c,c_a,ass);
 }
 else if(department=="英語(yǔ)系")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"綜合英語(yǔ)\t"<<"口語(yǔ)\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>c_e>>s_e;
 new_node->data=new Enstudent(name,stuID,age,department,math,english,pe,c_e,s_e);
 }
 else if(department=="數(shù)學(xué)系")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"實(shí)變函數(shù)\t"<<"泛函分析\t"<<"微分幾何\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>r_f>>f_a>>d_g;
 new_node->data=new Mstudent(name,stuID,age,department,math,english,pe,r_f,f_a,d_g);
 }
 else
 {
 cout<<"Don't have this department!"<<endl;
 exit(0);
 }
 new_node->data->Student::count_sum();//計(jì)算公共科目的總分
 new_node->data->Student::count_average();//計(jì)算公共科目的平均分
 new_node->data->count_sum();//計(jì)算全部科目的總分
 new_node->data->count_average();//計(jì)算全部科目的平均分

 if(pf==NULL)
 {
 new_node->pNext=p;
 pHead=new_node;
 break;
 }
 else
 {
 new_node->pNext=p;
 pf->pNext=new_node;
 break;
 }
 }
 pf=p;
 p=p->pNext;
 }
 if(flag==0)//沒(méi)有找到輸入的位置編號(hào),則默認(rèn)將學(xué)生信息加在最后
 {
 cout<<"請(qǐng)輸入新增學(xué)生所屬系別(計(jì)算機(jī)/英語(yǔ)系/數(shù)學(xué)系):";
 cin>>department;
 cout<<"請(qǐng)輸入學(xué)生的信息"<<endl;
 if(department=="計(jì)算機(jī)")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"計(jì)算機(jī)組成原理\t"<<"計(jì)算機(jī)體系結(jié)構(gòu)\t"<<"匯編語(yǔ)言\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>c_c>>c_a>>ass;
 new_node->data=new Csstudent(name,stuID,age,department,math,english,pe,c_c,c_a,ass);
 }
 else if(department=="英語(yǔ)系")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"綜合英語(yǔ)\t"<<"口語(yǔ)\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>c_e>>s_e;
 new_node->data=new Enstudent(name,stuID,age,department,math,english,pe,c_e,s_e);
 }
 else if(department=="數(shù)學(xué)系")
 {
 new_node=new List;//創(chuàng)建一個(gè)新的結(jié)點(diǎn)
 cout<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"實(shí)變函數(shù)\t"<<"泛函分析\t"<<"微分幾何\t"<<endl;
 cin>>name>>stuID>>age>>math>>english>>pe>>r_f>>f_a>>d_g;
 new_node->data=new Mstudent(name,stuID,age,department,math,english,pe,r_f,f_a,d_g);
 }
 else
 {
 cout<<"Don't have this department!"<<endl;
 exit(0);
 }
 new_node->data->Student::count_sum();//計(jì)算公共科目的總分
 new_node->data->Student::count_average();//計(jì)算公共科目的平均分
 new_node->data->count_sum();//計(jì)算全部科目的總分
 new_node->data->count_average();//計(jì)算全部科目的平均分

 pf->pNext=new_node;
 new_node->pNext=NULL;
 }
}
//刪除指定學(xué)生的信息
void List::delete_info()
{
 string name;//姓名
 string stuID;//學(xué)號(hào)

 List *p=pHead;//指向當(dāng)前結(jié)點(diǎn)的指針
 List *pf=NULL;//指向前一個(gè)結(jié)點(diǎn)的指針

 char content[20];
 cout<<"請(qǐng)輸入信息待刪除學(xué)生的姓名或?qū)W號(hào):";
 cin>>content;

 //根據(jù)輸入來(lái)進(jìn)行查找并刪除
 if(content[0]>='0'&&content[0]<='9')
 {
 int flag=0;//標(biāo)記是否找到對(duì)應(yīng)學(xué)生;
 string ID=content;
 char answer;//記錄回答的內(nèi)容

 while(p!=NULL)
 {
 stuID=p->data->get_stuID();
 if(stuID==ID)
 {
 flag++;
 cout<<"編號(hào)\t"<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"系別\t\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"平均分\t"<<"專(zhuān)業(yè)課1\t"<<"專(zhuān)業(yè)課2\t"<<"專(zhuān)業(yè)課3\t"<<"平均分\t"<<endl;
 p->data->display_info();

 cout<<"你確定要?jiǎng)h除這組信息嗎?(Y/N)";
 cin>>answer;
 if(tolower(answer)=='y')
 {
  if(pf==NULL)
  {
  delete p->data;//刪除學(xué)生信息所占內(nèi)存
  List *temp=p;//暫時(shí)保存指向該結(jié)點(diǎn)的指針
  pHead=p->pNext;//跳過(guò)當(dāng)前結(jié)點(diǎn),實(shí)現(xiàn)信息的刪除
  delete temp;//將其所占內(nèi)存刪除
  }
  else
  {
  delete p->data;//刪除學(xué)生信息所占內(nèi)存
  List *temp=p;//暫時(shí)保存指向該結(jié)點(diǎn)的指針
  pf->pNext=p->pNext;//跳過(guò)當(dāng)前結(jié)點(diǎn),實(shí)現(xiàn)信息的刪除
  delete temp;//將其所占內(nèi)存刪除
  }
  cout<<"\t該組信息已刪除!"<<endl;
  break;
 }
 else
 {
  break;
 }
 }
 pf=p;//保存當(dāng)前指針
 p=p->pNext;//設(shè)置指針指向下一個(gè)結(jié)點(diǎn)
 }
 if(flag==0)
 cout<<"沒(méi)有找到該學(xué)生!"<<endl;
 }
 else
 {
 int flag=0;//標(biāo)記是否找到對(duì)應(yīng)學(xué)生;
 string na=content;//將字符串?dāng)?shù)組轉(zhuǎn)化成string類(lèi)型
 char answer;//記錄回答的內(nèi)容

 while(p!=NULL)
 {
 //++n;
 name=p->data->get_name();
 if(name==na)
 {
 flag++;
 cout<<"編號(hào)\t"<<"姓名\t"<<"學(xué)號(hào)\t"<<"年齡\t"<<"系別\t\t"<<"數(shù)學(xué)\t"<<"英語(yǔ)\t"<<"體育\t"<<"平均分\t"<<"專(zhuān)業(yè)課1\t"<<"專(zhuān)業(yè)課2\t"<<"專(zhuān)業(yè)課3\t"<<"平均分\t"<<endl;
 p->data->display_info();

 cout<<"你確定要?jiǎng)h除這組信息嗎?(Y/N)";
 cin>>answer;
 if(tolower(answer)=='y')
 {
  if(pf==NULL)
  {
  delete p->data;//刪除學(xué)生信息所占內(nèi)存
  List *temp=p;//暫時(shí)保存指向該結(jié)點(diǎn)的指針
  pHead=p->pNext;//跳過(guò)當(dāng)前結(jié)點(diǎn),實(shí)現(xiàn)信息的刪除
  delete temp;//將其所占內(nèi)存刪除
  }
  else
  {
  delete p->data;//刪除學(xué)生信息所占內(nèi)存
  List *temp=p;//暫時(shí)保存指向該結(jié)點(diǎn)的指針
  pf->pNext=p->pNext;//跳過(guò)當(dāng)前結(jié)點(diǎn),實(shí)現(xiàn)信息的刪除
  delete temp;//將其所占內(nèi)存刪除
  }

  cout<<"\t該組信息已刪除!"<<endl;
  break;
 }
 else
 {
  break;
 }
 }
 pf=p;//保存當(dāng)前指針
 p=p->pNext;//設(shè)置指針指向下一個(gè)結(jié)點(diǎn)
 }
 if(flag==0)
 cout<<"沒(méi)有找到該學(xué)生!"<<endl;
 }
}
//將鏈表保存到文件中
void List::save_list()
{
 List *p=pHead;//用來(lái)遍歷鏈表的指針
 ofstream fout;
 fout.open("student.txt",ios::out);
 while(p!=NULL)
 {
 p->data->save_node(fout);
 p=p->pNext;
 }
 fout.close();//關(guān)閉文件
}
//銷(xiāo)毀鏈表
void List::delete_list()
{
 List *p=pHead;
 List *pt;
 while(p!=NULL)
 {
 pt=p;
 p=p->pNext;
 delete pt->data;//刪除學(xué)生信息所占內(nèi)存
 delete pt;//刪除鏈表結(jié)點(diǎn)所占內(nèi)存
 }
 pt=NULL;
 pHead=NULL;
 p=NULL;
}

student.txt


小王 02 18 英語(yǔ)系 78 79 80 68 89
小趙 01 19 計(jì)算機(jī) 90 90 90 89 89 89
小張 03 19 數(shù)學(xué)系 78 89 69 89 90 60
小劉 04 20 英語(yǔ)系 89 79 79 80 89
小李 05 19 計(jì)算機(jī) 69 60 67 89 90 90
小田 06 21 數(shù)學(xué)系 89 90 90 78 89 90

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的方法-創(chuàng)新互聯(lián)
文章分享:http://bm7419.com/article0/hssoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司