C语言实验-学生信息管理系统

  1. 按以下菜单界面编写学生信息管理系统;

1)录入学生信息首先输入学生人数,然后根据学生人数开辟动态数组;

2)学生信息包括学号、姓名、性别、三门课成绩、总分;其中学号、姓名、

性别、三门课成绩是需要从键盘录入的,而总分是由程序计算的,而不

是用户自己算了再输入。

3)显示结果(学生信息)要以列表的形式显示,注意美观性;

4)要有必要的容错措施,比如输入各科分数要在0-100之间,输入错误给

用户提示,让其重新输入;

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<Windows.h>
#include<assert.h>
using namespace std;

typedef struct student
{
	char ID[15];
	char name[15];
	char sex[5];
	int score[3];
	int totalscore;
}student;

typedef struct Data
{
	student* data;
	int size;
	int capacity;
}Data;

enum Option
{
	EXIT,//0
	ADD,
	PRINT,
	SEARCH_BY_ID,
	SEARCH_BY_NAME,
	SORT,
	FIND_BY_SCORE
};

void menu()
{
	cout << "\n*************************\n";
	cout << "1.录入学生信息\n";
	cout << "2.显示学生信息\n";
	cout << "3.按学号查找\n";
	cout << "4.按姓名查找\n";
	cout << "5.按总分递减排序\n";
	cout << "6.查找有2科目不及格的学生信息\n";
	cout << "0.退出\n";
	cout << "*************************\n";
	cout << "请输入功能号0-6:";

}


void Init(Data* pdata)
{
	assert(pdata);
	cout << "输入学生人数:" << endl;
	cin >> pdata->capacity;
	pdata->data = (student*)malloc(sizeof(student) * (pdata->capacity));
	pdata->size = 0;
	for (int i = 0; i < pdata->capacity; i++)
	{
		pdata->data[i].totalscore = 0;
	}

}
void fun1(Data*pdata)
{
	int flag = 0;
	if (pdata->size==pdata->capacity)
	{
		cout << "容量不够,无法输入" << endl;
		return;
	}
	
	cout << "输入学号:";
	scanf("%s",pdata->data[pdata->size].ID);
	cout << "输入姓名:";
	scanf("%s", pdata->data[pdata->size].name);
	cout << "输入性别:";
	scanf("%s", pdata->data[pdata->size].sex);
	
	do {
		cout << "输入三科成绩:";
		for (int i = 0; i < 3; i++)
		{
			scanf("%d", &pdata->data[pdata->size].score[i]);
			if (pdata->data[pdata->size].score[i] > 100 || pdata->data[pdata->size].score[i] < 0)
			{
				flag = 1;
			}//如果输入成绩不合法
			pdata->data[pdata->size].totalscore += pdata->data[pdata->size].score[i];
		}
		if (flag == 1)
		{
			cout << "成绩输入不合规,重新输入" << endl;
		}
	} while (flag != 0);
	cout << "信息输入成功" << endl;
	pdata->size++;
}
void fun2(Data* pdata)//打印信息
{
	assert(pdata);
	printf("%-10s%-10s%-5s%-12s%-5s\n", "学号", "姓名", "性别", "成绩", "总成绩");
	for (int i = 0; i < pdata->size; i++)
	{
		printf("%-10s%-10s%-5s%-4d%-4d%-4d%-5d\n",
			pdata->data[i].ID, 
			pdata->data[i].name, 
			pdata->data[i].sex, 
			pdata->data[i].score[0],
			pdata->data[i].score[1],
			pdata->data[i].score[2],
			pdata->data[i].totalscore);
	}
}
void fun3(Data*pdata)
{
	cout << "\n请输入要查找的学号:\n";
	char IDinput[15]="\0";
	cin >> IDinput;
	for (int i = 0; i < pdata->size; i++)
	{
		if (strcmp(pdata->data[i].ID, IDinput) == 0)
		{
			printf("%-10s%-10s%-5s%-12s%-5s\n", "学号", "姓名", "性别", "成绩", "总成绩");
			printf("%-10s%-10s%-5s%-4d%-4d%-4d%-5d\n",
				pdata->data[i].ID,
				pdata->data[i].name,
				pdata->data[i].sex,
				pdata->data[i].score[0],
				pdata->data[i].score[1],
				pdata->data[i].score[2],
				pdata->data[i].totalscore);
			break;
		}
	}
}
void fun4(Data*pdata)
{
	cout << "\n请输入要查找的姓名:\n";
	char nameinput[15] = "\0";
	cin >> nameinput;
	printf("%-10s%-10s%-5s%-12s%-5s\n", "学号", "姓名", "性别", "成绩", "总成绩");
	for (int i = 0; i < pdata->size; i++)
	{
		if (strcmp(pdata->data[i].name, nameinput) == 0)
		{
			printf("%-10s%-10s%-5s%-4d%-4d%-4d%-5d\n",
				pdata->data[i].ID,
				pdata->data[i].name,
				pdata->data[i].sex,
				pdata->data[i].score[0],
				pdata->data[i].score[1],
				pdata->data[i].score[2],
				pdata->data[i].totalscore);
		}
	}
}
int compare(const void* a, const void* b)
{
	return ((student*)b)->totalscore - ((student*)a)->totalscore;
}
void fun5(Data*pdata)//排序
{
	qsort(pdata->data, pdata->size, sizeof(student), compare);
	fun2(pdata);
}
void fun6(Data* pdata)
{
	for (int i = 0; i < pdata->size; i++)
	{
		int flag = 0;
		for (int j = 0; j < 3; j++)
		{
			if (pdata->data[i].score[j] < 60)
			{
				flag++;
			}
		}
		if (flag >= 2)
		{
			printf("%-10s%-10s%-5s%-4d%-4d%-4d%-5d\n",
				pdata->data[i].ID,
				pdata->data[i].name,
				pdata->data[i].sex,
				pdata->data[i].score[0],
				pdata->data[i].score[1],
				pdata->data[i].score[2],
				pdata->data[i].totalscore);
		}
	}
}

int main()
{
	int input = 0;

	Data data;

	Init(&data);
	do
	{
		menu();
		printf("请输入你的选择:>");
		scanf("%d", &input);
		system("cls");
		switch (input)
		{
		case ADD:
			fun1(&data);
			break;
		case PRINT:
			fun2(&data);
			break;
		case SEARCH_BY_ID:
			fun3(&data);
			break;
		case SEARCH_BY_NAME:
			fun4(&data);
			break;
		case SORT:
			fun5(&data);
			break;
		case FIND_BY_SCORE:
			fun6(&data);
			break;
		case EXIT:
			fun2(&data);
			printf("退出通讯录\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

测试用例可以自己简单测一测

取码点赞👍!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用git上传本地文件到github

两种方式&#xff1a;都需要git软件&#xff08;1&#xff09;VScode上传 &#xff08;2&#xff09;直接命令行&#xff0c;后者不需要VScode软件 &#xff08;1&#xff09;vscode 上传非常方便&#xff0c;前提是下载好了vscode和git软件 1 在项目空白处右击&#xff0c;弹…

ReentrantReadWriteLock类

为了有了ReentrantLock还需要ReentrantReadWriteLock ReentrantReadWriteLock是一个读写锁&#xff0c;它允许多个读操作同时进行&#xff0c;但在写操作时会阻止其他所有读和写操作。这种锁特别适合于读取远多于写入的场景&#xff0c;因为它可以提高并发性而不会牺牲数据一致…

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

VsCode | 修改首页启动页 Logo

VsCode | 修改首页启动页 Logo 最终效果&#xff1a; 插件的安装 先安装插件 Custom CSS and JS Loader 插件配置 Ctrl Shift P 输入 打开用户设置&#xff0c;在末尾添加 "vscode_custom_css.imports": [""]下载 Logo 下载 Logo 点我下载 引入…

SDB2F3 1.5A,高达28V输出1.2MHz升压转换器芯片IC

一般说明 该SDB2F3是一个恒定的频率&#xff0c;5针SOT23用于小型低功率应用的电流模式升压转换器。 该SDB2F3开关在1.2MHz&#xff0c;并允许使用微小&#xff0c;低成本的电容器和电感2毫米或更少的高度。内部软启动的结果在小浪涌电流和延长电池寿命。 该SDB2F3工作从…

string底层浅析

char简单易用,但是string是万金油 char *b "123"; string a{"123"};a是不是地址 发现a是地址 a的地址是不是和a[0]地址重合 #include<iostream> #include<cstring> using namespace std; int main() {string a{ "123" };char g[…

Pytorch分布式train——pytorch.distributed.launch V.S. torchrun

1. 较早的pytorch.distributed.launch python -m torch.distributed.launch --nproc_per_node4 --nnodes1 --node_rank0 train.py --args XXX 参数解析&#xff1a; nnodes&#xff1a;节点&#xff08;主机&#xff09;的数量&#xff0c;通常一个节点对应一个主机 node_rank…

探索动态内存开辟的奥秘

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 开始之前&#xff0c;我们先来了解一下C/C中程序内存区域划分。 在C/C程序中&#xff0c;内存区域通常被划分为以下几个部分&#xff1a; 1.栈&…

漏洞挖掘之某厂商OAuth2.0认证缺陷

0x00 前言 文章中的项目地址统一修改为: a.test.com 保护厂商也保护自己 0x01 OAuth2.0 经常出现的地方 1&#xff1a;网站登录处 2&#xff1a;社交帐号绑定处 0x02 某厂商绑定微博请求包 0x02.1 请求包1&#xff1a; Request: GET https://www.a.test.com/users/auth/weibo?…

C++设计模式-创建型设计模式

设计模式 设计模式是什么 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b;其实就是解决问题的固定套路。但是要慎用设计模式&#xff0c;有一定的工程代码量之后用它比较…

Hdfs小文件治理策略以及治理经验

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…

Python字符串常用方法(全网最细,仅此一份)

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 👉Python从入门到精通 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python180G全栈视频教程以及Python相关电子书合集 😊私信未回可以加V:hacker0327 备注P…

Word文件后缀

Word文件后缀 .docx文件为Microsoft Word文档后缀名&#xff0c;基于XML文件格式 .dotm为Word启用了宏的模板 .dotx为Word模板 .doc为Word97-2003文档&#xff0c;二进制文件格式 参考链接 Word、Excel 和 PowerPoint 的文件格式参考 Learn Microsoft

u盘格式化后电脑读不出来怎么办?u盘格式化的东西还能恢复吗

随着科技的快速发展&#xff0c;U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而&#xff0c;有时我们可能会遇到U盘格式化后电脑无法读取的情况&#xff0c;或是误格式化导致重要数据丢失。面对这些问题&#xff0c;我们该如何应对&#xff1f;本文将为您详细解答…

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时&#xff0c;主函数 mian( ) 中会有参数&#xff0c;这个参数到底是怎么回事⼉呢&#xff1f; 二、解答 mian( ) 称为主函数&#xff0c;是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的&#xff0c;当处于操作命令状态下&…

解锁学术语言:掌握论文释义工具的高效使用技巧

研究论文是一份书面文件&#xff0c;其中包括对特定主题的论点、想法和观点的概述。释义至关重要&#xff0c;因为它可以为您的工作增添意义和价值。教育释义的核心目的是增加你的写作的价值&#xff0c;同时考虑其他作家的观点和发现&#xff0c;并建立与你的主题的相关性。通…

恶补《操作系统》5_1——王道学习笔记

5设备管理 5.1_1 I-O设备的概念和分类 1、什么是I-O设备 输入/输出&#xff1a;I/O设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。 2、按使用特性分类 人机交互的外部设备存储设备网络通信设备 3、…

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录 k8s Dashboard 运维维护记录 Q1&#xff1a;需要使用firefox浏览器访问 提示了证书错误NET::ERR_CERT_INVALID&#xff0c;原因是由于物理机的浏览器证书不可用 需要注意的是&#xff0c;若提示“连接不安全”的警告时&#xff0c;点击“高级”…

计算机的翻译(编译和链接)过程

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C语言基本概念 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697;1.翻译环境和运行环境&#xff1…

AI大模型探索之路-训练篇12:语言模型Transformer库-Datasets组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…