【简单项目实战】用C++实现学生成绩管理系统

news2024/11/25 19:52:09


目录

●功能介绍

●案例

●代码展示

●结果展示 


●功能介绍

用 C++设计一个程序,能提供下列功能:

1. 录入学生成绩信息。按照学号,姓名,语文,数学,英语的格式录入学生的成绩。

2.展示目前录入学生的成绩信息。以学号,姓名,语文,数学,英语的格式按列表展示。

3.查询成绩。根据学生的学号或姓名查询学生的成绩。

4.修改。通过姓名查询找到相应的学生记录并对其进行修改。

5.统计。计算学生的总分并按顺序显示输出;统计班级学生的每门课程的平均分和全班人总分的平
均分并显示;统计个人总得分小于班级总分的学生并显示为不及格学生名单。

6.删除。删除指定学生成绩信息。

7.清空。清空学生表所有成绩信息。


●案例

1.录入10个学生的信息:

        ①1001 zhangsan 80 90 70

        ②1002 lisi  60 65 75

        ③1003 wangwu 75 85 100

        ④1004 zhaoliu 50 60 40

        ⑤1005 sunqi 70 85 95

2.展示已输入5个的学生成绩信息

3.用学号去查询zhaoliu的各科成绩

4.实现统计,查看学生成绩信息和不及格学生

5.对wangwu的语文成绩进行单科修改,修改为80(若要进行整体修改,按操作提示执行即可,这里只修改其语文成绩)

6.用姓名去查询wangwu的各科成绩

7.因为lisi的成绩录入错误,所以删除他的所有信息

8.展示目前剩余学生的成绩信息

9.操作完成清空学生成绩信息


●代码展示

#include <iostream>
#include <string>
#define max 100   //学生人数 
using namespace std;
struct person {
	string id;
	string name;
	int chinese;
	int math;
	int english;
};
struct student_information {
	struct person data[max];
	int size;
};
void addinformation(student_information* si)
{
	if (si->size == max)
	{
		cout << "学生信息表已满" << endl;
	}
	else
	{
		cout << "请输入学号:" << endl;
		string id;
		cin >> id;
		si->data[si->size].id = id;

		cout << "请输入姓名:" << endl;
		string name;
		cin >> name;
		si->data[si->size].name = name;

		cout << "请输入语文成绩:" << endl;
		int chinese;
		cin >> chinese;
		si->data[si->size].chinese = chinese;

		cout << "请输入数学成绩:" << endl;
		int math;
		cin >> math;
		si->data[si->size].math = math;

		cout << "请输入英语成绩:" << endl;
		int english;
		cin >> english;
		si->data[si->size].english = english;

		si->size++;
		cout << "<<添加成功>>" << endl;
		system("pause");
		system("cls");
	}
}
void showperson(student_information* si)
{
	if (si->size == 0) {
		cout << "当前数据为空!" << endl;
	}
	else {
		for (int i = 0; i < si->size; i++)
		{
			cout << "学号:" << si->data[i].id<<" "
				<< "姓名:" << si->data[i].name<<" "
				<< "语文成绩:" << si->data[i].chinese<<" "
				<< "数学成绩:" << si->data[i].math<<" "
				<< "英语成绩:" << si->data[i].english << endl;
		}
		system("pause");
		system("cls");
	}
}
int isexist(student_information* si, string id)
{
	for (int k = 0; k < si->size; k++)
	{
		if (si->data[k].id == id)
			return k;
	}
	return -1;
}
int isexist_1(student_information* si, string name)
{
	for (int k = 0; k < si->size; k++)
	{
		if (si->data[k].name == name)
			return k;
	}
	return -1;
}
void searchperson(student_information* si)
{
	cout << "请输入您要查找的学生:" << endl;
	cout << "如果按照学号查找输入1" << endl;
	cout << "如果按照姓名查找输入2" << endl;
	int n; cin >> n;
	string id, name;
	if (n == 1) {
		cin >> id;
		if (isexist(si, id) == -1) {
			cout << "此人不存在!" << endl;
		}
		else {
			cout << "此人存在!" << endl;
			int ret = isexist(si, id);
			{
				cout << "学号 " << si->data[ret].id << "\t";
				cout << "姓名 " << si->data[ret].name << "\t";
				cout << "语文成绩 " << si->data[ret].chinese << "\t";
				cout << "数学成绩 " << si->data[ret].math << "\t";
				cout << "英语成绩 " << si->data[ret].english << "\t";
			}
		}
	}
	else {
		cin >> name;
		if (isexist_1(si, name) == -1) {
			cout << "此人不存在!" << endl;
		}
		else {
			cout << "此人存在!" << endl;
			int ret_1 = isexist_1(si, name);
			{
				cout << "学号 " << si->data[ret_1].id << "\t";
				cout << "姓名 " << si->data[ret_1].name << "\t";
				cout << "语文成绩 " << si->data[ret_1].chinese << "\t";
				cout << "数学成绩 " << si->data[ret_1].math << "\t";
				cout << "英语成绩 " << si->data[ret_1].english << "\t";
			}
		}
	}
	system("pause");
	system("cls");
}
void alterperson(student_information* si)
{
	cout << "请输入您要修改的联系人:" << endl;
	string name;
	cin >> name;
	if (isexist_1(si, name) == -1)
	{
		cout << "此人不存在!" << endl;
	}
	else
	{
		cout << "此人存在!" << endl;
		int ret_2 = isexist_1(si,name);
		cout << "单一修改-0" << "多数修改-1" << endl;
		int sign; cin >> sign;
		{
			if (sign == 0)
			{
				cout << "学号-1" << "姓名-2" << "语文成绩-3" << "数学成绩-4" << "英语成绩-5" << endl;
				int select_1; cin >> select_1;
				if (select_1 == 1) {
					string id; cin >> id;
					si->data[ret_2].id = id;
				}
				if (select_1 == 2) {
					string name; cin >> name;
					si->data[ret_2].name = name;
				}
				if (select_1 == 3) {
					int chinese; cin >> chinese;
					si->data[ret_2].chinese = chinese;
				}
				if (select_1 == 4) {
					int math; cin >> math;
					si->data[ret_2].math = math;
				}
				if (select_1 == 5) {

					int english; cin >> english;
					si->data[ret_2].english = english;
				}
			}
		}
		if (sign == 1)
		{
			cout << "请输入学号:" << endl;
			string id; cin >> id;
			si->data[ret_2].id = id;
			cout << "请输入姓名:" << endl;
			string name; cin >> name;
			si->data[ret_2].name = name;
			cout << "请输入语文成绩:" << endl;
			int chinese; cin >> chinese;
			si->data[ret_2].chinese = chinese;
			cout << "请输入数学成绩:" << endl;
			int math; cin >> math;
			si->data[ret_2].math = math;
			cout << "请输入英语成绩:" << endl;
			int english; cin >> english;
			si->data[ret_2].english = english;
		}
	}
	cout << "信息修改成功!" << endl;
	system("pause");
	system("cls");
}
void staticperson(student_information* si)
{
	int allsum = 0;
	for (int i = 0; i < si->size; i++)
	{
		int sum = 0;
		sum = si->data[i].chinese + si->data[i].math + si->data[i].english;
		cout << "姓名:" << si->data[i].name << "语文:" << si->data[i].chinese << " " << "数学:" << si->data[i].math << " " << "英语:" << si->data[i].english << " " << "总分:" << sum << endl;
		allsum += sum;
	}
	int sum1 = 0, sum2 = 0, sum3 = 0;
	for (int i = 0; i < si->size; i++)
	{
		sum1 += si->data[i].chinese;
		sum2 += si->data[i].math;
		sum3 += si->data[i].english;
	}
	cout << "全班语文平均分:" << sum1 / si->size << endl;
	cout << "全班数学平均分:" << sum2 / si->size << endl;
	cout << "全班英语平均分:" << sum3 / si->size << endl;
	cout << "全班总分的平均分:" << allsum / si->size << endl;
	for (int i = 0; i < si->size; i++)
	{
		int sum = 0;
		sum = si->data[i].chinese + si->data[i].math + si->data[i].english;
		if (sum < allsum/si->size)
		{
			cout << "得分小于班级总分平均分的不及格学生:" << si->data[i].id << " " << si->data[i].name << endl;
		}
	}
	system("pause");
	system("cls");
}
void deleteperson(student_information* si)
{
	cout << "请输入您要删除的学生:" << endl;
	string name;
	cin >> name;
		if (isexist_1(si, name) == -1) {
			cout << "查无此人!" << endl;
		}
		else {
			cout << "找到此人!" << endl;
				int ret = isexist_1(si, name);
				for (int l = ret; l < si->size; l++)
				{
					si->data[l].id = si->data[l + 1].id;
					si->data[l].name = si->data[l + 1].name;
					si->data[l].chinese = si->data[l + 1].chinese;
					si->data[l].math = si->data[l + 1].math;
					si->data[l].english = si->data[l + 1].english;
				}//abs->arrar[l]=abs->array[l+1];
				si->size--;
				cout << "已删除此学生信息!" << endl;
		}
		system("pause");
		system("cls");
}
void emptyperson(student_information* si)
{
	si->size = 0;
	cout << "成绩表已清空!" << 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 << "*************************" << endl;
}
void text()
{
	student_information SI;
	SI.size = 0;
	while (1)
	{
		showmenu();
		int n; cin >> n;
		switch (n)
		{
		case 1:
			addinformation(&SI);
			break;
		case 2:
			showperson(&SI);
			break;
		case 3:
			searchperson(&SI);
			break;
		case 4:
			alterperson(&SI);
			break;
		case 5:
			staticperson(&SI);
			break;
		case 6:
			deleteperson(&SI);
			break;
		case 7:
			emptyperson(&SI);
			break;
		}
	}
}
int main()
{
	text();
}

●结果展示 

1.

 2.

3.

4.

 5.

6.

7.

8.

9.


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MeterSphere使用mock基础

目录 一、添加mock数据 1、进入页面添加 2、 添加单个mock 3、添加多个mock数据 二、运行mock 1、选择设置接口的TEST 2、选择mock环境 3、设置定义的mock参数运行 一、添加mock数据 1、进入页面添加 在接口定义页面&#xff0c;按下图1-2-3顺序添加 2、 添加单个mock…

[附源码]Nodejs计算机毕业设计基于JAVA人事管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

如何利用TL431设计一个可调电压源

TL431是一个三脚电压可控的稳压器件&#xff0c;常用的封装有TO-92&#xff0c;SOT-23&#xff0c;SOT-89&#xff0c;电路符号是这个&#xff0c; TL431常被用在参考电压/基准电压电路&#xff0c;用来替代稳压管 其中1脚是reference,2脚是Anode&#xff0c;3脚是Cathode TL4…

基于微信小程序的校园二手交易-计算机毕业设计

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园二手交易被用户普遍使用&#xff0c;为方便用户能…

最新版网络组件包:Rebex Total Pack for .NET

Rebex Total Pack for .NET 组件包&#xff1a; Rebex 的所有 .NET 组件都在一个包中&#xff1a;SFTP、FTP、HTTPS、IMAP、POP3、SMTP、EWS、SNTP/Time/Daytime、Mail、MSG、TLS、SSH Shell、Telnet、终端仿真、安全、Syslog、WebSocket、 ZIP 压缩&#xff0c;SFTP/SSH 服务…

Java之final相关内容详解【面试题】

1、final关键字除了修饰类之外&#xff0c;还有哪些用法呢&#xff1f; &#xff08;1&#xff09;final修饰的变量&#xff0c;一旦赋值&#xff0c;不可重新赋值&#xff1b; &#xff08;2&#xff09; 如果引用为引用数据类型&#xff0c;比如对象、数组&#xff0c;则该对…

生成模型(二):VAE

自动编码器的发明是为了重建高维数据&#xff08;这可能不是变异自动编码器的真实情况&#xff09;。一个很好的副产品是降维&#xff1a;瓶颈层捕获了一个压缩的潜在编码。这样的低维表示可以作为各种应用中的嵌入向量&#xff08;如搜索&#xff09;&#xff0c;帮助数据压缩…

计算机研究生就业方向之大厂销售(营销)

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

世界杯---人生就是一届又一届世界杯

注意&#xff1a;下面有视频看到文章会有声音&#xff0c;如果打扰到您非常抱歉&#xff0c;视频在文章最下面&#xff0c;还望观众老爷们不要在意&#xff0c;蟹蟹理解~ &#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &a…

OTP语音芯片是用什么软件来编程,以及如何烧录的?

目录 OTP语音芯片的开发环境&#xff1a; 也就是一般的客户想自己开发&#xff0c;基本不可能了&#xff0c;因为前期的培训成本、工具成本都是比较高的 OTP语音芯片的烧录方法&#xff1a; 第1步&#xff0c;是开发编译好程序之后&#xff0c;生成了对应的bin文件&#xf…

15、Redis集群

文章目录15、Redis集群15.1 问题15.2 什么是集群15.3 删除持久化数据15.4 制作6个实例15.4.1 配置基本信息15.4.2. redis cluster配置修改15.4.3. 修改好redis6379.conf文件&#xff0c;拷贝多个redis.conf文件15.4.4 使用查找替换修改另外5个文件15.4.5 启动6个redis服务15.5 …

MySQL innodb引擎架构分析- Double Write Buffer

文章目录系列文章目录前言一、Double Write Buffer是什么&#xff1f;二、Double Write Buffer步骤步骤对性能的影响总结系列文章目录 1. MySQL innodb引擎架构分析-Buffer Pool 2. MySQL innodb引擎架构分析-Redo log 3. MySQL innodb引擎架构分析- Double Write Buffer 前言…

java基于ssm+vue+elementUI实验报告管理系统

BS的实验报告管理系统是针对目前大学推广与交流的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的实验报告管理系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准…

鸡血篇:网络工程师为什么要学Python,如何学Python

两个多月之前写了一篇“送给打算考IE&#xff0c;正在学网络&#xff0c;纠结要不要转行学网络的你们”的文章&#xff0c;意外地收到了不少小伙伴的私信&#xff0c;大多咨询如何学习网络工程&#xff0c;以及什么方向的IE更有前景之类的问题。其实IE的话题我不想再多说&#…

Redis缓存一致性问题

目录 1、背景 2、缓存读写模式 2.1、Cache-Aside Pattern(旁路缓存模式) 2.2、Read-Through/Write-Through&#xff08;读写穿透模式&#xff09; 2.3、Write Behind Pattern(异步缓存写入) 3、数据不一致的几种场景 3.1、先删缓存&#xff0c;再更新数据库 3.2、先更新…

豆瓣评分9.1!据说入门Python的人都读过

前言 你是否正在寻找一本适合初学者入门Python的书籍呢&#xff1f; 如果是&#xff0c;那你来对地方了&#xff0c;以我个人经验&#xff0c;开始学习一门新的编程语言是相当困难和耗时的&#xff0c;这也是我今天要和大家分享这本书的原因&#xff0c;不卖关子了&#xff0…

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2051 矩阵01变2. MT2052 矩形3. MT2053 切蛋糕4. MT…

面试怕问到缓存穿透?看这篇就够了

面试怕问到缓存穿透&#xff1f;看这篇就够了&#xff01; 缓存穿透 缓存穿透指的是请求的数据在数据库和缓存中都不存在&#xff0c;这样缓存永远都不会生效&#xff0c;这些请求就会直接打到数据库中。 就比方说&#xff0c;你去查询一个商户&#xff0c;带着id为负数的参数…

艾美捷SAM甲基转移酶活性分析试剂盒使用前准备方案

关键生物分子和蛋白质的甲基化在许多生物系统&#xff0c;包括信号转导、生物合成、蛋白质修复、基因沉默和染色质调节。S-腺苷甲硫氨酸&#xff08;SAM&#xff09;依赖性甲基转移酶使用SAM ATP后最常用的酶辅因子。SAM&#xff0c;也称为AdoMet作为修饰蛋白质和DNA所需的甲基…

通俗理解决策树

目录前言决策树的结构决策树的构建信息增益&#xff08;ID3算法&#xff09;信息增益率&#xff08;C4.5算法&#xff09;基尼指数&#xff08;CART算法&#xff09;熵VS基尼指数剪枝优缺点及适用场景参考文献前言 从这一期开始&#xff0c;我们准备介绍一系列经典机器学习算法…