C++语法练习作业,包含对学生信息的添加、删除、修改、查询、显示、成绩统计功能。
#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;
}