diff --git a/ASD_Task_3.depend b/ASD_Task_3.depend index 831bfcc..ed3928b 100644 --- a/ASD_Task_3.depend +++ b/ASD_Task_3.depend @@ -52,3 +52,31 @@ "operation.h" "my_data.h" +1582378378 source:c:\users\user\documents\github\asd_task_3\list.cpp + "list.h" + "my_data.h" + +1582378473 c:\users\user\documents\github\asd_task_3\list.h + + "my_data.h" + +1582378977 c:\users\user\documents\github\asd_task_3\my_data.h + + +1582378925 source:c:\users\user\documents\github\asd_task_3\my_data.cpp + "my_data.h" + +1582379110 source:c:\users\user\documents\github\asd_task_3\operation.cpp + "list.h" + "operation.h" + "my_data.h" + +1582377757 c:\users\user\documents\github\asd_task_3\operation.h + "list.h" + +1582379413 source:c:\users\user\documents\github\asd_task_3\main.cpp + + "list.h" + "operation.h" + "my_data.h" + diff --git a/bin/Debug/ASD_Task_3.exe b/bin/Debug/ASD_Task_3.exe new file mode 100644 index 0000000..3cc8afc Binary files /dev/null and b/bin/Debug/ASD_Task_3.exe differ diff --git a/list.cpp b/list.cpp index fe0655c..506097e 100644 --- a/list.cpp +++ b/list.cpp @@ -6,8 +6,9 @@ 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; //---------------------------------------- } @@ -19,9 +20,8 @@ address allocate(infotype x) { address P; //-------------your code here------------- - your code here - - + P = new elmlist; + info(P) = x; //---------------------------------------- return P; } @@ -31,9 +31,7 @@ void deallocate(address &P) { * FS : delete element pointed by P */ //-------------your code here------------- - your code here - - + delete P; //---------------------------------------- } @@ -43,9 +41,16 @@ void insertFirst(List &L, address P) { * FS : element pointed by P became the first element in List L */ //-------------your code here------------- - your code here - - + if (first(L) == NULL && last(L) == NULL) + { + last(L) = P; + } + else + { + next(P) = first(L); + prev(first(L)) = P; + } + first(L) = P; //---------------------------------------- } @@ -55,9 +60,17 @@ void insertLast(List &L, address P) { * 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; + } //---------------------------------------- } @@ -70,8 +83,11 @@ address findElm(List L, infotype x) { address P; //-------------your code here------------- - your code here - + P = first(L); + while ((P != NULL) && (x.ID != info(P).ID)) + { + P = next(P); + } //---------------------------------------- return P; @@ -83,9 +99,18 @@ void deleteFirst(List &L, address &P) { * FS : first element in List L is removed and is pointed by P */ //-------------your code here------------- - your code here - - + P = first(L); + if (first(L) != NULL) + { + first(L) = next(P); + next(P) = NULL; + prev(first(L)) = NULL; + } + else if (first(L) == last(L)) + { + first(L) = NULL; + last(L) = NULL; + } //---------------------------------------- } @@ -96,10 +121,19 @@ void deleteLast(List &L, address &P) { * 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; + } //---------------------------------------- } @@ -109,9 +143,14 @@ void printInfo(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 << endl; //---------------------------------------- } @@ -123,8 +162,10 @@ void insertAfter(List &L, address Prec, address P) { * pointed by pointer Prec */ //-------------your code here------------- - your code here - + next(P) = next(Prec); + prev(P) = Prec; + prev(next(Prec)) = P; + next(Prec) = P; //---------------------------------------- } @@ -135,9 +176,9 @@ void deleteAfter(List &L, address Prec, address &P) { * is removed and pointed by pointer P */ //-------------your code here------------- - your code here - - + P = next(Prec); + next(Prec) = next(P); + next(P) = NULL; //---------------------------------------- } diff --git a/list.h b/list.h index c21344f..d1aa936 100644 --- a/list.h +++ b/list.h @@ -23,9 +23,9 @@ using namespace std; * prev : address * > * -* 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 prev; + address next; //---------------------------------------- }; struct List{ //------------- your code here ----------- - - + address first; + address last; //---------------------------------------- }; diff --git a/main.cpp b/main.cpp index 9e0b483..de48044 100644 --- a/main.cpp +++ b/main.cpp @@ -34,8 +34,8 @@ void mainMenu() { * 0. exit */ //-------------your code here------------- - int choice; - do { + int choice; + do { cout<<"Menu"<>X.ID; + P = findElm(L, X); + if (P!=NULL){ + view_data(info(P)); + }else{ + cout<<"Not Found\n"; + } + break; + case 4: + cout<<"Masukkan ID: "; + cin>>X.ID; + P = findElm(L, X); + if (P!=NULL){ + edit_data(info(P)); + }else{ + cout<<"Not Found\n"; + } + break; + case 5: + cout << "Masukkan ID: "; + cin >> X.ID; + if (findElm(L, X) != NULL) { + deletebyID(L, X.ID); + } else { + cout << "Not Found" << endl; + } + break; + case 6: + savePassedMember(L, L_passed); + break; + case 7: + cout<<"hehe"; + printInfo(L_passed); + break; + } } while(true); - //---------------------------------------- } diff --git a/my_data.cpp b/my_data.cpp index 68b9d77..af135a4 100644 --- a/my_data.cpp +++ b/my_data.cpp @@ -1,4 +1,4 @@ - + #include "my_data.h" /** @@ -15,11 +15,14 @@ mytype create_data() { mytype d; // =========================== // YOUR CODE HERE - your code here - - - - + cout<<"Masukan ID: "; + cin>>d.ID; + cout<<"Masukan Nama: "; + cin>>d.name; + cout<<"Masukan ranking : "; + cin>>d.rank; + cout<<"Masukan score : "; + cin>>d.score; // =========================== return d; } @@ -32,11 +35,7 @@ void view_data(mytype d) { // =========================== // YOUR CODE HERE - your code here - - - - + cout<< d.ID << " , " << d.name << " , "<< d.rank << " , " << d.score << endl; // =========================== } @@ -50,11 +49,12 @@ void edit_data(mytype &d) { // =========================== // YOUR CODE HERE - your code here - - - - + cout<< "Masukan pergantian nama : "; + cin>>d.name; + cout<<"Masukan pergantian rank : "; + cin>>d.rank; + cout<<"Masukan pergantian score : "; + cin>>d.score; // =========================== } diff --git a/my_data.h b/my_data.h index 2937b48..6ba72cf 100644 --- a/my_data.h +++ b/my_data.h @@ -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..93901f7 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..baf3ebd 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..62ca844 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..e380d1f Binary files /dev/null and b/obj/Debug/operation.o differ diff --git a/operation.cpp b/operation.cpp index c2dc0b0..bdf23c6 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,24 @@ void deletebyID(List &L, int id_x) { address Prec, P; //-------------your code here------------- - your code here - - + P = first(L); + if (first(L) != NULL) + { + if (info(first(L)).ID == id_x) + { + deleteFirst(L,P); + }else if (info(last(L)).ID == id_x){ + deleteLast(L,P); + }else { + address Q = first(L); + while (next(Q) != NULL && info(next(Q)).ID != id_x ) + { + Q = next(Q); + } + Prec = Q; + deleteAfter(L,Prec,P); + } + } //---------------------------------------- } @@ -43,8 +70,16 @@ void savePassedMember(List &L, List &L2){ */ address P; //-------------your code here------------- - your code here - - + P = first(L); + address Q; + while (P != NULL) + { + if (info(P).score > 80 ) + { + Q=allocate(info(P)); + insertLast(L2,Q); + } + P=next(P); + } //---------------------------------------- }