基于C语言学生成绩管理系统的设计与开发(中)

简介: 基于C语言学生成绩管理系统的设计与开发(中)

5.4、学生成绩管理系统的录入功能模块


  • 学生成绩管理系统的录入功能是实现学生信息录入的功能
  • 采用文件存储方式
  • 将学生数据存储与文件中
  • 可以方便使用学生的信息
  • 录入的功能是系统运行时,第一步要进行的操作
  • 本系统的录入功能是实现系统初始化登入时,将学生的信息录入文件中的功能。

在头文件中定义学生结构体的代码如下


#include <string.h>
#define SIZE 10000
typedef struct  tagStudent
{
  int n;                    /*顺序号*/
  int sNum;                 /*学号*/
  char sName[10];            /*姓名*/
  int sCn;                  /*语文成绩*/
  int sMaths;               /*数学成绩*/
  int sEn;                  /*英语成绩*/
  int sPhy;                 /*物理成绩*/
  int sCom;                 /*计算机成绩*/
  double sAvage;             /*平均成绩*/
} Student, *pStudent;
Student stu[SIZE];

学生成绩管理系统的录入功能模块的代码如下

// 录入信息功能
void stuInput()
{
    int i;      // 定义变量
    FILE* fp;   // 定义文件指针
    fp = fopen("studentfile.txt", "wb");        // 打开二进制文件
    while(1)
    {
        printf("\n\r请输入序号i(当输入i=-1时,返回), i = ");        
        scanf("%d", &i);        // 输入学生的序号
        if (i == -1)
        {
            fclose(fp);
            system("pause");
            system("cls");
            return;
        }
        else            // 输入学生相关信息
        {
            printf("\n\r请输入学号(数字型):");
            scanf("%d", &stu[i].sNum);
            printf("\n\r请输入姓名(字符型):");
            scanf("%s", stu[i].sName);
            printf("\n\r请输入语文成绩(0~100):");
            scanf("%d", &stu[i].sCn);
            printf("\n\r请输入数学成绩(0~100):");
            scanf("%d", &stu[i].sMaths);
            printf("\n\r请输入英语成绩:(0~100)");
            scanf("%d", &stu[i].sEn);
            printf("\n\r请输入物理成绩:(0~100)");
            scanf("%d", &stu[i].sPhy);
            printf("\n\r请输入计算机成绩(0~100):");
            scanf("%d", &stu[i].sCom);
            stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
            stu[i].n = i + 1;
            fwrite(&stu[i], sizeof(Student), 1, fp);        // 将学生信息写入二进制文件中
        }
    }
    fclose(fp);
}

进入学生成绩管理系统,根据主菜单信息的提示,选择数字1,进行学生信息的录入

录入的学生信息可以存储与txt文件之中

按F5调试结果如下


375650226865434491edadfa8b5b7039.png


打开学生成绩管理系统的的目录,打开txt文件,如下所示

7c6bdd89c7824b08811cd64d7d9584a5.png


  • 可以看做可以将学生的相关信息存储于txt类型的文章之中。
  • 可以方便使用文件查询学生的相关信息


5.5、学生成绩管理系统的输出功能模块


  • 生成绩管理系统的输出功能模块主要是输出学生的相关信息
  • 学生成绩的成绩可以从文件中读取出来

学生成绩管理系统的输出功能模块代码如下

// 输出信息功能
void stuOutput()
{
    int i;      // 定义变量
    FILE* fp;   // 定义文件指针
    fp = fopen("studentfile.txt", "rb");        // 打开二进制文件
    printf("***********************************************************************\n");
    printf("    成绩列表\n");
    printf("-----------------------------------------------------------------------\n");
    printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
    printf("-----------------------------------------------------------------------\n");
    for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)           // 从文件中输出学生信息
    {
        printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
            stu[i].n, stu[i].sNum, stu[i].sName,
            stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    }
    printf("-----------------------------------------------------------------------\n");
    fclose(fp);
    system("pause");
    system("cls");
}


  • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字2,进行学生信息的输出
  • 输出的学生信息从txt文件中读取出来

按F5调试结果如下


af25e2421636495991610062d077fe80.png


  • 可以看到,学生管理系统可以输出存储于文件之中的相关信息信息。
  • 可以方便用户查询各个学生的学习成绩情况。


5.6、学生成绩管理系统的增加功能模块


  • 学生成绩管理系统的增加功能模块主要是实现学生信息添加的功能
  • 采用文件存储方式
  • 将学生数据存储与文件中
  • 在原有的学生信息基础上添加新的学生相关信息。
  • 添加功能可以方便用户增添学生的信息,并将文件存储与txt文件中。

学生成绩管理系统的增加功能模块代码如下


// 增加信息功能
void stuAdd()
{
    int i, s;      // 定义变量
    FILE* fp;      // 定义文件指针
    fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    rewind(fp);
    printf("***********************************************************************\n");
    printf("      成绩列表\n");
    printf("-----------------------------------------------------------------------\n");
    printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
    printf("-----------------------------------------------------------------------\n");
    for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++) // 输出文件中的学生信息
    {
        printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", 
            stu[i].n, stu[i].sNum, stu[i].sName,
            stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    }
    printf("***********************************************************************\n");
    s = i;
    for (i = s; i < SIZE; i++)
    {
        printf("输入序号i(当输入i=-1时,返回):");
        scanf("%d", &i);
        if (i == -1 || i == 0)
        {
            fclose(fp);
            system("pause");
            system("cls");
            return;
        }
        else            // 增加学生信息
        {
            printf("\n\r请输入学号(数字型):");
            scanf("%d", &stu[i].sNum);
            printf("\n\r请输入姓名(字符型):");
            scanf("%s", stu[i].sName);
            printf("\n\r请输入语文成绩(0~100):");
            scanf("%d", &stu[i].sCn);
            printf("\n\r请输入数学成绩(0~100):");
            scanf("%d", &stu[i].sMaths);
            printf("\n\r请输入英语成绩:(0~100)");
            scanf("%d", &stu[i].sEn);
            printf("\n\r请输入物理成绩:(0~100)");
            scanf("%d", &stu[i].sPhy);
            printf("\n\r请输入计算机成绩(0~100):");
            scanf("%d", &stu[i].sCom);
            stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
            stu[i].n = i + 1;
            fwrite(&stu[i], sizeof(Student), 1, fp);
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    }
    fclose(fp);
}


  • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字3,进行学生信息的添加
  • 添加的学生信息存储与文件中
  • 新增加的信息信息可以输出显示

按F5调试结果如下

  • 添加学生信息


3fc3be7a8c7f42bfa6ac187e99025b21.png


  • 返回学生成绩管理系统主菜单,根据主菜单信息的提示,选择数字2,进行学生信息的查询,查询刚刚

添加的学生信息,查询结果如下所示


56d363ecf266491a8ecfb69e83974b3b.png


  • 可以看到,学生成绩管理系统可以正确添加新的学生的相关信息。
  • 可以体现出程序没有错误。


5.7、学生成绩管理系统的查询功能模块


  • 学生成绩管理系统的查询能模块主要是实现学生信息查询的功能
  • 从文件中读取学生信息数据。
  • 查询学生的信息是根据学生的学号进行查询。
  • 查询功能可以方便用户查询学生的信息,并将从文件中查询指定学生的信息输出显示。

学生成绩管理系统的查询功能模块代码如下

// 查询信息功能
void stuSearch()
{
    int i, num;      // 定义变量
    FILE* fp;        // 定义文件指针
    fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    rewind(fp);
    printf("请输入要查找的学号:");
    scanf("%d", &num);
    for (i = 0; i <= SIZE; i++)
    {
        if (stu[i].sNum == num)
        {
            printf("***********************************************************************\n");
            printf("    查询结果\n");
            printf("-----------------------------------------------------------------------\n");
            printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
            printf("-----------------------------------------------------------------------\n");
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
            printf("\n");
            system("pause");
            system("cls");
            fclose(fp);
            return;
        }
    }
    printf("***********************************************************************\n");
    printf("    查询结果\n");
    printf("-----------------------------------------------------------------------\n");
    printf("    没有查询到学生学号为:%d 的相关学生信息!!!\n", num);
    printf("-----------------------------------------------------------------------\n");
    printf("***********************************************************************\n\n");
    system("pause");
    system("cls");
    fclose(fp);
}
  • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字4,进行学生信息的查询
  • 查询的学生信息存储与文件中
  • 查询到的学生信息可以进行显示

按F5调试结果如下

  • 当输入的学号在文件中存在时



348c9e704d1f47fb9704d3fbc0951c31.png


当输入的学号在文件中不存在时

c5db086ff65b493199ada39846713746.png

从调试结果来看,学生成绩管理系统的查询功能实现了。

可以查询存储于文件中的学生信息。


5.8、学生成绩管理系统的修改功能模块


学生成绩管理系统的修改能模块主要是实现学生信息修改的功能

从文件中读取学生信息数据。

先进行查询学生的信息是判断文件中是否有输入学号的学生相关数据。

在进行根据查询到的学生信息进行修改。

修改之后,可以显示出修改之后的学生信息。

学生成绩管理系统的修改功能模块代码如下


// 修改信息功能
void stuModify()
{
    int i, n, num, flag = 0;      // 定义变量
    FILE* fp;        // 定义文件指针
    fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    printf("请输入要修改学生的学号:");
    scanf("%d", &num);
    for (i = 0; i <= SIZE; i++)
    {
        if (stu[i].sNum == num)
        {
            printf("***********************************************************************\n");
            printf("      成绩列表\n");
            printf("-----------------------------------------------------------------------\n");
            printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
            printf("-----------------------------------------------------------------------\n");
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
            printf("-----------------------------------------------------------------------\n");
            printf("***********************************************************************\n");
            n = i;
            flag = 1;
            break;
        }
    }
    if (flag == 0)
    {
        printf("***********************************************************************\n");
        printf("    输入学生的学号错误!\n");
        printf("    请返回!\n");
        printf("***********************************************************************\n\n");
        system("pause");
        system("cls");
        return;
    }
    fp = fopen("studentfile.txt", "rb+");
    fseek(fp, n * sizeof(Student), 0);
    printf("\n\r请输入学号(数字型):");
    scanf("%d", &stu[i].sNum);
    printf("\n\r请输入姓名(字符型):");
    scanf("%s", stu[i].sName);
    printf("\n\r请输入语文成绩(0~100):");
    scanf("%d", &stu[i].sCn);
    printf("\n\r请输入数学成绩(0~100):");
    scanf("%d", &stu[i].sMaths);
    printf("\n\r请输入英语成绩:(0~100)");
    scanf("%d", &stu[i].sEn);
    printf("\n\r请输入物理成绩:(0~100)");
    scanf("%d", &stu[i].sPhy);
    printf("\n\r请输入计算机成绩(0~100):");
    scanf("%d", &stu[i].sCom);
    stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
    stu[i].n = i + 1;
    fwrite(&stu[i], sizeof(Student), 1, fp);
    fclose(fp);
    fp = fopen("studentfile.txt", "r");
    printf("***********************************************************************\n");
    printf("     修改信息成功\n");
    printf("      成绩列表\n");
    printf("-----------------------------------------------------------------------\n");
    printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
    printf("-----------------------------------------------------------------------\n");
    for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)
    {
        printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
            stu[i].n, stu[i].sNum, stu[i].sName,
            stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    }
    printf("-----------------------------------------------------------------------\n");
    printf("***********************************************************************\n\n");
    system("pause");
    system("cls");
    fclose(fp);
}


进入学生成绩管理系统,根据主菜单信息的提示,选择数字5,进行学生信息的修改。

先查询存储于文件中的学生信息。

根据查询到的学生信息可以根据提示进行修改学生信息

按F5调试结果如下

当输入的学号在文件中存在时


17f25902b7754aa0b5625e43e74b5284.png


当输入的学号在文件中不存在时

43462464475247ba8cfbff68b1747bbb.png


  • 从调试结果来看,学生成绩管理系统的修改功能实现了。
  • 可以修改存储于文件中的学生相关信息。
相关文章
|
27天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
102 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
22天前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
46 12
|
2月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
51 6
|
2月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
51 1
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
51 1
|
2月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
43 1
|
2月前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
77 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
50 2
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
62 10