diff --git a/step9.cpp b/step9.cpp new file mode 100644 index 0000000..0ab18c5 --- /dev/null +++ b/step9.cpp @@ -0,0 +1,190 @@ +#include +#include +#include + +typedef struct Node { + char stus[100]; + int classes; + char names[100]; + double mathGrade; + double physicsGrade; + double englishGrade; + int boolNew; + struct Node* next; +} Node; + +Node* head = NULL; + +Node* createNode() { + Node* newNode = (Node*)malloc(sizeof(Node)); + newNode->next = NULL; + return newNode; +} + +void input(Node* node) { + printf("Id "); + scanf("%s", node->stus); + printf("class "); + scanf("%d", &node->classes); + printf("name "); + scanf("%s", node->names); + printf("score1 "); + scanf("%lf", &node->mathGrade); + printf("score2 "); + scanf("%lf", &node->physicsGrade); + printf("score3 "); + scanf("%lf", &node->englishGrade); + node->boolNew = 0; +} + +void inputStudentInformation() { + char a[10]; + do { + Node* newNode = createNode(); + input(newNode); + newNode->next = head; + head = newNode; + printf("One student has been input!\n"); + printf("continue?(yes/no)\n"); + scanf("%s", a); + } while (strcmp(a, "no") != 0); +} + +void insertedNew() { + Node* newNode = createNode(); + input(newNode); + newNode->boolNew = 1; + newNode->next = head; + head = newNode; + printf("One student has been input!\n"); +} + +void informationClear(char a[100]) { + Node** current = &head; + while (*current) { + Node* entry = *current; + if (strcmp(entry->stus, a) == 0 || strcmp(entry->names, a) == 0) { + *current = entry->next; + free(entry); + } + else { + current = &entry->next; + } + } +} + +void sortStudents() { + Node* sorted = NULL; + Node* current = head; + while (current) { + Node* next = current->next; + if (!sorted || current->classes < sorted->classes || + (current->classes == sorted->classes && + current->mathGrade + current->physicsGrade + current->englishGrade >= + sorted->mathGrade + sorted->physicsGrade + sorted->englishGrade)) { + current->next = sorted; + sorted = current; + } + else { + Node* temp = sorted; + while (temp->next && + (temp->next->classes < current->classes || + (temp->next->classes == current->classes && + temp->next->mathGrade + temp->next->physicsGrade + temp->next->englishGrade >= + current->mathGrade + current->physicsGrade + current->englishGrade))) { + temp = temp->next; + } + current->next = temp->next; + temp->next = current; + } + current = next; + } + head = sorted; + printf("Students have been sorted!\n"); +} + +void printStudentOriginalScore() { + Node* current = head; + int classs = 0; + while (current) { + if (current->classes != classs) { + printf("%d %s %s %.1f %.1f %.1f %s\n", + current->classes, current->stus, current->names, + current->mathGrade, current->physicsGrade, current->englishGrade, + current->boolNew == 0 ? "" : current->boolNew == 1 ? "inserted" : "modified"); + } + else { + printf(" %s %s %.1f %.1f %.1f %s\n", + current->stus, current->names, + current->mathGrade, current->physicsGrade, current->englishGrade, + current->boolNew == 0 ? "" : current->boolNew == 1 ? "inserted" : "modified"); + } + classs = current->classes; + current->boolNew = 0; + current = current->next; + } +} + +void modifyStudent() { + char a[10]; + printf("Are you sure(yes/no) "); + scanf("%s", a); + if (strcmp(a, "yes") == 0) { + char stusToModify[10]; + printf("Enter the student number to modify, followed by new data ( 10001 2 Kobe 59 59 59):\n"); + scanf("%s", stusToModify); + + Node* current = head; + while (current) { + if (strcmp(current->stus, stusToModify) == 0) { + scanf("%d %s %lf %lf %lf", + ¤t->classes, current->names, + ¤t->mathGrade, ¤t->physicsGrade, ¤t->englishGrade); + current->boolNew = 2; + printf("Student data modified successfully!\n"); + return; + } + current = current->next; + } + printf("Student with number %s not found.\n", stusToModify); + } +} + +int manage() { + printf("1.input\n2.delete\n3.select\n4.order\n5.output\n6.quit\nPlease input your option: "); + char keywords; + scanf(" %c", &keywords); + switch (keywords) { + case '1': + inputStudentInformation(); + return 0; + case '2': { + char a[100]; + printf("Please enter student's ID or Name: "); + scanf("%s", a); + informationClear(a); + return 0; + } + case '3': + printStudentOriginalScore(); + return 0; + case '4': + sortStudents(); + printStudentOriginalScore(); + return 0; + case '5': + printStudentOriginalScore(); + return 0; + case '6': + return 1; + default: + printf("Invalid option. Please try again.\n"); + return 0; + } +} + +int main() { + while (manage() == 0) { + } + return 0; +}