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

功能

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

库函数

#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.mzph.cn/pingmian/22840.shtml

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

相关文章

使用Matlab软件绘制函数图像

【实验目的】 1.利用Matlab实现平面上曲线和三维空间中曲线绘制&#xff0c;重点掌握隐函数、极坐标图像绘制的相关命令。 2.利用Matlab实现三维曲面绘制&#xff0c;加深对高等数学课程所学内容的理解 【实验内容与实现】 1、用两种方法绘制下面的曲线图 &#xff08;1&am…

Autodesk 3ds Max软件下载安装;3ds Max功能强大的三维建模、渲染软件安装包获取

3ds Max&#xff0c;无论是初学者还是资深设计师&#xff0c;都能通过3ds Max在数字世界中实现自己的创意&#xff0c;打造出令人惊叹的三维作品。 在3ds Max中&#xff0c;灯光系统是至关重要的一环。它提供了光度学灯光和标准灯光两种主要类型&#xff0c;用于照亮和增强场景…

Spring家族中的消息通信解决方案

相信大家对消息通信架构以及各种消息中间件应该都不陌生。在分布式系统的设计和开发过程中&#xff0c;消息通信是用于实现系统解耦、提高扩展性的一大技术体系。而业界关于如何实现消息通信系统也有很多解决方案和对应的开发框架。不知道你有没有发现&#xff0c;在我们每天都…

计算机英文教材太难啃?Higress 和通义千问帮你!

作者&#xff1a;张添翼&#xff08;澄潭&#xff09; 计算机相关英文教材的中译本质量堪忧&#xff0c;对于计算机专业的学生来说&#xff0c;应该深有体会。因为大部分教材的译者本人可能未必完全吃透书中技术内容&#xff0c;又或者是领域技术大拿&#xff0c;但并不擅长英…

数据结构的归并排序(c语言版)

一.归并排序的基本概念 1.基本概念 归并排序是一种高效的排序算法,它采用了分治的思想。它的基本过程如下: 将待排序的数组分割成两个子数组,直到子数组只有一个元素为止。然后将这些子数组两两归并,得到有序的子数组。不断重复第二步,直到最终得到有序的整个数组。 2.核心…

LabVIEW2017破解安装教程

LabVIEW2017破解安装教程&#xff1a; 1、新版LabVIEW2017分为32位和64位两个平台&#xff0c;多种语言版本(需要LabVIEW2017中文版的朋友请选择WinChn版本)&#xff0c;大家选择自行选择符合系统的版本下载并解压 2、本次安装以Win 7 64位系统为例&#xff0c;运行“2017LV-64…

龙蜥社区 5 月度运营大事件回顾

各位龙蜥社区的朋友们&#xff0c;你们好&#xff01; 龙蜥社区 5 月运营月报如期而至&#xff01;本次从特别图送、龙蜥生态、龙蜥活动、龙蜥 SIG 月度动态、精彩内容推荐等几方面总结、回顾了 5 月发生的重要事件。

设计模式之过滤器模式FilterPattern(十)

一、过滤器模式 过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种设计模式&#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模…

【长亭雷池WAF——“动态防护”功能深度体验】

前言&#xff1a; 在当今的网络安全环境中&#xff0c;Web应用防火墙&#xff08;WAF&#xff09;扮演着至关重要的角色。它们不仅能够防御常见的Web攻击&#xff0c;如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;等&#xff0c;还能够应对日益复杂的网络威胁。 长亭…

如何通过 6 种简单方法将照片从华为转移到 PC?

华为作为全球领先的智能手机供应商之一&#xff0c;最近推出了其自主研发的操作系统——HarmonyOS 2.0&#xff0c;旨在为智能手机、平板电脑和智能手表等设备提供更流畅的用户体验。随着Mate 40/P40等系列手机计划升级到HarmonyOS 2.0&#xff0c;用户可能需要将手机中的文件备…

CAM350如何快速删除Gerber文件上的东西?

文章目录 CAM350如何快速删除Gerber文件上的东西?CAM350如何快速保存已经修改的Gerber文件? CAM350如何快速删除Gerber文件上的东西? CAM如何导入Gerber文件见此篇 今天遇上了一个删除Gerber文件上部分字母的任务&#xff0c;CAM350只能一点点删除线的操作把我手指头差点按…

订单排队与链动模式塑造社交电商新格局

在数字化浪潮中&#xff0c;社交电商凭借其独特的魅力与潜力&#xff0c;正逐渐崭露头角。本文将解读一种融合了订单排队与链动模式的创新商业模式。这一模式旨在通过提高消费者复购率&#xff0c;优化销售流程&#xff0c;从而推动销售增长&#xff0c;塑造社交电商新生态。 …

Mybatis03-ResultMap及分页

1、属性名和字段名不一致问题 1.问题 数据库中的字段 新建一个项目Mybatis-04&#xff0c;拷贝之前&#xff0c;测试实体类字段不一致的情况 public class User {private int id;private String name;private String password; }select * from mybatis.user where id #{id} …

2024年宜昌中级工程师职称如何申报呢?

今年宜昌中级职称如何报名&#xff1f;怎么申报&#xff1f;申报时间是什么时候呢&#xff1f;报名条件是什么呢&#xff1f; 一、2024年宜昌中级职称申报条件&#xff1a;1.社保条件&#xff1a;在宜昌本地注册登记6个月以上民营企业&#xff0c;专业技术岗位从事工程技术工作…

苍穹外卖笔记-02-借助小乌龟创建gitee仓库,apifox代替YApi,Swagger

TOC 1 借助小乌龟创建gitee苍穹外卖仓库 这里建议看视频bilibili比特鹏哥视频 使用软件 git TortoiseGit https://git-scm.com/downloads https://tortoisegit.org/ 使用代码托管平台gitee&#xff0c;git的使用和gitee的账号创建需要查询其他资料 在一个从未克隆仓库的…

3389远程桌面,如何进行3389远程桌面的连接操作

随着信息技术的快速发展&#xff0c;远程桌面连接技术逐渐成为企业、教育以及个人用户进行远程办公、技术支持以及协作交流的重要工具。其中&#xff0c;3389远程桌面因其稳定性和易用性而备受青睐。本文将从专业角度出发&#xff0c;为您详细介绍如何进行3389远程桌面的连接操…

大模型产品的选择:独特优势与个人倾向

层出不穷的大模型产品&#xff0c;你怎么选&#xff1f; 随着近日腾讯元宝APP的正式上线&#xff0c;国内大模型产品又添一员。关于接连出现的“全能“大模型AIGC产品&#xff0c;你都用过哪些呢&#xff1f;不妨来分享一下你的使用体验吧&#xff01;在这些大模型产品中&…

【React篇 】React项目中常用的工具库

我们可以从项目初始化、开发、构建、检查及发布的顺序总结react项目开发常用的工具库。 首先是初始化。 初始化工程项目一般用官方维护的 create-react-app&#xff0c;这个工具使用起来简单便捷&#xff0c;但 create-react-app 的配置隐藏比较深&#xff0c;修改配置时搭配…

LC 26删除有序数组中的重复项

去重题&#xff0c;双指针&#xff0c;&#xff0c;因为题干说原地删除&#xff0c;且nums其余元素不重要。一个cur记录当前不重复的数应该插在第几位了&#xff0c;for循环里的i相当于是第二个指针&#xff08;右指针&#xff09;&#xff0c;遍历数组来找不重复的元素 class …

数据结构:模拟队列

数据结构&#xff1a;模拟队列 题目描述参考代码 题目描述 输入样例 10 push 6 empty query pop empty push 3 push 4 pop query push 6输出样例 NO 6 YES 4参考代码 #include <iostream>using namespace std;const int N 100010;int q[N], hh, tt;int m, x; string …