学生成绩管理系统(C语言有结构体实现)

这篇具有很好参考价值的文章主要介绍了学生成绩管理系统(C语言有结构体实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章介绍了一个通过C语言实现的一个简单的学生管理系统,该系统要是使用结构体数组来管理学生成绩数据的,通过该系统的练习能够对结构体的相关知识有更好的理解,提高逻辑思维能力。

一、要实现的功能

1.首次运行

系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令

学生成绩管理系统(C语言有结构体实现)

开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。” 同理,当输入其他的成绩处理命令时也作相应的处理。

学生成绩管理系统(C语言有结构体实现)

2. 成绩录入

输入命令 T,调用Type子函数录入成绩。界面提示输入学生人数

学生成绩管理系统(C语言有结构体实现)

输入3,提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,同时提示学号:1

学生成绩管理系统(C语言有结构体实现)

输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

学生成绩管理系统(C语言有结构体实现)

输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3

学生成绩管理系统(C语言有结构体实现)

输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

3. 显示录入的成绩

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

4. 计算平均值

输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

学生成绩管理系统(C语言有结构体实现)

5. 对平均分排序

输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

6. 查询学生成绩

输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

输入 2 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

7. 清屏

输入命令C 执行清屏函数语句system(“clear”);

学生成绩管理系统(C语言有结构体实现)

8. 显示帮助菜单

输入命令H 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令。

学生成绩管理系统(C语言有结构体实现)

9. 系统

输入命令Q 则退出系统。

学生成绩管理系统(C语言有结构体实现)

二、实现代码

(一)所有代码在一个文件(v1)

main.c

#include <stdio.h>
#include <stdlib.h>

struct student
{
    int num;
    float chinese;
    float math;
    float waiyu;
    float average;
};
/**********函数声明*********/
void Help();//帮助菜单显示函数
void Type(struct student *pstu);//成绩录入
void List(struct student *pstu);//输出成绩表
void Averange(struct student *pstu);//平均分
void Sort(struct student *pstu);//按平均分由高到底排序
void Search(struct student *pstu); //查询学生成绩
void Clear();   //清屏


int manNum = 0;//学生数

int main()
{

    char opt;   //命令变量
    Help();//首次运行显示帮助菜单
    struct student stu[10];//定义结构体数组


    while (1)
    {
        printf("\n");
        printf("请输入命令=");
        if(scanf("%c",&opt)){
            //printf("scanf出现EOF错误!\n");
            getchar();//吃掉空格
        }
        switch (opt)
        {
            case 'H':Help();break;//显示帮助菜单
            case 'T':Type(stu);break;//成绩录入
            case 'A':Averange(stu);;break;
            case 'L':List(stu);break;//列出成绩表
            case 'P':Sort(stu);break;//按平均成绩由高到低拍排序
            case 'S':Search(stu);break;//按学号查询学生成绩
            case 'C':Clear();break;//清屏
            case 'Q':return 0;break; //退出系统
            default:printf("输入命令有误!\n");break;
        }
    }
    return 0;
}

void Help()  //帮助菜单显示函数 H
{
    printf("\n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  *      学生成绩管理系统———帮助菜单       *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  *         H = 显示帮助菜单               *  \n");
    printf("  *         T = 成绩录入                   *  \n");
    printf("  *         A = 计算学生平均分             *  \n");
    printf("  *         L = 列出成绩表                 *  \n");
    printf("  *         P = 按平均成绩由高到低排序     *  \n");
    printf("  *         S = 按学号查询学生成绩         *  \n");
    printf("  *         C = 清屏                       *  \n");
    printf("  *         Q = 退出系统                   *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  * Copyright <C> 2023.05.19  By Sunqk5665 *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");

}
void Type(struct student *pstu)//成绩录入 T
{
    printf("请输入学生人数:");
    scanf("%d",&manNum);
    printf("请输入%d名学生的三门课成绩:\n",manNum);
    printf("学号 语文 数学 外语\n");
    // for(int i = 0; i < manNum; i++){
    //     scanf("%d  %f  %f  %f",&pstu[i].num,&pstu[i].chinese,&pstu[i].math,&pstu[i].waiyu);
    //     //getchar();
    // }
    for(int i = 0; i < manNum; i++){
        pstu[i].num = i+1;
        printf("%d   ",pstu[i].num);
        scanf("%f  %f  %f",&pstu[i].chinese,&pstu[i].math,&pstu[i].waiyu);
        //getchar();
    }
    getchar();//吃最后一次输入后的回车
}
void List(struct student *pstu)//输出成绩表 L
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    printf("学号 语文 数学 外语 平均分\n");
    for(int i=0; i<manNum; i++){
        printf(" %d   %.1f %.1f %.1f %.1f\n",pstu[i].num,pstu[i].chinese,pstu[i].math,pstu[i].waiyu,pstu[i].average);
    }
}
void Averange(struct student *pstu)//平均分 A
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    for(int i=0; i<manNum; i++){
        pstu[i].average = (pstu[i].chinese + pstu[i].math + pstu[i].waiyu)/3;
    }
    printf("平均分已计算完,请使用命令 L 查看。\n");
}
void Sort(struct student *pstu) //按平均分由高到底排序 P
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    struct student stTemp;//交换中转
    for(int i = 1; i < manNum; i++){
        for(int j = 0; j < manNum-i; j++){
            if (pstu[j].average < pstu[j+1].average){
                stTemp = pstu[j];
                pstu[j] = pstu[j+1];
                pstu[j+1] = stTemp;
            }
        }
    }
    printf("完成排序,请使用 L 查看。\n");
}
void Search(struct student *pstu) //按学号查询学生成绩 S
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    int stuNum;

    printf("请输入要查询的学生学号:");
    scanf("%d",&stuNum);
    if(stuNum <= 0 || stuNum >=manNum){
        printf("输入学号有误!\n");
    }
    getchar();
    for(int i=0; i<manNum; i++){
        if(pstu[i].num == stuNum){
            printf("学号 语文 数学 外语 平均分\n");
            printf(" %d   %.1f %.1f %.1f %.1f\n",pstu[i].num,pstu[i].chinese,pstu[i].math,pstu[i].waiyu,pstu[i].average);
        }
    }   

}
void Clear()//清屏 C
{
    system("clear"); //"clear"为Linux终端清屏命令(实质是向上翻页)
}

(二)分文件编写(v2)

main.c

#include <stdio.h>
#include <stdlib.h>
#include "help.h"
#include "score.h"
#include "clear.h"


// int flag = 0;
int manNum = 0;//学生数
struct student stu[20]; //结构体数组定义

int main()
{
    char opt;   //命令
    Help(); //首次运行显示帮助菜单
    while (1)
    {
        printf("\n");
        printf("请输入命令=");
        if(scanf("%c",&opt)){
            //printf("scanf出现EOF错误!\n");
            getchar();//吃掉空格
        }
        switch (opt)
        {
            case 'H':Help();break;           //显示帮助菜单
            case 'T':Type(stu);break;        //成绩录入
            case 'A':Averange(stu);;break;   //计算平均分
            case 'L':List(stu);break;        //列出成绩表
            case 'P':Sort(stu);break;        //按平均成绩由高到低拍排序
            case 'S':Search(stu);break;      //按学号查询学生成绩
            case 'C':Clear();break;          //清屏
            case 'Q':return 0;break;         //退出系统
            default:
                printf("输入命令有误!\n");break;
        }

    }
    return 0;
}

help.h

#ifndef _SCORE_H_
#define __SCORE_H_
#include <stdio.h>
/****函数声明***/
void Help();//帮助菜单显示函数

#endif

clear.h

#ifndef _CLEAR_H_
#define _CLEAR_H_
#include <stdlib.h>
/****函数声明***/
void Clear();   //清屏

#endif

score.h

#ifndef _SCORE_H_
#define _SCORE_H_
#include <stdio.h>
#include <ctype.h>

/****学生结构体***/
struct student
{
    int num;
    float chinese;
    float math;
    float waiyu;
    float average;
};
/****函数声明***/
void Type(struct student *pstu);//成绩录入
void List(struct student *pstu);//输出成绩表
void Averange(struct student *pstu);//平均分
void Sort(struct student *pstu);//按平均分由高到底排序
void Search(struct student *pstu); //查询学生成绩

#endif

help.c

#include "help.h"

void Help()//帮助菜单显示函数 H
{
    printf("\n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  *      学生成绩管理系统———帮助菜单       *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  *         H = 显示帮助菜单               *  \n");
    printf("  *         T = 成绩录入                   *  \n");
    printf("  *         A = 计算学生平均分             *  \n");
    printf("  *         L = 列出成绩表                 *  \n");
    printf("  *         P = 按平均成绩由高到低排序     *  \n");
    printf("  *         S = 按学号查询学生成绩         *  \n");
    printf("  *         C = 清屏                       *  \n");
    printf("  *         Q = 退出系统                   *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
    printf("  *   Copyright <C> 2023.05.19 By 孙启凯   *  \n");
    for(int i=1;i<=46;i++){
        printf("*");
    }
    printf("\n");
}

clear.c

#include "clear.h"

void Clear()//清屏 C
{
    system("clear"); //"clear"为Linux终端清屏命令(实质是向上翻页)
}

score.c

#include "score.h"
extern int manNum;

void Type(struct student *pstu)//成绩录入 T
{
    printf("请输入学生人数:");
    scanf("%d",&manNum);
    printf("请输入%d名学生的三门课成绩:\n",manNum);
    printf("学号 语文 数学 外语\n");

    for(int i = 0; i < manNum; i++){
        pstu[i].num = i+1;
        printf("%d   ",pstu[i].num);
        scanf("%f  %f  %f",&pstu[i].chinese,&pstu[i].math,&pstu[i].waiyu);
        //getchar();
    }
    getchar();//吃最后一次输入后的回车

}
void List(struct student *pstu)//输出成绩表 L
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    printf("学号 语文 数学 外语 平均分\n");
    for(int i=0; i<manNum; i++){
        printf(" %d   %.1f %.1f %.1f %.1f\n",pstu[i].num,pstu[i].chinese,pstu[i].math,pstu[i].waiyu,pstu[i].average);
    }
}
void Averange(struct student *pstu)//平均分 A
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    for(int i=0; i<manNum; i++){
        pstu[i].average = (pstu[i].chinese + pstu[i].math + pstu[i].waiyu)/3;
    }
    printf("平均分已计算完,请使用命令 L 查看。\n");
}
void Sort(struct student *pstu) //按平均分由高到底排序 P
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    struct student stTemp;//交换中转
    for(int i = 1; i < manNum; i++){
        for(int j = 0; j < manNum-i; j++){
            if (pstu[j].average < pstu[j+1].average){
                stTemp = pstu[j];
                pstu[j] = pstu[j+1];
                pstu[j+1] = stTemp;
            }
        }
    }
    printf("完成排序,请使用 L 查看。\n");
}
void Search(struct student *pstu) //按学号查询学生成绩 S
{
    if(manNum == 0){
        printf("成绩为空!请先使用命令 T 录入学生成绩。\n");
        return;//函数到此终止
    }
    int stuNum;

    printf("请输入要查询的学生学号:");
    scanf("%d",&stuNum);
    getchar();
    if(stuNum>0 && stuNum<=manNum){
        for(int i=0; i<manNum; i++){
            if(pstu[i].num == stuNum){
                printf("学号 语文 数学 外语 平均分\n");
                printf(" %d   %.1f %.1f %.1f %.1f\n",pstu[i].num,pstu[i].chinese,pstu[i].math,pstu[i].waiyu,pstu[i].average);
            }
        }
    }
    else{
        printf("输入的学号非法,请仔细核对!!\n");
    }
}

Makefile

CC=gcc
CFLAGS=-c -g
OBJS=help.o clear.o score.o main.o
a.out:$(OBJS)
	$(CC) $(OBJS) -o $@
$(OBJS):%.o:%.c
	$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
	rm *.o a.out

学生成绩管理系统(C语言有结构体实现)文章来源地址https://www.toymoban.com/news/detail-462153.html

到了这里,关于学生成绩管理系统(C语言有结构体实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言链表实现】学生成绩管理系统(功能全面,通俗易懂)

    题目 :学生成绩管理程序 要求 :本程序用于教学单位(院/系)的学生成绩管理。要求程序能够实现学生信息录入(可以实现增加、删除、修改学生的基本信息)、单科学习成绩的录入;班级内单科成绩排名;成绩查询:查询某个学生的各科成绩、统计所有不及格科目超过

    2024年02月09日
    浏览(52)
  • 【学生成绩管理系统----C语言】

    还在为期末程序设计而烦恼吗,不要担心,大师帮你安利一波完整的的管理系统代码,对你有帮助记得加关注噢! 文章目录 一、学生成绩管理系统是什么? 二、信息管理的七个模块 1.Step one 2.Step Two  3.Step Three 4.Step four 5.Step five 6.Step Six 7.Next 总结        学生信息管理系统

    2024年02月03日
    浏览(52)
  • 数据结构课程设计:学生成绩管理系统

    目  录 第一章   需求分析 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 安装及使用 第六章 项目总结 第七章 源码 一.需求分析        学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好

    2024年02月02日
    浏览(67)
  • 课设——C语言学生成绩管理系统

            相信许多同学在大学期间,学习计算机相关课程的时候,都有一个令人头疼的问题——课程设计。那么本片文章就详细的分享一个用C语言实现一个简单学生成绩管理系统,供同学们学习和参考(文章最后会附上源程序)。 1.建立一张学生成绩表,每个学生包含 学

    2024年02月11日
    浏览(77)
  • C语言课程设计-学生成绩管理系统

    需求分析: 1.设计题目:学生成绩管理系统 2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找 概要设计 1. 功能模块图 详细设计 1. 流程图 测试结果 :列出所有功能的运行界面,并作文字说明。 1.录入成绩:录入3个人的学号和各科成绩 2.每门课程

    2024年02月11日
    浏览(49)
  • C语言编程学生成绩管理系统

    目录 一、介绍 二、功能 1.录入学生 2.删除学生信息 3.修改学生信息 4.查询学生信息 5.所有学生信息 6.成绩排序  7.退出程序 三、代码 1.主函数 2.头文件 3.函数封装库         利用C语言,运用链表、指针、封装函数等基本知识实现一个学生管理系统。通过在终端对学生信息进

    2024年02月10日
    浏览(52)
  • C语言学生成绩管理系统(综合项目)

    1. 这个代码主要实现以下功能: 2. 用到的主要参数有:     1.整型变量int n;用于储存学生人数和之后的循环判断。     2.字符串char name[][];用于储存姓名。     3.浮点型变量float score[];用于储存成绩。     4.长整型变量long ID[Max];用于储存学号。 3.用到的子函数有: int  Menu(

    2024年02月11日
    浏览(43)
  • 学生成绩管理系统——C语言版(含源码)

    一、开发环境 操作系统:Ununtu 16 开发环境工具:vscode 开发语言:C语言 二、功能需求 制作学生管理系统 在系统中能够实现 录入学生信息、帮助菜单、列出学生信息、计算总成绩平均值、根据总成绩平均值完成排序、根据学号查询学生信息、清屏、退出等功能。 三、功能说

    2024年02月08日
    浏览(49)
  • C语言课程设计_学生成绩管理系统

    设计一个学生成绩排名系统。 1)  具备对成绩的管理功能(添加、删除、排序) 2)  具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3)  具备按学号、姓名、或课程名查询成绩的功能。 4)学生成绩应该保存在文件中。 备注:成绩记录以下信息:班级,学号,

    2024年02月11日
    浏览(46)
  • C语言学生成绩信息管理系统(超详细版)

    主题:一个简易成绩管理系统 功能介绍: 1.以文本形式存储学生信息 2.对以存信息进行   1. 插入 2. 修改3. 删除  4.查询  5.成绩数字特征 目录 一:分析 二:查询  三:菜单 四:初始化函数 五:插入函数 六:修改函数 七:删除函数 八:数字特征 九:显示函数 要进行 插入

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包