C基础——学生管理系统

一、实习功能

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

2.开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

同理,当输入其他的成绩处理命令时也作相应的处理

3.输入命令 T,调用T函数录入成绩。

界面提示输入学生人数

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

提示学号:1

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

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

体验新版本 

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

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

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

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

7.输入命令 Ssearch子函数查询学生成绩,提示“输入要查询的学生学号”。

8。输入命令C  执行清屏函数语句system("clear");

9输入命令H 调用meau函数显示帮助菜单。提示输入命令

10.输入命令Q ¿ 则退出系统。

可以用exit(0);

二、设计思路

        采用份文件管理方式进行编写,main函数中主要包含一个菜单函数与输入函数,菜单函数即是进入程序的界面,封装输入函数包括各种功能函数如输入学生成绩、求平均值等功能;在头文件中定义一“学生”的结构体,与一个一级该结构体指针,通过makefile进行多文件管理。

1.main函数

#include <stdio.h>
#include "head.h"
int main()
{
    menu();
    Input();  
    return 0;
}

2.菜单函数

#include "head.h"
void 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> 2025.03.01  By  ZDL    *  \n");
    printf("**********************************************\n");
    printf("\n");
}

3.输入函数

#include "head.h"
#include <stdlib.h>
extern int n;
void Input()
{
    while(1)      //保证功能函数之间可以循环执行直到输出退出函数
    {
        
        printf("请输入命令:\n");
        char choose;
        scanf("%c",&choose);
        if(n==0&&choose!='T')
        {
            printf("成绩表为空!请先使用命令T录入学生成绩\n");
            getchar();
            continue;
        }
        switch (choose)   //switch循环在通过输入的任务缩写来执行不同的命令
        {
        case 'H':
            menu();
            break;
        case 'T':
            T();
            break;
        case 'L':
            List();
            break;
        case 'A':
            aver();
            break;
        case 'P':
           sort();
            break;
        case 'S':
          search();
            break;
        case 'C':
            system("clear");
            break;
        case 'Q':
            exit(0);
            break;
        
        }
        getchar();   //用于回收输入完程序后按的回车键等结束符号
    }
    
}
       

4.makefile函数

CC=gcc
CFLAGS= -c -g 
OBJS=main.o T.o Input.o menu.o List.o aver.o sort.o search.o 
main:$(OBJS)
    $(CC) $^ -o $@
%.o:%.c
    $(CC) $(CFLAGS) $< -o $@
.PHONY:clean
clean:
    $(RM) *.o main

5.录入学生成绩

#include "head.h"
#include <stdlib.h>
int n;
void T()
{
    printf("请输入学生人数:\n");
    scanf("%d",&n);
    s=(struct student*)malloc(sizeof(struct student)*n);
    printf("请输入%d名学生的三门课成绩:\n",n);
    printf("学号    语文    数学    外语\n");
    for(int i=0;i<n;i++)
    {
        s[i].idcard = i+1;
        printf("%d\t",s[i].idcard);
        scanf("%f %f %f",&s[i].chinese,&s[i].math,&s[i].english);
        
    }

}

5.将学生成绩列表

#include <stdio.h>
#include "head.h"
extern int n;
void List()
{
    printf("学生成绩如下:\n");
    printf("学号    语文    数学    外语    平均分\n");
    for(int i=0;i<n;i++)
    {
        printf("%d %.2f  %.2f   %.2f    %.2f\t\n",s[i].idcard,s[i].chinese,s[i].math,s[i].english,s[i].average); 
    }
}

6.求平均值

#include <stdio.h>
#include "head.h"
extern int n;
void aver()
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        sum=(s[i].chinese+s[i].math+s[i].english);
        s[i].average=sum/3;
        sum=0;
    }
    printf("平均分已计算完毕,请使用命令L查看");
}

7.根据平均值排序

#include <stdio.h>
#include "head.h"
extern int n;
void sort()
{
    struct student p;
    for(int i=0;i<n-1;i++ )
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(s[j].average>s[j+1].average)
            {
               p=s[j];
               s[j]=s[j+1];
               s[j+1]=p;
            }
               
        }
    }
     printf("排序完毕,请使用命令L查看");
}

8.根据学号查找学生成绩

#include <stdio.h>
#include "head.h"
extern int n;
void search()
{
    printf("请输入要查询的学生学号:");
    scanf("%d",&n);
    printf("%d       %.2f   %.2f   %.2f    %.2f\t\n",s[n-1].idcard,s[n-1].chinese,s[n-1].math,s[n-1].english,s[n-1].average); 

}

9.清屏函数,退出函数

清屏函数,退出函数通过直接引用函数system("clear")与函数exit(0)即可,切记引用头文件#include <stdlib.h>进行声明。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值