基于C语言实现简单学生成绩管理系统

基于C语言实现简单学生成绩管理系统攻略

1. 设计思路

学生成绩管理系统可以分为以下几个模块:

  1. 学生信息模块:包括学生信息的存储、读取和显示功能;

  2. 成绩信息模块:包括成绩的录入、修改和查询功能;

  3. 统计信息模块:包括成绩排名和平均成绩计算功能。

2. 模块设计与实现

2.1 学生信息模块

学生信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,文件内容存储学生的姓名、性别、年龄等信息。

#define STU_FILE "stuInfo.txt"//学生信息存储文件名

//定义学生信息结构体
typedef struct Student{
    char num[15];//学号
    char name[10];//姓名
    char sex[5];//性别
    int age;//年龄
}Student;

//学生信息读取函数
void readStuInfo(Student* stu){
    FILE* fp = fopen(STU_FILE, "r");
    if(fp == NULL){
        printf("读取文件失败!\n");
        return;
    }
    while(fscanf(fp,"%s%s%s%d",stu->num,stu->name,stu->sex,&stu->age)!=EOF){
        printf("%s\t%s\t%s\t%d\n",stu->num,stu->name,stu->sex,stu->age);
    }
    fclose(fp);
}

//学生信息录入函数
void inputStuInfo(Student* stu){
    printf("请输入学生学号:");
    scanf("%s",stu->num);
    printf("请输入学生姓名:");
    scanf("%s",stu->name);
    printf("请输入学生性别:");
    scanf("%s",stu->sex);
    printf("请输入学生年龄:");
    scanf("%d",&stu->age);
    FILE* fp = fopen(STU_FILE,"a+");
    if(fp == NULL){
        printf("保存文件失败!\n");
        return;
    }
    fprintf(fp,"%s\t%s\t%s\t%d\n",stu->num,stu->name,stu->sex,stu->age);
    fclose(fp);
}

2.2 成绩信息模块

成绩信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,文件内容存储学生的语文、数学、英语、总分和平均分等信息。

#define SCORE_FILE "score.txt"//成绩信息存储文件名

//定义成绩信息结构体
typedef struct Score{
    char num[15];//学号
    float chinese;//语文成绩
    float math;//数学成绩
    float english;//英语成绩
    float total;//总成绩
    float average;//平均成绩
}Score;

//成绩信息读取函数
void readScore(Score* score){
    FILE* fp = fopen(SCORE_FILE, "r");
    if(fp == NULL){
        printf("读取文件失败!\n");
        return;
    }
    while(fscanf(fp,"%s%f%f%f%f%f",score->num,&score->chinese,&score->math,&score->english,&score->total,&score->average)!=EOF){
        printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score->num,score->chinese,score->math,score->english,score->total,score->average);
    }
    fclose(fp);
}

//成绩信息录入函数
void inputScore(Score* score){
    printf("请输入学生学号:");
    scanf("%s",score->num);
    printf("请输入学生语文成绩:");
    scanf("%f",&score->chinese);
    printf("请输入学生数学成绩:");
    scanf("%f",&score->math);
    printf("请输入学生英语成绩:");
    scanf("%f",&score->english);
    score->total = score->chinese + score->math + score->english;
    score->average = score->total / 3.0;
    FILE* fp = fopen(SCORE_FILE,"a+");
    if(fp == NULL){
        printf("保存文件失败!\n");
        return;
    }
    fprintf(fp,"%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score->num,score->chinese,score->math,score->english,score->total,score->average);
    fclose(fp);
}

2.3 统计信息模块

统计信息包括按总分进行成绩排名和计算平均成绩。

//按总分降序排序并输出
void sortByTotal(){
    Score score[100];
    Score temp;
    int count = 0;
    FILE* fp = fopen(SCORE_FILE, "r");
    if(fp == NULL){
        printf("读取文件失败!\n");
        return;
    }
    while(fscanf(fp,"%s%f%f%f%f%f",score[count].num,&score[count].chinese,&score[count].math,&score[count].english,&score[count].total,&score[count].average)!=EOF){
        count++;
    }
    fclose(fp);
    for(int i=0;i<count;i++){
        for(int j=i+1;j<count;j++){
            if(score[i].total<score[j].total){
                temp = score[i];
                score[i] = score[j];
                score[j] = temp;
            }
        }
    }
    printf("学号\t语文\t数学\t英语\t总分\t平均分\n");
    for(int i=0;i<count;i++){
        printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score[i].num,score[i].chinese,score[i].math,score[i].english,score[i].total,score[i].average);
    }
}

//计算平均成绩
void averageScore(){
    Score score;
    float chinese_sum=0,math_sum=0,english_sum=0;
    int count=0;
    FILE* fp = fopen(SCORE_FILE, "r");
    if(fp == NULL){
        printf("读取文件失败!\n");
        return;
    }
    while(fscanf(fp,"%s%f%f%f%f%f",score.num,&score.chinese,&score.math,&score.english,&score.total,&score.average)!=EOF){
        chinese_sum += score.chinese;
        math_sum += score.math;
        english_sum += score.english;
        count++;
    }
    fclose(fp);
    printf("语文平均分:%.2f\n",chinese_sum/count);
    printf("数学平均分:%.2f\n",math_sum/count);
    printf("英语平均分:%.2f\n",english_sum/count);
}

3. 实现示例

3.1 录入学生信息和成绩信息

int main(){
    Student stu;
    Score score;
    int choice;
    while(1){
        printf("1. 录入学生信息;\n");
        printf("2. 录入学生成绩;\n");
        printf("0. 退出系统。\n");
        printf("请选择操作:");
        scanf("%d",&choice);

        if(choice == 1){
            inputStuInfo(&stu);
        }
        else if(choice == 2){
            inputScore(&score);
        }
        else if(choice == 0){
            printf("欢迎下次使用!\n");
            break;
        }
        else{
            printf("输入无效,请重新选择!\n");
        }
    }
    return 0;
}

3.2 统计信息并按总分排名

int main(){
    int choice;
    while(1){
        printf("1. 按总分排名并输出;\n");
        printf("2. 计算平均成绩;\n");
        printf("0. 退出系统。\n");
        printf("请选择操作:");
        scanf("%d",&choice);

        if(choice == 1){
            sortByTotal();
        }
        else if(choice == 2){
            averageScore();
        }
        else if(choice == 0){
            printf("欢迎下次使用!\n");
            break;
        }
        else{
            printf("输入无效,请重新选择!\n");
        }
    }
    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C语言实现简单学生成绩管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • c++中虚函数的实现详解

    现在我来详细讲解一下 “C++中虚函数的实现详解” 的完整攻略,包含以下内容: 1. 什么是虚函数 虚函数是C++中的一种特殊函数,可以让我们在基类中声明一个方法,在子类中对其进行重新定义,从而实现多态的特性。在实际应用中,我们通常通过将基类指针指向子类对象的方式来调用虚函数。 2. 虚函数的实现 2.1 虚函数表 C++中通过虚函数表(vtable)来实现…

    C 2023年5月23日
    00
  • TPLINK TLR5408PE-AC一体VPN路由器怎么样? tpr5408pe测评

    TPLINK TLR5408PE-AC一体VPN路由器怎么样? 简介 TPLINK TLR5408PE-AC是一款集成了VPN功能的路由器。它支持IEEE802.11ac无线网络标准,最高可达1300Mbps,同时支持IPv4和IPv6协议,提供了4个Gigabit以太网口和2个USB接口。另外,它还支持PPTP、L2TP、IPSec和SSL VPN等多种安…

    C 2023年5月23日
    00
  • python中的Json模块dumps、dump、loads、load函数用法详解

    下面是关于 Python 中的 Json 模块 dumps、dump、loads、load 函数的使用详解: Json 简介 Json是一种基于文本的轻量级数据交换格式,常用于前后端数据交互、配置文件等场合。在 Python 中,可以使用 Json 模块来对 Json 数据进行解析和生成。 Json 模块函数说明 dumps 函数 dumps 函数将一个 P…

    C 2023年5月23日
    00
  • 第一个C 程序

    下面为大家详细讲解”第一个C程序”的完整使用攻略。 了解C语言编程环境 C语言是一种编写高性能、可移植的系统软件和应用程序的通用编程语言,具有高效性和灵活性等优点。因此C语言已成为计算机科学教育的基础,并被广泛应用于操作系统、数据库、网络、嵌入式系统等领域。 在使用C语言进行编程前,需要安装C语言编译器,例如Windows系统上的Visual Studio、…

    C 2023年5月9日
    00
  • 用C语言实现2048游戏

    用C语言实现2048游戏攻略 一、游戏规则分析 2048游戏是一款数字拼图游戏,玩家通过交换数字方块来使它们相加成为2048。游戏规则如下: 游戏以一个4×4的棋盘为基础。 初始状态有两个数已知,值为2或4。 玩家每次可以选择上、下、左、右其中一方向进行滑动,若滑动时有相同数字的方块相遇,则它们将相加并合并成一个数。 每次滑动后,系统会在空白处生成一个数字,…

    C 2023年5月23日
    00
  • C程序 计算矩阵对角线之和

    下面是“C程序 计算矩阵对角线之和”的使用攻略。 程序功能说明 本程序通过输入矩阵的行列数以及矩阵元素,计算出矩阵的对角线之和。矩阵可以是正方形矩阵或长方形矩阵,支持浮点数和整数类型的元素。 程序使用说明 环境准备 在运行本程序前,需要确保您的电脑上已经安装了GCC编译器、C语言库以及相关的开发工具。 程序下载 您可以在网上搜索“矩阵对角线之和C程序下载”,…

    C 2023年5月9日
    00
  • Java基础教程之Hello World到面向对象

    这里为大家讲解一下 “Java基础教程之Hello World到面向对象” 的完整攻略。 一、Hello World 1.1 安装JDK环境 在学习Java之前,我们先需要安装JDK环境,可以到官网上下载对应版本的JDK进行安装。安装完成后,在命令行中输入以下命令,如果出现版本号等信息,则说明环境配置成功: java -version 1.2 编写Hello…

    C 2023年5月22日
    00
  • Linux折腾记(八):使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

    Linux折腾记(八)的主题是如何使用GCC和GNU Binutils编写能在x86实模式运行的16位代码。针对这个主题,我们可以分为以下几步。 步骤1:准备工作 在开始编写代码之前,我们需要安装在Ubuntu系统上安装GCC和GNU Binutils。可以使用以下命令进行安装: sudo apt-get update sudo apt-get instal…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部