You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.3 KiB
142 lines
4.3 KiB
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
typedef struct {
|
|
char id[20];
|
|
char clas[20];
|
|
char name[20];
|
|
double score1;
|
|
double score2;
|
|
double score3;
|
|
double score;
|
|
} Student;
|
|
|
|
void inputStudentInfo(Student *student) {
|
|
scanf("%s %s %s", student->id, student->clas, student->name);
|
|
scanf("%lf %lf %lf", &student->score1, &student->score2, &student->score3);
|
|
student->score = student->score1 + student->score2 + student->score3;
|
|
}
|
|
|
|
void displayStudentInfo(Student student, int isFirstInClass) {
|
|
if (isFirstInClass) {
|
|
printf("%s %s %s %.1lf %.1lf %.1lf",
|
|
student.clas, student.id, student.name,
|
|
student.score1, student.score2, student.score3);
|
|
} else {
|
|
printf(" %s %s %.1lf %.1lf %.1lf",
|
|
student.id, student.name,
|
|
student.score1, student.score2, student.score3);
|
|
}
|
|
}
|
|
|
|
int findStudentById(Student *students, int studentCount, char *id) {
|
|
for (int i = 0; i < studentCount; i++) {
|
|
if (strcmp(students[i].id, id) == 0) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void modifyStudentInfo(Student *students, int studentCount, char *id) {
|
|
int index = findStudentById(students, studentCount, id);
|
|
if (index != -1) {
|
|
printf("Please enter the modified information:\n");
|
|
inputStudentInfo(&students[index]);
|
|
} else {
|
|
printf("The relevant student was not found, and modification is not possible\n");
|
|
}
|
|
|
|
}
|
|
|
|
void bubbleSortByClassAndScore(Student *students, int studentCount) {
|
|
// 冒泡排序,先按班级从小到大,再按总成绩从大到小
|
|
for (int i = 0; i < studentCount - 1; i++) {
|
|
for (int j = 0; j < studentCount - i - 1; j++) {
|
|
if (strcmp(students[j].clas, students[j + 1].clas) > 0 ||
|
|
(strcmp(students[j].clas, students[j + 1].clas) == 0 && students[j].score < students[j + 1].score)) {
|
|
// 交换两个学生的信息
|
|
Student temp = students[j];
|
|
students[j] = students[j + 1];
|
|
students[j + 1] = temp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
Student students[100];
|
|
int studentCount = 3;
|
|
|
|
// 初始化三个学生信息
|
|
strcpy(students[0].id, "10001");
|
|
strcpy(students[0].clas, "11");
|
|
strcpy(students[0].name, "Zhang");
|
|
students[0].score1 = 99.5;
|
|
students[0].score2 = 88.5;
|
|
students[0].score3 = 89.5;
|
|
students[0].score = students[0].score1 + students[0].score2 + students[0].score3;
|
|
|
|
strcpy(students[1].id, "10002");
|
|
strcpy(students[1].clas, "12");
|
|
strcpy(students[1].name, "Yang");
|
|
students[1].score1 = 77.9;
|
|
students[1].score2 = 56.5;
|
|
students[1].score3 = 87.5;
|
|
students[1].score = students[1].score1 + students[1].score2 + students[1].score3;
|
|
|
|
strcpy(students[2].id, "10003");
|
|
strcpy(students[2].clas, "11");
|
|
strcpy(students[2].name, "Liang");
|
|
students[2].score1 = 92.5;
|
|
students[2].score2 = 99.0;
|
|
students[2].score3 = 60.5;
|
|
students[2].score = students[2].score1 + students[2].score2 + students[2].score3;
|
|
|
|
bubbleSortByClassAndScore(students, studentCount);
|
|
|
|
// 输出所有学生信息
|
|
int isFirstInClass = 1;
|
|
for (int i = 0; i < studentCount; i++) {
|
|
if (i > 0 && strcmp(students[i].clas, students[i - 1].clas) == 0) {
|
|
isFirstInClass = 0;
|
|
} else {
|
|
isFirstInClass = 1;
|
|
}
|
|
displayStudentInfo(students[i], isFirstInClass);
|
|
printf("\n");
|
|
}
|
|
|
|
// 修改学生信息
|
|
char id[20];
|
|
printf("Please enter the student ID to be modified:");
|
|
scanf("%s", id);
|
|
modifyStudentInfo(students, studentCount, id);
|
|
|
|
// 再次排序并输出所有学生信息
|
|
bubbleSortByClassAndScore(students, studentCount);
|
|
int d=findStudentById(students, studentCount, id);
|
|
isFirstInClass = 1;
|
|
for (int i = 0; i < studentCount; i++) {
|
|
if (i > 0 && strcmp(students[i].clas, students[i - 1].clas) == 0) {
|
|
isFirstInClass = 0;
|
|
} else {
|
|
isFirstInClass = 1;
|
|
}
|
|
if (i == d) {
|
|
|
|
displayStudentInfo(students[i], isFirstInClass);
|
|
printf(" modified\n");
|
|
}
|
|
else
|
|
{
|
|
displayStudentInfo(students[i], isFirstInClass);
|
|
printf("\n");
|
|
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|