学完C语言之后的一个小项目,学生管理系统。自己接触编程的时间也不长,写的肯定比大佬写的繁琐,也有一些不足。从刚开始拿到要求无从下手,看了好几遍才开始动手写,界面,定义,函数一点点抠出来,如果写出来与要求不符再一点点改,到最后写完整个程序,能完整的实现出来还是很有成就感的,发出来纪念一下。
![](https://i-blog.csdnimg.cn/blog_migrate/0dc7c92b676ac0f7a596fd7a9f6b72cd.png)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
struct student
{
int id;
float yu;
float shu;
float ying;
float average;
};
struct student stu1[N];//定义结构体数组,用于存放学生信息
int n = 0;//学号
int i, s;//i循环用,s按学号查询学生成绩用
void help();//菜单函数
void type();//输入学生信息函数
void list();//列出成绩表
void average();//计算学生平均分
void sort();//按学生平均分进行排序
void search();//按学号查询学生成绩
int main(int argc, char const *argv[])
{
char a;
help();
while (1)
{
printf("请输入命令");
scanf("%c", &a);
switch (a)
{
case 'T':
type();
break;
case 'L':
list();
break;
case 'A':
average();
break;
case 'P':
sort();
break;
case 'S':
search();
break;
case 'C':
system("clear");
break;
case 'H':
help();
break;
case 'Q':
printf("press any key to continue\n");
return 0;
default:
printf("输入错误,请按照提示菜单输入\n");
break;
return 0;
}
getchar();
}
return 0;
}
void help()
{
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> 2023.02.10 by 袁光辉 * \n");
printf("*********************************************\n");
}
void type()
{
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入%d名学生的三门课成绩\n", n);
printf("学号 语文 数学 外语\n");
for (i = 0; i < n; i++)
{
stu1[i].id = i + 1;
printf("%d ", stu1[i].id);
scanf("%f %f %f", &stu1[i].yu, &stu1[i].shu, &stu1[i].ying);
}
}
void list()
{
if (n == 0)
{
printf("成绩表为空!请先输入T录入学生成绩\n");
}
else
{
printf("学生成绩如下:\n");
printf("学号 语文 数学 外语 平均分\n");
for (i = 0; i < n; i++)
{
printf("%d %.2f %.2f %.2f %.2f\n", stu1[i].id, stu1[i].yu, stu1[i].shu, stu1[i].ying, stu1[i].average);
}
}
}
void average()
{
if (n == 0)
{
printf("成绩表为空!请先输入T录入学生成绩\n");
}
for (i = 0; i < n; i++)
{
stu1[i].average = (stu1[i].yu + stu1[i].shu + stu1[i].ying) / 3;
}
printf("平均分已计算。请输入命令L查看\n");
}
void sort()
{
if (n == 0)
{
printf("成绩表为空!请先输入T录入学生成绩\n");
}
struct student stu2;
for (i = 0; i < n; i++)
{
if (stu1[i].average < stu1[i + 1].average)
{
stu2 = stu1[i];
stu1[i] = stu1[i + 1];
stu1[i + 1] = stu2;
}
if (stu1[i].average < stu1[i + 2].average)
{
stu2 = stu1[i];
stu1[i] = stu1[i + 2];
stu1[i + 2] = stu2;
}
if (stu1[i + 1].average < stu1[i + 2].average)
{
stu2 = stu1[i + 1];
stu1[i + 1] = stu1[i + 2];
stu1[i + 2] = stu2;
}
}
printf("完成排序。请使用命令L查看\n");
}
void search()
{
if (n == 0)
{
printf("成绩表为空!请先输入T录入学生成绩\n");
}
printf("请输入要查询的学生学号");
scanf("%d", &s);
for (i = 0; i < n; i++)
{
if (stu1[i].id == s)
{
printf("学号 语文 数学 外语 平均分\n");
printf("%d %.2f %.2f %.2f %.2f\n", stu1[i].id, stu1[i].yu, stu1[i].shu, stu1[i].ying, stu1[i].average);
}
}
}