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

news2025/1/17 0:09:38

功能

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

库函数

#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);
}

展示

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

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

相关文章

计算机网络 ——数据链路层(广域网)

计算机网络 —— 广域网 什么是广域网PPP协议PPP协议的三个部分PPP协议的帧格式 HDLC协议HDLC的站HDLC的帧样式 PPP和HDLC的异同 我们今天来看广域网。 什么是广域网 广域网&#xff08;Wide Area Network&#xff0c;简称WAN&#xff09;是一种地理覆盖范围广泛的计算机网络…

mkfs.ubifs -c 计算工具

mkfs.ubifs -c 输入的logical erase block count,是指除掉ubi文件系统自身管理和坏块处理后的逻辑可擦除最大块数。 参考信息如下&#xff1a; logical erase block count 计算工具&#xff0c;实现代码如下&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*-import os…

【AI大模型】基于Langchain和Openai借口实现英文翻译中文应用

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

智慧城市的规划与实施:科技引领城市运行效率新飞跃

随着信息技术的飞速发展&#xff0c;智慧城市的构想正逐步成为现实。作为地理信息与遥感领域的研究者&#xff0c;我深知在这一转型过程中&#xff0c;技术的创新与应用是提升城市运行效率的关键。本文旨在探讨如何利用地理信息系统&#xff08;GIS&#xff09;、遥感技术、大数…

【深度学习入门篇一】阿里云服务器(不需要配环境直接上手跟学代码)

前言 博主刚刚开始学深度学习&#xff0c;配环境配的心力交瘁&#xff0c;一塌糊涂&#xff0c;不想配环境的刚入门的同伴们可以直接选择阿里云服务器 阿里云天池实验室&#xff0c;在入门阶段跑个小项目完全没有问题&#xff0c;不要自己傻傻的在那配环境配了半天还不匹配&a…

Win11中Yolo V10安装过程记录

1. 配置Anaconda环境&#xff1a; conda create -n yolov10 python3.9 conda activate yolov10 pip install -r requirements.txt pip install -e . 这里由于torch2.0.1太慢&#xff0c;单独用pytorch官网安装流程&#xff08;选择支持GPU版本&#xff09;&#xff1a; con…

dvwa靶场的下载、配置

目录 下载 配置 连接数据库 搭建网站&#xff08;可选&#xff09; 配置靶场 下载 百度网盘链接&#xff1a;https://pan.baidu.com/s/1oK2UzKFxIIPQkhz6hD8WFQ?pwdpbb2 提取码&#xff1a;pbb2 迅雷链接&#xff1a;https://pan.xunlei.com/s/VNzHo9gXgbsk5E8tcx6Yek…

Llama模型家族之RLAIF 基于 AI 反馈的强化学习(一)

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

表达式求值中的“整型提升”概念

一.基本原理和概念 如&#xff1a;代码 char a&#xff0c;b&#xff0c;c &#xff1b; a b c &#xff1b; 该代码在计算的时候就会先将 b 和 c 提升为 int 类型进行加法后&#xff0c;再将数据进行截断存放在内存存放变量 a 的空间中。 &#xff08;1&#xff09;提升和截…

LeetCode25_K个一组翻转链表

. - 力扣&#xff08;LeetCode&#xff09; 一、题目描述 二、过程模拟 1. 第一步 2. 第二步&#xff1a;子链表分组 3. 第三步&#xff1a;断开前后两组 4. 第四步&#xff1a;翻转start到end的部分 5. 第五步&#xff1a;连接翻转好的前半部分和未翻转的后半部分&#xff…

操作系统真象还原:完善内核

第6章-完善内核 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 6.1函数调用约定简介 函数参数存储在栈空间&#xff0c;这有两个好处&#xff1a; 首先&#xff0c;每个进程都有自己的栈&#xff0c;这就是每个内存自己的专用内存空间。其次&#…

安装和使用conda

Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。可以创建多个环境&#xff0c;并在环境中使用不同的python版本&#xff0c;并安装环境专属的python依赖包&#xff0c;可以用来避免python…

PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统

本期教程投稿一篇实用性的基于邮箱登陆注册找回于一体的系统&#xff0c;在日常的开发和软件应用中非常常见&#xff0c;并且也使用了逻辑与界面分离的写法&#xff0c;那这个文章将详细的为大家介绍整个流程&#xff0c;但是细节的话还需要大家自己去完善&#xff0c;也欢迎大…

景源畅信数字:抖音直播人气品类有哪些?

随着短视频平台的兴起&#xff0c;抖音成为了人们日常生活中不可或缺的娱乐方式之一。而抖音直播作为平台的重要组成部分&#xff0c;吸引了大量的观众和主播参与。那么&#xff0c;在抖音直播中&#xff0c;哪些品类能够吸引更多的人气&#xff0c;成为观众们关注的焦点呢?接…

C++笔试强训day39

目录 1.神奇的字母&#xff08;二&#xff09; 2.字符编码 3.最少的完全平方数 1.神奇的字母&#xff08;二&#xff09; 链接https://ac.nowcoder.com/acm/problem/205832 看输出描述即可知输出次数最多的那个字母即可。 哈希表直接秒了&#xff1a; #include <iostre…

网络安全快速入门(十五)(中)用户的文件属性及用户相关文件详解

15.4 序言 我们之前已经了解了关于用户管理的一些基础命令&#xff0c;本章节我们就来了解一下关于文件权限的一些小知识以及基于某些文件来手动创建一个用户&#xff0c;话不多说&#xff0c;我们开始吧&#xff01; 15.5 文件权限 在linux中&#xff0c;文件都是通过查看属主…

基于深度学习YOLOv8\YOLOv5的骨科骨折诊断检测系统设计

本文将介绍基于深度学习YOLOv8\YOLOv5PySide6SQLite的骨折检测识别骨科诊断系统&#xff0c;该系统基于YOLOv8算法&#xff0c;并与YOLOv5版本进行比较&#xff0c;该系统不仅实现了对骨折骨损伤的识别&#xff0c;还提供了包括用户认证管理、模型快速切换及界面个性化定制在内…

我成功创建了一个Electron应用程序

1.创建electron项目命令&#xff1a; npm create quick-start/electron electron-memo 2选择&#xff1a;√ Select a framework: vue √ Add TypeScript? ... No √ Add Electron updater plugin? ... Yes √ Enable Electron download mirror proxy? ... Yes 3.命令&am…

【Qt知识】disconnect

在Qt框架中&#xff0c;disconnect函数用于断开信号与槽之间的连接。当不再需要某个信号触发特定槽函数时&#xff0c;或者为了防止内存泄漏和重复执行问题&#xff0c;你可以使用disconnect来取消这种关联。disconnect函数的基本用法可以根据不同的需求采用多种形式&#xff0…

JAVA:浅谈Stream流

在阅读本文章之前请了解什么叫 Lambda表达式 以及 如何使用 一、Stream流 Stream流的使用步骤&#xff1a; 获得一条Stream流&#xff0c;并且将数据放上去 单列集合获取Stream流 // 1. 单列集合获取Stream ArrayList<String> list new ArrayList<String>()…