编写一个简单学生成绩管理程序,每个学生记录包含学号、姓名、课程和分数成员,采用顺序表存储,完成以下功能: C屏幕显示所有学生记录 2345 输入一个学生记录。 按学号和课程删除一个学生记录 按学号排序并输出所有学生记录 按课程排序,一门课程学生按分数递减排序
时间: 2024-05-12 10:16:55 浏览: 117
ChitGPT: 好的,您的问题已经记录下来了。下面是您需要的学生成绩管理程序。
首先,我会定义一个学生记录的结构体,包含学号、姓名、课程和分数成员。
```
typedef struct _Student {
int id;
char name[20];
char course[20];
float score;
} Student;
```
然后,我会使用一个动态分配的数组来存储所有的学生记录。
```
Student *students = NULL;
int studentCount = 0; // 学生数量
int studentCapacity = 0; // 学生数组容量
```
接下来,我会实现以下功能:
1. 屏幕显示所有学生记录
```
void displayAllStudents() {
for (int i = 0; i < studentCount; i++) {
printf("学号:%d,姓名:%s,课程:%s,分数:%.2f\n",
students[i].id, students[i].name, students[i].course, students[i].score);
}
}
```
2. 输入一个学生记录
```
void addStudent() {
Student s;
printf("请输入学号:");
scanf("%d", &s.id);
printf("请输入姓名:");
scanf("%s", s.name);
printf("请输入课程:");
scanf("%s", s.course);
printf("请输入分数:");
scanf("%f", &s.score);
if (studentCount == studentCapacity) {
studentCapacity += 10;
students = (Student *)realloc(students, studentCapacity * sizeof(Student));
}
students[studentCount] = s;
studentCount++;
}
```
3. 按学号和课程删除一个学生记录
```
void removeStudent() {
int id;
char course[20];
printf("请输入要删除的学生学号:");
scanf("%d", &id);
printf("请输入要删除的学生课程:");
scanf("%s", course);
int index = -1;
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id && strcmp(students[i].course, course) == 0) {
index = i;
break;
}
}
if (index >= 0) {
for (int i = index; i < studentCount - 1; i++) {
students[i] = students[i+1];
}
studentCount--;
} else {
printf("没有找到要删除的记录。\n");
}
}
```
4. 按学号排序并输出所有学生记录
```
int compareById(const void *a, const void *b) {
const Student *s1 = (const Student *)a;
const Student *s2 = (const Student *)b;
return s1->id - s2->id;
}
void sortByStudentId() {
qsort(students, studentCount, sizeof(Student), compareById);
displayAllStudents();
}
```
5. 按课程排序,一门课程学生按分数递减排序
```
int compareByCourseAndScore(const void *a, const void *b) {
const Student *s1 = (const Student *)a;
const Student *s2 = (const Student *)b;
int cmp = strcmp(s1->course, s2->course);
if (cmp != 0) {
return cmp;
}
return s2->score - s1->score;
}
void sortByCourseAndScore() {
qsort(students, studentCount, sizeof(Student), compareByCourseAndScore);
displayAllStudents();
}
```
以上就是简单学生成绩管理程序的全部代码,希望能够帮助到您。
阅读全文