学生管理系统(C++)

基于C++实现的学生信息管理系统

C++语法练习作业,包含对学生信息的添加、删除、修改、查询、显示、成绩统计功能。

主菜单界面

学生管理系统(C++)_第1张图片

添加学生信息

学生管理系统(C++)_第2张图片

删除学生信息

学生管理系统(C++)_第3张图片

修改学生信息

学生管理系统(C++)_第4张图片

查询学生信息

学生管理系统(C++)_第5张图片

显示学生信息

学生管理系统(C++)_第6张图片

统计学生信息

学生管理系统(C++)_第7张图片

清空系统数据

学生管理系统(C++)_第8张图片

完整代码

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
//学生类
class Student
{
	public:
		string stuNum;      //学号
		string stuName;     //姓名
		string gender;      //性别
		int stuAge;         //年龄
		int gradeNum;       //年级
		string department;  //专业
		int classNum;       //班级
		double GPA;         //绩点
		Student()
		{
		}
		Student(string stuNum, string stuName, string gender, int stuAge, int gradeNum, string department, int classNum, double GPA)
		{
			this->stuNum = stuNum;
			this->stuName = stuName;
			this->gender = gender;
			this->stuAge = stuAge;
			this->gradeNum = gradeNum;
			this->department = department;
			this->classNum = classNum;
			this->GPA = GPA;
		}
		~Student()
		{
		}
		//输出属性值
		void showStuInfo()
		{
			cout << left << setw(12) << stuNum;
			cout << left << setw(10) <<  stuName;
			cout << left << setw(6) << gender;
			cout << left << setw(6) << stuAge;
			cout << left << setw(6) << gradeNum;
			cout << left << setw(21) << department;
			cout << left << setw(6) << classNum;
			cout << left << setw(6) << GPA << endl;
		}
		//输出属性名
		static void showHeader()
		{
			cout << left << setw(12) << "学号";
			cout << left << setw(10) <<  "姓名";
			cout << left << setw(6) << "性别";
			cout << left << setw(6) << "年龄";
			cout << left << setw(6) << "年级";
			cout << left << setw(21) << "专业";
			cout << left << setw(6) << "班级";
			cout << left << setw(6) << "绩点" << endl;
		}
};
//学生列表类
class StudentList
{
	private:
		vector<Student> stuList;
	public:
		StudentList()
		{
		}
		StudentList(vector<Student> stuList)
		{
			this->stuList = stuList;
		}
		~StudentList()
		{
		}
		//初始化
		void init()
		{
			readFile(); //读取文件
		}
		//主菜单
		void menu()
		{
			string sel = "0";
			system("cls");
			cout << "\t\t\t**********欢迎来到学生信息管理系统**********" << endl;
			cout << "\t\t\t你可以进行以下操作:" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             1   添加学生信息             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             2   删除学生信息             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             3   修改学生信息             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             4   查询学生信息             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             5   显示学生列表             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             6   统计学生数据             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             7   清空系统数据             |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t|             0   退出                     |" << endl;
			cout << "\t\t\t|------------------------------------------|" << endl;
			cout << "\t\t\t请选择【0-7】:";
			cin >> sel;
			while(sel != "0" && sel != "1" && sel != "2" && sel != "3" && sel != "4" && sel != "5" && sel != "6" && sel != "7")
			{
				cout << "\t\t\t输入不合法,请重新选择【0-7】:";
				cin >> sel;
			}
			if(sel == "1")
			{
				this->insertList();
				this->menu();
			}
			else if(sel == "2")
			{
				this->deleteList();
				this->menu();
			}
			else if(sel == "3")
			{
				this->updateList();
				this->menu();
			}
			else if(sel == "4")
			{
				this->selectList();
			}
			else if(sel == "5")
			{
				this->displayList();
				this->menu();
			}
			else if(sel == "6")
			{
				this->statisticList();
				this->menu();
			}
			else if(sel == "7")
			{
				this->clearList();
				this->menu();
			}
			else if(sel == "0")
			{
				exit(0);
			}
			else
			{
				this->menu();
			}
		}
		//读取文件
		void readFile()
		{
			ifstream ifs;
			ifs.open("stuList.txt", ios::in);
			Student s;
			while(ifs >> s.stuNum >> s.stuName >> s.gender >> s.stuAge >> s.gradeNum >> s.department >> s.classNum >> s.GPA)
			{
				stuList.push_back(s);
			}
			ifs.close();
		}
		//写入文件
		void writeFile()
		{
			ofstream ofs;
			ofs.open("stuList.txt", ios::out);
			for (int i = 0; i < stuList.size(); i++)
			{
				ofs << stuList[i].stuNum << " " <<  stuList[i].stuName << " " << stuList[i].gender << " "
				    << stuList[i].stuAge << " " << stuList[i].gradeNum << " " << stuList[i].department << " "
				    << stuList[i].classNum << " " << stuList[i].GPA << endl;
			}
			ofs.close();
		}
		//添加学生信息
		void insertList()
		{
			system("cls");
			cout << "\t\t\t**************欢迎来到添加学生信息功能***************" << endl;
			Student s;
			string flag = "1";
			while (flag == "1")
			{
				cout << "\t\t\t开始信息录入:"<<endl;
				cout << "\t\t\t学号:";
				bool check = false;
				do
				{
					check = false;
					cin >> s.stuNum;
					for(int i = 0; i < stuList.size(); ++i)
					{
						if(s.stuNum == stuList[i].stuNum)
						{
							cout<<"\t\t\t该学号已被录入,请重新输入学号:";
							check = true;
							break;
						}
					}
				}
				while(check);
				cout << "\t\t\t姓名:";
				cin >> s.stuName;
				cout << "\t\t\t性别:";
				cin >> s.gender;
				cout << "\t\t\t年龄:";
				cin >> s.stuAge;
				cout << "\t\t\t年级:";
				cin >> s.gradeNum;
				cout<<"\t\t\t专业:";
				cin >> s.department;
				cout<<"\t\t\t班级:";
				cin >> s.classNum;
				cout<<"\t\t\t绩点:";
				cin >> s.GPA;
				stuList.push_back(s);
				writeFile();
				cout << "\n\t\t\t添加成功!是否继续添加?(1 是 0 否)" << endl;
				cout << "\t\t\t请进行选择【0-1】:";
				cin >> flag;
				while(flag != "0" && flag != "1")
				{
					cout << "\t\t\t输入不合法,请重新选择【0-1】:";
					cin >> flag;
				}
			}
			cout << "\t\t\t";
			system("pause");
		}
		//删除学生信息
		void deleteList()
		{
			while (true)
			{
				system("cls");
				cout << "\t\t\t***********************欢迎来到删除学生信息功能***********************" << endl;
				string sel = "0";
				cout << "\t\t\t-----------------" << endl;
				cout << "\t\t\t1 按学号删除" << endl;
				cout << "\t\t\t2 按姓名删除" << endl;
				cout << "\t\t\t3 返回主菜单" << endl;
				cout << "\t\t\t-----------------" << endl;
				cout << "\t\t\t请进行选择【1-3】:";
				cin >> sel;
				while(sel != "1" && sel != "2" && sel != "3")
				{
					cout << "\t\t\t输入不合法,请重新选择【1-3】:";
					cin >> sel;
				}
				if (sel == "1")
				{
					string keyNum;
					bool flag = false;
					cout << "\t\t\t请输入待删除学生的学号:";
					cin >> keyNum;
					for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)
					{
						if (it->stuNum == keyNum)
						{
							flag = true;
							cout << "\t\t\t待删除学生的信息如下:" << endl;
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout<<"\t\t\t";
							Student::showHeader();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout<<"\t\t\t";
							it->showStuInfo();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
							cout << "\t\t\t请进行选择【0-1】:";
							string ch = "0";
							cin >> ch;
							while(ch != "0" && ch != "1")
							{
								cout << "\t\t\t输入不合法,请重新选择【0-1】:";
								cin >> ch;
							}
							if (ch == "0") break;
							else
							{
								stuList.erase(it);
								writeFile();
								cout << "\t\t\t删除成功!" << endl;
								break;
							}
						}
					}
					if (!flag) cout << "\t\t\t查无此人,无法删除!\n" << endl;
					cout << "\t\t\t";
					system("pause");
				}
				else if (sel == "2")
				{
					string keyName;
					bool flag = false;
					cout << "\t\t\t请输入待删除学生的姓名:";
					cin >> keyName;
					for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)
					{
						if (it->stuName == keyName)
						{
							flag = true;
							cout << "\t\t\t待删除学生的信息如下:" << endl;
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout<<"\t\t\t";
							Student::showHeader();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout<<"\t\t\t";
							it->showStuInfo();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
							cout << "\t\t\t请进行选择【0-1】:";
							string ch = "0";
							cin >> ch;
							while(ch != "0" && ch != "1")
							{
								cout << "\t\t\t输入不合法,请重新选择【0-1】:";
								cin >> ch;
							}
							if (ch == "0") break;
							else
							{
								stuList.erase(it);
								writeFile();
								cout << "\t\t\t删除成功!" << endl;
								break;
							}
						}
					}
					if (!flag) cout << "\t\t\t查无此人,无法删除!\n" << endl;
					cout << "\t\t\t";
					system("pause");
				}
				else this->menu();
			}
		}
		//修改学生信息
		void updateList()
		{
			system("cls");
			cout << "\t\t\t***********************欢迎来到修改学生信息功能***********************" << endl;
			string keyNum;
			cout << "\t\t\t请输入待修改学生的学号:";
			cin >> keyNum;
			bool flag = false;
			for (int i = 0; i < stuList.size(); i++)
			{
				if (stuList[i].stuNum == keyNum)
				{
					flag = true;
					cout << "\t\t\t待修改学生当前信息如下:" << endl;
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					cout<<"\t\t\t";
					Student::showHeader();
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					cout<<"\t\t\t";
					stuList[i].showStuInfo();
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;

					Student s;
					cout << "\t\t\t请输入修改后的学号:";
					bool check = false;
					do
					{
						check = false;
						cin >> s.stuNum;
						for(int j = 0; j < stuList.size(); ++j)
						{
							if(s.stuNum == stuList[j].stuNum && i != j)
							{
								cout<<"\t\t\t该学号已被录入,请重新输入学号:";
								check = true;
								break;
							}
						}
					}
					while(check);
					cout << "\t\t\t请输入修改后的姓名:";
					cin >> s.stuName;
					cout << "\t\t\t请输入修改后的性别:";
					cin >> s.gender;
					cout << "\t\t\t请输入修改后的年龄:";
					cin >> s.stuAge;
					cout << "\t\t\t请输入修改后的年级:";
					cin >> s.gradeNum;
					cout<<"\t\t\t请输入修改后的专业:";
					cin >> s.department;
					cout<<"\t\t\t请输入修改后的班级:";
					cin >> s.classNum;
					cout<<"\t\t\t请输入修改后的绩点:";
					cin >> s.GPA;
					cout << "\t\t\t是否确认修改?(1 是 0 否)" << endl;
					cout << "\t\t\t请进行选择【0-1】:";
					string ch = "0";
					cin >> ch;
					while(ch != "0" && ch != "1")
					{
						cout << "\t\t\t输入不合法,请重新选择【0-1】:";
						cin >> ch;
					}

					if (ch == "0") break;
					else
					{
						stuList[i] = s;
						cout << "\t\t\t修改成功!" << endl;
						writeFile();
						break;
					}
				}
			}
			if (!flag) cout << "\t\t\t查无此人,无法修改!\n" << endl;
			cout << "\t\t\t";
			system("pause");
		}
		//查询学生信息
		void selectList()
		{
			while (true)
			{
				system("cls");
				cout << "\t\t\t***********************欢迎来到查询学生信息功能************************" << endl;
				cout << "\t\t\t-----------------" << endl;
				cout << "\t\t\t1 按学号查询" << endl;
				cout << "\t\t\t2 按姓名查询" << endl;
				cout << "\t\t\t3 返回主菜单" << endl;
				cout << "\t\t\t-----------------" << endl;
				cout << "\t\t\t请进行选择【1-3】:";
				string sel = "0";
				cin >> sel;
				while(sel != "1" && sel != "2" && sel != "3")
				{
					cout << "\t\t\t输入不合法,请重新选择【1-3】:";
					cin >> sel;
				}
				if (sel == "1")
				{
					string keyNum;
					bool flag = false;
					cout << "\t\t\t请输入待查询学生的学号:";
					cin >> keyNum;
					cout << "\t\t\t查询结果如下:" << endl;
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					cout<<"\t\t\t";
					Student::showHeader();
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					for (int i = 0; i < stuList.size(); i++)
					{
						if (stuList[i].stuNum == keyNum)
						{
							flag = true;
							cout<<"\t\t\t";
							stuList[i].showStuInfo();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
							break;
						}
					}
					if (!flag) cout << "\t\t\t查无此人!\n" << endl;
					cout << "\t\t\t";
					system("pause");
				}
				else if (sel == "2")
				{
					string keyName;
					bool flag = false;
					cout << "\t\t\t请输入待查询联系人的姓名:";
					cin >> keyName;
					cout << "\t\t\t查询结果如下:" << endl;
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					cout<<"\t\t\t";
					Student::showHeader();
					cout << "\t\t\t-----------------------------------------------------------------------" << endl;
					for (int i = 0; i < stuList.size(); i++)
					{
						if (stuList[i].stuName == keyName)
						{
							flag = true;
							cout<<"\t\t\t";
							stuList[i].showStuInfo();
							cout << "\t\t\t-----------------------------------------------------------------------" << endl;
						}
					}
					if (!flag) cout << "\t\t\t查无此人!\n" << endl;
					cout << "\t\t\t";
					system("pause");
				}
				else this->menu();
			}
		}
		//遍历学生列表
		void display()
		{
			cout << "\t\t-----------------------------------------------------------------------" << endl;
			cout<<"\t\t";
			Student::showHeader();
			cout << "\t\t-----------------------------------------------------------------------" << endl;
			for (int i = 0; i < stuList.size(); i++)
			{
				cout << "\t\t";
				stuList[i].showStuInfo();
			}
			cout << "\t\t-----------------------------------------------------------------------" << endl;
		}
		//显示学生列表
		void displayList()
		{
			system("cls");
			cout << "\t\t***********************欢迎来到显示学生列表功能************************" << endl;
			this->display();
			cout << "\t\t";
			system("pause");
		}
		//将学生列表按学号升序排列
		static bool cmpNum(const Student& s1,const Student& s2)
		{
			return s1.stuNum < s2.stuNum;
		}
		//将学生列表按绩点升序排列,绩点相同的再按学号升序排列
		static bool cmpGPA(const Student& s1,const Student& s2)
		{
			if(s1.stuNum != s2.stuNum) return s1.GPA < s2.GPA;
			else return s1.stuNum < s2.stuNum;
		}
		//统计学生数据
		void statisticList()
		{
			while(true)
			{
				system("cls");
				cout << "\t\t***********************欢迎来到统计学生数据功能************************" << endl;
				string sel = "0";
				cout << "\t\t-----------------" << endl;
				cout << "\t\t1 按学号排序" << endl;
				cout << "\t\t2 按绩点排序" << endl;
				cout << "\t\t3 返回主菜单" << endl;
				cout << "\t\t-----------------" << endl;
				cout << "\t\t请进行选择【1-3】:";
				cin >> sel;
				while(sel != "1" && sel != "2" && sel != "3")
				{
					cout << "\t\t输入不合法,请重新选择【1-3】:";
					cin >> sel;
				}
				if(sel == "1")
				{
					sort(stuList.begin(), stuList.end(), cmpNum);
					cout<<"\t\t按学号升序排列如下:"<<endl;
					this->display();
					int numMale = 0, numFemale = 0;
					for(int i = 0; i < stuList.size(); ++i)
					{
						if(stuList[i].gender == "男") numMale++;
						else if(stuList[i].gender == "女") numFemale++;
					}
					cout<<"\t\t一共 " << stuList.size() << " 人,其中男生 " << numMale << " 人,女生 " << numFemale << " 人。"<<endl;
					cout << "\t\t";
					system("pause");
				}
				else if(sel == "2")
				{
					sort(stuList.begin(), stuList.end(), cmpGPA);
					cout<<"\t\t按绩点升序排列如下:"<<endl;
					this->display();
					vector<int> z(10);
					double totalGPA = 0;
					for(int i = 0; i < stuList.size(); ++i)
					{
						totalGPA += stuList[i].GPA;
						if(0 <= stuList[i].GPA && stuList[i].GPA < 1) z[0]++;
						else if(1 <= stuList[i].GPA && stuList[i].GPA < 2) z[1]++;
						else if(2 <= stuList[i].GPA && stuList[i].GPA < 3) z[2]++;
						else if(3 <= stuList[i].GPA && stuList[i].GPA < 4) z[3]++;
						else z[4]++;
					}
					cout<<"\t\tGPA < 1 -------------- " << z[0] << " 人" << endl;
					cout<<"\t\t1 <= GPA < 2 --------- " << z[1] << " 人" << endl;
					cout<<"\t\t2 <= GPA < 3 --------- " << z[2] << " 人" << endl;
					cout<<"\t\t3 <= GPA < 4 --------- " << z[3] << " 人" << endl;
					cout<<"\t\tGPA >= 4 ------------- " << z[4] << " 人" << endl;
					cout<<"\t\t平均绩点为:"<<totalGPA / stuList.size()<<endl;
					cout<<"\t\t最高绩点为:"<<stuList.back().GPA<<endl;
					cout<<"\t\t最低绩点为:"<<stuList.front().GPA<<endl;
					cout << "\t\t";
					system("pause");
				}
				else this->menu();
			}
		}
		//清空系统数据
		void clearList()
		{
			while (true)
			{
				string sel = "0";
				system("cls");
				cout << "\t\t\t**************欢迎来到清空系统数据功能***************" << endl;
				cout << "\t\t\t------------------" << endl;
				cout << "\t\t\t1 确认清空系统数据" << endl;
				cout << "\t\t\t2 返回主菜单" << endl;
				cout << "\t\t\t------------------" << endl;
				cout << "\t\t\t请慎重选择【1-2】:";
				cin >> sel;
				while(sel != "1" && sel != "2")
				{
					cout << "\t\t\t输入不合法,请重新输入【1-2】:";
					cin >> sel;
				}
				if (sel == "1")
				{
					stuList.clear();
					cout << "\t\t\t清空成功!" << endl;
					cout << "\t\t\t";
					system("pause");
					writeFile();
				}
				else this->menu();
			}
		}
};


int main()
{
	StudentList stuList;
	stuList.init(); //读入文件数据初始化
	stuList.menu(); //打开主菜单
	return 0;
}

你可能感兴趣的:(C++学习笔记,c++,算法,开发语言,学生信息管理系统,课程设计)