diff --git a/b8.c b/b8.c new file mode 100644 index 0000000..e3b081a --- /dev/null +++ b/b8.c @@ -0,0 +1,147 @@ +#include +#include +#include + +struct Student { + char *id; + char *clas; + char *name; + double score1; + double score2; + double score3; + double score; +}; + +void input(struct Student students[], int *count); +void delete_student(struct Student students[], int *count); +void select_student(struct Student students[], int count); +void order_student(struct Student students[], int count); +void output_student(struct Student students[], int count); +void free_students(struct Student students[], int count); + +int main() { + struct Student students[100]; + int count = 0; + int option; + do { + printf("1. input\n2. delete\n3. select\n4. order\n5. output\n6. quit\nplease input your option: "); + scanf("%d", &option); + switch (option) { + case 1: + input(students, &count); + break; + case 2: + delete_student(students, &count); + break; + case 3: + select_student(students, count); + break; + case 4: + order_student(students, count); + break; + case 5: + output_student(students, count); + break; + case 6: + printf("Exiting the program...\n"); + break; + default: + printf("Invalid option, please try again.\n"); + } + } while (option != 6); + + free_students(students, count); + + return 0; +} + +void input(struct Student students[], int *count) { + char continue_input[5]; + do { + if (*count >= 100) { + printf("Maximum number of students reached.\n"); + break; + } + + students[*count].id = (char *)malloc(sizeof(char) * 10); + students[*count].clas = (char *)malloc(sizeof(char) * 20); + students[*count].name = (char *)malloc(sizeof(char) * 20); + if (students[*count].id == NULL || students[*count].clas == NULL || students[*count].name == NULL) { + printf("Memory allocation failed.\n"); + exit(1); + } + + printf("Enter ID, Class, Name, Score1, Score2, Score3: "); + scanf("%s %s %s %lf %lf %lf", students[*count].id, students[*count].clas, students[*count].name, + &students[*count].score1, &students[*count].score2, &students[*count].score3); + students[*count].score = (students[*count].score1 + students[*count].score2 + students[*count].score3) / 3; + + (*count)++; + printf("Continue input? (yes/no): "); + scanf("%s", continue_input); + } while (strcmp(continue_input, "yes") == 0); +} + +void delete_student(struct Student students[], int *count) { + char id[10]; + printf("Enter the ID of the student to delete: "); + scanf("%s", id); + + for (int i = 0; i < *count; i++) { + if (strcmp(students[i].id, id) == 0) { + free(students[i].id); + free(students[i].clas); + free(students[i].name); + + for (int j = i; j < *count - 1; j++) { + students[j] = students[j + 1]; + } + (*count)--; + printf("Student with ID %s deleted successfully.\n", id); + return; + } + } + printf("Student with ID %s not found.\n", id); +} + +void select_student(struct Student students[], int count) { + char id[10]; + printf("Enter the ID of the student to select: "); + scanf("%s", id); + + for (int i = 0; i < count; i++) { + if (strcmp(students[i].id, id) == 0) { + printf("ID: %s, Class: %s, Name: %s, Score1: %.2f, Score2: %.2f, Score3: %.2f, Average Score: %.2f\n", + students[i].id, students[i].clas, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].score); + return; + } + } + printf("Student with ID %s not found.\n", id); +} + +void order_student(struct Student students[], int count) { + for (int i = 0; i < count - 1; i++) { + for (int j = 0; j < count - i - 1; j++) { + if (students[j].score < students[j + 1].score) { + struct Student temp = students[j]; + students[j] = students[j + 1]; + students[j + 1] = temp; + } + } + } + printf("Students ordered by average score.\n"); +} + +void output_student(struct Student students[], int count) { + for (int i = 0; i < count; i++) { + printf("ID: %s, Class: %s, Name: %s, Score1: %.2f, Score2: %.2f, Score3: %.2f, Average Score: %.2f\n", + students[i].id, students[i].clas, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].score); + } +} +void free_students(struct Student students[], int count) { + for (int i = 0; i < count; i++) { + free(students[i].id); + free(students[i].clas); + free(students[i].name); + } +} \ No newline at end of file