学生信息管理系统 数组,链表实现

1.数组实现

#include<iostream>
#include<string>
#include<vector>//`vector`容器类,表示一个动态数组。其中的元素按照线性顺序排列,
                 //并且可以动态地调整数组的大小。
#include<algorithm>//提供常用的算法和数据结构操作,例如排序、查找、合并等
using namespace std;
class Student
{ 
  public:
	long long int num;	
	string name;
	string gender;
	
	virtual void display()
   {	
    cout<<"学号:"<<num<<endl;
	cout<<"姓名:"<<name<<endl;
	cout<<"性别:"<<gender<<endl;
   }
};
class Dianxin:public Student
{
  public:
	string classes;
	float math;
	float english;
//	float totalScore;
    void display()
    {
    	Student::display();
     	cout<<"班级:"<<classes<<endl;
    	cout<<"高数成绩:"<<math<<endl;
    	cout<<"英语成绩:"<<english<<endl;
    }	
   
 void Menu();           //显示菜单
 void Exit_System();    //退出系统
 void Enter_Info();     //录入信息
 void Delete_Info();    //删除信息
 void Modify_Info();    //修改信息
 void Search_Info();    //查找信息
 void Scan_Info();      //浏览信息
 void Sort_Info();      //排序信息
 //bool compareStudents(); 
 //void TotalScore();     //总成绩 
// void bool compareStudents();
};
vector<Dianxin> students;         // 存储学生信息的vector
void Dianxin::Menu()              //显示菜单
{
 cout<<"----------------------------------"<<endl; 
 cout<<"         学生信息管理系统         "<<endl;
 cout<<"            0.退出系统            "<<endl;
 cout<<"            1.录入信息            "<<endl;
 cout<<"            2.删除信息            "<<endl;
 cout<<"            3.修改信息            "<<endl;
 cout<<"            4.查找信息            "<<endl;
 cout<<"            5.浏览信息            "<<endl;
 cout<<"----------------------------------"<<endl;
 cout<<"            请输入(0-5)           "<<endl;
};
void Dianxin::Exit_System()       //退出系统
{
	
	cout<<"退出系统!"<<endl;
	exit(0); 
	//system("pause"); 
}

void Dianxin::Enter_Info()        //录入信息
{
	
    int a;
    cout<<"请输入录入学生人数:";
    cin>>a;//system("cls");
    
    for(int i=0;i<a;i++)
     { 
        Dianxin student;
	    cout<<"请输入第"<<i+1<<"个学生信息"<<endl;
    	cout<<"学号:";cin>>student.num;
        cout<<"姓名:";cin>>student.name;
        cout<<"性别:";cin>>student.gender;
        cout<<"班级:";cin>>student.classes;
//      cout<<"高数成绩:";cin>>student.math;
//    	cout<<"英语成绩:";cin>>student.english;
    	
    	// 输入合法性检查,成绩应在0-100之间     
        do {
            cout<<"高数成绩:";
            cin>>student.math;
            if(student.math<0||student.math>100)
			 {
                cout<<"成绩应在0-100之间,请重新输入"<<endl;
             }
           } while(student.math<0||student.math>100); 
        
        do {
            cout<<"英语成绩:";
            cin>>student.english;
            if(student.english<0||student.english>100)
			 {
                cout<<"成绩应在0-100之间,请重新输入"<<endl;
             }
         } while(student.english<0||student.english>100);        
        

        students.push_back(student);    	
     }
     
    cout<<"( 录入成功!)"<<endl; 
  //system("cls");
}
void Dianxin::Delete_Info()       //删除信息
{ 
    long long int b;
    cout<<"请输入要删除学生的学号:"<<endl;
    cin>>b;
    
    bool found=false;// 遍历vector,查找对应学号的学生信息并删除
    
    for(int i=0;i<students.size(); i++) 
	{
        if(students[i].num==b) 
		{
            students.erase(students.begin()+i); // 删除对应索引处的学生信息

            found=true;
            cout << "删除成功!" << endl;
            break;
        }
    

    }
    
    	if(!found)
		{
		   cout<<"该学号不存在!"<<endl;
		// break; 
		}
    //system("cls");
}
void Dianxin::Modify_Info()       //修改信息
{ 
    long long int c;
    cout<<"请输入要修改学生的学号:"<<endl;
    cin>>c;
    
    bool found=false;// 遍历vector,查找对应学号的学生信息并修改
    for (int i=0;i<students.size();i++)
        {
            if (students[i].num==c)
            {	
                cout<<"请输入新的学生信息"<<endl;
                cout<<"学号:";cin>>students[i].num;
                cout<<"姓名:";cin>>students[i].name;
                cout<<"性别:";cin>>students[i].gender;
                cout<<"班级:";cin>>students[i].classes;
               // cout<<"高数成绩:";cin>>students[i].math;
				//cout<<"英语成绩:";cin>>students[i].english;

            // 输入合法性检查,成绩应在0-100之间
              do {
                cout<<"高数成绩:";
                cin>>students[i].math;
                if(students[i].math<0||students[i].math>100)
				   {
                    cout<<"成绩应在0-100之间,请重新输入"<<endl;
                   }
                 } while(students[i].math<0||students[i].math>100);

              do {
                cout<<"英语成绩:";
                cin>>students[i].english;
                if(students[i].english<0||students[i].english>100) 
			    	{
                      cout<<"成绩应在0-100之间,请重新输入"<<endl;
                    }
                 } while(students[i].english<0||students[i].english>100);

               found=true;
               cout<<"( 修改成功!)"<<endl; 
               break;
            }
        }   
		    
            if (!found)
	    {
		    cout<<"该学号不存在!"<<endl;

		   }
            
        //system("cls");    
}
void Dianxin::Search_Info()       //查找信息
{
    int choice;
    cout<<"请选择查找方式:"<<endl;
    cout<<"1. 姓名查找"<<endl;
    cout<<"2. 学号查找"<<endl;
    cin>>choice;
    switch (choice)
    {
      case 1:
      	{
		  string sname;
          cout<<"请输入要查找的姓名:"<<endl;
          cin>>sname;    
          bool found=false; // 遍历vector,查找含有关键字的学生信息并显示
          for(int i=0;i<students.size();i++)
           {
              if(students[i].name.find(sname)!=string::npos)
              {
                  students[i].display();
                  found=true;
                  cout<<"-------------------"<<endl;
                  
              }
           }         
              if(!found)
	    	  {
	    	     cout<<"该姓名不存在!"<<endl;
			  }          
          break;
        }
      case 2:
	   {
        int snum;
        cout<< "请输入要查找的学号:"<<endl;
        cin>>snum;  
        bool found=false;
        // 遍历vector,查找对应学号的学生信息并显示
        for (int i=0;i<students.size();i++)
        {
            if (students[i].num==snum)
            {
                students[i].display();
                found=true ;
                cout<<"-------------------"<<endl;
                break;
            }
        }
            if(!found)
	    	{
	    	    cout<<"该学号不存在!"<<endl;

	    	}           
          break;
      }
        default:
          cout<<"输入无效!"<<endl;
          break;//返回功能页面的
    }
    //system("cls");
}

bool compareStudents(Dianxin& s1, Dianxin& s2)//比较函数
{
    if(s1.math!=s2.math)
        return s1.math>s2.math;       
		//函数首先比较两个学生的数学成绩(s1.math和s2.math),
		//如果不相等,则返回数学成绩较高的学生对象。
    else if(s1.english!=s2.english)
        return s1.english>s2.english;
        //如果两个学生的数学成绩相等,
		//再比较两个学生的英语成绩(s1.english和s2.english),
		//如果不相等,则返回英语成绩较高的学生对象。
    else
        return s1.num<s2.num;
        //如果两个学生的数学和英语成绩都相等,
		//则比较两个学生的学号(s1.num和s2.num),返回学号较小的学生对象。

}//定义了一个名为"compareStudents"的函数,用于比较两个学生的成绩和学号。
//函数接受两个参数,表示两个学生对象:s1,s2。
//该函数的作用是按照数学成绩、英语成绩和学号的
//优先顺序比较两个学生,并返回较优学生对象。

void Dianxin::Sort_Info()         //排序信息 
{
    sort(students.begin(),students.end(),compareStudents);
    //system("cls");
}
//void Dianxin::TotalScore()        //总成绩 
//{
//
//    for(int i=0;i<students.size();i++)
//    {
//       float totalScore=students[i].math+students[i].english;
//
//       cout<<"学号:"<<students[i].num<<"总成绩:"<<totalScore<<endl;
//    }
//    
//	//sort(students.begin(),students.end(),compareStudents);
//   
//}
void Dianxin::Scan_Info()         //浏览信息
{
    for (int i=0;i<students.size();i++)
       {
        students[i].display();
        float totalScore=students[i].math+students[i].english;
        cout<<"总成绩:"<<totalScore<<endl;
        cout<<"-------------------"<<endl;
       }
    //system("cls");       
} 
int main()
{
    Dianxin stu1;
    int choice=0;
    while(1)
    {stu1.Menu();  //显示学生信息管理系统 
     cout<<"请输入你的选择:"<<endl;
     cin>>choice;
     
     switch(choice)
      {  case 0:                    	              
            stu1.Exit_System();  //退出系统          
            break;
         case 1:                 //调用录入信息函数;
            stu1.Enter_Info();
            break;
         case 2:
            stu1.Delete_Info();  //调用删除信息函数;
            break;
         case 3:
            stu1.Modify_Info();  //调用修改信息函数;
            break;
         case 4:
            stu1.Search_Info();  //调用查找信息函数;
            break;
         case 5:
         	stu1.Sort_Info();    //调用排序信息函数;
            stu1.Scan_Info();    //调用浏览信息函数;
            //stu1.TotalScore();   //调用总成绩函数; 
            break; 
        default:
            cout << "输入无效!" << endl;
            //break;
       }
    }
 system("pause"); 
 
 return 0;

}

 

2.链表实现

#include <iostream>
#include <string>
using namespace std;
class Student {// 定义学生类
	public:
		string id;
		string name;
		string gender;
		void display() {
			cout << "学号:" << id << endl;
			cout << "姓名:" << name << endl;
			cout << "性别:" << gender << endl;
		}	// 打印学生信息
};
class Telecom : public Student {// 定义电信类,继承自学生类
	public:
		string classes;
		double math;
		double english;
		double getTotal()  {
			return math + english;
		}		// 计算总成绩
		void display()  {
			Student::display();
			cout << "班级:" << classes << endl;
			cout << "高数成绩:" << math << endl;
			cout << "英语成绩:" << english << endl;
			cout << "总成绩:" << getTotal() << endl;
		}		// 打印学生信息
		bool operator>(const Telecom& other) const {
			if (math != other.math) {
				return math > other.math; // 按高数成绩从高到低排序
			} else if (english != other.english) {
				return english > other.english; // 高数成绩相同时,按英语成绩从高到低排序
			} else {
				return id < other.id; // 高数和英语成绩都相同时,按学号从小到大排序+
			}
		}
};
struct Node {              // 定义链表节点
	Telecom* data;
	Node* next;
	Node(Telecom* data) {
		this->data = data;
		this->next = nullptr;
	}
};
class Dianxin {            // 定义链表类
	public:
		Node* head;
		Node* tail;		
		Dianxin() {// 构造函数
			head = nullptr;
			tail = nullptr;
		}	
		bool isEmpty() {// 链表是否为空
			return head == nullptr;
		}		
		void append(Telecom* data) {// 在链表末尾添加一个节点
			Node* newNode = new Node(data);
			if (isEmpty()) {
				head = newNode;
				tail = newNode;
			} else {
				tail->next = newNode;
				tail = newNode;
			}
		}
		void Menu() {            //显示菜单
			cout << "----------------------------------" << endl;
			cout << "         学生信息管理系统         " << endl;
			cout << "            0.退出系统            " << endl;
			cout << "            1.录入信息            " << endl;
			cout << "            2.删除信息            " << endl;
			cout << "            3.修改信息            " << endl;
			cout << "            4.查找信息            " << endl;
			cout << "            5.浏览信息            " << endl;
			cout << "----------------------------------" << endl;
			cout << "            请输入(0-5)           " << endl;
		};
		void Exit_System() {     //退出系统
			cout << "退出系统!" << endl;
			exit(0);
		}
		void Enter_Info() {      // 录入信息
			int a;
			cout << "请输入要录入的学生人数:" << endl;
			cin >> a;
			for (int i = 0; i < a; i++) {
				Telecom *student = new Telecom();
				cout << "请输入第" << i + 1 << "个学生信息:" << endl;
				cout << "学号:";cin >> (*student).id;
				cout << "姓名:";cin >> (*student).name;
				cout << "性别:";cin >> (*student).gender;
				cout << "班级:";cin >> (*student).classes;
				cout << "高数成绩:";cin >> (*student).math;
				cout << "英语成绩:";cin >> (*student).english;
				append(student);
			}
			cout << "录入成功!" << endl;
		}
		// 删除信息
		void Delete_Info() {
			string b;
			cout << "请输入要删除学生的学号:" << endl;
			cin >> b;
			bool found = false; // 查找对应学号的学生信息并删除,初始值为false(未找到)
			Node* current = head;         //current 指向链表的头节点;
			Node* previous = nullptr;     //previous 用于保存前一个节点的地址,初始化为 nullptr。
			while (current != nullptr) {         // 开始一个循环,只要 current不为空(即还未到达链表尾部),就会执行循环体中的代码。
				if (current->data->id == b) {//判断当前节点的数据结构中的学号是否与输入的学号 b 相等。
					if (previous == nullptr) {   //如果previous为空,表示当前节点是头节点。将头节点修改为当前节点的下一个节点,即删除了头节点。
						head = current->next;
					} else {     //否则,将previous的下一个节点指向当前节点的下一个节点,绕过当前节点。
						previous->next = current->next;
					}
					found = true;
					delete current;//释放节点内存;
					cout << "删除成功!" << endl;
					break;
				}
				previous = current;
				current = current->next;
			}
			if (!found) {
				cout << "该学号不存在!" << endl;
			}
		}
		//修改信息
		void Modify_Info() {
			string c;
			cout << "请输入要修改的学生学号:";
			cin >> c;
			bool found = false;
			for (Node* it = head; it != NULL; it = it->next) {
				if (it->data->id == c) {
					Telecom* student = new Telecom();
					cout << "请输入新的学生信息:" << endl;
					cout << "学号:";cin >> (*student).id;
					cout << "姓名:";cin >> (*student).name;
					cout << "性别:";cin >> (*student).gender;
					cout << "班级:";cin >> (*student).classes;
					cout << "高数成绩:";cin >> (*student).math;
					cout << "英语成绩:";cin >> (*student).english;
					it->data = student;
					found = true;
					cout << "修改成功!" << endl;
					break;
				}
			}
			if (!found) {
				cout << "该学号不存在:" << endl;
			}
		}
		void Search_Info() {  // 查找信息
			string d;
			cout << "请输入要查找的姓名:" ;
			cin >> d;
			bool found = false;  // 用于标记是否找到对应姓名的学生信息,默认为未找到(false)
			Node* current = head;
			while (current != nullptr) {
				if (current->data->name.find(d) != string::npos) { // 如果找到对应姓名的学生信息
					current->data->display();  // 打印学生信息
					found = true;  // 标记为找到
					cout << "------------------" << endl;
				}
				current = current->next;  // 继续向下查找
			}
			if (!found) {  // 如果遍历完链表仍未找到对应姓名的学生信息
				cout << "该姓名不存在!" << endl;
			}

		}
		
		void Sort_Info() {// 对链表中的学生信息按进行排序
			Node* current = head;
			Node* next;
			while (current != nullptr) {
				next = current->next;
				while (next != nullptr) {
					if (*(next->data) > * (current->data)) {
						Telecom* temp = current->data;
						current->data = next->data;
						next->data = temp;
					}
					next = next->next;
				}
				current = current->next;
			}
		}
		void Scan_Info() {// 浏览信息
			Sort_Info();
			Node* current = head;
			while (current != nullptr) {
				current->data->display();
				cout << "-------------------" << endl;
				current = current->next;
			}
		}
};
int main() {
	// 创建链表
	Dianxin stu1;
	int choice = 0;
	while (1) {
		stu1.Menu();  //显示学生信息管理系统
		cout << "请输入你的选择:" << endl;
		cin >> choice;
		switch (choice) {
			case 0:
				stu1.Exit_System();  //退出系统
				break;
			case 1:                  //调用录入信息函数;
				stu1.Enter_Info();
				break;
			case 2:
				stu1.Delete_Info();  //调用删除信息函数;
				break;
			case 3:
				stu1.Modify_Info();  //调用修改信息函数;
				break;
			case 4:
				stu1.Search_Info();  //调用查找信息函数;
				break;
			case 5:
				stu1.Sort_Info();    //调用排序信息函数;
				stu1.Scan_Info();    //调用浏览信息函数;
				break;
			default:
				cout << "输入无效!" << endl;
		}
	}
	system("pause");
	return 0;
}

3.完全的链表实现

#include <iostream>  // C++标准输入输出库
#include <string>  // C++字符串库
using namespace std;
class Student {  // 定义学生类
	public:
		string id;  // 学号
		string name;  // 姓名
		string gender;  // 性别
		
		void display() {  // 打印学生信息
			cout << "学号:" << id << endl;
			cout << "姓名:" << name << endl;
			cout << "性别:" << gender << endl;
		}
};
class Telecom : public Student {  // 定义电信类,继承自学生类
	public:
		string classes;  // 班级
		double mathScore;  // 高数成绩
		double englishScore;  // 英语成绩

		double getTotalScore() {  // 计算总成绩
			return mathScore + englishScore;
		}
		
		void display() {  // 打印学生信息
			Student::display();
			cout << "班级:" << classes << endl;
			cout << "高数成绩:" << mathScore << endl;
			cout << "英语成绩:" << englishScore << endl;
			cout << "总成绩:" << getTotalScore() << endl;
		}

		bool operator>(const Telecom& other) const {  // 判断学生成绩大小
			if (mathScore != other.mathScore) {
				return mathScore > other.mathScore;  // 按高数成绩从高到低排序
			} else if (englishScore != other.englishScore) {
				return englishScore > other.englishScore;  // 高数成绩相同时,按英语成绩从高到低排序
			} else {
				return id < other.id;  // 高数和英语成绩都相同时,按学号从小到大排序
			}
		}
};

struct Node {  // 定义链表节点
	Telecom* data;  // 学生信息指针
	Node* next;  // 下一个节点指针

	Node(Telecom* data) {  // 构造函数
		this->data = data;
		this->next = nullptr;
	}
};

class Dianxin {  // 定义链表类
	public:
		Node* head;  // 头节点
		Node* tail;  // 尾节点

		Dianxin() {  // 构造函数
			head = nullptr;
			tail = nullptr;
		}

		bool isEmpty() {  // 判断链表是否为空
			return head == nullptr;
		}

		void append(Telecom* data) {  // 在链表末尾添加一个节点
			Node* newNode = new Node(data);
			if (isEmpty()) {  // 如果链表为空,新节点既是头节点又是尾节点
				head = newNode;
				tail = newNode;
			} else {
				tail->next = newNode;  // 将新节点链接到尾节点的后面
				tail = newNode;  // 更新尾节点为新节点
			}
		}

		Node* find(string id) {  // 在链表中查找一个节点
			Node* current = head;
			while (current != nullptr) {
				if (current->data->id == id) {  // 如果找到了符合条件的节点,返回该节点
					return current;
				}
				current = current->next;  // 否则继续向下寻找
			}
			return nullptr;  // 遍历完链表仍未找到符合条件的节点,则返回空指针
		}

		void Menu() {  // 显示菜单
			cout << "----------------------------------" << endl;
			cout << "         学生信息管理系统         " << endl;
			cout << "            0.退出系统            " << endl;
			cout << "            1.录入信息            " << endl;
			cout << "            2.删除信息            " << endl;
			cout << "            3.修改信息            " << endl;
			cout << "            4.查找信息            " << endl;
			cout << "            5.浏览信息            " << endl;
			cout << "----------------------------------" << endl;
			cout << "            请输入(0-5)           " << endl;
		}

		void Exit_System() {  // 退出系统
			cout << "退出系统!" << endl;
			exit(0);
		}

		void Enter_Info() {  // 录入信息
			int a;
			cout << "请输入录入学生人数:";
			cin >> a;
			for (int i = 0; i < a; i++) {
				Telecom* student = new Telecom();
				cout << "请输入第" << i + 1 << "个学生信息:" << endl;
				cout << "学号:";
				cin >> (*student).id;
				cout << "姓名:";
				cin >> (*student).name;
				cout << "性别:";
				cin >> (*student).gender;
				cout << "班级:";
				cin >> (*student).classes;
				// cout << "高数成绩:";
				// cin >> (*student).mathScore;
				// cout << "英语成绩:";
				// cin >> (*student).englishScore;
				// 输入合法性检查,成绩应在0-100之间
				do {
					cout << "高数成绩:";
					cin >> (*student).mathScore;
					if ((*student).mathScore < 0 || (*student).mathScore > 100) {
						cout << "成绩应在0-100之间,请重新输入" << endl;
					}
				} while ((*student).mathScore < 0 || (*student).mathScore > 100);

				do {
					cout << "英语成绩:";
					cin >> (*student).englishScore;
					if ((*student).englishScore < 0 || (*student).englishScore > 100) {
						cout << "成绩应在0-100之间,请重新输入" << endl;
					}
				} while ((*student).englishScore < 0 || (*student).englishScore > 100);
				append(student);
			}
			cout << "录入成功!" << endl;
		}

		void Delete_Info() {  // 删除信息
			string b;
			cout << "请输入要删除学生的学号:" << endl;
			cin >> b;
			bool found = false;  // 用于标记是否找到对应学号的学生信息,默认为未找到(false)
			Node* current = head;
			Node* previous = nullptr;
			while (current != nullptr) {
				if (current->data->id == b) {  // 如果找到对应学号的学生信息
					if (previous == nullptr) {  // 如果要删除的学生信息为头节点,更新head指向下一个节点
						head = current->next;
					} else {
						previous->next = current->next;  // 要删除的学生信息为中间节点或尾节点,更新前一个节点的next指针
					}
					found = true;  // 标记为找到
					delete current;  // 释放内存
					cout << "删除成功!" << endl;
					break;
				}
				previous = current;  // 更新previous指针
				current = current->next;  // 更新current指针
			}
			if (!found) {  // 如果遍历完链表仍未找到对应学号的学生信息
				cout << "该学号不存在!" << endl;
			}
			// system("cls");
		}

		void Modify_Info() {  // 修改信息
			string c;
			cout << "请输入要修改学生的学号:" ;
			cin >> c;
			bool found = false;  // 用于标记是否找到对应学号的学生信息,默认为未找到(false)
			for (Node* it = head; it != NULL; it = it->next) {  // 遍历链表查找对应学号的学生信息
				if (it->data->id == c) {  // 如果找到对应学号的学生信息
					Telecom *student = new Telecom();
					cout << "请输入新的学生信息:" << endl;
					cout << "学号:";
					cin >> (*student).id;
					cout << "姓名:";
					cin >> (*student).name;
					cout << "性别:";
					cin >> (*student).gender;
					cout << "班级:";
					cin >> (*student).classes;
					// cout << "高数成绩:";
					// cin >> (*student).mathScore;
					// cout << "英语成绩:";
					// cin >> (*student).englishScore;
					// 输入合法性检查,成绩应在0-100之间
					do {
						cout << "高数成绩:";
						cin >> (*student).mathScore;
						if ((*student).mathScore < 0 || (*student).mathScore > 100) {
							cout << "成绩应在0-100之间,请重新输入" << endl;
						}
					} while ((*student).mathScore < 0 || (*student).mathScore > 100);

					do {
						cout << "英语成绩:";
						cin >> (*student).englishScore;
						if ((*student).englishScore < 0 || (*student).englishScore > 100) {
							cout << "成绩应在0-100之间,请重新输入" << endl;
						}
					} while ((*student).englishScore < 0 || (*student).englishScore > 100);

					it->data = student;  // 更新学生信息
					found = true;  // 标记为找到
					cout << "修改成功!" << endl;
					break;
				}
			}
			if (!found) {  // 如果遍历完链表仍未找到对应学号的学生信息
				cout << "该学号不存在!" << endl;
			}
			// system("cls");
		}

		void Search_Info() {  // 查找信息
			int choice;
			cout << "请选择查找方式:" << endl;
			cout << "1. 姓名查找" << endl;
			cout << "2. 学号查找" << endl;
			cin >> choice;
			switch (choice) {
				case 1: {
					string d;
					cout << "请输入要查找的姓名:" ;
					cin >> d;
					bool found = false;  // 用于标记是否找到对应姓名的学生信息,默认为未找到(false)
					Node* current = head;
					while (current != nullptr) {
						if (current->data->name.find(d) != string::npos) { // 如果找到对应姓名的学生信息
							current->data->display();  // 打印学生信息
							found = true;  // 标记为找到
							cout << "------------------" << endl;
						}
						current = current->next;  // 继续向下查找
					}
					if (!found) {  // 如果遍历完链表仍未找到对应姓名的学生信息
						cout << "该姓名不存在!" << endl;
					}
					break;
				}
				case 2: {
					string e;
					cout << "请输入要查找的学号:" ;
					cin >> e;
					bool found = false;  // 用于标记是否找到对应学号的学生信息,默认为未找到(false)
					Node* current = head;
					while (current != nullptr) {
						if (e.compare(current->data->id) == 0) {  // 如果找到对应学号的学生信息
							current->data->display();  // 打印学生信息
							found = true;  // 标记为找到
							cout << "------------------" << endl;
							break;
						}
						current = current->next;  // 继续向下查找
					}
					if (!found) {  // 如果遍历完链表仍未找到对应学号的学生信息
						cout << "该学号不存在!" << endl;
					}
					break;
				}
				default:
					cout << "输入无效!" << endl;
					break;//返回功能页面的
			}
			// system("cls");
		}

		void Sort_Info() {  // 对链表中的学生信息进行排序
			Node* current = head;
			Node* next;
			while (current != nullptr) {
				next = current->next;
				while (next != nullptr) {
					if (*(next->data) > *(current->data)) {  // 如果后一个学生信息的总成绩大于前一个学生信息的总成绩
						Telecom* temp = current->data;
						current->data = next->data;  // 交换学生信息
						next->data = temp;
					}
					next = next->next;
				}
				current = current->next;
			}
		}

		void Scan_Info() {  // 浏览信息
			Sort_Info();  // 先对学生信息进行排序
			Node* current = head;
			while (current != nullptr) {
				current->data->display();  // 逐个打印学生信息
				cout << "-------------------" << endl;
				current = current->next;
			}
		}
};

int main() {
	// 创建链表
	Dianxin stu1;
	int choice = 0;
	while (1) {
		stu1.Menu();  // 显示学生信息管理系统
		cout << "请输入你的选择:";
		cin >> choice;

		switch (choice) {
			case 0:
				stu1.Exit_System();  // 退出系统
				break;
			case 1:  // 调用录入信息函数;
				stu1.Enter_Info();
				break;
			case 2:
				stu1.Delete_Info();  // 调用删除信息函数;
				break;
			case 3:
				stu1.Modify_Info();  // 调用修改信息函数;
				break;
			case 4:
				stu1.Search_Info();  // 调用查找信息函数;
				break;
			case 5:
				stu1.Sort_Info();  // 调用排序信息函数;
				stu1.Scan_Info();  // 调用浏览信息函数;
				break;
			default:
				cout << "输入无效!" << endl;
				//break;
		}
	}
	system("pause");
	return 0;
}

 

 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值