学生成绩管理系统c语言作业
时间: 2023-07-13 19:08:11 浏览: 54
好的,学生成绩管理系统可以分为以下几个模块:
1. 学生信息模块:包括学生基本信息的录入、查看、修改和删除等功能。
2. 课程信息模块:包括课程基本信息的录入、查看、修改和删除等功能。
3. 成绩信息模块:包括成绩的录入、查看、修改和删除等功能。
4. 统计信息模块:包括对学生和课程的成绩进行统计,计算平均分、最高分、最低分等。
5. 数据存储模块:包括将学生、课程和成绩信息存储到文件中,以便下次程序运行时能够读取。
下面是一个简单的学生成绩管理系统的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100
#define MAX_COURSE 10
// 学生结构体
typedef struct {
char name[20]; // 学生姓名
char id[20]; // 学生学号
int course[MAX_COURSE]; // 学生选修的课程成绩
float avg; // 学生平均成绩
} student_t;
// 课程结构体
typedef struct {
char name[20]; // 课程名称
int id; // 课程编号
} course_t;
student_t students[MAX_STUDENT];
int student_count = 0;
course_t courses[MAX_COURSE];
int course_count = 0;
// 显示菜单
void show_menu() {
printf("学生成绩管理系统\n");
printf("1. 添加学生\n");
printf("2. 修改学生信息\n");
printf("3. 删除学生\n");
printf("4. 添加课程\n");
printf("5. 修改课程信息\n");
printf("6. 删除课程\n");
printf("7. 录入成绩\n");
printf("8. 修改成绩\n");
printf("9. 删除成绩\n");
printf("10. 统计成绩\n");
printf("11. 显示所有学生信息\n");
printf("12. 显示所有课程信息\n");
printf("13. 退出系统\n");
}
// 添加学生
void add_student() {
if (student_count >= MAX_STUDENT) {
printf("学生人数已满,无法添加新的学生!\n");
return;
}
student_t student;
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生学号:");
scanf("%s", student.id);
// 初始化学生选修课程成绩
for (int i = 0; i < MAX_COURSE; i++) {
student.course[i] = -1;
}
students[student_count++] = student;
printf("学生%s信息添加成功!\n", student.name);
}
// 修改学生信息
void modify_student() {
char id[20];
printf("请输入要修改信息的学生学号:");
scanf("%s", id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("学生%s信息修改成功!\n", students[i].name);
return;
}
}
printf("未找到学号为%s的学生!\n", id);
}
// 删除学生
void delete_student() {
char id[20];
printf("请输入要删除的学生学号:");
scanf("%s", id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = i; j < student_count - 1; j++) {
students[j] = students[j + 1];
}
student_count--;
printf("学生%s信息删除成功!\n", id);
return;
}
}
printf("未找到学号为%s的学生!\n", id);
}
// 添加课程
void add_course() {
if (course_count >= MAX_COURSE) {
printf("课程数目已达到上限,无法添加新的课程!\n");
return;
}
course_t course;
printf("请输入课程名称:");
scanf("%s", course.name);
printf("请输入课程编号:");
scanf("%d", &course.id);
courses[course_count++] = course;
printf("课程%s信息添加成功!\n", course.name);
}
// 修改课程信息
void modify_course() {
int id;
printf("请输入要修改信息的课程编号:");
scanf("%d", &id);
for (int i = 0; i < course_count; i++) {
if (courses[i].id == id) {
printf("请输入新的课程名称:");
scanf("%s", courses[i].name);
printf("课程%s信息修改成功!\n", courses[i].name);
return;
}
}
printf("未找到编号为%d的课程!\n", id);
}
// 删除课程
void delete_course() {
int id;
printf("请输入要删除的课程编号:");
scanf("%d", &id);
for (int i = 0; i < course_count; i++) {
if (courses[i].id == id) {
for (int j = i; j < course_count - 1; j++) {
courses[j] = courses[j + 1];
}
course_count--;
printf("课程%d信息删除成功!\n", id);
return;
}
}
printf("未找到编号为%d的课程!\n", id);
}
// 录入成绩
void add_score() {
char id[20];
int course_id;
int score;
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入课程编号:");
scanf("%d", &course_id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = 0; j < course_count; j++) {
if (courses[j].id == course_id) {
printf("请输入成绩:");
scanf("%d", &score);
students[i].course[j] = score;
printf("成绩录入成功!\n");
return;
}
}
printf("未找到编号为%d的课程!\n", course_id);
return;
}
}
printf("未找到学号为%s的学生!\n", id);
}
// 修改成绩
void modify_score() {
char id[20];
int course_id;
int score;
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入课程编号:");
scanf("%d", &course_id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = 0; j < course_count; j++) {
if (courses[j].id == course_id) {
printf("请输入新的成绩:");
scanf("%d", &score);
students[i].course[j] = score;
printf("成绩修改成功!\n");
return;
}
}
printf("未找到编号为%d的课程!\n", course_id);
return;
}
}
printf("未找到学号为%s的学生!\n", id);
}
// 删除成绩
void delete_score() {
char id[20];
int course_id;
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入课程编号:");
scanf("%d", &course_id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = 0; j < course_count; j++) {
if (courses[j].id == course_id) {
students[i].course[j] = -1;
printf("成绩删除成功!\n");
return;
}
}
printf("未找到编号为%d的课程!\n", course_id);
return;
}
}
printf("未找到学号为%s的学生!\n", id);
}
// 统计成绩
void calculate_score() {
for (int i = 0; i < student_count; i++) {
float sum = 0;
int count = 0;
for (int j = 0; j < course_count; j++) {
if (students[i].course[j] != -1) {
sum += students[i].course[j];
count++;
}
}
students[i].avg = sum / count;
}
printf("学生平均成绩如下:\n");
printf("学生姓名\t平均成绩\n");
for (int i = 0; i < student_count; i++) {
printf("%s\t\t%.2f\n", students[i].name, students[i].avg);
}
}
// 显示所有学生信息
void show_students() {
printf("所有学生信息如下:\n");
printf("学生姓名\t学生学号\t选修课程成绩\n");
for (int i = 0; i < student_count; i++) {
printf("%s\t\t%s\t\t", students[i].name, students[i].id);
for (int j = 0; j < course_count; j++) {
if (students[i].course[j] != -1) {
printf("%s:%d ", courses[j].name, students[i].course[j]);
}
}
printf("\n");
}
}
// 显示所有课程信息
void show_courses() {
printf("所有课程信息如下:\n");
printf("课程名称\t课程编号\n");
for (int i = 0; i < course_count; i++) {
printf("%s\t\t%d\n", courses[i].name, courses[i].id);
}
}
int main() {
int choice;
do {
show_menu();
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
modify_student();
break;
case 3:
delete_student();
break;
case 4:
add_course();
break;
case 5:
modify_course();
break;
case 6:
delete_course();
break;
case 7:
add_score();
break;
case 8:
modify_score();
break;
case 9:
delete_score();
break;
case 10:
calculate_score();
break;
case 11:
show_students();
break;
case 12:
show_courses();
break;
case 13:
printf("谢谢使用!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
break;
}
} while (choice != 13);
return 0;
}
```
此程序实现了基本的学生成绩管理功能,可以根据实际需求进行修改和扩展。