帮我写一个程序,关于学生成绩管理系统的
时间: 2023-08-28 21:17:51 浏览: 34
好的,以下是一个简单的学生成绩管理系统的程序,你可以根据需要进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生数量
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_SUBJECTS 10 // 最大科目数量
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
int scores[MAX_SUBJECTS]; // 分数
float avg_score; // 平均分
int sum_score; // 总分
} student;
int num_students = 0; // 学生数量
student students[MAX_STUDENTS]; // 学生数组
int num_subjects = 0; // 科目数量
char subjects[MAX_SUBJECTS][MAX_NAME_LEN]; // 科目数组
// 添加学生
void add_student() {
if (num_students >= MAX_STUDENTS) {
printf("学生数量已达到上限,无法添加新学生!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[num_students].name);
for (int i = 0; i < num_subjects; i++) {
printf("请输入%s的%s成绩:", students[num_students].name, subjects[i]);
scanf("%d", &students[num_students].scores[i]);
students[num_students].sum_score += students[num_students].scores[i];
}
students[num_students].avg_score = (float)students[num_students].sum_score / num_subjects;
num_students++;
}
// 删除学生
void delete_student() {
if (num_students <= 0) {
printf("没有学生可供删除!\n");
return;
}
printf("请输入要删除的学生姓名:");
char name[MAX_NAME_LEN];
scanf("%s", name);
int index = -1;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到名为%s的学生!\n", name);
return;
}
for (int i = index; i < num_students - 1; i++) {
students[i] = students[i + 1];
}
num_students--;
}
// 添加科目
void add_subject() {
if (num_subjects >= MAX_SUBJECTS) {
printf("科目数量已达到上限,无法添加新科目!\n");
return;
}
printf("请输入科目名称:");
scanf("%s", subjects[num_subjects]);
num_subjects++;
}
// 删除科目
void delete_subject() {
if (num_subjects <= 0) {
printf("没有科目可供删除!\n");
return;
}
printf("请输入要删除的科目名称:");
char subject[MAX_NAME_LEN];
scanf("%s", subject);
int index = -1;
for (int i = 0; i < num_subjects; i++) {
if (strcmp(subjects[i], subject) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到名为%s的科目!\n", subject);
return;
}
for (int i = index; i < num_subjects - 1; i++) {
strcpy(subjects[i], subjects[i + 1]);
}
num_subjects--;
}
// 显示所有学生信息
void show_students() {
if (num_students <= 0) {
printf("没有学生记录!\n");
return;
}
printf("学生姓名\t");
for (int i = 0; i < num_subjects; i++) {
printf("%s\t", subjects[i]);
}
printf("平均分\t总分\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t", students[i].name);
for (int j = 0; j < num_subjects; j++) {
printf("%d\t", students[i].scores[j]);
}
printf("%.2f\t%d\n", students[i].avg_score, students[i].sum_score);
}
}
// 显示所有科目信息
void show_subjects() {
if (num_subjects <= 0) {
printf("没有科目记录!\n");
return;
}
printf("科目名称\n");
for (int i = 0; i < num_subjects; i++) {
printf("%s\n", subjects[i]);
}
}
int main() {
int choice;
while (1) {
printf("学生成绩管理系统\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 添加科目\n");
printf("4. 删除科目\n");
printf("5. 显示所有学生信息\n");
printf("6. 显示所有科目信息\n");
printf("7. 退出程序\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
add_subject();
break;
case 4:
delete_subject();
break;
case 5:
show_students();
break;
case 6:
show_subjects();
break;
case 7:
printf("程序已退出!\n");
exit(0);
default:
printf("无效的选择,请重新选择!\n");
}
}
return 0;
}
```
这个程序可以实现以下功能:
1. 添加学生,可以输入学生姓名和各科成绩,自动计算平均分和总分。
2. 删除学生,可以按姓名删除学生。
3. 添加科目,可以输入科目名称。
4. 删除科目,可以按名称删除科目。
5. 显示所有学生信息,按表格形式显示每个学生的姓名、各科成绩、平均分和总分。
6. 显示所有科目信息,按列表形式显示所有科目名称。
7. 退出程序。
你可以根据实际需要进行修改和完善,比如增加文件读写功能、成绩统计分析功能等。