C语言:学生成绩管理系统(含源代码)

一.功能

二.源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100
typedef struct
{char no[30];char name[10];char sex[10];char phone[20];float cyuyan;float computer;float datastruct;
} *student, student1;typedef struct
{student stu[MAX_NUM];int number;
} *studentDB;void read(studentDB temp)
{FILE *infile;infile = fopen("./数据.txt", "r");if (!infile){printf("文件打开失败!");exit(0);}while (!feof(infile)){temp->stu[temp->number] = malloc(sizeof(student1));fscanf(infile, "%s %s %s %s %f %f %f", temp->stu[temp->number]->no, temp->stu[temp->number]->name, temp->stu[temp->number]->sex, temp->stu[temp->number]->phone, &(temp->stu[temp->number]->cyuyan), &(temp->stu[temp->number]->computer), &(temp->stu[temp->number]->datastruct));temp->number++;}fclose(infile);
}void write(studentDB temp)
{FILE *outfile;outfile = fopen("./数据.txt", "w");if (!outfile){printf("文件打开失败!");exit(1);}if (temp && temp->number > 0){int i;for (i = 0; i < temp->number; i++){if (i == temp->number - 1){fprintf(outfile, "%s %s %s %s %.2f %.2f %.2f", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);}else{fprintf(outfile, "%s %s %s %s %.2f %.2f %.2f\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);}}}fclose(outfile);printf("保存成功");read(temp);
}void display(studentDB temp)
{int i;printf("|   学号   |姓名|性别|  手机号  |c语言|英语|高等数学|\n");for (i = 0; i < temp->number; i++){printf("%s %s %s %s %.2f %.2f %.2f\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);}
}void menu()
{printf("\n\n\t****************************简单学生信息管理系统*****************************\n");printf("\t*                              1.显示学生信息                             *|\n");printf("\t*                              2.增加学生信息                             *|\n");printf("\t*                              3.删除学生信息                             *|\n");printf("\t*                              4.修改学生信息                             *|\n");printf("\t*                              5.查询学生信息                             *|\n");printf("\t*                              6.排序学生成绩                             *|\n");printf("\t*                              7.计算学生平均成绩                         *|\n");printf("\t*                              8.保存学生信息                             *|\n");printf("\t*                              9.统计全部课程及格人数                     *|\n");printf("\t*                              10.输出总成绩最高的学生信息                *|\n");printf("\t*                              0.退出系统                                 *|\n");printf("\t***************************************************************************\n");printf("请选择你的操作并将序号输入:");
}int countDigits(long long n)
{int count = 0;while (n > 0){n /= 10;count++;}return count;
}void insert(studentDB temp)
{char no[30];printf("请输入要添加学生的学号:");scanf("%s", no);int n;long long num;sscanf(no, "%lld", &num);n = countDigits(num);if (n != 11){printf("输入的学号位数有误,请重新输入!");return;}else{student1 stu;FILE *outfile;outfile = fopen("./数据.txt", "a");if (!outfile){printf("文件打开失败!");exit(0);}strcpy(stu.no, no);printf("请输入姓名:");scanf("%s", stu.name);printf("请输入性别:");scanf("%s", stu.sex);printf("请输入手机号:");scanf("%s", stu.phone);printf("请输入c语言成绩(带小数点):");scanf("%f", &stu.cyuyan);printf("请输入英语成绩(带小数点):");scanf("%f", &stu.computer);printf("请输入高等数学成绩(带小数点):");scanf("%f", &stu.datastruct);n = fprintf(outfile, "\n%s %s %s %s %f %f %f", stu.no, stu.name, stu.sex, stu.phone, stu.cyuyan, stu.computer, stu.datastruct);printf("%s %s %s %s %.2f %.2f %.2f", stu.no, stu.name, stu.sex, stu.phone, stu.cyuyan, stu.computer, stu.datastruct);printf("学生信息已成功插入!信息长度:%d\n", n);fclose(outfile);read(temp);return;}
}void delete(studentDB temp)
{printf("请输入要删除的学生信息学号:");char no[15];int i, k;scanf("%s", no);printf("%s", no);for (i = 0; i < temp->number; i++){if (strcmp(temp->stu[i]->no, no) == 0){for (k = i; k < temp->number; k++){temp->stu[k] = temp->stu[k + 1];}free(temp->stu[temp->number]);temp->number--;printf("学生信息已成功删除!\n");return;}}printf("学生学号输入错误!");return;
}void modify(studentDB temp)
{printf("请输入要修改的学生信息学号:");char no[15];int i, flag = 0;long num;scanf("%s", no);sscanf(no, "%ld", &num);for (i = 0; i < temp->number; i++){if (strcmp(no, temp->stu[i]->no) == 0){printf("\n学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f\n\n\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);printf("|1.学号|2.姓名|3.性别|4.手机号|5.c语言成绩|6.英语成绩|7.高等数学成绩|8.不改动并返回菜单|9.依次修改全部数据\n\n\n请输入要改动的数据项:");scanf("%d", &flag);switch (flag){case 1:printf("请输入要修改的学号:");scanf("%s", temp->stu[i]->no);break;case 2:printf("请输入姓名:");scanf("%s", temp->stu[i]->name);break;case 3:printf("请输入性别:");scanf("%s", temp->stu[i]->sex);break;case 4:printf("请输入手机号:");scanf("%s", temp->stu[i]->phone);break;case 5:printf("请输入c语言成绩(带小数点):");scanf("%f", &(temp->stu[i]->cyuyan));break;case 6:printf("请输入英语成绩(带小数点):");scanf("%f", &(temp->stu[i]->computer));break;case 7:printf("请输入高等数学成绩(带小数点):");scanf("%f", &(temp->stu[i]->datastruct));break;case 8:return;case 9:printf("请输入姓名:");scanf("%s", temp->stu[i]->name);printf("请输入性别:");scanf("%s", temp->stu[i]->sex);printf("请输入手机号:");scanf("%s", temp->stu[i]->phone);printf("请输入c语言成绩(带小数点):");scanf("%f", &(temp->stu[i]->cyuyan));printf("请输入英语成绩(带小数点):");scanf("%f", &(temp->stu[i]->computer));printf("请输入高等数学成绩(带小数点):");scanf("%f", &(temp->stu[i]->datastruct));break;default:printf("请重新选择!");break;}return;}}
}void search(studentDB temp)
{printf("请输入要查询的学生信息学号:");char no[30];int i, n;long long num;scanf("%s", no);sscanf(no, "%lld", &num);n = countDigits(num);if (n != 11){printf("输入的学号位数有误,请重新输入!");return;}else{for (i = 0; i < temp->number; i++){if (strcmp(temp->stu[i]->no, no) == 0){printf("\n学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f\n\n\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);return;}}printf("学生学号输入错误!");return;}
}void sort(studentDB temp)
{int i, j, n;float t;for (i = 0; i < temp->number; i++){for (j = i + 1; j < temp->number; j++){if ((temp->stu[i]->cyuyan + temp->stu[i]->computer + temp->stu[i]->datastruct) < (temp->stu[j]->cyuyan + temp->stu[j]->computer + temp->stu[j]->datastruct)){student1 *tempstu = temp->stu[i];temp->stu[i] = temp->stu[j];temp->stu[j] = tempstu;}}}printf("已按成绩排序完成!\n");
}void average(studentDB temp)
{int i;float ctotal = 0, comtotal = 0, dstotal = 0;for (i = 0; i < temp->number; i++){ctotal += temp->stu[i]->cyuyan;comtotal += temp->stu[i]->computer;dstotal += temp->stu[i]->datastruct;}printf("C语言平均成绩:%.2f 英语平均成绩:%.2f 高等数学平均成绩:%.2f\n", ctotal / temp->number, comtotal / temp->number, dstotal / temp->number);
}void passing(studentDB temp)
{int i, cpass = 0, compass = 0, dpass = 0;for (i = 0; i < temp->number; i++){if (temp->stu[i]->cyuyan >= 60){cpass++;}if (temp->stu[i]->computer >= 60){compass++;}if (temp->stu[i]->datastruct >= 60){dpass++;}}printf("C语言及格人数:%d 英语及格人数:%d 高等数学及格人数:%d\n", cpass, compass, dpass);
}void max(studentDB temp)
{int i, index = 0;float maxScore = 0;for (i = 0; i < temp->number; i++){float totalScore = temp->stu[i]->cyuyan + temp->stu[i]->computer + temp->stu[i]->datastruct;if (totalScore > maxScore){maxScore = totalScore;index = i;}}printf("学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f 总成绩:%.2f\n", temp->stu[index]->no, temp->stu[index]->name, temp->stu[index]->sex, temp->stu[index]->phone, temp->stu[index]->cyuyan, temp->stu[index]->computer, temp->stu[index]->datastruct, maxScore);
}int main()
{int select;studentDB stu = malloc(sizeof(studentDB));stu->number = 0;read(stu);do{menu();scanf("%d", &select);switch (select){case 1:display(stu);break;case 2:insert(stu);break;case 3:delete (stu);break;case 4:modify(stu);break;case 5:search(stu);break;case 6:sort(stu);break;case 7:average(stu);break;case 8:write(stu);break;case 9:passing(stu);break;case 10:max(stu);break;case 0:exit(1);}} while (1);return 0;
}

三.注意事项

(1)事先准备: 数据.txt 文件(可以含有学生信息,可以空白,但是必须有)

(2)学号为11

(3)该代码不含有C99或者C11

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

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

相关文章

SQL Server定期收缩日志文件详细步骤——基于SQL Server 2012

SQL Server定期收缩日志文件详细步骤 一、环境配置1、查看数据库的属性2、文件设置3、备份模式4、查看收缩配置5、查看收缩选项 二、编写作业计划1、选择新建作业2、常规配置3、步骤4、输入内容5、脚本详解6、新建计划7、输入名称、选择执行时间8、查看测试9、查看测试结果 一、…

如何学习ai agent?

如何学习Agent&#xff0c;推荐阅读《动手做AI Agent》这本书。 推荐理由&#xff1a; 1&#xff1a;一本书能够全方位了解并探索Agent的奥秘&#xff01; &#xff08;1&#xff09;Agent的发展进程。 &#xff08;2&#xff09;可以帮我们做哪些事&#xff1a;自动办公&am…

COZE工作流超详细教程(胎教版)

前言 不知道有没有人和我一样喜欢经常收集一些好看的壁纸&#xff0c;但是有时候寻找的壁纸却总是差强人意。最近在学习COZE的时候搭建了一个自己的智能体通过工作流设计感觉还不错今天和大家分享分享。COZE的工作流界面友好&#xff0c;操作直观&#xff0c;即便是没有设计经…

6月2号训练(Codeforces Round 306 (Div. 2))(待补)

前言&#xff1a; 昨天晚上的训练&#xff0c;昨天下午刚刚打了百度的编程之星大赛&#xff0c;已经被题目橄榄了&#xff0c;榜上清一色的都是搞oi的中学生大佬&#xff0c;而我想了一下午也才只写了一道题&#xff0c;只能说路阻且长啊。晚上去洗了个澡&#xff0c;就没怎么认…

jmeter发送webserver请求和上传请求

有时候在项目中会遇到webserver接口和上传接口的请求&#xff0c;大致参考如下 一、发送webserver请求 先获取登录接口的token&#xff0c;再使用cookie管理器进行关联获取商品(webserver接口)&#xff0c;注意参数一般是写在消息体数据中&#xff0c;消息体有点像HTML格式 执…

算法工程师需要学习C++的哪些知识?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;以下是算法工程师需要学习的一些…

输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)

解题思路&#xff1a; 定义两个&#xff08;int*&#xff09;型指针变量p1和p2&#xff0c;使它们分别指向a和b。使p1指向a和b中的大者&#xff0c;p2指向小者&#xff0c;顺序输出*p1,*p2就实现了按先大后小的顺序输出a和b。 编写程序&#xff1a; 运行结果&#xff1a; 程序…

coredns 被误删了,可以通过重新应用 coredns 的 Deployment 或 DaemonSet 配置文件来恢复

如果 coredns 被误删了&#xff0c;可以通过重新应用 coredns 的 Deployment 或 DaemonSet 配置文件来恢复。以下是恢复 coredns 的步骤&#xff1a; 1. 下载 coredns 配置文件 你可以从 Kubernetes 的官方 GitHub 仓库下载 coredns 的配置文件。以下是下载并应用配置文件的步…

计算机网络学习实践:模拟RIP动态路由

计算机网络学习实践&#xff1a;模拟RIP动态路由 模拟动态路由RIP协议 1.实验准备 实验环境&#xff1a;华为模拟器ENSP 实验设备&#xff1a; 3个路由器&#xff0c;3个二层交换机&#xff08;不是三层的&#xff09;&#xff0c;3个PC机 5个网段 192.168.1.0 255.255.…

Aras Innovator-Team(群组)的使用方法

当Aras Innovator在处理权限时&#xff0c;在不使用Team的情况下&#xff0c;系统的权限配置可以满足大部分业务场景&#xff0c;如&#xff1a;常见的按照组织架构&#xff0c;成员和角色分配权限&#xff0c;按照生命周期分配权限等。 如果遇到比较复杂的权限需求&#xff0c…

慢SQL的治理思路

慢SQL的治理思路 什么是慢SQL慢SQL产生的原因查看慢 SQL 是否开启开启慢 SQL 记录开启慢查询日志分析慢 SQL解决和优化慢SQL的方法 什么是慢SQL 慢 SQL 指的是 MySQL 中执行比较慢的 SQL&#xff0c;排查慢 SQL 最常用的方法是通过慢查询日志来查找慢 SQL。 MySQL 的慢查询日志…

深度学习复盘与论文复现B

文章目录 1、Knowledge Review1.1 NLLLoss vs CrossEntropyLoss1.2 MNIST dataset1.2.1 Repare Dataset1.2.2 Design Model1.2.3 Construct Loss and Optimizer1.2.4 Train and Test1.2.5 Training results Pytorch-Lightning MNIST :rocket::fire:1.3 Basic Convolutional Neu…

961题库 北航计算机 计算机网络 附答案 简答题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 某网络拓扑如题下图所示&#xff0c;其中 R 为路由器&#xff0c;主机 H1&#xff5e;H4 的 IP 地址配置以及 R 的各接口 IP 地址配置如图中所示。现有若干以太网交换机…

Flask发送邮件有哪些步骤?怎么保障安全?

Flask发送邮件的模板如何设置&#xff1f;如何测试邮件发送功能&#xff1f; 无论是账户激活、密码重置&#xff0c;还是通知提醒&#xff0c;邮件系统的集成都显得尤为重要。AokSend将详细介绍如何在Flask应用中实现发送邮件的功能&#xff0c;并分步骤讲解其具体实现过程。 …

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt

文章目录 1.1 Qt 简介1.2 Qt 的安装1.3 编写 Hello World 1.1 Qt 简介 Qt&#xff08;官网&#xff1a;https://www.qt.io&#xff09;于1995年5月首次公开发布&#xff0c;是一个跨平台的应用程序开发框架&#xff0c;也是最主流的 C 开发框架&#xff1b; Qt 具有其他编程…

Qt6.7 Android第一次尝试

安装qt online installer https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/qt-unified-windows-x64-online.exe选择Android 和 Desktop, 然后默认安装 安装完成后设置Android Sdk, 这里可以直接使用在线下载(因为我也不会怎么配置Android SDK和…

界面控件DevExpress WinForms的流程图组件 - 可完美复制Visio功能(一)

DevExpress WinForms的Diagram&#xff08;流程图&#xff09;组件允许您复制Microsoft Visio中的许多功能&#xff0c;并能在下一个Windows Forms项目中引入信息丰富的图表、流程图和组织图。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows F…

挂上了代理加速器梯子之后,Git clone指令下载仍旧很慢的问题

当你使用了各种代理软件访问诸如Github、Google、油管、推特这些网址&#xff0c;你会发现基本可以访问&#xff0c;只不过是访问速度不同&#xff0c;但是不管你使用什么代理软件&#xff0c;你的git clone指令从Github远程库下载库的速度都不会受到影响。 当使用代理软件访问…

Android精通值Fragment的使用 —— 不含底层逻辑(五)

1. Fragment 使用Fragment的目标&#xff1a;根据列表动态显示内容&#xff0c;更简洁显示界面、查找界面 eg. 使用新闻列表动态显示新闻 1.1 Fragment的特性 具备生命周期 —— 可以动态地移除一些Fragment必须委托在Activity中使用可以在Activity中进行复用 1.2 Fragmen…

稍微学学react

文章开始前&#xff0c;先划划水~ 今日份开心&#xff1a; 今天看之前发布的按钮npm包下载量有162次&#xff0c;早知道好好做了 今日份不开心&#xff1a; 爬岗位看到一个整体都挺满意的岗位&#xff0c;公司位置和发展大方向都好喜欢&#xff01;&#xff01;&#xff01;…