parent
593dbf5dad
commit
b67593715f
@ -0,0 +1,144 @@
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_STUDENTS 100
|
||||
|
||||
typedef struct {
|
||||
char id[10];
|
||||
char class[10];
|
||||
char name[20];
|
||||
double score1;
|
||||
double score2;
|
||||
double score3;
|
||||
double score;
|
||||
} Student;
|
||||
|
||||
Student students[MAX_STUDENTS];
|
||||
int studentCount = 0;
|
||||
|
||||
void inputStudent() {
|
||||
while (1) {
|
||||
Student newStudent;
|
||||
char option[10];
|
||||
printf("Id ");
|
||||
scanf("%s", newStudent.id);
|
||||
printf("class ");
|
||||
scanf("%s", newStudent.class);
|
||||
printf("name ");
|
||||
scanf("%s", newStudent.name);
|
||||
printf("score1 ");
|
||||
scanf("%lf", &newStudent.score1);
|
||||
printf("score2 ");
|
||||
scanf("%lf", &newStudent.score2);
|
||||
printf("score3 ");
|
||||
scanf("%lf", &newStudent.score3);
|
||||
newStudent.score = (newStudent.score1 + newStudent.score2 + newStudent.score3);
|
||||
|
||||
students[studentCount++] = newStudent;
|
||||
|
||||
printf("continue?\n");
|
||||
scanf("%s", &option);
|
||||
if (strcmp(option, "no") == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void outputStudents() {
|
||||
for (int i = 0; i < studentCount; i++) {
|
||||
printf("%s, %s, %s, %.1f, %.1f, %.1f, %.1f\n",
|
||||
students[i].id, students[i].class, students[i].name,
|
||||
students[i].score1, students[i].score2, students[i].score3,
|
||||
students[i].score);
|
||||
}
|
||||
}
|
||||
|
||||
void deleteStudent() {
|
||||
while (studentCount > 1) {
|
||||
char id[10];
|
||||
scanf("%s", id);
|
||||
char option[10];
|
||||
for (int i = 0; i < studentCount; i++) {
|
||||
if (strcmp(students[i].id, id) == 0 || strcmp(students[i].name, id) == 0) {
|
||||
for (int j = i; j < studentCount - 1; j++) {
|
||||
students[j] = students[j + 1];
|
||||
}
|
||||
studentCount--;
|
||||
}
|
||||
}
|
||||
outputStudents();
|
||||
printf("continue?\n");
|
||||
scanf("%s", &option);
|
||||
if (strcmp(option, "no") == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void selectStudent() {
|
||||
while (1) {
|
||||
char id[10];
|
||||
scanf("%s", id);
|
||||
int flag = 0;
|
||||
char option[10];
|
||||
|
||||
for (int i = 0; i < studentCount; i++) {
|
||||
if (strcmp(students[i].id, id) == 0 || strcmp(students[i].class, id) == 0) {
|
||||
printf("%s, %s, %s, %.1f, %.1f, %.1f, %.1f\n",
|
||||
students[i].id, students[i].class, students[i].name,
|
||||
students[i].score1, students[i].score2, students[i].score3,
|
||||
students[i].score);
|
||||
flag = 1;
|
||||
}
|
||||
}
|
||||
if (flag == 0) {
|
||||
printf("there is no eligible student\n");
|
||||
}
|
||||
printf("continue?\n");
|
||||
scanf("%s", &option);
|
||||
if (strcmp(option, "no") == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int compare(const void* a, const void* b) {
|
||||
Student* studentA = (Student*)a;
|
||||
Student* studentB = (Student*)b;
|
||||
if (strcmp(studentA->class, studentB->class) == 0) {
|
||||
return (studentB->score - studentA->score > 0) ? 1 : -1;
|
||||
}
|
||||
return strcmp(studentA->class, studentB->class);
|
||||
}
|
||||
|
||||
void orderStudents() {
|
||||
qsort(students, studentCount, sizeof(Student), compare);
|
||||
outputStudents();
|
||||
}
|
||||
|
||||
int main() {
|
||||
int option;
|
||||
do {
|
||||
printf("1.input\n");
|
||||
printf("2.delete\n");
|
||||
printf("3.select\n");
|
||||
printf("4.order\n");
|
||||
printf("5.output\n");
|
||||
printf("6.quit\n");
|
||||
printf("Please input your option\n");
|
||||
scanf("%d", &option);
|
||||
|
||||
switch (option) {
|
||||
case 1: inputStudent(); break;
|
||||
case 2: deleteStudent(); break;
|
||||
case 3: selectStudent(); break;
|
||||
case 4: orderStudents(); break;
|
||||
case 5: outputStudents(); break;
|
||||
case 6: break;
|
||||
}
|
||||
} while (option != 6);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue