试设计一学生成绩管理系统,使之能提供以下功能: 1.系统以菜单方式工作 2. 按学期、按班级完成对学生成绩的录入(学生成绩信息用文件保存),可不定时地增加学生信息。;用c语言编译
时间: 2024-02-15 13:01:43 浏览: 63
以下是一个简单的学生成绩管理系统的实现,使用 C 语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_NAME_LENGTH 50
struct student {
char name[MAX_NAME_LENGTH];
int grade[2]; // 两个学期的成绩
};
struct student students[MAX_STUDENTS];
int num_students = 0; // 当前学生数量
// 显示菜单并获取用户输入的选项
int show_menu() {
printf("\n=== 学生成绩管理系统 ===\n");
printf("1. 录入学生成绩\n");
printf("2. 显示学生成绩\n");
printf("3. 增加学生信息\n");
printf("4. 退出程序\n");
printf("请选择操作(1-4): ");
int choice;
scanf("%d", &choice);
return choice;
}
// 录入学生成绩
void input_grades() {
printf("\n=== 录入学生成绩 ===\n");
printf("请选择学期(1-2): ");
int term;
scanf("%d", &term);
printf("请输入班级名称: ");
char classname[MAX_NAME_LENGTH];
scanf("%s", classname);
// 查找该班级的学生
int num_class_students = 0;
struct student class_students[MAX_STUDENTS];
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, classname) == 0) {
memcpy(&class_students[num_class_students], &students[i], sizeof(struct student));
num_class_students++;
}
}
if (num_class_students == 0) {
printf("找不到该班级的学生!\n");
return;
}
// 录入成绩
for (int i = 0; i < num_class_students; i++) {
printf("请输入 %s 的 %d 学期成绩: ", class_students[i].name, term);
scanf("%d", &class_students[i].grade[term-1]);
}
// 将成绩写入文件
char filename[MAX_NAME_LENGTH];
sprintf(filename, "%s_%d.txt", classname, term);
FILE *file = fopen(filename, "w");
for (int i = 0; i < num_class_students; i++) {
fprintf(file, "%s %d\n", class_students[i].name, class_students[i].grade[term-1]);
}
fclose(file);
printf("成绩录入完成!\n");
}
// 显示学生成绩
void show_grades() {
printf("\n=== 显示学生成绩 ===\n");
printf("请选择学期(1-2): ");
int term;
scanf("%d", &term);
printf("请输入班级名称: ");
char classname[MAX_NAME_LENGTH];
scanf("%s", classname);
// 从文件中读取成绩
char filename[MAX_NAME_LENGTH];
sprintf(filename, "%s_%d.txt", classname, term);
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("找不到该班级的成绩记录!\n");
return;
}
printf("班级名称: %s, 学期: %d\n", classname, term);
printf("姓名\t成绩\n");
while (!feof(file)) {
char name[MAX_NAME_LENGTH];
int grade;
fscanf(file, "%s %d\n", name, &grade);
printf("%s\t%d\n", name, grade);
}
fclose(file);
}
// 增加学生信息
void add_student() {
printf("\n=== 增加学生信息 ===\n");
printf("请输入学生姓名: ");
char name[MAX_NAME_LENGTH];
scanf("%s", name);
// 检查学生是否已存在
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("该学生已存在!\n");
return;
}
}
strcpy(students[num_students].name, name);
num_students++;
printf("学生信息添加成功!\n");
}
int main() {
int choice;
do {
choice = show_menu();
switch (choice) {
case 1:
input_grades();
break;
case 2:
show_grades();
break;
case 3:
add_student();
break;
case 4:
printf("程序已退出。\n");
break;
default:
printf("无效的选项!\n");
break;
}
} while (choice != 4);
return 0;
}
```
该程序使用文件保存学生成绩信息,每个班每个学期的成绩保存在一个以班级名称和学期号命名的文本文件中,每行记录一个学生的姓名和成绩。增加学生信息时,只需要将学生姓名添加到内存中的学生列表中即可。
阅读全文