diff --git a/ASD_Task_3.depend b/ASD_Task_3.depend index 831bfcc..b4227c4 100644 --- a/ASD_Task_3.depend +++ b/ASD_Task_3.depend @@ -52,3 +52,31 @@ "operation.h" "my_data.h" +1582291786 source:d:\github\asd_task_3\my_data.cpp + "my_data.h" + +1581692360 d:\github\asd_task_3\my_data.h + + +1582293411 source:d:\github\asd_task_3\operation.cpp + "list.h" + "operation.h" + "my_data.h" + +1581692150 d:\github\asd_task_3\list.h + + "my_data.h" + +1581691580 d:\github\asd_task_3\operation.h + "list.h" + +1582299239 source:d:\github\asd_task_3\main.cpp + + "list.h" + "operation.h" + "my_data.h" + +1582298430 source:d:\github\asd_task_3\list.cpp + "list.h" + "my_data.h" + diff --git a/ASD_Task_3.layout b/ASD_Task_3.layout index 17b1801..66b51ae 100644 --- a/ASD_Task_3.layout +++ b/ASD_Task_3.layout @@ -2,39 +2,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/bin/Debug/ASD_Task_3.exe b/bin/Debug/ASD_Task_3.exe new file mode 100644 index 0000000..eb7691f Binary files /dev/null and b/bin/Debug/ASD_Task_3.exe differ diff --git a/list.cpp b/list.cpp index fe0655c..f5dffb1 100644 --- a/list.cpp +++ b/list.cpp @@ -1,67 +1,86 @@ #include "list.h" #include "my_data.h" -void createList(List &L) { +void createList(List &L) +{ /** * FS : set first(L) and last(L) with Null */ //-------------your code here------------- - your code here - - + first(L) = NULL ; + last(L) = NULL ; //---------------------------------------- } -address allocate(infotype x) { +address allocate(infotype x) +{ /** * FS : return new list element with info = x and next element is Null */ address P; //-------------your code here------------- - your code here - - + P = new elmlist ; + info(P) = x ; + next(P) = NULL ; //---------------------------------------- return P; } -void deallocate(address &P) { +void deallocate(address &P) +{ /** * FS : delete element pointed by P */ //-------------your code here------------- - your code here - - + delete P ; //---------------------------------------- } -void insertFirst(List &L, address P) { +void insertFirst(List &L, address P) +{ /** * IS : List L may be empty * FS : element pointed by P became the first element in List L */ //-------------your code here------------- - your code here - - + if (first(L) != NULL) + { + next(P) = first(L) ; + prev(first(L)) = P ; + first(L) = P ; + } + else + { + first(L) = P ; + last(L) = P ; + } //---------------------------------------- } -void insertLast(List &L, address P) { +void insertLast(List &L, address P) +{ /** * IS : List L may be empty * FS : element pointed by P became the last element in List L */ //-------------your code here------------- - your code here - - + if (last(L) != NULL) + { + prev(P) = last(L) ; + next(last(L)) = P ; + last(L) = P; + } + else + { + first(L) = P ; + last(L) = P ; + } //---------------------------------------- } -address findElm(List L, infotype x) { +address findElm(List L, infotype x) +{ /** * IS : List L may be empty * FS : returns element with info.ID = x.ID, @@ -70,74 +89,104 @@ address findElm(List L, infotype x) { address P; //-------------your code here------------- - your code here - - + P = first(L) ; + while ((P != NULL) && info(P).ID != x.ID) + { + P = next(P) ; + } //---------------------------------------- return P; } -void deleteFirst(List &L, address &P) { +void deleteFirst(List &L, address &P) +{ /** * IS : List L may be empty * FS : first element in List L is removed and is pointed by P */ //-------------your code here------------- - your code here - - - + if (first(L) != NULL) + { + P = first(L) ; + first(L) = next(P) ; + next(P) = NULL ; + prev(first(L)) = NULL ; + } + else if (first(L) == last(L)) + { + P = first(L) ; + first(L) = NULL ; + last(L) = NULL ; + } //---------------------------------------- } -void deleteLast(List &L, address &P) { +void deleteLast(List &L, address &P) +{ /** * IS : List L may be empty * FS : last element in List L is removed and is pointed by P */ //-------------your code here------------- - your code here - - - + if (last(L) != NULL) + { + P = last(L) ; + last(L) = prev(P) ; + prev(P) = NULL ; + next(last(L)) = NULL ; + } + else if (last(L) == first(L)) + { + P = last(L) ; + last(L) = NULL ; + first(L) = NULL ; + } //---------------------------------------- } -void printInfo(List L) { +void printInfo(List L) +{ /** * FS : view info of all element inside List L, * call the view_data function from my_data.h to print the info */ //-------------your code here------------- - your code here - - + address P ; + P = first(L) ; + while (P != NULL) + { + view_data(info(P)); + P = next(P) ; + } + cout< * -* Type List : < -* first : address -* last : address +* Type List : < +* first : address +* last : address * > * **/ @@ -37,14 +37,16 @@ typedef struct elmlist *address; struct elmlist{ //------------- your code here ----------- - + infotype info ; + address next ; + address prev ; //---------------------------------------- }; struct List{ //------------- your code here ----------- - - + address first ; + address last ; //---------------------------------------- }; diff --git a/main.cpp b/main.cpp index 9e0b483..e052caf 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,8 @@ using namespace std; void mainMenu(); List L, L_passed; -int main() { +int main() +{ createList(L); createList(L_passed); @@ -18,7 +19,8 @@ int main() { return 0; } -void mainMenu() { +void mainMenu() +{ address P; infotype X; /** @@ -35,7 +37,8 @@ void mainMenu() { */ //-------------your code here------------- int choice; - do { + do + { cout<<"Menu"<>choice; - switch(choice) { + switch(choice) + { case 1: X = create_data(); P = allocate(X); - insertFirst(L,P) - break; + if (findElm(L,info(P)) == NULL ) + { + insertFirst(L,P) ; + } + break ; + case 2: + printInfo(L) ; + break ; + case 3: + cout<<"Masukkan ID: " ; + cin>>X.ID ; + P = findElm(L,X) ; + if (P != NULL) + { + view_data(info(P)) ; + } + else + { + cout<<"Tidak ditemukan\n" ; + } + break ; + case 4: + cout<<"Masukkan ID: " ; + cin>>X.ID ; + P = findElm(L,X) ; + if (P != NULL) + { + edit_data(info(P)) ; + } + else + { + cout<<"Tidak ditemukan\n" ; + } + break ; + case 5: + cout<<"Masukkan ID: " ; + cin>>X.ID ; + if (findElm(L,X) != NULL) + { + deletebyID(L,X.ID) ; + } + else + { + cout<<"Tidak ditemukan\n"<>d.ID ; + cout<<"Masukkan nama: " ; + cin>>d.name ; + cout<<"Masukkan peringkat: " ; + cin>>d.rank ; + cout<<"Masukkan skor: " ; + cin>>d.score ; // =========================== return d; } @@ -32,11 +35,7 @@ void view_data(mytype d) { // =========================== // YOUR CODE HERE - your code here - - - - + cout<>d.name ; + cout<<"Masukkan perubahan peringkat: " ; + cin>>d.rank ; + cout<<"Masukkan perubahan skor: " ; + cin>>d.score ; // =========================== } diff --git a/my_data.h b/my_data.h index 2937b48..02be23f 100644 --- a/my_data.h +++ b/my_data.h @@ -5,9 +5,9 @@ using namespace std; /** - CLASS : - NAME : - STUDENT ID : + CLASS : IF - 43 - 05 + NAME : Manuel Benedict + STUDENT ID : 1301194182 **/ struct mytype { @@ -20,8 +20,10 @@ struct mytype { */ //================================================= // YOUR CODE STARTS HERE - your code here - + int ID ; + string name ; + int rank ; + float score ; // YOUR CODE ENDS HERE //================================================= }; @@ -29,6 +31,6 @@ struct mytype { mytype create_data(); void view_data(mytype d); -void edit_data(mytype &d); +void edit_data(mytype &d); #endif // MY_DATA_H_INCLUDED diff --git a/obj/Debug/list.o b/obj/Debug/list.o new file mode 100644 index 0000000..b1439fc Binary files /dev/null and b/obj/Debug/list.o differ diff --git a/obj/Debug/main.o b/obj/Debug/main.o new file mode 100644 index 0000000..67c0da8 Binary files /dev/null and b/obj/Debug/main.o differ diff --git a/obj/Debug/my_data.o b/obj/Debug/my_data.o new file mode 100644 index 0000000..3d5c7e0 Binary files /dev/null and b/obj/Debug/my_data.o differ diff --git a/obj/Debug/operation.o b/obj/Debug/operation.o new file mode 100644 index 0000000..d375a60 Binary files /dev/null and b/obj/Debug/operation.o differ diff --git a/operation.cpp b/operation.cpp index c2dc0b0..cfb5267 100644 --- a/operation.cpp +++ b/operation.cpp @@ -1,7 +1,7 @@ #include "list.h" #include "operation.h" #include "my_data.h" - + void insertAndSort(List &L, infotype x) { /** @@ -14,9 +14,21 @@ void insertAndSort(List &L, infotype x) { */ //-------------your code here------------- - your code here - - + address P,Q ; + P = first(L) ; + if ((P == NULL) || (info(P).ID > x.ID)) + { + insertFirst(L,allocate(x)) ; + } + else if (findElm(L,x) == NULL) + { + while ((P != NULL) && (info(P).ID < x.ID)) + { + Q = P ; + P = next(P) ; + } + insertAfter(L,Q,allocate(x)); + } //---------------------------------------- } @@ -29,9 +41,22 @@ void deletebyID(List &L, int id_x) { address Prec, P; //-------------your code here------------- - your code here - - + P = first(L) ; + if ((P == first(L)) && (id_x == info(P).ID)) + { + deleteFirst(L,P) ; + } + else + { + while (P != NULL) + { + if ((id_x = info(P).ID) && (first(L) != last(L))) + { + deleteAfter(L,prev(P),P) ; + } + P = next(P) ; + } + } //---------------------------------------- } @@ -43,8 +68,29 @@ void savePassedMember(List &L, List &L2){ */ address P; //-------------your code here------------- - your code here - - + address Q ; + P = first(L) ; + Q = P ; + while (Q != NULL) + { + P = Q ; + if (info(P).score > 80) + { + insertAndSort(L2,info(P)) ; + Q = next(Q) ; + if (prev(P) == NULL) + { + deleteFirst(L,P) ; + } + else + { + deleteAfter(L,prev(P),P) ; + } + } + else + { + Q = next(Q) ; + } + } //---------------------------------------- }