前言
这是博主在培训班培训时做的一个小项目学生管理系统,因为当时博主基础比较弱,只能实现老师要求的基础功能,所以博主做的这个项目看起来很鸡肋,但对博主来说已经很成功了,毕竟来培训之前博主没有任何编程基础。额外的功能像增删改查什么的由于时间原因当时没有实现,博主会在培训结束的时候继续优化的,争取靠自己手敲。
head.h 头文件代码
#include <stdio.h>
#ifndef __HEAD_H__
#define __HEAD_H__
typedef struct DataType //定义一个名为DataType的结构体并重命名为DT用来组织和管理学生成绩
{
int id; //学生学号
float chinese; //语文成绩
float math; //数学成绩
float english; //英语成绩
float average; //平均分
} DT;
DT stu[100];
extern int StudentCount;
//声明子函数
void Help();
void Type();
void List();
void Average();
void Sort();
void Search();
#endif
main.c 主函数代码
#include <stdio.h>
#include<stdlib.h>
#include"head.h"
//定义全局变量
int StudentCount = 0; //定义学生人数变量,初始化学生人数
DT stu[100]; //定义DT类型的数组
char IN; //定义输入指令变量
int main(int argc, char const *argv[])
{
Help();
while (1)
{
printf("请输入命令=");
scanf(" %c", &IN);
getchar();
if (IN == 'T')
{
Type(); //调用Type子函数录入成绩
continue;
}
else if (IN == 'L')
{
if (StudentCount == 0)
{
printf("成绩表为空! 请先使用命令 T 录入学生成绩\n");
}
else
{
List(); //调用List子函数输出成绩表
continue;
}
}
else if (IN == 'A')
{
if (StudentCount == 0)
{
printf("成绩表为空! 请先使用命令 T 录入学生成绩\n");
}
else
{
Average(); //调用Average子函数计算平均分
continue;
}
}
else if (IN == 'P')
{
if (StudentCount == 0)
{
printf("成绩表为空! 请先使用命令 T 录入学生成绩\n");
}
else
{
Sort(); //调用Sort子函数按平均分由高到低排序
continue;
}
}
else if (IN == 'S')
{
if (StudentCount == 0)
{
printf("成绩表为空! 请先使用命令 T 录入学生成绩\n");
}
else
{
Search(); //调用Search子函数查询学生成绩
continue;
}
}
else if (IN == 'C')
{
system("clear");
continue;
}
else if (IN == 'H')
{
Help();
continue;
}
else if (IN == 'Q')
{
printf("Press any key to continue\n");
break;
}
}
}
fun.c 功能函数代码
#include <stdio.h>
#include "head.h"
void Help() //系统帮助菜单函数,用来显示系统帮助菜单(即命令菜单)
{
printf("\t\t\t\t*******************************************\n");
printf("\t\t\t\t *\t学生成绩管理系统———帮助菜单\t* \n");
printf("\t\t\t\t*******************************************\n");
printf("\t\t\t\t *\t H = 显示帮助菜单\t\t* \n");
printf("\t\t\t\t *\t T = 成绩录入\t\t\t* \n");
printf("\t\t\t\t *\t A = 计算学生平均分\t\t* \n");
printf("\t\t\t\t *\t L = 列出成绩表\t\t* \n");
printf("\t\t\t\t *\t P = 按平均成绩由高到低排序\t* \n");
printf("\t\t\t\t *\t S = 按学号查询学生成绩\t* \n");
printf("\t\t\t\t *\t C = 清屏\t\t\t* \n");
printf("\t\t\t\t *\t Q = 退出系统\t\t\t* \n");
printf("\t\t\t\t*******************************************\n");
printf("\t\t\t\t * Copyright <c> 2024.08.09 By 姓名 * \n");
printf("\t\t\t\t*******************************************\n");
printf("\n");
}
void Type() //定义一个录入成绩的子函数
{
DT s;
printf("请输入学生人数:");
scanf("%d", &StudentCount);
printf("请输入%d名学生的三门课成绩:\n", StudentCount);
printf("学号 语文 数学 外语\n");
for (int i = 0; i < StudentCount; i++)
{
s.id = i + 1;
printf("%d", s.id);
scanf("%f%f%f", &s.chinese, &s.math, &s.english);
stu[i].id = s.id;
stu[i].chinese = s.chinese;
stu[i].math = s.math;
stu[i].english = s.english;
}
}
void List()
{
printf("学生成绩如下:\n");
printf("学号\t语文\t数学\t外语\t平均分\n");
for (int i = 0; i < StudentCount; i++)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].id, stu[i].chinese, stu[i].math, stu[i].english, stu[i].average);
}
}
void Average() //定义一个计算学生成绩平均分的子函数
{
for (int i = 0; i < StudentCount; i++)
{
stu[i].average = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
}
printf("平均分已计算。请使用命令 L 查看\n");
}
void Sort() //定义一个按平均分由高到低排序的函数,使用冒泡排序思想
{
for (int j = 0; j < StudentCount - 1; j++)
{
for (int i = 0; i < StudentCount - 1 - j; i++)
{
if (stu[i].average < stu[i + 1].average)
{
DT tem = stu[i];
stu[i] = stu[i + 1];
stu[i + 1] = tem;
}
}
}
printf("完成排序。请使用命令 L 查看\n");
}
void Search() //定义一个查询学生成绩的函数
{
int j;
printf("输入要查询的学生学号: ");
scanf("%d", &j);
for (int i = 0; i < StudentCount; i++)
{
if (stu[i].id == j)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].id, stu[i].chinese, stu[i].math, stu[i].english, stu[i].average);
}
}
}