看到网上大部分的C++学生管理系统都是用类写的,对于萌新而言,可能还没学到那里,所以我做了一版结构体形式的学生管理系统,基本该有得要素都有了(保存为txt,统计之类得功能),此程序主要用来交流学习,水平有限,如有错误的地方还请指正。
重要的地方都打了注释,不懂得可以问我。
#include<iostream>
#include<fstream>
#include<string>
#define Max 1000
#define sortname "sort.txt"
#define failname "fail.txt"
using namespace std;
//设计学生信息结构体
struct person {
//姓名
string m_Name;
//学号
string m_IDnumber;
//成绩
float m_Scores;
//电话
string m_Phone;
//籍贯
string m_Hometown;
//住址
string m_Address;
};
//设计管理系统结构体
struct Managesystem {
//管理系统的学生数组
struct person personArray[Max];
//管理系统当前录入学生个数
int m_Size;
};
//保存文件
//1.添加学生信息
void addperson(Managesystem * abs) {
//判断系统是否已满,如果满了就不再添加
if (abs->m_Size == Max) {
cout << "信息数量已满,无法添加!" << endl;
return;
}
else {
//添加学生信息
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name = name;
//学号
string IDnumber;
cout << "请输入学号:" << endl;
cin >> IDnumber;
abs->personArray[abs->m_Size].m_IDnumber = IDnumber;
//成绩
float scores;
cout << "请输入成绩:" << endl;
cin >> scores;
abs->personArray[abs->m_Size].m_Scores = scores;
//电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
abs->personArray[abs->m_Size].m_Phone = phone;
//籍贯
string hometown;
cout << "请输入籍贯:" << endl;
cin >> hometown;
abs->personArray[abs->m_Size].m_Hometown = hometown;
//住址
string address;
cout << "请输入住址:" << endl;
cin >> address;
abs->personArray[abs->m_Size].m_Address = address;
//更新学生系统人数
abs->m_Size++;
cout << "添加成功!" << endl;
system("pause");//请按任意键继续
system("cls");//清屏
}
}
//2.显示学生信息
void showperson(Managesystem * abs) {
//判断系统内存入信息数量是否为0,如果为0,提示记录为空
//如果不为0,显示记录的学生信息
if (abs->m_Size == 0) {
cout << "当前记录为空" << endl;
}
else {
for (int i = 0; i < abs->m_Size; i++) {
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "学号:" << abs->personArray[i].m_IDnumber << "\t";
cout << "成绩:" << abs->personArray[i].m_Scores << "\t";
cout << "电话:" << abs->personArray[i].m_Phone << "\t";
cout << "籍贯:" << abs->personArray[i].m_Hometown << "\t";
cout << "住址:" << abs->personArray[i].m_Address<< endl;
}
}
system("pause");//按任意键继续
system("cls");//清屏
}
//检测学生是否存在
int isExist(Managesystem * abs,string IDnumber) {
for (int i = 0; i < abs->m_Size; i++) {
//找到用户输入的学号了
if (abs->personArray[i].m_IDnumber == IDnumber)
return i;//找到了,返回这个人在数组中的下标编号
}
return -1;//如果没找到,返回-1
}
//3.删除学生信息
void deletePerson(Managesystem * abs) {
cout << "请输入您要删除的学生学号" << endl;
string IDnumber;
cin >> IDnumber;
int ret = isExist(abs, IDnumber);
if (ret != -1) {
//查找到人,进行删除操作
for (int i = ret; i < abs->m_Size; i++) {
//数据前移
abs->personArray[i] = abs->personArray[i + 1];
}
abs->m_Size--;//更新系统中的人数
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
}
}
//4.查找学生信息
void foundPerson(Managesystem * abs) {
cout << "请输入您要查找的学生学号" << endl;
string IDnumber;
cin >> IDnumber;
//判断指定学生信息是否存在
int ret = isExist(abs, IDnumber);
if (ret != -1) //找到学生
{//找到学生并输出
cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
cout << "学号:" << abs->personArray[ret].m_IDnumber << "\t";
cout << "成绩:" << abs->personArray[ret].m_Scores << "\t";
cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
cout << "籍贯:" << abs->personArray[ret].m_Hometown << "\t";
cout << "住址:" << abs->personArray[ret].m_Address << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");//按任意键继续
system("cls");//清屏
}
//5.修改学生信息
void modifyPerson(Managesystem * abs) {
cout << "请输入您要修改的学生学号" << endl;
string IDnumber;
cin >> IDnumber;
int ret = isExist(abs, IDnumber);
if (ret != -1) {//找到学生信息
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
//学号
string IDnumber;
cout << "请输入学号:" << endl;
cin >> IDnumber;
abs->personArray[ret].m_IDnumber = IDnumber;
//成绩
float scores;
cout << "请输入成绩:" << endl;
cin >> scores;
abs->personArray[ret].m_Scores = scores;
//电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
//籍贯
string hometown;
cout << "请输入籍贯:" << endl;
cin >> hometown;
abs->personArray[ret].m_Hometown = hometown;
//住址
string address;
cout << "请输入住址:" << endl;
cin >> address;
abs->personArray[ret].m_Address = address;
}
else {
cout << "查无此人" << endl;
}
system("pause");//按任意键继续
system("cls");//清屏
}
//6.清空学生信息
void cleanPerson(Managesystem * abs) {
cout << "请确认是否删除全部数据!" << endl;
cout << "1----是" << endl;
cout << "2----否" << endl;
int clean = 0;
cin >> clean;
if (clean == 1) {
abs->m_Size = 0;//将系统里的学生信息清0,做逻辑清空操作
cout << "您成功删除了全部数据!" << endl;
}
else {
cout << "您取消了删除操作!" << endl;
}
system("pause");//按任意键继续
system("cls");//清屏
}
//7.学生成绩排序
void sort_grade(Managesystem * abs) {
if (abs->m_Size == 0) {
cout << "当前记录为空" << endl;
}
else {
cout << "请选择排序方式" << endl;
cout << "1----升序排列" << endl;
cout << "2----降序排列" << endl;
int select = 0;
cin >> select;
for (int i = 0; i < abs->m_Size; i++) {
int minOrMax = i; //定义一个函数minOrMax,让它等于i
for (int j = i + 1; j < abs->m_Size; j++) {
if (select == 1) {
if (abs->personArray[minOrMax].m_Scores > abs->personArray[j].m_Scores) {
minOrMax = j;//如果p...中的第min...数组中的m_...大于p...中的第j数组中的m_...则min...=j
}
}
else {
if (abs->personArray[minOrMax].m_Scores < abs->personArray[j].m_Scores) {
minOrMax = j;//同上,变成小于
}
}
}
if (i != minOrMax) {//这里进行一个置换操作
struct person personArray = abs->personArray[i];
abs->personArray[i] = abs->personArray[minOrMax];
abs->personArray[minOrMax] = personArray;
}
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "学号:" << abs->personArray[i].m_IDnumber << "\t";
cout << "成绩:" << abs->personArray[i].m_Scores << endl;
ofstream ofs;//写入文件,和上面代码一样,再写一遍,以输入txt文档中
ofs.open(sortname, ios::out);
for (int i = 0; i < abs->m_Size; i++) {
int minOrMax = i;
for (int j = i + 1; j < abs->m_Size; j++) {
if (select == 1) {
if (abs->personArray[minOrMax].m_Scores > abs->personArray[j].m_Scores) {
minOrMax = j;
}
}
else {
if (abs->personArray[minOrMax].m_Scores < abs->personArray[j].m_Scores) {
minOrMax = j;
}
}
}
if (i != minOrMax) {
struct person personArray = abs->personArray[i];
abs->personArray[i] = abs->personArray[minOrMax];
abs->personArray[minOrMax] = personArray;
}
ofs << "姓名:" << abs->personArray[i].m_Name << " "
<< "学号:" << abs->personArray[i].m_IDnumber << " "
<< "成绩:" << abs->personArray[i].m_Scores << endl;
}
ofs.close();//关闭文件
}
system("pause");//请按任意键继续
system("cls");//清屏
}
}
//8.挂科学生统计
void d_grade(Managesystem * abs) {
if (abs->m_Size == 0) {
cout << "当前记录为空" << endl;
}
else {
ofstream ofw;//写入txt固定命令
ofw.open(failname, ios::out);
int guake = 60; //定义一个函数guake,60以上及格,60以下不及格
for (int i = 0; i < abs->m_Size; i++) {
if (abs->personArray[i].m_Scores < guake) {
cout << "该同学的成绩不及格!" << "\t";
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "学号:" << abs->personArray[i].m_IDnumber << "\t";
cout << "分数:" << abs->personArray[i].m_Scores << endl;
for (int j = 0; j < abs->m_Size; j++) {//写入文件,和上面操作一样,再写一遍,以输入txt文档中
if (abs->personArray[j].m_Scores < guake) {
ofw << "该同学的成绩不及格!" << " "
<< "姓名:" << abs->personArray[j].m_Name << " "
<< "学号:" << abs->personArray[j].m_IDnumber << " "
<< "分数:" << abs->personArray[j].m_Scores << endl;
}
}
}
ofw.close();//关闭文件
}
}
system("pause");//请按任意键继续
system("cls");//清屏
}
//9.平均分与总分
void calculation_grade(Managesystem* abs) {
if (abs->m_Size == 0) {
cout << "当前记录为空" << endl;
}
else {
cout << "请选择分数查看方式" << endl;
cout << "1----总分与平均分" << endl;
cout << "2----最高分与最低分同学" << endl;
int calc = 0;
cin >> calc;
float sum = 0;//定义一个函数sum等于0
float pum;
//递增算法
if (calc == 1) {
for (int i = 0; i < abs->m_Size; i++) {
sum += abs->personArray[i].m_Scores;
sum++;
}
pum = sum - abs->m_Size;
cout << "系统中学生的数量为:" << abs->m_Size << endl;
cout << "系统中学生的总成绩为:" << sum - abs->m_Size << endl;
cout << "系统中学生的平均成绩为:" << pum / abs->m_Size << endl;
}
else {
float max = 0;//定义一个最大值
float min = 100;//定义一个最小值
int maxx = 0;
int minn = 0;
//检测数组中的元素,比上一个大就覆盖
for (int i = 0; i < abs->m_Size; i++) {
if (abs->personArray[i].m_Scores > max) {
max = abs->personArray[i].m_Scores;
maxx = i;
}
}
//检测数组中的元素,比上一个小就覆盖
for (int i = 0; i < abs->m_Size; i++) {
if (abs->personArray[i].m_Scores < min) {
min = abs->personArray[i].m_Scores;
minn = i;
}
}
cout << "姓名:" << abs->personArray[maxx].m_Name << "\t";
cout << "学号:" << abs->personArray[maxx].m_IDnumber << "\t";
cout << "最高分为:" << max << endl;
cout << "姓名:" << abs->personArray[minn].m_Name << "\t";
cout << "学号:" << abs->personArray[minn].m_IDnumber << "\t";
cout << "最低分为:" << min << endl;
}
system("pause");//请按任意键继续
system("cls");//清屏
}
}
//菜单界面
void showMenu() {
cout << "******************************" << endl;
cout << "****** 1.添加学生信息 ******" << endl;
cout << "****** 2.显示学生信息 ******" << endl;
cout << "****** 3.删除学生信息 ******" << endl;
cout << "****** 4.查找学生信息 ******" << endl;
cout << "****** 5.修改学生信息 ******" << endl;
cout << "****** 6.清空学生信息 ******" << endl;
cout << "****** 7.学生成绩排序 ******" << endl;
cout << "****** 8.挂科学生统计 ******" << endl;
cout << "****** 9.平均分与总分 ******" << endl;
cout << "****** 0.退出管理系统 ******" << endl;
cout << "******************************" << endl;
}
int main() {
//创建管理系统结构体变量
Managesystem abs;
//初始化管理系统中当前人员个数
abs.m_Size = 0;
int select = 0; //创建用户选择输入的变量
while (true) {
//菜单调用
showMenu();
cin >> select;
switch (select) {
case 1://添加学生信息
addperson(&abs);//地址传递
break;
case 2://显示学生信息
showperson(&abs);
break;
case 3://删除学生信息
deletePerson(&abs);
break;
case 4://查找学生信息
foundPerson(&abs);
break;
case 5://修改学生信息
modifyPerson(&abs);
break;
case 6://清空学生信息
cleanPerson(&abs);
break;
case 7://学生成绩排序
sort_grade(&abs);
break;
case 8://挂科学生统计
d_grade(&abs);
break;
case 9://平均分与总分
calculation_grade(&abs);
break;
case 0://退出管理系统
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
}