设计并实现一个成绩管理系统,该系统用于教师管理一门课程的成绩。~
系统功能:成绩录入、打印成绩单、修改成绩、统计分数段、统计平均分、统计不及格学生
1) 系统要有主菜单界面,让教师了解系统的功能,以及如何选择系统功能。
2) 系统应该能够让教师自由选择并完成成绩录入、打印成绩单、修改成绩、统
计分数段、统计平均分、统计不及格学生等项目中的任何一项或多项工作。
使用数组存储的简单实现如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Student {
int stuId; // 学号
char name[20]; // 姓名
float score; // 成绩
}STU;
int n; // 学生数
STU stus[1000]; // 数组存储学生
int main(int argc, const char * argv[]) {
n = 0;
int flag = 1;
while (flag) {
menu();
int o;
scanf("%d", &o);
switch (o) {
case 1:
{
insertData();
}
break;
case 2:
{
printScores();
}
break;
case 3:
{
updateData();
}
break;
case 4:
{
printScoreRange();
}
break;
case 5:
{
printScoreAvg();
}
break;
case 6:
{
printScoreLower();
}
break;
case 0:
{
flag = 0;
}
break;
default:
{
printf("请正确输入选项~\n");
}
break;
}
}
}
// 菜单
void menu(void) {
printf("========== 成绩管理系统 ==========\n");
printf(" 成绩录入: 1 \n");
printf(" 打印成绩单: 2 \n");
printf(" 修改成绩: 3 \n");
printf(" 统计分数段: 4 \n");
printf(" 统计平均分: 5 \n");
printf(" 统计不及格: 6 \n");
printf(" 退出程序: 0 \n");
printf("---------------------------------\n");
printf("请输入操作选项:");
}
void insertData(void) {
printf("========== 成绩录入 ==========\n");
printf("请输入学生信息(学号 姓名 成绩)\n");
STU st;
scanf("%d %s %f", &st.stuId, st.name, &st.score);
stus[n] = st;
n++;
}
void updateData(void) {
int f = 1;
while (f) {
printf("========== 修改成绩 ==========\n");
printf("通过学号查找修改: 1 \n");
printf("通过姓名查找修改: 2 \n");
printf("-----------------------------\n");
printf("请输入操作选项:");
int op;
scanf("%d", &op);
switch (op) {
case 1:
{
printf("请输入学号:");
int stuId;
scanf("%d", &stuId);
STU s = selectById(stuId);
if (s.stuId == -1) {
printf("未找到该学生,继续查找请输入:1\n");
int o;
scanf("%d", &o);
if (o != 1) {
f = 0;
}
} else {
printf("请输入新的成绩:");
float score;
scanf("%f", &score);
s.score = score;
printf("成绩修改成功~\n");
f = 0;
}
}
break;;
case 2:
{
printf("请输入姓名:");
char name[20];
scanf("%s", name);
STU s = selectByName(name);
if (s.stuId == -1) {
printf("未找到该学生,继续查找请输入:1\n");
int o;
scanf("%d", &o);
if (o != 1) {
f = 0;
}
} else {
printf("请输入新的成绩:");
float score;
scanf("%f", &score);
s.score = score;
printf("成绩修改成功~\n");
f = 0;
}
}
break;
default:
{
printf("请正确输入选项~\n");
}
break;
}
}
}
STU selectById(int stuId) {
for (int i = 0; i < n; i++) {
STU s = stus[i];
if (s.stuId == stuId) {
return s;
}
}
STU st;
st.stuId = -1;
return st;
}
STU selectByName(char name[20]) {
for (int i = 0; i < n; i++) {
STU s = stus[i];
if (strcmp(s.name, name) == 0) {
return s;
}
}
STU st;
st.stuId = -1;
return st;
}
void printScores(void) {
printf("========== 成绩单 ==========\n");
printf("学号 姓名 成绩\n");
for (int i = 0; i < n; i++) {
STU s = stus[i];
printf("%d %s %.2f\n", s.stuId, s.name, s.score);
}
}
void printScoreRange(void) {
printf("========== 成绩分数段 ==========\n");
if (n < 1) {
printf("还没有录入学生信息\n");
return;
}
float min = stus[0].score;
float max = stus[0].score;
for (int i = 1; i < n; i++) {
STU s = stus[i];
if (min > s.score) {
min = s.score;
}
if (max < s.score) {
max = s.score;
}
}
printf("最低分:%.2f\n最高分:%.2f\n", min, max);
}
void printScoreAvg(void) {
printf("========== 成绩平均分 ==========\n");
if (n < 1) {
printf("还没有录入学生信息\n");
return;
}
float sum = 0;
for (int i = 0; i < n; i++) {
STU s = stus[i];
sum += s.score;
}
printf("平均分:%.2f\n", sum / n);
}
void printScoreLower(void) {
printf("========== 不及格名单 ==========\n");
printf("学号 姓名 成绩\n");
for (int i = 0; i < n; i++) {
STU s = stus[i];
if (s.score < 60) {
printf("%d %s %.2f\n", s.stuId, s.name, s.score);
}
}
}
希望能帮到你