使用C/C++结构体制作的学生信息管理系统

看到网上大部分的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;
		}
	}
}

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生成绩管理系统 该系统可用于管理某高校的本科生、研究生2类人员信息,人员信息包括:编号、姓名、性别、出生日期、专业、班级、类别(区分2类人员标记)等,具体功能包括: ① 专业管理:包括专业基本信息的添加、修改、删除、查询功能。学生必须归属于某个专业。 班级管理:包括班级基本信息的添加、修改、删除、查询功能。学生必须归属于某个班级。 ② 添加功能:分本科生和研究生两类人员,实现下列添加功能。 A.本科生:能够添加学生信息,如果高数成绩、英语成绩、C语言成绩都输入,则系统自动计算总成绩。 B.研究生:能够添加学生信息,如果课程综合成绩、论文成绩都输入,则系统自动计算总成绩。 修改功能:分本科生和研究生两类人员,实现下列修改功能。 A.本科生:根据学号来修改任意学生的除学号外的信息。如果高数成绩、英语成绩、c语言成绩都存在,则系统自动计算总成绩。 B.研究生:根据学号来修改任意学生的除学号外的信息。如果课程综合成绩、论文成绩都存在,则系统自动计算总成绩 ③ 删除功能:分本科生和研究生两类人员,能够根据学号删除一个学生。 ④ 排名功能:分本科生和研究生两类人员,实现下列排名功能。 说明:排名包括班级排名和年级排名,排名规则按体育竞赛规则处理,若出现两个并列第1名,下个名次为第3名,依此类推。 A:班级排名:分本科生和研究生两类学生,计算每个学生总成绩在班级中的名次。 B:年级排名:分本科生和研究生两类学生,计算每个学生总成绩在本专业、本年级中的名次。 ⑤ 查询功能:分本科生和研究生两类人员,实现下列查询功能。 1) 能够按班级显示本班全部学生信息。 2) 能够根据学号或者姓名查询学生信息。 3) 能够在某个班级中查询某门课成绩不及格学生信息。 ⑥ 排序功能:分本科生和研究生两类人员,实现下列排序功能。 1) 所有学生信息按学号从低到高排序并显示。 2) 某个班学生信息按总成绩从高到低排序并显示。 ⑦ 统计功能:分本科生和研究生两类人员,实现下列统计与显示功能。 1) 统计某班级某课程的平均成绩、最高成绩、最低成绩。如果学生该门课没有成绩,统计平均成绩时忽略该生。 2) 统计某班级某课程超过课程平均成绩的学生名单及人数。 3) 统计某班级某课程不及格学生名单及人数。 统计某班级某课程不同等级的学生人数。等级标准:优—大于等于90;良—大于等于80且小于90;中:大于等于70且小于80;及格:大于等于60且小于70;不及格:小于60。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值