学生管理系统

该系统使用C语言编写,功能包括录入学生成绩、查看成绩、计算平均分、排序、查询、清屏和显示帮助菜单。通过结构体存储学生数据,命令行交互式操作。在没有录入成绩时,部分功能不可用。代码包括多个功能函数,如Type.c用于录入成绩,List.c用于显示成绩,Average.c计算平均分,Sort.c进行排序,Search.c查询成绩,以及帮助和清屏功能。
摘要由CSDN通过智能技术生成

学生管理系统

原代码压缩包文件链接:https://download.csdn.net/download/m0_52857070/87787176
要求实现输入学生成绩、查看学生成绩、求解每个学生的平均分、排序、查询学生成绩、清屏、帮助菜单、退出系统。
编译时需要把你所有的文件都编译链接起来
我的源p文件有main.c、help.c、cmds.c、Type.c、List.c Average.c、Search.c、System1.c和wenjian.h(头文件)
在这里插入图片描述
编译之后形成./a.out

一、各功能展示:

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

在这里插入图片描述

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

同理,当输入其他的成绩处理命令时也作相应的处理。
在这里插入图片描述

3)输入命令 T,调用Type子函数录入成绩。
在这里插入图片描述
界面提示输入学生人数
输入2
在这里插入图片描述
提示输入2名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,
输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2
在这里插入图片描述

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

在这里插入图片描述

4)输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
在这里插入图片描述
5)输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。
在这里插入图片描述
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
在这里插入图片描述
6)输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。
在这里插入图片描述
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
在这里插入图片描述
7)输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。
在这里插入图片描述
输入2 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。
在这里插入图片描述
8)输入命令C 执行清屏函数语句system(“clear”);
在这里插入图片描述
清除屏幕的所有内容。提示输入命令。

9)输入命令H 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令。
在这里插入图片描述

10)输入命令Q 则退出系统。
在这里插入图片描述

注意:
1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留1位小数。
2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。

二、代码详解

1)wenjian.h自定义头文件

在这里插入图片描述
第一步:再头文件里,我们需要加上防止重复编译的代码

再头文件一开始处加上一下两句:
#ifndef 头文件ming
#define 头文件名
再在文件尾部加上
#endif
这样在嵌套调用时就可以防止出现重复编译的过程

第二步:加上我们这个系统用到的头文件
#include “stdio.h”
#include “string.h”
#include “assert.h”
第三步:1、定义一个结构体,该结构体成员包括学号(id)、语文成绩(chinese)、数学(math)、外语(flanguage)、平均成绩(avg)。
typedef struct student
{
int id;
float chinese;
float math;
float flanguage;
float avg;
}stu;

2、并通过typedef将结构体重命名为stu。
3、定义一个变量存储学生个数
int stun;

2)main.c文件

第一步:把我们的自己编写的头文件添加进去
在这里插入图片描述
第二步:把需要用到的外部函数help,cmds函数通过extern引用过来。
是系统在开启后,先调用help函数,显示帮助菜单。然后调用cmds命令接收终端输入的命令。

3)cmds.c文件

在这里插入图片描述

第一步:也是把用到的外部函数引进来

extern void help(); //帮助菜单函数
extern void Type(stu *p); //填写学生信息函数
extern void List(stu *q); //打印学生信息函数
extern void Average(stu *r); //求每个学生平均分的函数
extern void Sort(stu *k); //排序函数
extern void Search(stu *l); //查询函数
extern void clear1(); //清屏函数

第二步:cmds函数的编写
1、第一个就是定义个变量接受命令,并判断是否有符合的命令,如果有就去执行该命令下对应的函数。
2、头开始我们先判断是否有学生,如果没有,并且输入的命令,与学生的个数有关。这个时候我们就提示用户当前还没有学生,不能进行求平均分、排序、查看等操作。

3、注意帮助菜单命令、写命令、推出命令与是否已有学生信息无关,所以我们需要把它们单独从switch中拿出来。
4、当有学生信息的时候我们就可以去执行switch中的相关命令。
5、由于我们要求循环接受命令,所以以上内容,我们可以写进一个死循环。
6、在进入死循环之前,我们要注意把学生的个数置零,防止出现随机值。当执行完写入命令后,学生个数会发生改变。

4)Type.c写入函数

写入学生信息
在这里插入图片描述

第一步:先用scanf输入你要录入多少个学生。
第二步:循环录入结构体中包含的各种信息,注意学生学号要单独录入。

5)List.c

打印学生信息
在这里插入图片描述

将写入的学生信息同过for循环打印出来即可。

6)Average.c

求每个学生成绩的平均值
在这里插入图片描述

用循环遍历,把学生各个科目的成绩加起来除以3赋值给平均值这个成员变量即可。

7)Sort.c

排序函数,将学生按平均分由高到低排序
在这里插入图片描述

8)Search.c

根据学生学号查询某个学生的详细信息
在这里插入图片描述
用循环遍历,找到学生学号与我们输入的学生学号相同的学生,并把该学生的详细信息给打印出来。

9)system1.c

使用清屏函数将我们的屏幕清空
在这里插入图片描述

10)help.c

帮助菜单函数,调用这个函数会把我们这个系统所有的相关信息列出来,方便用户查询。
在这里插入图片描述

11)Q退出命令

按下这个命令后会执行return 语句退出该系统的运行过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值