一 系统功能层次图
二 构造算法架构
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>
#include <stdlib.h>
struct student {
int id; //学号
int name; //姓名
float Politics; //政治
float English; //英语
float Math; //数学
float Specializedcourse; //专业
float Sum; //总分
}stu[33];
//函数声明
void Help();
int Type(struct student* p);
void List(struct student* p, int n);
void Add(struct student* p, int n);
void Sort(struct student* p, int n);
void Search(struct student* p, int n);
int main(int argc, char const* argv[]) {
Help();
char ch;
int n = 0; //学生人数
//struct student stu[33];
while (1) {
printf("请输入命令=");
scanf("%c", &ch);
if (ch == 'T')
n = Type(stu);
else if (ch == 'L') {
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生成绩\n");
else
List(stu, n);
}
else if (ch == 'A') {
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生成绩\n");
else
Add(stu, n);
}
else if (ch == 'P') {
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生成绩\n");
else Sort(stu, n);
}
else if (ch == 'S') {
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生成绩\n");
else Search(stu, n);
}
else if (ch == 'C')
system("clear");
else if (ch == 'H')
Help();
else if (ch == 'Q')
break;
//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(" 请选择操作<H,T,A,L,P,S,C,Q> \n");
printf(" Copyright<C>2025.02.26 By NWU \n");
}
int Type(struct student* p) { //录入学生成绩
int i, n = 0;
printf("请输入学生人数\n");
scanf("%d", &n);
printf("请输入%d个学生4门课的成绩\n", n);
printf("学号 政治 英语 数学 专业\n");
for (i = 0; i < n; i++) {
printf("%d ", i + 1);
(p + i)->id = i + 1;
scanf("%f %f %f %f", &(p + i)->Politics, &(p + i)->English, &(p + i)->Math, &(p + i)->Specializedcourse);
}
return n;
}
void List(struct student* p, int n) { //列出成绩
printf("学生成绩如下\n");
printf("学号 政治 英语 数学 专业 总分");
for (int i = 0; i < n; i++) {
printf("%d %.1f %.1f %.1f %.1f", (p + i)->id, (p + i)->Politics, (p + i)->English, (p + i)->Math, (p + i)->Specializedcourse);
putchar(10);
}
putchar(10);
}
void Add(struct student* p, int n) { //计算总分
int i;
for (i = 0; i < n; i++) {
(p + i)->Sum = (p + i)->Politics + (p + i)->English + (p + i)->Math + (p + i)->Specializedcourse;
}
printf("已完成总分计算请使用命令A进行查看\n");
}
void Sort(struct student* p, int n) { //将总分成绩从高到低排序 冒泡排序
struct student t; //交换中间结构体变量
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n - i - 1; j++) {
if ((p + j)->Sum < (p + j + 1)->Sum) {
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
printf("完成排序,请使用命令L查看\n");
}
void Search(struct student* p, int n) { //根据学号查询考试信息
int a = 0;
printf("请输入要查询的学号\n");
scanf("学号 政治 英语 数学 专业 总分\n");
for (int i = 0; i < n; i++) {
if ((p + i)->id == a) {
printf("%d %.1f %.1f %.1f %.1f %.1f", (p+i)->id,(p + i)->Politics, (p + i)->English, (p + i)->Math, (p + i)->Specializedcourse, (p + i)->Sum);
}
}
putchar(10);
}