学生管理系统

本文介绍了如何用C语言编写一个学生管理系统,包括为什么要开发此程序(练习和效率提升)、系统包含的功能(如成绩录入、查看等)、以及关键代码实现,如使用结构体存储学生成绩、switchcase语句和for循环进行操作控制。
摘要由CSDN通过智能技术生成

一、why、what、how

(一)why

首先是为什么要做这个程序,一是出于练习的目的,可以更熟练的运用和学习c语言,掌握多文件编程,也有利于相关概念的理解;二是这个程序可以帮助我们批量化的处理信息,提高工作效率。

(二)what

这个学生管理系统包括菜单和它所实现的功能,用户需要根据提示输入指令和数据让计算机实现对应的功能,功能包括成绩录入、查看、查询、计算平均分、排序、清屏、退出。

(三)how

主要是定义一个结构体来存储学号和成绩信息、并通过多个函数来实现多个子功能,最后实现整体功能。其中用到了switch case分支语句来辨别指令进入到对应的功能模块,通过for循环遍历来输入、查看、查询、控制程序终止,通过冒泡排序来实现按平均分排序。

二、代码

system.h//函数及变量的声明

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

//函数及变量的声明
int num;//num是学生人数,定义为全局变量,方便for循环使用
int i,j;

struct message //包含学号以及成绩
{
    int number;
    float chinese;
    float math;
    float english;
    float avg;//默认为0
} stu[100];

void print_menu();//打印菜单
void Type();//输入学生成绩信息
void Average();//计算三科平均分
void List();//列出成绩
void Sort();//成绩排序
void Search();//查询某学生成绩
void System();//清屏
void Help();//打印菜单,用print_menu代替

system.c//函数功能的实现

#include "system1.h"

void print_menu() //用来输出菜单
{
    printf("*******************************************\n");
    printf("*       学生成绩管理系统————帮助菜单      *\n");
    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");
    printf("*******************************************\n");
    printf("*    Copyright <C>2011.06.12 By 姓名      *\n");
    printf("*******************************************\n");
}

void Type()//录入学生信息
{
    printf("请输入学生人数:");
    scanf("%d", &num);
    printf("学号 语文 数学 外语\n");
    for (i = 0; i < num; i++)
    {
        stu[i].number = i + 1;
        printf("%d ", stu[i].number);
        scanf("%f %f %f", &stu[i].chinese, &stu[i].math, &stu[i].english);
    }
}

void Average()
{
    for (i = 0; i < num; i++)
    {
        stu[i].avg = (stu[i].chinese + stu[i].math + stu[i].english) / 3.0;
    }
    printf("平均分已计算。请使用命令L查看。\n");
}

void List()//输出成绩列表
{
    printf("学生成绩如下:\n");
    printf("学号  语 文  数 学  外 语  平 均 分\n");
    for (i = 0; i < num; i++)
    {
        printf("%2d    %3.1f   %3.1f   %3.1f   %3.1f\n", stu[i].number,stu[i].chinese, stu[i].math, stu[i].english, stu[i].avg);
    }
}

void Sort()//按成绩排序
{
    for (i = 0; i < num - 1; i++)
    {
        for (j = 0; j < num - i - 1; j++)
        {
            if (stu[j].avg < stu[j + 1].avg)
            {
                struct message temp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = temp;
            }
        }
    }
    printf("完成排序,请使用命令L查看。\n");
}

void Search()
{
    int target;
    printf("请输入要查询的学生学号:\n");
    scanf("%d", &target);
    for (i = 0; i < num; i++)
    {
        if (stu[i].number == target)
        {
            printf("学号  语 文  数 学  外 语  平 均 分\n");
            printf("   %3.1f  %3.1f  %3.1f    %3.1f\n", stu[i].chinese, stu[i].math, stu[i].english, stu[i].avg);
        }
    }
}
main.c

#include "system1.h"

int main()
{
    char cmd;
    int value=0;
    print_menu();
    while (1)
    {
        printf("请输入命令=");
        scanf(" %c", &cmd);
        if(cmd=='T')
        {
            value=1;
        }else if(value==0 && (cmd=='L' || cmd=='A' || cmd=='P' || cmd=='S'))
        {
            printf("成绩表为空!请先使用命令T录入学生成绩。\n");
            continue;
        }
        switch (cmd)
        {
        case 'H':
            print_menu();
            break;
        case 'T':
            Type();
            break;
        case 'A':
            Average();
            break;
        case 'L':
            List();
            break;
        case 'P':
            Sort();
            break;
        case 'S':
            Search();
            break;
        case 'C':
            system("clear");
            break;
        case 'Q':
            return -1;
        }
    }
    return 0;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream Blade

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值