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

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

1. 功能框架说明

系统功能:

1、档案管理—学生档案、课程档案、选课档案

增加、删除、修改、查询

2、统计管理—学生成绩表

登记成绩、计算加权平均分、总学分

3、文件加载(进入系统时)

读入学生档案、课程档案、选课档案

生成学生成绩表

4、文件保存(退出系统时)

保存学生档案、课程档案、选课档案


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


需要建立三张表,生成一张表:

学生表—关键字是学号

课程表—关键字是课程号

选课表—关键字是学号+课程号

成绩统计表(生成)–关键字是学号


93f868e6ae0d49fb9900eeb3bf621a13.png


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

280d397a2ff64f5984d538cb551beaf5.png

2a29adf37a1848ce86dab0d66fc721fa.png



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


6773acaa75e143ffb4e0d6129e021a1f.png


c36f44ce5a8140fa9abf70b7e46fa806.png


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


88a8a8d4d89e4db6930c3a1c3e48a2a1.png

16b2f76541c64ed7b83144d30c517ee7.png


学生成绩管理系统旨在提供一个高效且便捷的工具,用于管理学生、课程和选课信息,并生成和显示学生成绩单。系统主要包括以下功能模块:

数据初始化模块:读取学生、课程和选课信息表文件,初始化系统数据。

主菜单模块:显示主菜单,供用户选择操作。

学生信息管理模块:添加、修改、删除和查询学生信息。

课程信息管理模块:添加、修改、删除和查询课程信息。

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

成绩单管理模块:根据选课信息和课程信息生成学生成绩单,并支持显示和排序功能。

数据存储模块:将当前的学生信息、课程信息和选课信息保存到文件中。


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


2. 程序设计


8258c83d0bde41f3a715a404dbf07b9a.png


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


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

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. 运行结果

主菜单


修改学生名单


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


修改课程信息


修改课程信息


显示学生信息

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


显示课程信息


显示成绩单

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


查询学生信息


查询课程信息


查询成绩信息

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


删除学生信息


删除课程信息

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


删除选修信息


保存到文件


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

相关文章
|
14天前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
15天前
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
18天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
24天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
51 11
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
91 7
|
1月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
32 1
|
14天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
34 10
|
14天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
33 9
|
14天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
29 8
|
14天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
34 6