C++实现:学生管理系统(详细解析)

我爱OJ 2024-07-27 11:35:00 阅读 63

目录

1.题目要求

2.需求分析

3.整体设计

4.详细设计

主函数设计

 学科科目类

主菜单

读取文件与写入文件

 效果如下

 添加学生信息

删除学生信息

​编辑

修改学生信息

显示信息列表

显示学生列表

将学生列表按学号升序排列

将学生列表按平均分降序排列,平均分相同的再按学号升序排列

统计学生数据

清空系统数据

5.总结


1.题目要求

学生成绩管理系统

(1)增加记录:要求可以连续增加多条记录。

(2)查找:可以根据姓名(或学号)查找某个学生的课程成绩,查找某门课程成绩处于指定分数段内的学生名单等等。可以实现模糊查询,即输入名字的一部

分,可以列出满足条件的所有记录。再从这个记录中进行二次选择。

(3)删除一个学生的记录:要求可以先查找,再删除。删除前,要求用户确认。

(4)成绩修改:若输入错误可进行修改;要求可以先查找,再修改。

(5)统计分析:对某个班级学生的单科成绩进行统计,求出平均成绩;求平均成绩要求实现函数的重载,既能求单科的平均成绩,又能求三科总分的平均成绩。

求出一门课程标准差和合格率;

(6)排序功能:要求按总分进行排序(从高到低),若总分相同,则按数学排序;

若总分和数学相同,则按物理排序;若总分和各科成绩都相同,则按学号排

序;

(7)文件操作:可以打开文件,显示班级的所有学生信息;可以将增加或修改后的成绩重新写入文件;可以将排序好的信息写入新的文件;

2.需求分析

基本思路

设计一个学生的类。类的设计测试数据的记录和将要实现的功能。学生成绩

管理系统有若干学生成绩记录组成,学生一条记录包括:学号、姓名、数学

成绩、物理成绩和英语成绩。主函数显示功能菜单,供用户选择操作。每步操

作之前,都要显示菜单。在主函数中调用类的方法

编译环境

在DEV-C++上运行通过

3.整体设计

【1】录入学生信息

【2】显示学生信息

【3】修改学生信息

【4】查找学生信息

【5】删除学生信息

【6】学生信息文件

【7】成绩排序功能

【8】存入新文件

【9】统计分析成绩

4.详细设计

主函数设计

<code>int main()

{

StudentList stuList;

stuList.init(); //读入文件数据初始化

stuList.menu(); //打开主菜单

return 0;

}

效果如下

 学科科目类

<code>class Subject

{

public:

string proName; //学科名

double proScore; //分数

void showCpInfo()

{

cout << left << setw(45) << proName;

cout << left << setw(6) << proScore << endl;

}

//输出属性名,只显示总积分

static void showHeader()

{

cout << left << setw(45) << "科目";

cout << left << setw(6) << "分数" <<endl;

}

};

 效果如下

主菜单

<code>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();

this->menu();

}

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);

}

}

 效果如下

读取文件与写入文件

<code>void readFile()

{

ifstream ifs;

ifs.open("stuList.txt", ios::in);

int n = 0; //用来接收学生数量的值

ifs >> n;

for(int i = 0; i < n; i++)

{

Student s;

ifs >> s.stuNum >> s.stuName >> s.gender >> s.gradeNum >> s.department >> s.classNum >> s.cpNum >> s.score;

for(int j = 0; j < s.cpNum; j++)

{

Subject cp;

ifs >> cp.proName >> cp.proScore;

s.cps.push_back(cp);

}

stuList.push_back(s);

}

ifs.close();

}

//写入文件

void writeFile()

{

ofstream ofs;

ofs.open("stuList.txt", ios::out);

ofs << stuList.size() << endl; //先写入学生数量

for (int i = 0; i < stuList.size(); i++)

{

ofs << stuList[i].stuNum << " " << stuList[i].stuName << " " << stuList[i].gender

<< " " << stuList[i].gradeNum << " " << stuList[i].department << " " << stuList[i].classNum

<< " " << stuList[i].cpNum << " " << stuList[i].score << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

ofs << stuList[i].cps[j].proName << " " << stuList[i].cps[j].proScore << endl;

}

}

ofs.close();

}

 效果如下

   

 添加学生信息

<code>void insertList()

{

while(true)

{

system("cls");

cout << "\t\t**********************欢迎来到添加学生信息功能*************************" << endl;

cout<< "\t\t学生基本信息一览表:"<<endl;

displayStu();

cout<<endl;

cout << "\t\t------------------" << endl;

cout << "\t\t1 添加学生信息" << endl;

cout << "\t\t2 返回主菜单" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t请选择【1-2】:";

string sel;

cin >> sel;

while(sel != "1" && sel != "2")

{

cout << "\t\t输入不合法,请重新输入【1-2】:";

cin >> sel;

}

if(sel == "1")

{

string flag = "1";

while (flag == "1")

{

cout << "\t\t输入学生信息:"<<endl;

cout << "\t\t学号:";

Student s;

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该学号已存在,请重新输入:";

check = true;

break;

}

}

}

while(check);

cout << "\t\t姓名:";

cin >> s.stuName;

cout << "\t\t性别:";

cin >> s.gender;

cout << "\t\t年级:";

cin >> s.gradeNum;

cout<<"\t\t专业:";

cin >> s.department;

cout<<"\t\t班级:";

cin >> s.classNum;

s.score = 0;

string option = "1";

cout<<"\t\t是否添加成绩信息?(1 是 0 否)"<<endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

if(option == "1")

{

int cnt = 0;

while(option == "1")

{

cnt++;

Subject cp;

cout<<"\t\t第"<<cnt<<"科科目名称:";

cin>>cp.proName;

cout<<"\t\t第"<<cnt<<"科科目成绩:";

cin>>cp.proScore;

s.cps.push_back(cp);

cout << "\t\t该科成绩信息添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

}

}

for(int i = 0; i < s.cps.size(); i++)

{

s.score += s.cps[i].proScore;

}

if(s.cps.size() > 0) s.score /= s.cps.size(); //计算平均分

s.cpNum = s.cps.size();

stuList.push_back(s);

writeFile();

cout << "\n\t\t该名学生信息添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> flag;

while(flag != "0" && flag != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> flag;

}

}

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

效果如下

删除学生信息

<code>void deleteList()

{

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")

{

string keyNum;

bool flag = false;

cout << "\t\t请输入待删除学生的学号:";

cin >> keyNum;

for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)

{

if (it->stuNum == keyNum)

{

flag = true;

cout << "\t\t待删除学生的信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

it->showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout << "\t\t确认删除?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList.erase(it);

writeFile();

cout << "\t\t删除成功!" << endl;

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法删除!\n" << endl;

cout << "\t\t";

system("pause");

}

else if (sel == "2")

{

string keyName;

bool flag = false;

cout << "\t\t请输入待删除学生的姓名:";

cin >> keyName;

for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)

{

if (it->stuName == keyName)

{

flag = true;

cout << "\t\t待删除学生的信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

it->showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout << "\t\t确认删除?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList.erase(it);

writeFile();

cout << "\t\t删除成功!" << endl;

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法删除!\n" << endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

效果如下

修改学生信息

<code>void updateList()

{

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")

{

bool flag = false;

string keyNum;

cout << "\t\t请输入待修改学生的学号:";

cin >> keyNum;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout << "\t\t待修改学生基本信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

Student s = stuList[i];

cout << "\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该学号已被录入,请重新输入学号:";

check = true;

break;

}

}

}

while(check);

cout << "\t\t请输入修改后的姓名:";

cin >> s.stuName;

cout << "\t\t请输入修改后的性别:";

cin >> s.gender;

cout << "\t\t请输入修改后的年级:";

cin >> s.gradeNum;

cout<<"\t\t请输入修改后的专业:";

cin >> s.department;

cout<<"\t\t请输入修改后的班级:";

cin >> s.classNum;

cout << "\t\t是否确认修改?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList[i] = s;

cout << "\t\t修改成功!" << endl;

writeFile();

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法修改!\n" << endl;

}

else if(sel == "2")

{

bool flag = false;

string keyNum;

cout << "\t\t请输入待修改学生的学号:";

cin >> keyNum;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout << "\t\t待修改学生成绩信息如下:" << endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

Student s = stuList[i];

cout << "\t\t请选择修改方式:"<<endl;

string option = "1";

cout << "\t\t-------------------------------" << endl;

cout << "\t\t1 基于该学生原有成绩信息进行修改" << endl;

cout << "\t\t2 清空该学生所有科目及成绩信息" << endl;

cout << "\t\t-------------------------------" << endl;

cout << "\t\t请进行选择【1-2】:";

cin >> option;

while(option != "1" && option != "2")

{

cout << "\t\t输入不合法,请重新选择【1-2】:";

cin >> option;

}

Subject cp;

if(option == "1")

{

s.cps.clear();

s.score = 0;

s.cpNum = 0;

cout<<"\t\t输入修改后的学科成绩信息:"<<endl;

int cnt = 0;

while(option == "1")

{

cnt++;

cout<<"\t\t第"<<cnt<<"科科目名称:";

cin>>cp.proName;

cout<<"\t\t第"<<cnt<<"科科目成绩:";

cin>>cp.proScore;

s.cps.push_back(cp);

cout << "\n\t\t添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

}

}

else if(option == "2")

{

s.cps.clear();

s.score = 0;

s.cpNum = 0;

}

//计算平均分

for(int i = 0; i < s.cps.size(); i++)

{

s.score += s.cps[i].proScore;

}

if(s.cps.size() > 0) s.cpNum = s.cps.size();

cout << "\t\t是否确认修改?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList[i] = s;

cout << "\t\t修改成功!" << endl;

writeFile();

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法修改!\n" << endl;

}

else

{

break;

}

cout << "\t\t";

system("pause");

}

}

效果如下

 

显示信息列表

<code>void selectList()

{

while (true)

{

system("cls");

cout << "\t\t***********************欢迎来到查询学生信息功能************************" << endl;

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】:";

string sel = "0";

cin >> sel;

while(sel != "1" && sel != "2" && sel != "3")

{

cout << "\t\t输入不合法,请重新选择【1-3】:";

cin >> sel;

}

if (sel == "1")

{

string keyNum;

bool flag = false;

cout << "\t\t请输入待查询学生的学号:";

cin >> keyNum;

cout << "\t\t查询结果如下:" << endl;

cout<<"\t\t基本信息:"<<endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<endl;

cout<<"\t\t"<<stuList[i].stuName<<"成绩信息:"<<endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

break;

}

}

if (!flag) cout << "\t\t查无此人!\n" << endl;

cout << "\t\t";

system("pause");

}

else if (sel == "2")

{

string keyName;

bool flag = false;

cout << "\t\t请输入待查询联系人的姓名:";

cin >> keyName;

cout << "\t\t查询结果如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuName == keyName)

{

flag = true;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<endl;

cout<<"\t\t"<<stuList[i].stuName<<"成绩信息:"<<endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

break;

}

}

if (!flag) cout << "\t\t查无此人!\n" << endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

//遍历学生列表

void displayStu()

{

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 displayCp()

{

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(12) << "学号";

cout << left << setw(10) << "姓名";

Subject::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout << "\t\t";

cout << left << setw(12) << stuList[i].stuNum;

cout << left << setw(10) << stuList[i].stuName;

stuList[i].cps[j].showCpInfo();

}

}

cout << "\t\t-----------------------------------------------------------------------" << endl;

}

显示学生列表

void displayList()

{

system("cls");

cout << "\t\t***********************欢迎来到显示信息列表功能************************" << endl;

cout << "\t\t表1:学生基本信息一览表"<<endl;

this->displayStu();

cout << "\n\t\t表2:学生成绩信息一览表"<<endl;

this->displayCp();

cout << "\t\t";

system("pause");

}

 效果如下

将学生列表按学号升序排列

<code>static bool cmpNum(const Student& s1,const Student& s2)

{

return s1.stuNum < s2.stuNum;

}

将学生列表按平均分降序排列,平均分相同的再按学号升序排列

static bool cmpscore(const Student& s1,const Student& s2)

{

if(s1.stuNum != s2.stuNum) return s1.score > s2.score;

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->displayStu();

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(), cmpscore);

cout<<"\t\t按平均分降序排列如下:"<<endl;

this->displayStu();

vector<int> z(10);

double totalscore = 0;

for(int i = 0; i < stuList.size(); ++i)

{

totalscore += stuList[i].score;

if(0 <= stuList[i].score && stuList[i].score < 60) z[0]++;

else if(60 <= stuList[i].score && stuList[i].score < 70) z[1]++;

else if(70 <= stuList[i].score && stuList[i].score < 80) z[2]++;

else if(80 <= stuList[i].score && stuList[i].score < 90) z[3]++;

else z[4]++;

}

cout<<"\t\tscore < 60 -------------- " << z[0] << " 人" << endl;

cout<<"\t\t60 <= score < 70 --------- " << z[1] << " 人" << endl;

cout<<"\t\t70 <= score < 80 --------- " << z[2] << " 人" << endl;

cout<<"\t\t80 <= score < 90 --------- " << z[3] << " 人" << endl;

cout<<"\t\tscore >= 90 ------------- " << z[4] << " 人" << endl;

cout<<"\t\t所有学生平均分为:"<<totalscore / stuList.size()<<endl;

cout<<"\t\t"<<stuList.back().gradeNum<<"级"<<stuList.back().department<<stuList.back().classNum<<"班---";

cout<<stuList.back().stuName<<"平均分最低,为:"<<stuList.back().score<<"分"<<endl;

cout<<"\t\t"<<stuList.front().gradeNum<<"级"<<stuList.front().department<<stuList.front().classNum<<"班---";

cout<<stuList.front().stuName<<"平均分最高,为:"<<stuList.front().score<<"分"<<endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

效果如下

清空系统数据

<code>void clearList()

{

while (true)

{

string sel = "0";

system("cls");

cout << "\t\t**************欢迎来到清空系统数据功能***************" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t1 确认清空系统数据" << endl;

cout << "\t\t2 返回主菜单" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t请慎重选择【1-2】:";

cin >> sel;

while(sel != "1" && sel != "2")

{

cout << "\t\t输入不合法,请重新输入【1-2】:";

cin >> sel;

}

if (sel == "1")

{

stuList.clear();

cout << "\t\t清空成功!" << endl;

cout << "\t\t";

system("pause");

writeFile();

}

else

{

break;

}

}

}

};

效果如下

5.总结

实现亮点:

界面简洁、每次操作完一个功能可进行一次清屏操作,仅保留功能提示文字;

排序功能实现了多种排序方式:单科排序以及总成绩排序

统计功能实现了平均分、及格人数、标准差等数据的统计

输出新文件时可以新建文件名,保存路径,输出文件同时统计数据:包括总分平均分、及格人数、标准差等;

读入文件允许输入文件路径进行读取;

不足之处:

代码实现中有些变量显得多余,部分变量命名与其功能不太匹配;

如需完整代码请给我一个一键三连,并评论:学生管理系统!我会根据大家情况发送完整代码

算了,还是发给大家吧,记得给个三连哈

<code>#include <iostream>

#include <fstream>

#include <vector>

#include <algorithm>

#include <string>

#include <iomanip>

using namespace std;

//学科科目类

class Subject

{

public:

string proName; //学科名

double proScore; //分数

void showCpInfo()

{

cout << left << setw(45) << proName;

cout << left << setw(6) << proScore << endl;

}

//输出属性名,只显示总积分

static void showHeader()

{

cout << left << setw(45) << "科目";

cout << left << setw(6) << "分数" <<endl;

}

};

//学生类

class Student

{

public:

string stuNum; //学号

string stuName; //姓名

string gender; //性别

int gradeNum; //年级

string department; //专业

int classNum; //班级

vector<Subject> cps; //学生的各个科目

int cpNum; //科目门数

double score; //平均分

Student()

{

}

Student(string stuNum, string stuName, string gender, int gradeNum, string department, int classNum,vector<Subject> cps, int cpNum, double score)

{

this->stuNum = stuNum;

this->stuName = stuName;

this->gender = gender;

this->gradeNum = gradeNum;

this->department = department;

this->classNum = classNum;

this->cps = cps;

this->cpNum = cpNum;

this->score = score;

}

~Student()

{

}

//输出属性值 score是平均分

void showStuInfo()

{

cout << left << setw(12) << stuNum;

cout << left << setw(10) << stuName;

cout << left << setw(6) << gender;

cout << left << setw(8) << gradeNum;

cout << left << setw(23) << department;

cout << left << setw(6) << classNum;

cout << left << setw(6) << score << endl;

}

//输出属性名

static void showHeader()

{

cout << left << setw(12) << "学号";

cout << left << setw(10) << "姓名";

cout << left << setw(6) << "性别";

cout << left << setw(8) << "年级";

cout << left << setw(23) << "专业";

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();

this->menu();

}

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);

}

}

//读取文件

void readFile()

{

ifstream ifs;

ifs.open("stuList.txt", ios::in);

int n = 0; //用来接收学生数量的值

ifs >> n;

for(int i = 0; i < n; i++)

{

Student s;

ifs >> s.stuNum >> s.stuName >> s.gender >> s.gradeNum >> s.department >> s.classNum >> s.cpNum >> s.score;

for(int j = 0; j < s.cpNum; j++)

{

Subject cp;

ifs >> cp.proName >> cp.proScore;

s.cps.push_back(cp);

}

stuList.push_back(s);

}

ifs.close();

}

//写入文件

void writeFile()

{

ofstream ofs;

ofs.open("stuList.txt", ios::out);

ofs << stuList.size() << endl; //先写入学生数量

for (int i = 0; i < stuList.size(); i++)

{

ofs << stuList[i].stuNum << " " << stuList[i].stuName << " " << stuList[i].gender

<< " " << stuList[i].gradeNum << " " << stuList[i].department << " " << stuList[i].classNum

<< " " << stuList[i].cpNum << " " << stuList[i].score << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

ofs << stuList[i].cps[j].proName << " " << stuList[i].cps[j].proScore << endl;

}

}

ofs.close();

}

//添加学生信息

void insertList()

{

while(true)

{

system("cls");

cout << "\t\t**********************欢迎来到添加学生信息功能*************************" << endl;

cout<< "\t\t学生基本信息一览表:"<<endl;

displayStu();

cout<<endl;

cout << "\t\t------------------" << endl;

cout << "\t\t1 添加学生信息" << endl;

cout << "\t\t2 返回主菜单" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t请选择【1-2】:";

string sel;

cin >> sel;

while(sel != "1" && sel != "2")

{

cout << "\t\t输入不合法,请重新输入【1-2】:";

cin >> sel;

}

if(sel == "1")

{

string flag = "1";

while (flag == "1")

{

cout << "\t\t输入学生信息:"<<endl;

cout << "\t\t学号:";

Student s;

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该学号已存在,请重新输入:";

check = true;

break;

}

}

}

while(check);

cout << "\t\t姓名:";

cin >> s.stuName;

cout << "\t\t性别:";

cin >> s.gender;

cout << "\t\t年级:";

cin >> s.gradeNum;

cout<<"\t\t专业:";

cin >> s.department;

cout<<"\t\t班级:";

cin >> s.classNum;

s.score = 0;

string option = "1";

cout<<"\t\t是否添加成绩信息?(1 是 0 否)"<<endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

if(option == "1")

{

int cnt = 0;

while(option == "1")

{

cnt++;

Subject cp;

cout<<"\t\t第"<<cnt<<"科科目名称:";

cin>>cp.proName;

cout<<"\t\t第"<<cnt<<"科科目成绩:";

cin>>cp.proScore;

s.cps.push_back(cp);

cout << "\t\t该科成绩信息添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

}

}

for(int i = 0; i < s.cps.size(); i++)

{

s.score += s.cps[i].proScore;

}

if(s.cps.size() > 0) s.score /= s.cps.size(); //计算平均分

s.cpNum = s.cps.size();

stuList.push_back(s);

writeFile();

cout << "\n\t\t该名学生信息添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> flag;

while(flag != "0" && flag != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> flag;

}

}

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

//删除学生信息

void deleteList()

{

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")

{

string keyNum;

bool flag = false;

cout << "\t\t请输入待删除学生的学号:";

cin >> keyNum;

for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)

{

if (it->stuNum == keyNum)

{

flag = true;

cout << "\t\t待删除学生的信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

it->showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout << "\t\t确认删除?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList.erase(it);

writeFile();

cout << "\t\t删除成功!" << endl;

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法删除!\n" << endl;

cout << "\t\t";

system("pause");

}

else if (sel == "2")

{

string keyName;

bool flag = false;

cout << "\t\t请输入待删除学生的姓名:";

cin >> keyName;

for (vector<Student>::iterator it = stuList.begin(); it != stuList.end(); ++it)

{

if (it->stuName == keyName)

{

flag = true;

cout << "\t\t待删除学生的信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

it->showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout << "\t\t确认删除?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList.erase(it);

writeFile();

cout << "\t\t删除成功!" << endl;

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法删除!\n" << endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

//修改学生信息

void updateList()

{

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")

{

bool flag = false;

string keyNum;

cout << "\t\t请输入待修改学生的学号:";

cin >> keyNum;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout << "\t\t待修改学生基本信息如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

Student s = stuList[i];

cout << "\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该学号已被录入,请重新输入学号:";

check = true;

break;

}

}

}

while(check);

cout << "\t\t请输入修改后的姓名:";

cin >> s.stuName;

cout << "\t\t请输入修改后的性别:";

cin >> s.gender;

cout << "\t\t请输入修改后的年级:";

cin >> s.gradeNum;

cout<<"\t\t请输入修改后的专业:";

cin >> s.department;

cout<<"\t\t请输入修改后的班级:";

cin >> s.classNum;

cout << "\t\t是否确认修改?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList[i] = s;

cout << "\t\t修改成功!" << endl;

writeFile();

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法修改!\n" << endl;

}

else if(sel == "2")

{

bool flag = false;

string keyNum;

cout << "\t\t请输入待修改学生的学号:";

cin >> keyNum;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout << "\t\t待修改学生成绩信息如下:" << endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

Student s = stuList[i];

cout << "\t\t请选择修改方式:"<<endl;

string option = "1";

cout << "\t\t-------------------------------" << endl;

cout << "\t\t1 基于该学生原有成绩信息进行修改" << endl;

cout << "\t\t2 清空该学生所有科目及成绩信息" << endl;

cout << "\t\t-------------------------------" << endl;

cout << "\t\t请进行选择【1-2】:";

cin >> option;

while(option != "1" && option != "2")

{

cout << "\t\t输入不合法,请重新选择【1-2】:";

cin >> option;

}

Subject cp;

if(option == "1")

{

s.cps.clear();

s.score = 0;

s.cpNum = 0;

cout<<"\t\t输入修改后的学科成绩信息:"<<endl;

int cnt = 0;

while(option == "1")

{

cnt++;

cout<<"\t\t第"<<cnt<<"科科目名称:";

cin>>cp.proName;

cout<<"\t\t第"<<cnt<<"科科目成绩:";

cin>>cp.proScore;

s.cps.push_back(cp);

cout << "\n\t\t添加成功!是否继续添加?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

cin >> option;

while(option != "0" && option != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> option;

}

}

}

else if(option == "2")

{

s.cps.clear();

s.score = 0;

s.cpNum = 0;

}

//计算平均分

for(int i = 0; i < s.cps.size(); i++)

{

s.score += s.cps[i].proScore;

}

if(s.cps.size() > 0) s.cpNum = s.cps.size();

cout << "\t\t是否确认修改?(1 是 0 否)" << endl;

cout << "\t\t请进行选择【0-1】:";

string ch = "0";

cin >> ch;

while(ch != "0" && ch != "1")

{

cout << "\t\t输入不合法,请重新选择【0-1】:";

cin >> ch;

}

if (ch == "0") break;

else

{

stuList[i] = s;

cout << "\t\t修改成功!" << endl;

writeFile();

break;

}

}

}

if (!flag) cout << "\t\t查无此人,无法修改!\n" << endl;

}

else

{

break;

}

cout << "\t\t";

system("pause");

}

}

//查询学生信息

void selectList()

{

while (true)

{

system("cls");

cout << "\t\t***********************欢迎来到查询学生信息功能************************" << endl;

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】:";

string sel = "0";

cin >> sel;

while(sel != "1" && sel != "2" && sel != "3")

{

cout << "\t\t输入不合法,请重新选择【1-3】:";

cin >> sel;

}

if (sel == "1")

{

string keyNum;

bool flag = false;

cout << "\t\t请输入待查询学生的学号:";

cin >> keyNum;

cout << "\t\t查询结果如下:" << endl;

cout<<"\t\t基本信息:"<<endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuNum == keyNum)

{

flag = true;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<endl;

cout<<"\t\t"<<stuList[i].stuName<<"成绩信息:"<<endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

break;

}

}

if (!flag) cout << "\t\t查无此人!\n" << endl;

cout << "\t\t";

system("pause");

}

else if (sel == "2")

{

string keyName;

bool flag = false;

cout << "\t\t请输入待查询联系人的姓名:";

cin >> keyName;

cout << "\t\t查询结果如下:" << endl;

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

Student::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

if (stuList[i].stuName == keyName)

{

flag = true;

cout<<"\t\t";

stuList[i].showStuInfo();

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<endl;

cout<<"\t\t"<<stuList[i].stuName<<"成绩信息:"<<endl;

cout << "\t\t----------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(8) << "编号";

Subject::showHeader();

cout << "\t\t----------------------------------------------------------" << endl;

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout<<"\t\t";

cout << left << setw(8) << j + 1;

stuList[i].cps[j].showCpInfo();

}

cout << "\t\t----------------------------------------------------------" << endl;

break;

}

}

if (!flag) cout << "\t\t查无此人!\n" << endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

//遍历学生列表

void displayStu()

{

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 displayCp()

{

cout << "\t\t-----------------------------------------------------------------------" << endl;

cout<<"\t\t";

cout << left << setw(12) << "学号";

cout << left << setw(10) << "姓名";

Subject::showHeader();

cout << "\t\t-----------------------------------------------------------------------" << endl;

for (int i = 0; i < stuList.size(); i++)

{

for(int j = 0; j < stuList[i].cps.size(); j++)

{

cout << "\t\t";

cout << left << setw(12) << stuList[i].stuNum;

cout << left << setw(10) << stuList[i].stuName;

stuList[i].cps[j].showCpInfo();

}

}

cout << "\t\t-----------------------------------------------------------------------" << endl;

}

//显示信息列表

void displayList()

{

system("cls");

cout << "\t\t***********************欢迎来到显示信息列表功能************************" << endl;

cout << "\t\t表1:学生基本信息一览表"<<endl;

this->displayStu();

cout << "\n\t\t表2:学生成绩信息一览表"<<endl;

this->displayCp();

cout << "\t\t";

system("pause");

}

//将学生列表按学号升序排列

static bool cmpNum(const Student& s1,const Student& s2)

{

return s1.stuNum < s2.stuNum;

}

//将学生列表按平均分降序排列,平均分相同的再按学号升序排列

static bool cmpscore(const Student& s1,const Student& s2)

{

if(s1.stuNum != s2.stuNum) return s1.score > s2.score;

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->displayStu();

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(), cmpscore);

cout<<"\t\t按平均分降序排列如下:"<<endl;

this->displayStu();

vector<int> z(10);

double totalscore = 0;

for(int i = 0; i < stuList.size(); ++i)

{

totalscore += stuList[i].score;

if(0 <= stuList[i].score && stuList[i].score < 60) z[0]++;

else if(60 <= stuList[i].score && stuList[i].score < 70) z[1]++;

else if(70 <= stuList[i].score && stuList[i].score < 80) z[2]++;

else if(80 <= stuList[i].score && stuList[i].score < 90) z[3]++;

else z[4]++;

}

cout<<"\t\tscore < 60 -------------- " << z[0] << " 人" << endl;

cout<<"\t\t60 <= score < 70 --------- " << z[1] << " 人" << endl;

cout<<"\t\t70 <= score < 80 --------- " << z[2] << " 人" << endl;

cout<<"\t\t80 <= score < 90 --------- " << z[3] << " 人" << endl;

cout<<"\t\tscore >= 90 ------------- " << z[4] << " 人" << endl;

cout<<"\t\t所有学生平均分为:"<<totalscore / stuList.size()<<endl;

cout<<"\t\t"<<stuList.back().gradeNum<<"级"<<stuList.back().department<<stuList.back().classNum<<"班---";

cout<<stuList.back().stuName<<"平均分最低,为:"<<stuList.back().score<<"分"<<endl;

cout<<"\t\t"<<stuList.front().gradeNum<<"级"<<stuList.front().department<<stuList.front().classNum<<"班---";

cout<<stuList.front().stuName<<"平均分最高,为:"<<stuList.front().score<<"分"<<endl;

cout << "\t\t";

system("pause");

}

else

{

break;

}

}

}

//清空系统数据

void clearList()

{

while (true)

{

string sel = "0";

system("cls");

cout << "\t\t**************欢迎来到清空系统数据功能***************" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t1 确认清空系统数据" << endl;

cout << "\t\t2 返回主菜单" << endl;

cout << "\t\t------------------" << endl;

cout << "\t\t请慎重选择【1-2】:";

cin >> sel;

while(sel != "1" && sel != "2")

{

cout << "\t\t输入不合法,请重新输入【1-2】:";

cin >> sel;

}

if (sel == "1")

{

stuList.clear();

cout << "\t\t清空成功!" << endl;

cout << "\t\t";

system("pause");

writeFile();

}

else

{

break;

}

}

}

};

int main()

{

StudentList stuList;

stuList.init(); //读入文件数据初始化

stuList.menu(); //打开主菜单

return 0;

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。