学生成绩管理系统(大一大作业)

功能

实现添加,排序,修改,保存等功能

库函数

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>

头文件

#define functioncreate(major) void major##compare(mana mn){\
	int i,j,sum=mn->sum;\
	for(i=0;i<sum-1;i++)\
	for(j=0;j<sum-i-1;j++)\
	if(mn->student[j].grade->major<mn->student[j+1].grade->major)\
	swap(&mn->student[j],&mn->student[j+1]);\
}
typedef struct a1 {	//学生成绩信息
	int Chinese;
	int Math;
	int English;
	int Physics;
	int Chemistry;
	int Organism;
	int All;
}*grade;
typedef struct a2 {	//学生信息
	char name[10];
	int stunum;
	grade grade;
	int namelong;
}*student;
typedef struct a3{	//全体学生信息
	int sum;
	student student;
	int capacity;
}*mana;
void setpos(short x, short y);	//设置位置
void init();	//初始化
void welcome();	//欢迎界面
void start();	//开始
void menu();	//菜单
void addstu(mana mn);//加入
void initmana(mana mn);// 初始化
void exportcapacity(mana mn);//扩容
void modifystu(mana mn);//修改个人
void showsin(student stu,int i);//展示单人
void showall(mana mn);//展示全部
void clean(mana mn);//清空
void swap(student p1, student p2);//交换
void compare(mana mn);//比较
void initstu(student mn);//初始化学生信息
void stunumcompare(mana mn);//学号排序
void save(mana mn);//保存
void read(mana mn);//读取
void cpy(char*a1,char*a2);//复制字符串

函数实现

void setpos(short x, short y) {
	HANDLE mn = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos = { x,y };
	SetConsoleCursorPosition(mn, pos);
}
void init() {
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	//影藏光标操作
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
	CursorInfo.bVisible = false; //隐藏控制台光标
	SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态
}
void welcome() {
	init();
	system("title 学生成绩管理系统");
	system("mode con cols=100 lines=30");
	setpos(35,10);
	printf("欢迎来到学生成绩管理系统");
	setpos(40, 17);
	system("pause");
}
void menu() {
	system("cls");
	setpos(30, 5);
	printf("请点击相应按键决定您的下一步操作");
	setpos(30,10);
	printf("1.添加新学生-------2.清空");
	setpos(30, 12);
	printf("3.排序---------------4.无");
	setpos(30, 14);
	printf("5.修改学生信息-----6.查看学生成绩");
	setpos(30, 16);
	printf("------------0.退出-----------");
	setpos(38, 20);
}
void initmana(mana mn) {
	mn->capacity = 0;
	mn->student = NULL;
	mn->sum = 0;
}
void exportcapacity(mana mn) {
	if (mn->capacity > mn->sum)
		return;
	int capacity = mn->capacity == 0 ? 1 : 2 * mn->capacity;
	mn->capacity = capacity;
	mn->student = (student)realloc(mn->student, sizeof(struct a2) * capacity);
}
void initstu(student mn) {
	student now = mn;
	int sum = 0;
	setpos(30, 10);
	printf("请输入新学生的姓名(拼音):");
	scanf("%s", now->name);
	now->namelong = strlen(now->name);
	system("cls");
	setpos(35, 10);
	printf("请输入新学生的学号:");
	scanf("%d", &(now->stunum));
	system("cls");
	setpos(35, 10);
	printf("请输入语文成绩:");
	scanf("%d", &(now->grade->Chinese));
	sum += now->grade->Chinese;
	system("cls");
	setpos(35, 10);
	printf("请输入数学成绩:");
	scanf("%d", &(now->grade->Math));
	sum += now->grade->Math;
	system("cls");
	setpos(35, 10);
	printf("请输入英语成绩:");
	scanf("%d", &(now->grade->English));
	sum += now->grade->English;
	system("cls");
	setpos(35, 10);
	printf("请输入物理成绩:");
	scanf("%d", &(now->grade->Physics));
	sum += now->grade->Physics;
	system("cls");
	setpos(35, 10);
	printf("请输入化学成绩:");
	scanf("%d", &(now->grade->Chemistry));
	sum += now->grade->Chemistry;
	system("cls");
	setpos(35, 10);
	printf("请输入生物成绩:");
	scanf("%d", &(now->grade->Organism));
	sum += now->grade->Organism;
	now->grade->All = sum;
	system("cls");
}
void stunumcompare(mana mn)
{
	int i, j, sum = mn->sum;
	for (i = 0; i < sum - 1; i++) {
		for (j = 0; j < sum - i - 1; j++) {
			if (mn->student[j].stunum < mn->student[j + 1].stunum)
				swap(&mn->student[j], &mn->student[j + 1]);
		}
	}
}
void addstu(mana mn) {
	system("cls");
	exportcapacity(mn);
	mn->student[mn->sum].grade = (grade)malloc(sizeof(struct a1));
	initstu(&mn->student[mn->sum]);
	mn->sum++;
	setpos(40, 10);
	printf("加入完成");
	setpos(40, 12);
	system("pause");
	system("cls");
}

void modifystu(mana mn) {
	system("cls");
	setpos(30, 10);
	printf("请输入你要修改的学生名字(拼音):");
	char s[10];
	scanf("%s", s);
	int i;
	for (i = 0; i < mn->sum; i++) {
		if (strcmp(s, mn->student[i].name)==0)
		break;
	}
	system("cls");
	if (i == mn->sum) {
		setpos(30, 10);
		printf("查无此人");
		return;
	}
	student now = &(mn->student[i]);
	initstu(now);
}
void showsin(student stu,int i) {//姓名,学号,语数英物化生顺序
	setpos(25, 5 + 2 * i);
	printf("%s", stu->name);
	setpos(30, 5 + 2 * i);
	printf("%d", stu->stunum);
	setpos(35, 5 + 2 * i);
	printf("%d", stu->grade->Chinese);
	setpos(40, 5 + 2 * i);
	printf("%d", stu->grade->Math);
	setpos(45, 5 + 2 * i);
	printf("%d", stu->grade->English);
	setpos(50, 5 + 2 * i);
	printf("%d", stu->grade->Physics);
	setpos(55, 5 + 2 * i);
	printf("%d", stu->grade->Chemistry);
	setpos(60, 5 + 2 * i);
	printf("%d", stu->grade->Organism);
	setpos(65, 5 + 2 * i);
	printf("%d", stu->grade->All);
}
void showall(mana mn) {
	int i = 0, sum = mn->sum;
	if (sum == 0) {
		setpos(45, 13);
		printf("暂空");
	}
	system("cls");
	setpos(25,3);
	printf("姓名");
	setpos(30, 3);
	printf("学号");
	setpos(35, 3);
	printf("语文");
	setpos(40, 3);
	printf("数学");
	setpos(45, 3);
	printf("英语");
	setpos(50, 3);
	printf("物理");
	setpos(55, 3);
	printf("化学");
	setpos(60, 3);
	printf("生物");
	setpos(65, 3);
	printf("总分");
	for (i = 0; i < sum; i++)
		showsin(&mn->student[i], i);
	setpos(50, 25);
	system("pause");
	system("cls");
}
void clean(mana mn) {
	system("cls");
	free(mn->student);
	mn->student = NULL;
	mn->capacity = mn->sum = 0;
	setpos(40, 14);
	printf("清空成功");
	system("pause");
}
void swap(student p1, student p2) {
	struct a2 mn = *p1;
	*p1 = *p2;
	*p2 = mn;
}
functioncreate(Math)
functioncreate(Chinese)
functioncreate(English)
functioncreate(Physics)
functioncreate(Chemistry)
functioncreate(Organism)
functioncreate(All)
void compare(mana mn) {
	system("cls");
	setpos(37, 10);
	printf("请选择您的排序方式");
	setpos(35, 12);
	printf("1.语文");
	setpos(45, 12);
	printf("2.数学");
	setpos(35, 14);
	printf("3.英语");
	setpos(45, 14);
	printf("4.物理");
	setpos(35, 16);
	printf("5.化学");
	setpos(45, 16);
	printf("6.生物");
	setpos(35, 18);
	printf("7.学号");
	setpos(45, 18);
	printf("8.总分");
	setpos(40, 20);
	int a;
	scanf("%d", &a);
	switch (a) {
	case 1:Chinesecompare(mn); break;
	case 2:Mathcompare(mn); break;
	case 3:Englishcompare(mn); break;
	case 4:Physicscompare(mn); break;
	case 5:Chemistrycompare(mn); break;
	case 6:Organismcompare(mn); break;
	case 7:stunumcompare(mn); break;
	case 8:Allcompare(mn); break;
	}
	system("cls");
	setpos(40, 14);
	printf("排序完成,请自行查看");
	setpos(40, 15);
	system("pause");
}
void start() {
	welcome();
	mana mn = (mana)malloc(sizeof(struct a3));
	initmana(mn);
	read(mn);
	int choose;
	do {
		menu();
		scanf("%d", &choose);
		switch (choose) {
		case 1:addstu(mn); break;
		case 2:clean(mn); break;
		case 3:compare(mn); break;
		case 5:modifystu(mn); break;
		case 6:showall(mn); break;
		case 0:break;
		}
	} while (choose);
	save(mn);
}
void save(mana mn) {
	FILE* file = fopen("save.txt", "wb");
	int i;
	for (i = 0; i < mn->sum; i++) {//先存名字长度,再存学号,再存名字,最后存成绩
		fwrite(&((mn->student + i)->namelong), sizeof(int), 1, file);
		fwrite(&((mn->student+i)->stunum), sizeof(int), 1, file);
		fwrite((mn->student + i)->name, (mn->student + i)->namelong, 1, file);
		fwrite((mn->student+i)->grade, sizeof(struct a1), 1, file);
	}
	fclose(file);
}
void cpy(char* a1, char* a2,int sum) {
	while (sum--) {
		*a1 = *a2;
		a1++;
		a2++;
	}
}
void read(mana mn) {
	FILE* file = fopen("save.txt", "rb");
	int i;
	char arr[10];
	while (fread(&i, sizeof(int), 1, file)) {
		exportcapacity(mn);
		mn->student[mn->sum].namelong = i;
		mn->student[mn->sum].grade = (grade)malloc(sizeof(struct a1));
		fread(&i, sizeof(int), 1, file);
		mn->student[mn->sum].stunum = i;
		fread(arr, sizeof(char) * (mn->student[mn->sum].namelong), 1, file);
		cpy(mn->student[mn->sum].name, arr, mn->student[mn->sum].namelong);
		mn->student[mn->sum].name[mn->student->namelong] = '\0';
		fread(mn->student[mn->sum].grade, sizeof(struct a1), 1, file);
		mn->sum++;
	}
	fclose(file);
}

展示

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

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

相关文章

必应bing国内广告怎样开户投放呢?

企业都在寻找高效、精准的营销渠道以扩大品牌影响力&#xff0c;提升市场占有率&#xff0c;作为全球第二大搜索引擎&#xff0c;微软旗下的必应Bing凭借其卓越的搜索技术和庞大的用户基础&#xff0c;成为了众多企业拓展市场的首选广告平台。在中国&#xff0c;必应Bing广告以…

ESP32S3——多线程

一、环境&#xff1a; 平台&#xff1a;arduino IDE 或 VS Code PlatformIO 皆可。 我的是后者&#xff0c;具体为&#xff1a; 框架&#xff1a;VS PlatformIO Arduino 二、硬件准备&#xff1a; 一个esp32s3 本文用到的是U0RXD&#xff08;GPIO44 &#xff09;与U0TXD…

运动会信息管理系统(Springboot+MySQL)

本课题旨在实现对运动会信息的全面管理&#xff0c;提供用户友好的界面和高效的操作体验。系统的基础功能包括运动员报名比赛、比赛成绩查询、资讯留言等。为了确保系统的高扩展性和稳定性&#xff0c;选用主流的开发技术&#xff0c;实现规范的项目结构和高效的性能。 技术选型…

RAR文件忘记密码怎么办?解密方法大盘点

随着信息技术的飞速发展&#xff0c;数据的安全性和保密性越来越受到重视。RAR作为一种常用的压缩文件格式&#xff0c;因其压缩效率高、支持文件加密等特点而广受欢迎。然而&#xff0c;当我们忘记了RAR压缩包的密码&#xff0c;或者需要解密他人分享的加密RAR文件时&#xff…

如何统一集成全域数据?三个点讲清楚多源异构数据融合

关于多源异构数据的融合问题&#xff0c;主要涉及以下三个关键点&#xff1a; 1、多源异构数据融合的必要性 2、多源异构数据融合的挑战 3、多源异构数据融合的解决方案 首先&#xff0c;我们来说多源异构数据融合的必要性。 随着以大数据为代表的信息技术快速发展&#xf…

HTTP相关面试题

1. HTPP基本概念 HTTP是超文本传输协议。本质上就是一个可以传输图片、视频、文字的计算机与计算机之间的协议 1.1. HTTP常见的状态码 2XX状态码: 主要用于表示已经服务器已经成功的处理了请求 [200 ok ]: 是最常见的状态码,表示我们请求成功且响应内容(响应头body)已经收到…

笔记 | 软件工程02:软件工程概述

1 软件工程产生背景 1.1 历史发展 1960s的个体作坊式软件开发带来的问题 1.2 软件开发需要解决的问题 代码规模增长带来的影响&#xff1a; 1.3 软件开发面临的挑战 指挥信息系统中的软件&#xff1a;规模大、质量要求高 装备中嵌入式软件系统&#xff1a;规模大、质量要求…

调用smc为什么就能直接切换到ATF?

快速链接: . &#x1f449;&#x1f449;&#x1f449;Trustzone/TEE/安全 面试100问-目录 &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 个人博客笔记导读目录(全部) 背景 插播一个小插曲&#…

大数据在金融行业的深度应用与未来展望

一、引言 随着信息技术的迅猛发展,大数据已经成为推动金融行业创新的重要力量。从精准营销、个性化服务到风险管理和产品创新,大数据的应用正在不断重塑金融行业的格局。本文将深入探讨大数据在金融行业的深度应用,分析其特征特点、解决方案以及面临的挑战与机遇,并展望其…

深度学习 --- stanford cs231 编程作业(assignment1,Q2: SVM分类器)

stanford cs231 编程作业之SVM分类器 写在最前面&#xff1a; 深度学习&#xff0c;或者是广义上的任何学习&#xff0c;都是“行千里路”胜过“读万卷书”的学识。这两天光是学了斯坦福cs231n的一些基础理论&#xff0c;越往后学越觉得没什么。但听的云里雾里的地方也越来越多…

STM32——hal_SPI_(介绍)

SPI&#xff08;串行外围设备接口&#xff09;是一种高速的、全双工、同步的通信协议&#xff0c;通常用于短距离通信&#xff0c;尤其是在嵌入式系统中与各种外围设备进行通信。SPI接口由摩托罗拉公司推出&#xff0c;由于其简单和灵活的特性&#xff0c;它被广泛用于多种应用…

云计算百科:类型、服务与业务优势一网打尽

了解云计算的权威指南是至关重要的&#xff0c;掌握云计算的类型、服务、用途以及它们如何为组织带来好处尤为重要。 假设某公司的员工正在办公室工作&#xff0c;突然间火警响起&#xff0c;原来IT部门的主服务器机房着火了&#xff0c;所有服务器都受到了影响。这一消息引发…

【机器学习-09】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之高斯混合sklearn.mixture模块研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Nginx配置详细解释:(3)http模块及server模块,location模块

目录 环境概述&#xff1a; http模块中的全局模块 1. root配置主要是对主web页面的路径访问。 2.server虚拟主机 2.1基于IP&#xff1a; 2.2基于域名&#xff1a; 3.alias别名 4.location匹配 5.access模块&#xff1a; 6.验证模块 7.自定义错误页面 8.日志存放位置…

图片裁剪与上传处理方案 —— 基于阿里云 OSS 处理用户资料

目录 01: 通用组件&#xff1a;input 构建方案分析 02: 通用组件&#xff1a;input 构建方案 03: 构建用户资料基础样式 04: 用户基本资料修改方案 05: 处理不保存时的同步问题 06: 头像修改方案流程分析 07: 通用组件&#xff1a;Dialog 构建方案分析 08: 通用组件&…

Transformer学习(4)

上篇文章完成了Transformer剩下组件的编写&#xff0c;因此本文就可以开始训练。 本文主要介绍训练时要做的一些事情&#xff0c;包括定义损失函数、学习率调整、优化器等。 下篇文章会探讨如何在多GPU上进行并行训练&#xff0c;加速训练过程。 数据集简介 从网上找到一份中…

双向链表的讲解与实现

双向链表的讲解与实现 一、双向链表的结构二、顺序表和双向链表的优缺点分析三、双向链表的实现(使用VS2022)1.初始化、销毁、打印、判空2.尾插尾删、头插头删3.查找、指定插入、指定删除 四、代码优化五、完整 List.c 源代码 一、双向链表的结构 带头”跟前面我们说的“头节点…

家政预约小程序13我的订单

目录 1 我的订单页面布局2 全部订单页面3 完善订单状态4 查询订单信息总结 现在我们已经完成了家政预约小程序主体功能的开发&#xff0c;包含服务的查看&#xff0c;在线预约已经登录等功能。预约之后就需要家政公司的客服进行派单&#xff0c;由服务人员进行上门服务。在小程…

gitlabcicd-k8s部署gitlab

一.安装准备环境 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-deploy.yaml nfs的ip是192.168.110.190 挂载目录是/data/data 注意所需要的目录需要创建&#xff1a;/data/data/gitlab/config &#xff0c;/data/data/gitlab/logs &#xff0c;/dat…

LeetCode刷题之HOT100之合并区间

雨下了一整天&#xff0c;中午早早就回去吃饭拿快递了&#xff0c;今天拿了很多快递。我的书回来啦哈哈&#xff0c;还有好多零食&#xff0c;爽歪歪啊&#xff0c;放在下面了&#xff0c;然后准备开始做题啦&#xff01; 图一&#xff1a;左一是xh送我的&#xff0c;非常精彩…