广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现简单班级成绩管理系统
  • 567
分享到

C语言实现简单班级成绩管理系统

2024-04-02 19:04:59 567人浏览 独家记忆
摘要

前言: 有朋友最近在做C语言课设,要求写一个班级成绩管理系统,便写份简单的代码来玩。代码原创,未参考任何其他人的代码 程序要求 说明 本程序主要采用结构体数组本文件采用多文件编写,

前言:

有朋友最近在做C语言课设,要求写一个班级成绩管理系统,便写份简单的代码来玩。代码原创,未参考任何其他人的代码

程序要求

说明

  • 本程序主要采用结构体数组
  • 本文件采用多文件编写,由于程序规模小,故未采用编写头文件的方式
  • 使用 #pragma once 来防止头文件重复包含

代码

怎么使用本程序看看注释应该就知道了。run main.c 就行。其他各文件作用:

  • def.c 定义了一些常量和全局变量,结构体
  • myio.c 实现了成绩录入和成绩打印输出
  • file.c 实现了将成绩保存为文件
  • menu.c 实现了菜单功能
  • function.c 包含其他一些要用的函数

main.c

#include "menu.c"

int main()
{
    select();
    return 0;
}

def.c

// 相同头文件只包含一次,后不赘述
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define Status int

// 课程
typedef struct Course
{
    char name[30];
    int score;
} Course, *pCourse;

// 学生
typedef struct Student
{
    char number[30];
    char name[30];
    pCourse pC;
} Student, *pStudent;

// n是学生数, m是课程数
int n, m;
char courseName[30], studentName[30], course[20][30];
pStudent pS = NULL;

myIO.c

#pragma once
#include "def.c"

pStudent inputStudentInfo(void);
void printStudentInfo(pStudent pS);

// 录入学生信息
pStudent inputStudentInfo(void)
{
    int i, j;
    printf("Please input the number of students and courses: ");
    scanf("%d %d", &n, &m);
    printf("Please input the name of courses: ");
    for (i = 0; i < m; i++)
    {
        scanf("%s", course[i]);
    }
    pStudent pS = (pStudent)malloc(sizeof(Student) * n);
    if (!pS)
        return NULL;
    printf("Please input the info: \n");
    for (i = 0; i < n; i++)
    {
        pS[i].pC = (pCourse)malloc(sizeof(Course) * m);
        if (!pS[i].pC)
            return NULL;
        scanf("%s %s", pS[i].name, pS[i].number);
        for (j = 0; j < m; j++)
        {
            strcpy(pS[i].pC[j].name, course[j]);
            scanf("%d", &pS[i].pC[j].score);
        }
    }
    return pS;
}

// 打印所有学生信息
void printStudentInfo(pStudent pS)
{
    int i, j;
    // 打印标题
    printf("Name\tnumber\t");
    for (i = 0; i < m - 1; i++)
        printf("%s\t", course[i]);
    printf("%s\n", course[i]);
    // 显示信息
    for (i = 0; i < n; i++)
    {
        printf("%s\t%s\t", pS[i].name, pS[i].number);
        for (j = 0; j < m - 1; j++)
            printf("%d\t", pS[i].pC[j].score);
        printf("%d\n", pS[i].pC[j].score);
    }
}

file.c

#pragma once
#include "def.c"
Status saveStudentInfo(pStudent pS);
Status saveStudentInfo(pStudent pS)
{
    FILE *fp;
    int i, j;
    char filename[30], str[100] = "student number";
    printf("please input the filename: ");
    scanf("%s", filename);
    fp = fopen(filename, "w");
    if (!fp)
        return ERROR;
    for (i = 0; i < m; i++)
    {
        strcat(str, " ");
        strcat(str, course[i]);
    }
    strcat(str, "\n");
    for (i = 0; i < n; i++)
    {
        strcat(str, pS[i].name);
        strcat(str, " ");
        strcat(str, pS[i].number);
        for (j = 0; j < m; j++)
        {
            char score[30];
            itoa(pS[i].pC[j].score, score, 10);
            strcat(str, " ");
            strcat(str, score);
        }
        strcat(str, "\n");
    }
    fputs(str, fp);
    fclose(fp);
    return OK;
}

menu.c

#pragma once
#include "def.c"
#include "myIO.c"
#include "file.c"
#include "function.c"
void menu();
void select();
// 菜单
void menu()
{
    printf("------------------------------------\n");
    printf("|                Menu              |\n");
    printf("|              1. input            |\n");
    printf("|              2. show             |\n");
    printf("|              3. save             |\n");
    printf("|              4. sort             |\n");
    printf("|              5. modify           |\n");
    printf("|              6. count            |\n");
    printf("|              0. exit             |\n");
    printf("------------------------------------\n");
}

void select()
{
    int branch;
    while (TRUE)
    {
        system("cls");
        menu();
        printf("[Input]: ");
        scanf("%d", &branch);
        if (!branch)
            break;
        switch (branch)
        {
        case 1:
        {
            pS = inputStudentInfo();
            if (pS == NULL)
                printf("input error! please input again\n");
            else
                printf("Input success!\n");
            system("pause");
            break;
        }
        case 2:
        {
            printStudentInfo(pS);
            system("pause");
            break;
        }
        case 3:
        {
            if (OK == saveStudentInfo(pS))
                printf("Save success!\n");
            else
                printf("Save fail!\n");
            system("pause");
            break;
        }
        case 4:
        {
            sort(pS);
            printf("sort success\n");
            system("pause");
            break;
        }
        case 5:
        {
            int res = modify(pS);
            if (res)
            {
                printf("change success!\n");
            }
            else
            {
                printf("change fail!\n");
            }
            system("pause");
            break;
        }
        case 6:
        {
            int choose;
            // 输入1 显示每门课程最高成绩信息
            // 输入2 显示每门课程平均成绩信息
            printf("choose 1 for the highest score: \n ");
            printf("choose 2 for the average score: \n");
            printf("[Input]: ");
            scanf("%d", &choose);
            if (choose == 1)
            {
                showMax(pS);
            }
            else if (choose == 2)
            {
                showAverage(pS);
            }
            else
            {
                // 输入非法提示信息
                printf("Input error!\n");
            }
            system("pause");
            break;
        }
        }
    }
}

function.c

#include "def.c"

void sort(pStudent pS);
void Swap(pStudent s1, pStudent s2);
void showAverage(pStudent pS);
void showMax(pStudent pS);
Status modify(pStudent pS);

// 按课程成绩排序
void sort(pStudent pS)
{
    int courseNumber, i, j, k;
    char courseName[30];
    printf("please input the course name which you want to sort: ");
    scanf("%s", courseName);
    for (courseNumber = 0; courseNumber < m; courseNumber++)
        if (strcmp(course[courseNumber], courseName) == 0)
            break;
    // 如果找不到课程,则认为是按总分排序
    if (courseNumber == m)
    {
        printf("Sort as total score: \n");
        // 选择排序
        for (i = 0; i < n - 1; i++)
        {
            int flag = i;
            for (j = i + 1; j < n; j++)
            {
                int totalScore_1 = 0, totalScore_2 = 0;
                for (k = 0; k < m; k++)
                {
                    totalScore_1 += pS[j].pC[k].score;
                    totalScore_2 += pS[flag].pC[k].score;
                }
                if (totalScore_1 > totalScore_2)
                {
                    flag = j;
                }
            }
            Swap(&pS[i], &pS[flag]);
        }
    }
    else
    {
        // 选择排序
        for (i = 0; i < n - 1; i++)
        {
            int flag = i;
            for (j = i + 1; j < n; j++)
            {
                if (pS[j].pC[courseNumber].score > pS[flag].pC[courseNumber].score)
                {
                    flag = j;
                }
            }
            Swap(&pS[i], &pS[flag]);
        }
    }
}

// 修改学生信息
Status modify(pStudent pS)
{
    // 密码是1314
    char passWord[30] = "1314", psd[30];
    char number[30];
    int score, i, j;
    printf("please input password: ");
    scanf("%s", psd);
    // 密码正确才继续,否则返回ERROR
    if (strcmp(password, psd) == 0)
    {
        printf("please input the student's number: ");
        scanf("%s", number);
        for (i = 0; i < n; i++)
        {
            // 找到学生则继续,否则返回ERROR
            if (strcmp(pS[i].number, number) == 0)
            {
                printf("please input the course and score one by one: \n");
                scanf("%s %d", courseName, &score);
                for (j = 0; j < m; j++)
                {
                    // 找到课程才继续,否则返回ERROR
                    if (strcmp(pS[i].pC[j].name, courseName) == 0)
                    {
                        // 修改课程成绩
                        pS[i].pC[j].score = score;
                        return OK;
                    }
                }
                return ERROR;
            }
        }
        return ERROR;
    }
    else
        return ERROR;
}

// 输出各课程最高分的学生
void showMax(pStudent pS)
{
    int i, j, max;
    for (i = 0; i < m; i++)
    {
        max = 0;
        for (j = 0; j < n; j++)
        {
            if (pS[j].pC[i].score > pS[max].pC[i].score)
                max = j;
        }
        printf("%s\t%s\t%s\t%d\n", course[i], pS[max].name, pS[max].number, pS[max].pC[i].score);
    }
}

// 显示各课程的平均成绩
void showAverage(pStudent pS)
{
    int i, j;
    double ave;
    for (i = 0; i < m; i++)
    {
        ave = 0;
        for (j = 0; j < n; j++)
        {
            ave += pS[j].pC[i].score;
        }
        printf("%s\t%.2lf\n", course[i], ave / n);
    }
}

void Swap(pStudent s1, pStudent s2)
{
    int i;
    char studentName[30], number[30];
    // 交换姓名
    strcpy(studentName, s1->name);
    strcpy(s1->name, s2->name);
    strcpy(s2->name, studentName);
    // 交换学号
    strcpy(number, s1->number);
    strcpy(s1->number, s2->number);
    strcpy(s2->number, number);
    // 交换成绩
    for (i = 0; i < m; i++)
    {
        int temp = s1->pC[i].score;
        s1->pC[i].score = s2->pC[i].score;
        s2->pC[i].score = temp;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现简单班级成绩管理系统

本文链接: https://www.lsjlt.com/news/140883.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现简单班级成绩管理系统
    前言: 有朋友最近在做c语言课设,要求写一个班级成绩管理系统,便写份简单的代码来玩。代码原创,未参考任何其他人的代码 程序要求 说明 本程序主要采用结构体数组本文件采用多文件编写,...
    99+
    2022-11-13
  • C++实现简单班级成绩管理系统
    本文实例为大家分享了C++实现简单班级成绩管理系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<fstream>...
    99+
    2022-11-13
  • C++实现班级成绩管理系统
    本文实例为大家分享了C++实现班级成绩管理系统的具体代码,供大家参考,具体内容如下 本文定义了一个学生类的结构体,通过vector 数组来存储这个结构体。通过运算求出每个同学的总分,...
    99+
    2022-11-13
  • 基于C语言实现简单学生成绩管理系统
    本文实例为大家分享了C语言实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 一、系统主要功能 1、密码登录2、输入数据3、查询成绩4、修改成绩5、输出所有学生成绩6、退出...
    99+
    2022-11-13
  • C语言实现简单学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 系统界面及相关要求 1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。 ...
    99+
    2022-11-13
  • C语言实现班级学生管理系统
    本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下 下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺序录入,...
    99+
    2022-11-12
  • C++实现简单学生成绩管理系统
    本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 一、问题描述 设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。实...
    99+
    2022-11-13
  • C#实现简单学生成绩管理系统
    本文实例为大家分享了C#实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C#作业 用循环结构/数组实现 进入启动页面 管理员身份登入 用户名:师晓峰密码:88481234...
    99+
    2022-11-13
    C#学生成绩管理系统 C#学生管理系统 C#成绩管理系统
  • Java实现简单班级管理系统
     本文设计一个简单的班级管理系统,满足如下要求: 1、设计学生类Student,包含学号(String型)、姓名(String型)、性别(‘M’/&...
    99+
    2022-11-13
  • C++实现简单的学生成绩管理系统
    本文实例为大家分享了C++实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 manage.h #include <iostream> #include <...
    99+
    2022-11-13
  • C语言如何实现班级学生管理系统
    这篇文章将为大家详细讲解有关C语言如何实现班级学生管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺...
    99+
    2023-06-25
  • C语言实现学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统项目,供大家参考,具体内容如下 1、数据结构:学生信息:学号、姓名、年龄、性别、3课成绩 2、功能: (1)  增加学生记录(...
    99+
    2022-11-13
  • C语言代码实现学生成绩管理系统
    某班有最多不超过 30 人(具体人数由键盘输人)参加期未考试,考试科目 最多不超过 6 门(具体门数由键盘输入,但不少于 3 门),学生成绩管理系统是一 个非常实用的程序,如果能够把...
    99+
    2022-11-13
  • C语言链表实现学生成绩管理系统
    目录一、课程设计题目及内容二、主要设计思路三、程序源码及具体注释(1)预处理指令(2)类型定义(3)函数原型(4)main函数定义(5)其他函数定义 四、运行示例五、注意事...
    99+
    2022-11-13
  • 使用C语言实现学生成绩管理系统
    最近正在学习C语言,搞了一个学生成绩管理系统的小程序,代码粗陋,大佬勿喷。 先上图: 整个程序采用链表来管理学生成绩,保存学生成绩用的是 文件处理函数,使用 fopen(FileP...
    99+
    2022-11-12
  • C++如何实现简单的学生成绩管理系统
    这篇文章主要介绍了C++如何实现简单的学生成绩管理系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现简单的学生成绩管理系统文章都会有所收获,下面我们一起来看看吧。manage.h#include&...
    99+
    2023-06-29
  • java实现简单学生成绩管理系统
    本文实例为大家分享了java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下   import java.util.Scanner; import java.lang.*;...
    99+
    2022-11-13
  • 怎么用C语言实现学生成绩管理系统
    这篇“怎么用C语言实现学生成绩管理系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用C语言实现学生成绩管理系统”文章吧...
    99+
    2023-06-29
  • C语言学生成绩管理系统源码
    本文实例为大家分享了C语言学生成绩管理系统的具体代码,供大家参考,具体内容如下 效果如下: 代码如下: #include <stdio.h> #include <...
    99+
    2022-11-13
  • C语言实现简单酒店管理系统
    本文实例为大家分享了C语言实现酒店管理系统的具体代码,供大家参考,具体内容如下 一、问题描述 系统应具有以下主要功能:登记入住:从键盘输入住信息:房间层数,房间号码等;查询入住情况,...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作