【简单项目实战】用C++实现学生成绩管理系统 | [面向对象]

news2025/1/19 16:22:25


目录

●功能介绍

●案例

●代码展示

●结果展示


●功能介绍

用 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>
#include<vector>
using namespace std;
class student {   //父类
public:
	string id;
	string name;
	int chinese;
	int math;
	int english;
};
class information :public student {   //子类
public:
	vector<student>V;  //vector容器

	void showmenu();  //展示功能菜单
	void addinformation();  //录入学生信息
	void showperson();  //展示学生信息
	void searchperson();  //查找学生信息
	void alterperson();//修改学生信息
	void staticperson();  //统计学生信息
	void deleteperson(); //删除学生信息
	void emptyperson();  //清空学生信息
}; 
void information::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;
}
//父类、子类的全局声明,以便于下面使用
student s;   
information i;
void information::addinformation()
{
	cout << "请输入学号:" << endl;
	cin >> s.id;
	cout << "请输入姓名:" << endl;
	cin >> s.name;
	cout << "请输入语文成绩:" << endl;
	cin >> s.chinese;
	cout << "请输入数学成绩:" << endl;
	cin >> s.math;
	cout << "请输入英语成绩:" << endl;
	cin >> s.english;
	i.V.push_back(s);
	cout << "<<添加成功>>" << endl;
	system("pause");
	system("cls");
}
void information::showperson()
{
	vector<student>::iterator p = i.V.begin();
	while(p!=i.V.end())
	{
		cout << "学号:" << p->id<< " "
			<< "姓名:" << p->name << " "
			<< "语文成绩:" << p->chinese << " "
			<< "数学成绩:" << p->math << " "
			<< "英语成绩:" << p->english << endl;
		p++;
	}
	system("pause");
	system("cls");
}
int isexist(string id)
{
	int count = 0;
	for (vector<student>::iterator p = i.V.begin(); p != i.V.end() ; p++)
	{
		count++;
		if (p->id == id)
		{
			return count;
		}
	}
	return -1;
}
int isexist_1(string name)
{
	int count = 0;
	for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
	{
		count++;
		if (p->name==name)
		{
			return count;
		}
	}
	return -1;
}
void information::searchperson()
{
	cout << "请输入您要查找的学生:" << endl;
	cout << "如果按照学号查找输入1" << endl;
	cout << "如果按照姓名查找输入2" << endl;
	int n;cin >> n;
	if (n==1)
	{
		string id;cin >> id;
		if (isexist(id)==-1)
		{
			cout << "此人不存在!" << endl;
		}
		else
		{
			cout << "此人存在!" << endl;
			int ret = isexist(id);
			int count = 0;
			for(vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
			{
				count++;
				if (ret == count)
				{
					cout << "学号 " << p->id << "\t";
					cout << "姓名 " << p->name << "\t";
					cout << "语文成绩 " << p->chinese<< "\t";
					cout << "数学成绩 " << p->math<< "\t";
					cout << "英语成绩 " << p->english<< "\t";
					break;
				}
			}
		}
	}
	else
	{
		string name;cin >> name;
		if (isexist_1(name) == -1)
		{
			cout << "此人不存在!" << endl;
		}
		else
		{
			cout << "此人存在!" << endl;
			int ret_1 = isexist_1(name);
			int count = 0;
			for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
			{
				count++;
				if (ret_1 == count)
				{
					cout << "学号 " << p->id << "\t";
					cout << "姓名 " << p->name << "\t";
					cout << "语文成绩 " << p->chinese << "\t";
					cout << "数学成绩 " << p->math << "\t";
					cout << "英语成绩 " << p->english << "\t";
					break;
				}
			}
		}
	}
	system("pause");
	system("cls");
}
void information::alterperson()
{
	cout << "请输入您要修改的联系人:" << endl;
	string name;cin >> name;
	if (isexist_1(name) == -1)
	{
		cout << "此人不存在!" << endl;
	}
	else
	{
		cout << "此人存在!" << endl;
		int ret_2 = isexist_1(name);
		cout << "单一修改-0" << "多数修改-1" << endl;
		int sign; cin >> sign;
		{
			if (sign == 0)
			{
				cout << "学号-1" << "姓名-2" << "语文成绩-3" << "数学成绩-4" << "英语成绩-5" << endl;
				int select; cin >> select;
				if (select == 1) {
					int count = 0;
					for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
					{
						count++;
						if (ret_2 == count) {
							cin >> p->id;
							break;
						}
					}
				}
				if (select == 2) {
					int count = 0;
					for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
					{
						count++;
						if (ret_2 == count) {
							cin >> p->name;
							break;
						}
					}
				}
				if (select == 3) {
					int count = 0;
					for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
					{
						count++;
						if (ret_2 == count) {
							cin >> p->chinese;
							break;
						}
					}
				}
				if (select == 4) {
					int count = 0;
					for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
					{
						count++;
						if (ret_2 == count) {
							cin >> p->math;
							break;
						}
					}
				}
				if (select == 5) {
					int count = 0;
					for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
					{
						count++;
						if (ret_2 == count) {
							cin >> p->english;
							break;
						}
					}
				}
			}
			if (sign == 1)
			{
				int count = 0;
				for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
				{
					count++;
					if (ret_2 == count)
					{
						cout << "请输入学号:" << endl;		cin >> p->id;
						cout << "请输入姓名:" << endl;		cin >> p->name;
						cout << "请输入语文成绩:" << endl; cin >> p->chinese;
						cout << "请输入数学成绩:" << endl; cin >> p->math;
						cout << "请输入英语成绩:" << endl; cin >> p->english;
						break;
					}
				}
			}
		}
	}
	cout << "信息修改成功!" << endl;
	system("pause");
	system("cls");
}
void information::staticperson()
{
	int allsum = 0;
	for (vector<student>::iterator p=i.V.begin();p!=i.V.end();p++)
	{
		int sum = 0;
		sum = p->chinese + p->math + p->english;
		cout << "姓名:" << p->name << "语文:" << p->chinese << " " << "数学:" << p->math << " " << "英语:" << p->english << " " << "总分:" << sum << endl;
		allsum += sum;
	}

	int sum1 = 0, sum2 = 0, sum3 = 0;
	for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
	{
		sum1 += p->chinese;
		sum2 += p->math;
		sum3 += p->english;
	}
	cout << "全班语文平均分:" << sum1 / i.V.size() << endl;
	cout << "全班数学平均分:" << sum2 / i.V.size() << endl;
	cout << "全班英语平均分:" << sum3 / i.V.size() << endl;
	cout << "全班总分的平均分:" << allsum / i.V.size() << endl;

	for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
	{
		int sum = 0;
		sum = p->chinese + p->math + p->english;
		if (sum < allsum /i.V.size() )
		{
			cout << "得分小于班级总分平均分的不及格学生:" << p->id << " " << p->name << endl;
		}
	}
	system("pause");
	system("cls");
}
void information::deleteperson()
{
	cout << "请输入您要删除的学生:" << endl;
	string name;
	cin >> name;
	if (isexist_1(name) == -1) {
		cout << "查无此人!" << endl;
	}
	else {
		cout << "找到此人!" << endl;
		int ret_3 = isexist_1(name);
		int count = 0;
			for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
			{
				count++;
				if (ret_3 == count)
				{
					p=i.V.erase(p);
					break;
				}
			}
		cout << "已删除此学生信息!" << endl;
	}
	system("pause");
	system("cls");
}
void information::emptyperson()
{
	i.V.clear();
	cout << "成绩表已清空!" << endl;
	system("pause");
	system("cls");
}
void text()
{
	while(1)
	{
		i.showmenu();
		int n;
		cin >> n;
		switch (n)
		{
		case 1:
			i.addinformation();
			break;
		case 2:
			i.showperson();
			break;
		case 3:
			i.searchperson();
			break;
		case 4:
			i.alterperson();
			break;
		case 5:
			i.staticperson();
			break;
		case 6:
			i.deleteperson();
			break;
		case 7:
			i.emptyperson();
			break;
		}
	}
}
int main()
{
	text();
}

●结果展示

1.

 

 

 

 

2.

3. 

4. 

5.

 

6.

7. 

8. 

 9.


 

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

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

相关文章

丰立智能深交所上市:市值33亿 王友利家族色彩浓厚

雷递网 雷建平 12月15日浙江丰立智能科技股份有限公司&#xff08;简称&#xff1a;“丰立智能”&#xff0c;证券代码&#xff1a;301368&#xff09;今日在深交所创业板上市。丰立智能本次发行股票3010万股&#xff0c;发行价为22.33元&#xff0c;募资6.72亿元。丰立智能开盘…

java+控制台-学生选课管理系统

java控制台-学生选课管理系统一、系统介绍二、功能展示1.用户登陆2.管理员3.老师.学生四、其它1.其他系统实现2.获取源码一、系统介绍 系统实现了: 管理员&#xff1a; 1.管理课程 2.管理教师 3.管理学生 4.修改管理员密码 5.修改管理员名称 0.退出 老师&#xff1a; 1.修改密…

使用Maven创建多模块父子Spring Boot工程

使用Maven创建Spring Boot工程_紫月下枫叶的博客-CSDN博客目录1、开发环境2、创建普通maven工程3、添加Spring Boot父工程4、添加Web场景依赖5、添加主程序6、添加Controller7、添加配置文件8、运行服务9、浏览器访问服务1、开发环境IDE&#xff1a;IntelliJ IDEA 2020.3.4JDK&…

【VScode插件开发】<一>开发环境准备

VScode作为一款轻量级的IDE开发工具&#xff0c;非常好用&#xff0c;也是跨平台&#xff0c;对于习惯在命令行敲代码的人来说&#xff0c;简直不要太优秀。 VScode强大的一点就在于能够支持各种插件&#xff0c;对于一个想自己倒腾的程序员来说&#xff0c;能自己定义自己的写…

STM8开发实例-UART及重定向

UART及重定向 文章目录 UART及重定向1、UART简单介绍2、硬件准备3、软件准备4、驱动实现4.1 UART1基本定义4.2 驱动函数实现4.2.1 UART1驱动实现4.2.2 UART3驱动实现5、串口重定向1、UART简单介绍 串行通信可能是最常用的经典通信方法,用于将 PC 或其他机器与 micro 接口。 只…

如何将PDF转换为PPT?2个免费好用的pdf转ppt工具

这个教程教你如何将PDF文件变成PowerPoint演示文稿文件。有几个不同的免费在线网站&#xff0c;您可以使用它们将PDF转换为PowerPoint演示文稿。请记住&#xff0c;扫描的 PDF&#xff08;如扫描到计算机中的文档&#xff09;无法转换为可编辑的 PowerPoint 演示文稿。 方法1、…

(五)本地镜像发布到私有库将私有库上的镜像下载到本地

目录 一、下载镜像Docker Registry 二、运行私有库Registry 三、创建一个新镜像&#xff0c;例如&#xff1a;ubuntu安装ifonfig命令 四、curl验证私服库上有什么镜像 五、将新镜像修改符合私服规范的tag 六、修改配置文件使之支持http 七、push推送到私服库 八、curl再…

Anaconda和python是什么关系?

【anaconda】指的是一个开源的【Python】发行版本&#xff0c;是一个安装、管理【python】相关包的软件&#xff0c;自带了【python、Jupyter Notebook编辑器、Spyder、conda】等工具&#xff0c;常见的科学计算类的库都包含在里面了&#xff0c;使得安装比常规【python】安装要…

BI@report钻取操作

1.创建的表为浮动表 注意设置成浮动维单元格 把东西都选在红色框框里面 2.在对需要进行钻取的表元设置 设置参数 注意 参数是传递用的&#xff0c;值取的是当前表的值&#xff0c;这样参数可以带着这个表的值往下传 使用的是SQL数据源 在最后加上这行代码 having rso1.par…

「WGCLOUD」搭建安装教程, 极简高效的服务器状态监控面板

WGCLOUD安装部署步骤&#xff08;Linux版&#xff09; 1、首先我们在网站&#xff08;​ ​www.wgstart.com​​&#xff09;下载安装包 下载最新版本即可&#xff0c;如下图Linux版本的wgcloud-v3.4.2包中&#xff0c;默认包含server和agent&#xff0c;如果其他VPS要监测&a…

我通过了软考高项,有些话想说

文章目录1. 软考成绩2. 备考过程与经验3. 遇到的坑4. 论文准备5. 资料及寄语1. 软考成绩 昨天下午得到了一个振奋人心的消息&#xff0c;我的软考通过了&#xff0c;感觉努力没有白费很欣慰&#xff0c;也感觉有很多话要说&#xff08;真不是得瑟&#xff09;。可能很多人不了…

汇编语言dos功能调用(顺序程序练习)

目录 1号功能键盘输入并回显 2号功能显示器显示一个字符 9号功能显示器显示字符串 4C号功能&#xff0c;返回DOS &#xff0c; 10号功能&#xff0c;输入字符串&#xff08;大纲上有&#xff0c;但是没考过&#xff09; 练习 1小写字母转大写 2&#xff1a;输出hello wor…

【Java版oj】逆波兰表达式求值

目录 一、原题再现 二、问题分析 三、完整代码 一、原题再现 150. 逆波兰表达式求值 有效的算符包括 、-、*、/ 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 注意 两个整数之间的除法只保留整数部分。 可以保证给定的逆波兰表达式总是有效的。换句话…

Kubernetes核心指标监控——Metrics Server详解

1、概述 从Kubernetes v1.8 开始&#xff0c;资源使用情况的监控可以通过 Metrics API的形式获取&#xff0c;例如容器CPU和内存使用率。这些度量可以由用户直接访问&#xff08;例如&#xff0c;通过使用kubectl top命令&#xff09;&#xff0c;或者由集群中的控制器&#x…

Simulink|电动汽车、永磁电动机建模与仿真

目录 1 永磁同步电机 1.1 概述 1.2 PMSM 的建模 1.3 PMSM 的矢量控制 1.4 使用 SIMSCAPE 块建模 1.5 子系统ECU 2 直流电机 3 电动车 1 永磁同步电机 1.1 概述 本文旨在模拟永磁同步电机的性能&#xff0c;该电机使用 Rinehart 运动系统-交流电机控制器进行控制。首先收…

基于C+++Oracle11实现(PC)学生成绩教务管理系统【100010050】

学生成绩教务管理系统 一.分析与建模 系统业务流程图 项目用例图&#xff1a; 功能需求分析与建模 数据需求分析与建模 体之间的联系&#xff1a;学生信息表&#xff08;student&#xff09;、教师信息表&#xff08;teacher&#xff09;、管理员信息表&#xff08;Administ…

Redisson夺命15连问

在一个分布式系统中&#xff0c;由于涉及到多个实例同时对同一个资源加锁的问题&#xff0c;像传统的synchronized、ReentrantLock等单进程情况加锁的api就不再适用&#xff0c;需要使用分布式锁来保证多服务实例之间加锁的安全性。常见的分布式锁的实现方式有zookeeper和redis…

深入Java线程池:从设计思想到源码解读

1. 前言 线程池深入详解 2. 初识线程池 我们知道&#xff0c;线程的创建和销毁都需要映射到操作系统&#xff0c;因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要&#xff0c;线程池应运而生。 2.1. 线程池优势 降低资源消耗&#xff1a;线程池…

【观察】亚马逊云科技:探索Serverless创新的“无人区”

毫无疑问&#xff0c;从2006年发展至今的公有云&#xff0c;堪称是云计算的黄金时代。在此过程中&#xff0c;云计算领域涌现出了很多改变传统IT架构和运维方式的新技术&#xff0c;特别是Serverless&#xff08;无服务器计算&#xff09;架构的出现&#xff0c;更带来了一次跨…

re:Invent|亚马逊云科技如何赋能广告、游戏、医疗

亚马逊云科技是如何高效利用海量跨域数据进行广告营销的同时&#xff0c;保障用户数据安全隐私呢&#xff1f;亚马逊云科技又在游戏行业、医疗与生命科学、汽车、金融等等行业和领域纷纷推出哪些关键发布和创新应用呢&#xff1f;应行业需求而生&#xff0c;解业务场景之痛&…