C语言编写一个学生成绩管理系统,要求实现以下管理功能: (1)录入每个学生的学号和考试成绩; (2)输出所有记录; (3)将学生信息按学号排序; (4)插入一条新的记录; (5)删除一条记录; (6)根据学生姓名查询成绩; (7)对学生成绩进行统计,展示最高分、最低分和平均分。
时间: 2024-01-16 19:03:03 浏览: 27
好的,这是一个比较完整的学生成绩管理系统,需要实现多个功能,我会给您提供一个简单的 C 语言代码框架,您可以在此基础上进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LEN 20 // 姓名最大长度
// 学生结构体
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
int id; // 学号
int score; // 考试成绩
} Student;
// 学生数组
Student students[MAX_STUDENT_NUM];
int studentCount = 0; // 学生数
// 函数声明
void inputStudentInfo();
void outputAllStudents();
void sortStudentsById();
void insertStudent();
void deleteStudent();
void searchStudentByName();
void statistics();
int main() {
int choice;
while (1) {
printf("1. 录入学生信息\n");
printf("2. 输出所有学生信息\n");
printf("3. 按学号排序\n");
printf("4. 插入一条新记录\n");
printf("5. 删除一条记录\n");
printf("6. 根据姓名查询成绩\n");
printf("7. 统计成绩\n");
printf("0. 退出程序\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
inputStudentInfo();
break;
case 2:
outputAllStudents();
break;
case 3:
sortStudentsById();
break;
case 4:
insertStudent();
break;
case 5:
deleteStudent();
break;
case 6:
searchStudentByName();
break;
case 7:
statistics();
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
// 录入学生信息
void inputStudentInfo() {
if (studentCount >= MAX_STUDENT_NUM) {
printf("学生数已满,无法继续添加!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[studentCount].name);
printf("请输入学生学号:");
scanf("%d", &students[studentCount].id);
printf("请输入学生考试成绩:");
scanf("%d", &students[studentCount].score);
studentCount++;
printf("学生信息录入成功!\n");
}
// 输出所有学生信息
void outputAllStudents() {
if (studentCount == 0) {
printf("学生信息为空!\n");
return;
}
printf("所有学生信息如下:\n");
printf("姓名\t学号\t成绩\n");
for (int i = 0; i < studentCount; i++) {
printf("%s\t%d\t%d\n", students[i].name, students[i].id, students[i].score);
}
}
// 按学号排序
void sortStudentsById() {
if (studentCount == 0) {
printf("学生信息为空!\n");
return;
}
// 冒泡排序
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - i - 1; j++) {
if (students[j].id > students[j + 1].id) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生信息按学号排序成功!\n");
}
// 插入一条新记录
void insertStudent() {
if (studentCount >= MAX_STUDENT_NUM) {
printf("学生数已满,无法继续添加!\n");
return;
}
printf("请输入要插入的学生位置(从 0 开始):");
int pos;
scanf("%d", &pos);
if (pos < 0 || pos > studentCount) {
printf("插入位置有误,请重新输入!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[studentCount].name);
printf("请输入学生学号:");
scanf("%d", &students[studentCount].id);
printf("请输入学生考试成绩:");
scanf("%d", &students[studentCount].score);
for (int i = studentCount; i > pos; i--) {
students[i] = students[i - 1];
}
students[pos] = students[studentCount];
studentCount++;
printf("学生信息插入成功!\n");
}
// 删除一条记录
void deleteStudent() {
if (studentCount == 0) {
printf("学生信息为空!\n");
return;
}
printf("请输入要删除的学生位置(从 0 开始):");
int pos;
scanf("%d", &pos);
if (pos < 0 || pos >= studentCount) {
printf("删除位置有误,请重新输入!\n");
return;
}
for (int i = pos; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
printf("学生信息删除成功!\n");
}
// 根据姓名查询成绩
void searchStudentByName() {
if (studentCount == 0) {
printf("学生信息为空!\n");
return;
}
char name[MAX_NAME_LEN];
printf("请输入要查询的学生姓名:");
scanf("%s", name);
int flag = 0;
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("学生姓名:%s,学号:%d,考试成绩:%d\n", students[i].name, students[i].id, students[i].score);
flag = 1;
}
}
if (!flag) {
printf("没有找到该学生信息!\n");
}
}
// 统计成绩
void statistics() {
if (studentCount == 0) {
printf("学生信息为空!\n");
return;
}
int maxScore = students[0].score;
int minScore = students[0].score;
int sumScore = 0;
for (int i = 0; i < studentCount; i++) {
if (students[i].score > maxScore) {
maxScore = students[i].score;
}
if (students[i].score < minScore) {
minScore = students[i].score;
}
sumScore += students[i].score;
}
float avgScore = (float)sumScore / studentCount;
printf("最高分:%d,最低分:%d,平均分:%.2f\n", maxScore, minScore, avgScore);
}
```
以上代码实现了您所需的功能,您可以根据需求进行修改和优化。