学生成绩管系统要求:
1.显示帮助菜单
2.录入成绩
3.计算学生平均分
4.显示成绩列表
5.按平均成绩由高到低排序
6.按学号查询学生成绩
7.清屏
8.退出系统
基本函数:
1、结构体struct Student
定义一个结构体struct,student定义的结构体对象,学号int id、 语文成绩 float yw、数学成绩 float sx、 外语成绩 float wy、平均成绩 float pjcj。
typedef struct student
{
int id; //学号
float yw; //语文
float sx; //数学
float wy; //外语
float pjz; //平均值
}STU;
2、显示帮助菜单(void start())
输入命令H,调用start子函数显示帮助菜单。
void start()
{
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> 2024.4.12 yzpd *\n");
printf("**************************************\n");
}
3、录入成绩(void Type())
开始输入命令T会提示输入学生人数 输入完要录入的人数(n)后会提示请输入n名学生的三门成绩,列出成绩表的表头”学号 语文 数学 外语“,提示学号 1;输入完学号1的三门成绩后回车结束。提示学号2 重复学号 1 的操作一直到n,再次输入命令T会在上次完成时的学号累加。
void Type()
{
printf("请输入学生人数:");
scanf("%d", &n);
printf("\n");
printf("请输入%d名学生的三门成绩:\n", n);
if(c==0){
printf("学号\t语文\t数学\t外语\n");
for (int i = 1; i <= n; i++)
{
stu[i].id = i;
printf("%d\t", stu[i].id);
scanf("%f\t%f\t%f", &stu[i].yw, &stu[i].sx, &stu[i].wy);
}
t+=n;
c++;
}else {
printf("学号\t语文\t数学\t外语\n");
for (int i = t+1; i <= t+n; i++)
{
stu[i].id = i;
printf("%d\t", stu[i].id);
scanf("%f\t%f\t%f", &stu[i].yw, &stu[i].sx, &stu[i].wy);
}
t+=n;
}
}
4、求平均分(void Average())
在没录入成绩时输入命令A会提示”成绩表为空!请先使用命令T录入学生成绩“(L,S,P命令相同)。“录入完学生成绩后输入求平均分命令会调用Average函数计算平均分,并提示”平均分已计算。请使用命令L查看。
void Average()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
for (int i = 1; i <= t; i++)
{
stu[i].pjz = (stu[i].yw + stu[i].sx + stu[i].wy) / 3;
}
printf("平均分已计算。请使用命令L查看。\n");
}
}
5、查看成绩列表(void List())
输入命令L,调用List函数,列出录入的信息。
void List()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
printf("学生成绩如下:\n");
printf("学号\t语文\t数学\t外语\t平均分数\n");
for (int i = 1; i <= t; i++)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].id, stu[i].yw, stu[i].sx, stu[i].wy, stu[i].pjz);
}
}
}
6、按平均成绩排序(void Sort())
输入命令P,调用Sort函数,提示“完成排序。请使用命令L查看”。
7、按学号查询学生成绩(void Search())
输入命令S,调用Search函数,提示“输入要查询的学生学号”。输入学号(2),找到该学号的成绩并输出。
void Search()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
printf("输入要查询的学生学号:");
int a;
scanf("%d", &a);
printf("学号\t语文\t数学\t外语\t平均分数\n");
printf("%d\t%1.f\t%.1f\t%.1f\t%.1f\n", stu[a].id, stu[a].yw, stu[a].sx, stu[a].wy, stu[a].pjz);
}
}
完整代码如下:
head.h
#ifndef _HEAD_H_
#define _HEAD_H_
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define N 100
typedef struct student
{
int id; //学号
float yw; //语文
float sx; //数学
float wy; //外语
float pjz; //平均值
}STU;
void start();
void Type();
void Average();
void List();
void Sort();
void Search();
void xiugai();
#endif
fun,c
#include"head.h"
extern int n,t,c;
STU stu[100];
//帮助菜单
void start()
{
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> 2024.4.12 yzpd *\n");
printf("**************************************\n");
}
//录入成绩
void Type()
{
printf("请输入学生人数:");
scanf("%d", &n);
printf("\n");
printf("请输入%d名学生的三门成绩:\n", n);
if(c==0){
printf("学号\t语文\t数学\t外语\n");
for (int i = 1; i <= n; i++)
{
stu[i].id = i;
printf("%d\t", stu[i].id);
scanf("%f\t%f\t%f", &stu[i].yw, &stu[i].sx, &stu[i].wy);
}
t+=n;
c++;
}else {
printf("学号\t语文\t数学\t外语\n");
for (int i = t+1; i <= t+n; i++)
{
stu[i].id = i;
printf("%d\t", stu[i].id);
scanf("%f\t%f\t%f", &stu[i].yw, &stu[i].sx, &stu[i].wy);
}
t+=n;
}
}
//求平均分
void Average()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
for (int i = 1; i <= t; i++)
{
stu[i].pjz = (stu[i].yw + stu[i].sx + stu[i].wy) / 3;
}
printf("平均分已计算。请使用命令L查看。\n");
}
}
//查看成绩表
void List()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
printf("学生成绩如下:\n");
printf("学号\t语文\t数学\t外语\t平均分数\n");
for (int i = 1; i <= t; i++)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].id, stu[i].yw, stu[i].sx, stu[i].wy, stu[i].pjz);
}
}
}
//按平均成绩从高到低排序
void Sort()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
for (int i = 1; i <= t; i++)
{
for (int j = 1; j <= t - i; j++)
{
if (stu[j].pjz < stu[j + 1].pjz)
{
STU p = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = p;
}
}
}
printf("完成排序。请使用命令L查看。\n");
}
}
//按学号查询学生成绩
void Search()
{
if (n == 0)
{
printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
}
else
{
printf("输入要查询的学生学号:");
int a;
scanf("%d", &a);
printf("学号\t语文\t数学\t外语\t平均分数\n");
printf("%d\t%1.f\t%.1f\t%.1f\t%.1f\n", stu[a].id, stu[a].yw, stu[a].sx, stu[a].wy, stu[a].pjz);
}
}
main.c
#include "head.h"
int n = 0,c=0,t=0;
int main(int argc,char const argv[])
{
start();
char M;
while (1)
{
printf("请输入命令= ");
scanf("%c", &M);
switch (M)
{
case 'H':
start();
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':
{
printf("Press any key to continue\n");
exit(1);
}
break;
}
getchar();
}
return 0;
}
Makefile:
test:main.o fun.o
gcc main.o fun.o -o test
main.o:main.c
gcc -c main.c -o main.o
fun.o:fun.c
gcc -c fun.c -o fun.o