【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】

本文主要是介绍【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录


目录

  • 系列文章目录
  • 1. 功能框架说明
  • 2. 程序设计
  • 3. 运行结果


1. 功能框架说明

系统功能:
1、档案管理—学生档案、课程档案、选课档案
增加、删除、修改、查询
2、统计管理—学生成绩表
登记成绩、计算加权平均分、总学分
3、文件加载(进入系统时)
读入学生档案、课程档案、选课档案
生成学生成绩表
4、文件保存(退出系统时)
保存学生档案、课程档案、选课档案

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

需要建立三张表,生成一张表:
学生表—关键字是学号
课程表—关键字是课程号
选课表—关键字是学号+课程号
成绩统计表(生成)–关键字是学号

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述
在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述
在这里插入图片描述

学生成绩管理系统旨在提供一个高效且便捷的工具,用于管理学生、课程和选课信息,并生成和显示学生成绩单。系统主要包括以下功能模块:
数据初始化模块:读取学生、课程和选课信息表文件,初始化系统数据。
主菜单模块:显示主菜单,供用户选择操作。
学生信息管理模块:添加、修改、删除和查询学生信息。
课程信息管理模块:添加、修改、删除和查询课程信息。
选课信息管理模块:添加、修改、删除和查询选课信息。
成绩单管理模块:根据选课信息和课程信息生成学生成绩单,并支持显示和排序功能。
数据存储模块:将当前的学生信息、课程信息和选课信息保存到文件中。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈


2. 程序设计

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

程序的主要数据结构包括学生信息、课程信息、选课信息和成绩单信息,具体定义

typedef struct    //学生信息 
{   char xh[10];  //学号char xm[9];   //姓名,最多4个汉字char xb[3];   //性别int nl;       //年龄
} Student;typedef struct    //课程信息
{char kh[8];   //课号char km[11];  //课名,最多5个汉字float xf;     //学分
} Course;typedef struct    //选课信息
{char xh[10];  //学号char kh[8];   //课号float cj;     //成绩
} Select;typedef struct    //成绩信息
{         char xh[9];  //学号float cj[10]; //不超过10门课程成绩float pj;     //加权平均分float zxf;    //总学分
} Score;

Student:表示学生信息,包括学号、姓名、性别和年龄。
Course:表示课程信息,包括课号、课名和学分。
Select:表示选课信息,包括学号、课号和成绩。
Score:表示成绩单信息,包括学号、各门课程成绩、加权平均分和总学分。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

程序模块之间的调用关系可以描述为一个有序的流程,各个模块通过特定的接口函数进行交互和数据传递。
主程序入口:main函数作为程序的入口,初始化数据并调用主菜单函数。

调用init函数读取文件并初始化数据。
调用create_cjlist函数生成成绩单。
调用display_main_menu函数显示主菜单,用户选择相应操作。

数据初始化模块:init函数负责从文件中读取数据并初始化学生信息、课程信息和选课信息。

从slist.txt读取学生信息,存储到Student数组中。
从clist.txt读取课程信息,存储到Course数组中。
从sclist.txt读取选课信息,存储到Select数组中。

主菜单模块:display_main_menu函数显示主菜单,用户通过输入选择执行相应操作。
用户选择操作后,调用相应的管理模块函数,如input_stud、disp_stud、delete_stud等。
学生信息管理模块:实现添加、修改、删除和查询学生信息的功能。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

input_stud函数:添加或修改学生信息。
disp_stud函数:显示学生信息。
delete_stud函数:删除学生信息。
query_stud函数:查询学生信息。

int delete_stud(Student slist[], int scount) //删除学生信息
{   char xh[10]; int i, j, flag = 0;char yes; printf("请输入要删除的学生学号:");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈scanf("%s", xh);for (i = 0; i < scount; i++) {if (strcmp(slist[i].xh, xh) == 0) {printf("找到学生 %s %s %s %d,是否删除(Y/N):", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);fflush(stdin);yes = getchar();if (yes == 'Y' || yes == 'y') {for (j = i; j < scount - 1; j++) {slist[j] = slist[j + 1];}scount--;printf("删除成功\n");}flag = 1;break;}}if (!flag) {printf("未找到学号为 %s 的学生\n", xh);}system("pause");return scount;
}

课程信息管理模块:实现添加、修改、删除和查询课程信息的功能。
input_course函数:添加或修改课程信息。
disp_course函数:显示课程信息。
delete_course函数:删除课程信息。
query_course函数:查询课程信息。

int delete_select(Select sclist[], int sccount) //删除选课信息
{char xh[10], kh[11]; int i, j, flag = 0;char yes; printf("请输入要删除的选课记录学号和课程号:");scanf("%s %s", xh, kh);for (i = 0; i < sccount; i++) {if (strcmp(sclist[i].xh, xh) == 0 && strcmp(sclist[i].kh, kh) == 0) {printf("找到选课记录 %s %s %.1f,是否删除(Y/N):", sclist[i].xh, sclist[i].kh, sclist[i].cj);fflush(stdin);yes = getchar();if (yes == 'Y' || yes == 'y') {for (j = i; j < sccount - 1; j++) {sclist[j] = sclist[j + 1];}sccount--;printf("删除成功\n");}flag = 1;break;>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈}}if (!flag) {printf("未找到学号为 %s 和课程号为 %s 的选课记录\n", xh, kh);}system("pause");return sccount;
}

选课信息管理模块:实现添加、修改、删除和查询选课信息的功能。

input_select函数:添加或修改选课信息。
disp_select函数:显示选课信息。
delete_select函数:删除选课信息。

void query_course(Course clist[], int ccount) //查询课程记录
{   char khkm[11]; int i; printf("请输入要查询的课程号或课程名:");scanf("%s", khkm);for (i = 0; i < ccount; i++) {if (strcmp(clist[i].kh, khkm) == 0 || strcmp(clist[i].km, khkm) == 0) {printf("找到课程:课号:%s 课名:%s 学分:%.1f\n", clist[i].kh, clist[i].km, clist[i].xf);break;}}if (i == ccount) {printf("未找到课程\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈}system("pause");
}

成绩单管理模块:生成和显示学生成绩单,并支持排序功能。

create_cjlist函数:根据选课信息和课程信息生成成绩单。
disp_cjlist函数:显示成绩单信息。
sort_cjlist函数:按加权平均分降序排序成绩单。

数据存储模块:将当前数据保存到文件中,确保数据的持久化。
write_to_file函数:将学生信息、课程信息和选课信息分别保存到slist.txt、clist.txt和sclist.txt文件中。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

主程序入口 (main):

调用init初始化数据。
调用create_cjlist生成初始成绩单。
进入无限循环,根据用户选择调用display_main_menu,显示主菜单并处理用户输入。
根据用户选择分别调用以下函数:
input_stud、input_course、input_select:添加或修改信息。
disp_stud、disp_course、disp_select、disp_cjlist:显示信息。
delete_stud、delete_course、delete_select:删除信息。
query_stud、query_course、query_cjlist:查询信息。 write_to_file:保存信息到文件。
exit(0):退出程序。

数据初始化模块 (init):从文件读取学生、课程和选课信息,分别存储到Student、Course和Select数组中。
成绩单管理模块 (create_cjlist):根据选课信息和课程信息计算每个学生的成绩单信息,存储到Score数组中。
主菜单模块 (display_main_menu):根据用户输入,调用相应的管理函数进行操作。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

int display_main_menu()
{  char c;do{system("cls");printf("\n\n\t\t\t         学生成绩管理系统\n\n");printf("\t\t\t 1.修改或添加学生、课程和选课信息\n");printf("\t\t\t 2.显示学生、课程和选课信息\n");printf("\t\t\t 3.删除学生、课程和选课信息\n");printf("\t\t\t 4.查询学生、课程和选课信息\n");printf("\t\t\t 5.保存学生、课程和选课信息到文件\n");printf("\t\t\t 0.退出\n");printf("\t\t\t 软件作者 学号:032330135 姓名:南小航\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈printf("\n\t\t\t   请选择 (0~5):  ");fflush(stdin);c = getchar();} while (c < '0' || c > '5');return c - '0';
}//读取学生信息表,课程信息表,选课信息表
void init(Student slist[], int *Scount, Course clist[], int *Ccount, Select sclist[], int *SCcount) 
{  FILE *file;char buffer[100];>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈int count;// 读取学生信息表if ((file = fopen("slist.txt", "r")) == NULL) {printf("无法打开学生信息文件\n");exit(1);}count = 0;while (fgets(buffer, sizeof(buffer), file)) {sscanf(buffer, "%[^,],%[^,],%[^,],%d", slist[count].xh, slist[count].xm, slist[count].xb, &slist[count].nl);count++;}fclose(file);*Scount = count;// 读取课程信息表if ((file = fopen("clist.txt", "r")) == NULL) {printf("无法打开课程信息文件\n");exit(1);}count = 0;while (fgets(buffer, sizeof(buffer), file)) {sscanf(buffer, "%[^,],%[^,],%f", clist[count].kh, clist[count].km, &clist[count].xf);count++;}fclose(file);*Ccount = count;// 读取选课信息表if ((file = fopen("sclist.txt", "r")) == NULL) {printf("无法打开选课信息文件\n");exit(1);}count = 0;>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈while (fgets(buffer, sizeof(buffer), file)) {sscanf(buffer, "%[^,],%[^,],%f", sclist[count].xh, sclist[count].kh, &sclist[count].cj);count++;}fclose(file);*SCcount = count;printf("读取学生信息表,课程信息表,选课信息表\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈system("pause");
}

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈


3. 运行结果

主菜单

在这里插入图片描述
修改学生名单

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

修改课程信息
在这里插入图片描述
修改课程信息

在这里插入图片描述
显示学生信息

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述
显示课程信息
在这里插入图片描述
显示成绩单

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述

查询学生信息
在这里插入图片描述

查询课程信息

在这里插入图片描述

查询成绩信息

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

在这里插入图片描述
删除学生信息

在这里插入图片描述
删除课程信息
在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

删除选修信息
在这里插入图片描述

保存到文件
在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈

这篇关于【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002928

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear