【C语言】C语言 学生成绩管理系统(源码+报告)【千行代码】【独一无二】

news2025/5/19 15:45:32

请添加图片描述


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


【C语言】C语言 学生成绩管理系统(源码+报告)【千行代码】【独一无二】


目录

  • 【C语言】C语言 学生成绩管理系统(源码+报告)【千行代码】【独一无二】
  • 一、设计要求
  • 二、设计思路
    • 2.1 主菜单模块
    • 2. 2 学生信息管理模块
    • 2.3 显示课程信息
    • 2.4 删除课程信息
    • 2.5 成绩单管理模块
    • 2.6 显示成绩单
    • 其他模块解释略....
  • 三、可视化分析
    • 主菜单
    • 修改学生名单
    • 修改课程信息
    • 显示课程信息
    • 显示学生信息
    • 显示课程信息
    • 显示成绩单
    • 查询学生信息
    • 查询成绩信息
    • 删除学生信息
    • 删除课程信息
    • 保存到文件


一、设计要求

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

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


二、设计思路

在这里插入图片描述

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

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;

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

Student:表示学生信息,包括学号、姓名、性别和年龄。
Course:表示课程信息,包括课号、课名和学分。
Select:表示选课信息,包括学号、课号和成绩。
Score:表示成绩单信息,包括学号、各门课程成绩、加权平均分和总学分。
这些数据结构用于存储和管理系统中的各类信息。

首先需要定义程序所需的数据结构、全局变量、常量以及各个函数。数据的定义包括学生信息、课程信息、选课信息和成绩单信息的结构体定义,以及用于操作这些数据的函数定义。
这些结构体定义描述了学生、课程、选课和成绩的相关信息。

  1. Student 结构体:
    xh :学号,用字符数组表示,长度为10。
    xm :姓名,用字符数组表示,长度为9。注释提到最多4个汉字,但实际长度是9,可能是为了容纳更多的字符。
    xb :性别,用字符数组表示,长度为3。通常只需要一个字符表示性别,这里可能是为了包含空字符(‘\0’)。
    nl :年龄,用整型表示。

  2. Course 结构体:
    kh :课号,用字符数组表示,长度为8。
    km :课名,用字符数组表示,长度为11。注释提到最多5个汉字,但实际长度是11,同样可能是为了容纳更多的字符。
    xf :学分,用浮点数表示。

  3. Select 结构体:
    xh :学号,用字符数组表示,长度为10。
    kh :课号,用字符数组表示,长度为8。
    cj :成绩,用浮点数表示。

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

  1. Score 结构体:
    xh :学号,用字符数组表示,长度为9。注释中长度为9,与其他结构体中的长度不同,可能是一个错误。
    cj :课程成绩数组,用浮点数表示,长度为10。注释中说明不超过10门课程成绩。
    pj :加权平均分,用浮点数表示。
    zxf :总学分,用浮点数表示。
    结构体可以用来表示学生、课程、选课和成绩信息,可以方便地进行相关数据的存储和操作,比如记录学生选课情况、计算学生的平均成绩等。

2.1 主菜单模块

主菜单模块提供用户界面,让用户可以选择各种操作。display_main_menu函数用于显示菜单并处理用户输入。
代码定义了一个函数 display_main_menu() ,用于显示学生成绩管理系统的主菜单,并返回用户选择的菜单项。函数通过一个 do-while 循环来实现,循环条件是用户输入的字符不在 ‘0’ 到 ‘5’ 的范围内。在循环体内,首先调用 system(“cls”) 清空控制台屏幕,然后使用 printf 输出主菜单选项以及作者信息。用户被提示选择一个菜单选项,并通过 getchar() 获取用户输入的字符,这个字符被存储在变量 c 中。若用户输入不在合法范围内,则继续显示主菜单直至输入正确为止。最后,函数返回用户选择的菜单项对应的整数值。

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

该函数的设计简洁明了,通过循环确保了用户只能选择合法的菜单选项,防止了输入错误的情况。菜单项的显示清晰明了,包括了各种功能选项以及作者信息,使用户能够方便地了解系统功能并选择操作。

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';
}

2. 2 学生信息管理模块

学生信息管理模块包含添加、修改、删除和查询学生信息的功能。
添加或修改学生信息 (input_stud):

这段代码定义了一个名为 input_stud 的函数,用于向学生信息数组中输入新的学生信息。函数接受两个参数:一个是存储学生信息的数组 slist ,另一个是当前已存在的学生数量 scount 。在函数内部,首先创建一个临时的 Student 结构体变量 temp 用于存储新输入的学生信息。然后,通过一系列 printf 和 scanf 语句,提示用户输入学号、姓名、性别和年龄,并将输入的信息存储到 temp 变量中。接着,使用 for 循环遍历已存在的学生信息数组,检查输入的学号是否已经存在于数组中。如果找到了相同学号的学生,则询问用户是否要覆盖已存在的学生信息,若用户选择覆盖,则更新对应位置的学生信息。如果输入的学号在数组中不存在,则将新的学生信息存储到数组的末尾,并将已存在的学生数量 scount 增加一。最后,函数返回更新后的学生数量 scount 。

int input_course(Course clist[], int ccount)
{ 
    Course temp;
    int i; 
    char yes;

    printf("请输入课号:");
    scanf("%s", temp.kh);
    printf("请输入课名:");
    scanf("%s", temp.km);
    printf("请输入学分:");
    scanf("%f", &temp.xf);

    for (i = 0; i < ccount; i++) {
        if (strcmp(clist[i].kh, temp.kh) == 0) {
            printf("课程已存在,是否覆盖(Y/N):");
            fflush(stdin);
            yes = getchar();
            if (yes == 'Y' || yes == 'y') {
                clist[i] = temp;
            }
            return ccount;
        }
    }

    clist[ccount++] = temp;

    return ccount;
}

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

2.3 显示课程信息

这段代码定义了一个名为 disp_stud 的函数,用于显示学生信息。函数接受两个参数:一个是存储学生信息的数组 slist ,另一个是当前已存在的学生数量 scount 。在函数内部,首先使用 printf 输出表头,包括学号、姓名、性别和年龄等字段。然后,通过 for 循环遍历学生信息数组,逐一输出每个学生的学号、姓名、性别和年龄。每个字段之间用制表符 \t 分隔,每个学生信息占据一行。最后,使用 system(“pause”) 函数暂停程序的执行,等待用户按下任意键继续。


void disp_stud(Student slist[], int scount) //显示学生信息
{
    int i;
    printf("学号\t姓名\t性别\t年龄\n");
    for (i = 0; i < scount; i++) {
        printf("%s\t%s\t%s\t%d\n", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);
    }
    system("pause");
}

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

2.4 删除课程信息

定义了一个名为 delete_course 的函数,用于删除课程信息数组中的某一门课程。函数接受两个参数:一个是存储课程信息的数组 clist ,另一个是当前已存在的课程数量 ccount 。在函数内部,首先声明了一些变量,包括用于存储用户输入课程号的字符数组 kh 、循环中的计数变量 i 和 j 、用于标记是否找到要删除的课程的标志变量 flag ,以及用于接收用户是否删除的字符 yes 。然后,通过 printf 提示用户输入要删除的课程号,并通过 scanf 获取用户输入的课程号。接着,通过 for 循环遍历课程信息数组,查找与用户输入的课程号匹配的课程。若找到匹配的课程,则提示用户找到课程信息,并询问用户是否删除该课程。若用户确认删除,则通过另一个嵌套的 for 循环将数组中该课程后面的所有课程向前移动一个位置,同时将课程数量减一,以实现删除操作。最后,根据是否找到课程,输出相应的提示信息,并通过 system(“pause”) 暂停程序的执行,等待用户按下任意键继续,最后返回更新后的课程数量 ccount 。

int delete_course(Course clist[], int ccount)  //删除课程信息
{   
    char kh[11]; 
    int i, j, flag = 0;
    char yes; 

    printf("请输入要删除的课程号:");
    scanf("%s", kh);

    for (i = 0; i < ccount; i++) {
        if (strcmp(clist[i].kh, kh) == 0) {
            printf("找到课程 %s %s %.1f,是否删除(Y/N):", clist[i].kh, clist[i].km, clist[i].xf);
            fflush(stdin);
            yes = getchar();
            if (yes == 'Y' || yes == 'y') {
                for (j = i; j < ccount - 1; j++) {
                    clist[j] = clist[j + 1];
                }
                ccount--;
                printf("删除成功\n");
            }
            flag = 1;
            break;
        }
    }
    if (!flag) {
        printf("未找到课程号为 %s 的课程\n", kh);
    }

    system("pause");
    return ccount;
}

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

2.5 成绩单管理模块

代码 略...

2.6 显示成绩单

定义了一个名为 disp_cjlist 的函数,用于显示成绩列表中每个学生的成绩情况。函数接受四个参数:一个是存储成绩信息的数组 cjlist ,一个是成绩列表中学生数量 cjcount ,另外两个是存储学生信息的数组 slist 以及学生数量 scount 。在函数内部,通过两个嵌套的 for 循环遍历成绩列表数组和学生信息数组,对每个学生进行处理。在内部循环中,首先比较学生学号,找到与成绩列表中学号匹配的学生信息,并输出学号和姓名。然后,通过另一个循环输出学生的课程成绩,以及加权平均分和总学分。在课程成绩输出时,限制最多输出10门课程的成绩,并且当成绩为0时停止输出。最后,通过 system(“pause”) 函数暂停程序的执行,等待用户按下任意键继续。

代码 略...

其他模块解释略…

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


三、可视化分析

主菜单

在这里插入图片描述

修改学生名单

在这里插入图片描述

修改课程信息

在这里插入图片描述

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

显示课程信息

在这里插入图片描述

显示学生信息

在这里插入图片描述

显示课程信息

在这里插入图片描述

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

显示成绩单

在这里插入图片描述

查询学生信息

在这里插入图片描述

查询成绩信息

在这里插入图片描述

删除学生信息

在这里插入图片描述

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

删除课程信息

在这里插入图片描述

保存到文件

在这里插入图片描述

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


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

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

相关文章

SpringCloud架构师面试

一、微服务是什么 1、基本概念 微服务是一种架构风格&#xff08;区别于单体架构、垂直架构、分布式架构、SOA架构&#xff09;&#xff0c;应用程序被划分为更小的、流程驱动的服务。 2、微服务的特征 轻量化&#xff1a;将复杂的系统或者服务进行纵向拆分&#xff0c;每个…

前端工程化(01):10款自动化构建工具初识。

前端工程化自动化构建工具是用于简化前端开发流程、提高开发效率和优化项目质量的工具。市面上的工具多种多样&#xff0c;贝格前端工场先介绍一下什么是前端工程化&#xff0c;为什么要前端工程化&#xff0c;以及常用工具&#xff0c;后面会对各种工具逐一介绍。 一、什么是…

【计算机组成原理 | 第三篇】各个硬件的组成部分

前言&#xff1a; 在前面的文章中&#xff0c;我们介绍了计算机架构的基本组成。可以知道计算机的基本架构由“存储器”&#xff0c;“运算器”&#xff0c;“控制器”&#xff0c;“输入设备”&#xff0c;“输出设备”这五部分组成。 在这片文章中&#xff0c;我们来深入的了…

文件编码、文件读取 (继续学习!)

1、文件编码 计算机中有许多可用编码&#xff1a; UTF-8&#xff08;通用编码&#xff09; GBK&#xff08;中文体系经常使用&#xff09; Big5&#xff08;繁体字经常使用&#xff09; 1&#xff09;编码的定义 即规则集合&#xff0c;记录了内容和二进制之间进行相互转…

java的遍历的方法对比 效率对比

在 Java 中&#xff0c;遍历对象的方式主要取决于对象的类型和数据结构。以下是几种常见的遍历方式&#xff0c;以及它们的效率比较&#xff1a; 普通的 for 循环&#xff1a; 效率&#xff1a;高。使用普通的 for 循环可以直接根据索引来访问元素&#xff0c;适用于数组和实现…

软件测试面试题及答案,2024最强版

导读 精选400道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、APP测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块…

Nginx配置基础

ect/nginx/nginx.conf配置 1&#xff09;nginx 相关目录 工作目录&#xff1a;ect/nginx 家目录 执行文件&#xff1a;/usr/sbin/nginx 启动或重载 sudo /usr/sbin/nginx -t 检查配置文件 sudo /usr/sbin/nginx -s reload 重启服务 日志文件&#xff1a;/var/log/nginx 启动文…

除2! (题目来源:牛客)

题目来源&#xff1a;牛客网 给一个数组&#xff0c;一共有n个数。 你能进行最多k次操作。每次操作可以进行以下步骤&#xff1a; 选择数组中的一个偶数 a&#xff0c;将其变成a/2。 现在你进行不超过 k 次操作后&#xff0c;让数组中所有数之和尽可能小。请输出这个最小的和。…

虚幻引擎图文笔记:虚幻5(UE5.1.1)无法新建C++项目问题的解决

问题截图&#xff1a; Running E:/Unreal Engine/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -project"E:/Unreal_Projects/UE5.1/TanChiShe/TanChiShe.uproject" -game -rocket -progress Running UnrealBuildTool: dotnet "..\..\Engine\Binar…

小巧低调的黑盒子,打造个性化音乐体验,欧尼士ONIX Alpha小尾巴上手

欧尼士ONIX的产品很有辨识度&#xff0c;这家来自英国的品牌&#xff0c;有着鲜明的黑金设计色彩&#xff0c;以及低调奢华的质感&#xff0c;当然最重要的是&#xff0c;欧尼士的音质表现非常出色&#xff0c;因此深受音乐爱好者的喜爱。在以手机等设备为载体的流媒体音乐盛行…

视频太大怎么压缩变小?这几种压缩方法值得收藏!

视频太大怎么压缩变小&#xff1f;在数字化浪潮汹涌的时代&#xff0c;处理大型视频文件已不再仅仅是存储空间的挑战&#xff0c;我们身处于数据洪流之中&#xff0c;数据的安全与隐私的保护已然成为了我们不得不面对的重大议题&#xff0c;特别是随着视频内容的井喷式增长及其…

【Java】零散知识--感觉每条都有知识在进入脑子唤起回忆

1&#xff0c;什么是双亲委派 AppClassLoader在加载类时&#xff0c;会向上委派&#xff0c;取查找缓存。 AppClassLoader >>ExtClassLoader >>BootStrapClassLoader 情况一 向上委派时查找到了&#xff0c;直接返回。 情况二 当委派到顶层之后&#xff0c;缓…

【cocos creator】2.x,伪3d拖拽,45度视角,60度视角,房屋装扮

伪3d拖拽,45度视角,60度视角 工程下载:(待审核) https://download.csdn.net/download/K86338236/89530812 dragItem2.t s import mapCreat2 from "./mapCreat2";const {ccclass, property } = cc._decorator; /*** 拖拽类,挂在要拖拽的节点上*/ @ccclass export…

04:定时器

定时器 1、定时器怎么定时2、怎样实现计数&#xff1f;2.1、控制寄存器TCON2.2、工作模式寄存器TCOM2.3、定时器T0 3、案例&#xff1a;通过定时器T0控制LED间隔1s亮灭 当定时器用的时候&#xff0c;靠内部震荡电路数数。当配置为定时器使用时&#xff0c;每经过1个机器周期&am…

【JavaEE】网络编程——UDP

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 1.数据报套接字(UDP)1.1特点1.2编码1.2.1DatagramSocket1.2.2DatagramPacket…

数据结构复习计划之复杂度分析(时间、空间)

第二节&#xff1a;算法 时间复杂度和空间复杂度 算法(Algorithm)&#xff1a;是对特定问题求解方法(步骤)的一种描述&#xff0c;是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 算法可以有三种表示形式&#xff1a; 伪代码 自然语言 流程图 算法的五…

时间地点双限定|省公派教师喜提香港城市大学访问学者邀请函

X老师的研究方向为图像处理和机器学习&#xff0c;其根据专业特点及外语水平&#xff0c;将访学目标锁定在香港&#xff0c;并要求20天内获得邀请函以申报省公派。我们仅用了10天时间&#xff0c;就获得了香港城市大学的邀请函&#xff0c;且研究方向高度契合&#xff0c;完成了…

Hive的分区表分桶表

1.分区表&#xff1a; 是Hive中的一种表类型&#xff0c;通过将表中的数据划分为多个子集&#xff08;分区&#xff09;&#xff0c;每个分区对应表中的某个特定的列值&#xff0c;可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中&#xff0c;分区的定义…

【正点原子i.MX93开发板试用连载体验】为什么模型不能运行在NPU上

本文最早发表于电子发烧友论坛&#xff1a;【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 昨天提到要使模型运行的NPU上&#xff0c;必须先将其量化。如果对没有量化…

构建未来对话:从零开始实现基于Vue 3的AI聊天页面

大家好&#xff0c;今天我们将一起探索如何从零开始&#xff0c;使用Vue 3构建一个AI对话页面。这个过程不仅会让我们了解Vue 3的新特性&#xff0c;还会让我们对构建交互式Web应用有一个全新的认识。如果你是编程新手&#xff0c;别担心&#xff0c;我会用通俗易懂的语言&…