diff --git a/ASD_Task_3.depend b/ASD_Task_3.depend index 831bfcc..0e4420a 100644 --- a/ASD_Task_3.depend +++ b/ASD_Task_3.depend @@ -52,3 +52,22 @@ "operation.h" "my_data.h" +1582381821 source:d:\github\latihan\asd_task_3\list.cpp + "list.h" + "my_data.h" + +1582330300 d:\github\latihan\asd_task_3\list.h + <iostream> + "my_data.h" + +1582381690 d:\github\latihan\asd_task_3\my_data.h + <iostream> + +1582381876 source:d:\github\latihan\asd_task_3\operation.cpp + "list.h" + "operation.h" + "my_data.h" + +1582327055 d:\github\latihan\asd_task_3\operation.h + "list.h" + diff --git a/ASD_Task_3.layout b/ASD_Task_3.layout index 17b1801..ea8cfdb 100644 --- a/ASD_Task_3.layout +++ b/ASD_Task_3.layout @@ -2,37 +2,37 @@ <CodeBlocks_layout_file> <FileVersion major="1" minor="0" /> <ActiveTarget name="Debug" /> - <File name="my_data.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="my_data.h" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="496" topLine="7" /> + <Cursor1 position="821" topLine="13" /> </Cursor> </File> - <File name="operation.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="operation.cpp" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="288" topLine="0" /> + <Cursor1 position="2769" topLine="83" /> </Cursor> </File> - <File name="list.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="main.cpp" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="2862" topLine="116" /> + <Cursor1 position="1377" topLine="34" /> </Cursor> </File> - <File name="main.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="my_data.cpp" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="1006" topLine="0" /> + <Cursor1 position="1538" topLine="62" /> </Cursor> </File> - <File name="my_data.cpp" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="list.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="774" topLine="0" /> + <Cursor1 position="4824" topLine="185" /> </Cursor> </File> - <File name="list.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="list.h" open="1" top="1" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> - <Cursor1 position="688" topLine="17" /> + <Cursor1 position="784" topLine="22" /> </Cursor> </File> - <File name="operation.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> + <File name="operation.h" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <Cursor> <Cursor1 position="207" topLine="0" /> </Cursor> diff --git a/list.cpp b/list.cpp index fe0655c..68ea3a7 100644 --- a/list.cpp +++ b/list.cpp @@ -6,8 +6,8 @@ void createList(List &L) { * FS : set first(L) and last(L) with Null */ //-------------your code here------------- - your code here + first(L) = NULL; //---------------------------------------- } @@ -19,8 +19,10 @@ address allocate(infotype x) { address P; //-------------your code here------------- - your code here + P = new elmlist; + info(P) = x; + next(P) = NULL; //---------------------------------------- return P; @@ -31,20 +33,27 @@ void deallocate(address &P) { * FS : delete element pointed by P */ //-------------your code here------------- - your code here + delete 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); + first(L) = P; + } + else{ + first(L) = P; + } //---------------------------------------- } @@ -55,8 +64,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(first(L) != NULL){ + address Q = first(L); + while(next(Q) != NULL){ + Q = next(Q); + } + next(Q) = P; + } + else{ + insertFirst(L, P); + } //---------------------------------------- } @@ -67,11 +85,22 @@ address findElm(List L, infotype x) { * FS : returns element with info.ID = x.ID, return Null if such ID is not found */ - + int ID; address P; //-------------your code here------------- - your code here + P = first(L); + while (P != NULL){ + if(info(P).ID != x.ID){ + P = next(P); + } + else if(info(P).ID == x.ID){ + return P; + } + else{ + return NULL; + } + } //---------------------------------------- return P; @@ -83,8 +112,15 @@ 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 + if(first(L) != NULL){ + P = first(L); + first(L) = next(P); + next(P) = NULL; + } + else{ + first(L) = NULL; + } //---------------------------------------- @@ -96,8 +132,17 @@ 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 + P = first(L); + if(first(L) != NULL){ + while(next(next(P)) != NULL){ + P = next(P); + } + next(P) = NULL; + } + else{ + first(L) = NULL; + } //---------------------------------------- @@ -109,8 +154,20 @@ 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; + if(first(L) != NULL){ + P = first(L); + while(P != NULL){ + cout<< "------------------------"<<endl; + view_data(info(P)); + cout<< "------------------------"<<endl; + P = next(P); + } + } + else{ + cout<<"kosong bro"<<endl; + } //---------------------------------------- } @@ -123,8 +180,15 @@ void insertAfter(List &L, address Prec, address P) { * pointed by pointer Prec */ //-------------your code here------------- - your code here + if(first(L) == NULL){ + insertFirst(L, P); + } + else{ + address Prec; + next(P) = next(Prec); + next(Prec) = P; + } //---------------------------------------- } @@ -135,8 +199,11 @@ 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; + deallocate(P); //---------------------------------------- } diff --git a/list.h b/list.h index c21344f..453957d 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,13 +37,14 @@ typedef struct elmlist *address; struct elmlist{ //------------- your code here ----------- - + infotype info; + address next; //---------------------------------------- }; struct List{ //------------- your code here ----------- - + address first; //---------------------------------------- }; diff --git a/main.cpp b/main.cpp index 9e0b483..0e8b3dd 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"<<endl; cout<<"1. insert"<<endl; cout<<"2. view member"<<endl; @@ -47,14 +50,72 @@ void mainMenu() { cout<<"0. exit"<<endl; cout<<"input choice: "; cin>>choice; - switch(choice) { - case 1: - X = create_data(); - P = allocate(X); - insertFirst(L,P) - break; - } - } while(true); + P = allocate(X); + insertFirst(L,P) + break; - //---------------------------------------- + case 1 : + X = create_data(); + P = allocate(X); + insertFirst(L,P) + if (findElm(L, info(P)) == NULL) + { + insertFirst(L, P); + } + break; + case 2: + printInfo(L); + break; + case 3: + cout << "Masukkan ID yang ingin dicari : "; + cin >> X.ID; + P = findElm(L, X); + if (P != NULL) + { + view_data(info(P)); + } + else + { + cout << "DATA TIDAK DITEMUKAN!\n"; + } + break; + case 4: + cout << "Masukkan ID yang ingin diedit : "; + cin >> X.ID; + P = findElm(L, X); + if (P != NULL) + { + edit_data(info(P)); + } + else + { + cout << "DATA TIDAK DITEMUKAN!\n"; + } + break; + case 5: + cout << "Masukkan ID yang ingin didelete : "; + cin >> X.ID; + if (findElm(L, X) != NULL) + { + deletebyID(L, X.ID); + } + else + { + cout << "DATA TIDAK DITEMUKAN" << endl; + } + break; + case 6: + savePassedMember(L, L_passed); + break; + case 7: + printInfo(L_passed); + break; + } + if (choice == 0) + { + break; + } +} +} while(true); +//---------------------------------------- } diff --git a/my_data.cpp b/my_data.cpp index 68b9d77..6160839 100644 --- a/my_data.cpp +++ b/my_data.cpp @@ -1,10 +1,10 @@ - + #include "my_data.h" /** - CLASS : - NAME : - STUDENT ID : + CLASS : IF-43-o5 + NAME : Muhammad Sulthon Asramanggala + STUDENT ID : 130194008 **/ mytype create_data() { @@ -15,7 +15,15 @@ mytype create_data() { mytype d; // =========================== // YOUR CODE HERE - your code here + + cout<< "ID mahasiswa : "; + cin<< d.ID; + cout<< "Nama Mahasiswa : "; + cin<< d.name; + cout << "Rangking Mahasiswa : "; + cin >> d.ranking; + cout << "Score Mahasiswa : "; + cin >> d.score; @@ -33,6 +41,13 @@ void view_data(mytype d) { // =========================== // YOUR CODE HERE your code here + cout << " ID : " << d.ID<<endl; + cout << "Nama : " << d.name << endl; + cout << "Rank : " << d.ranking << endl; + cout << "Score : " << d.score << endl; + + + @@ -51,7 +66,19 @@ void edit_data(mytype &d) { // =========================== // YOUR CODE HERE your code here - + cout << "ID : " << d.ID<<endl; + cout << "Nama : " << d.name<<endl; + cout << "Rangking : " << d.ranking<<endl; + cout << "Score : " << d.score<<endl; + cout << endl; + cout << "Masukkan Data Baru : "<<endl; + cout << "ID anda: " << d.ID<<endl; + cout << "Nama Baru : "; + cin >> d.name; + cout << "Ranking Baru : "; + cin >> d.ranking; + cout << "Score Baru : "; + cin >> d.score; diff --git a/my_data.h b/my_data.h index 2937b48..975624d 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 : Muhammad Sulthon Asramanggala + STUDENT ID : 1301194008 **/ struct mytype { @@ -20,7 +20,11 @@ struct mytype { */ //================================================= // YOUR CODE STARTS HERE - your code here + + int ID; + string name; + int rangking; + float score; // YOUR CODE ENDS HERE //================================================= @@ -29,6 +33,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..25c2669 Binary files /dev/null and b/obj/Debug/list.o differ diff --git a/obj/Debug/operation.o b/obj/Debug/operation.o new file mode 100644 index 0000000..0a1a375 Binary files /dev/null and b/obj/Debug/operation.o differ diff --git a/operation.cpp b/operation.cpp index c2dc0b0..be2681f 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,8 +14,38 @@ void insertAndSort(List &L, infotype x) { */ //-------------your code here------------- - your code here + address P; + address Q; + P = allocate(x); + if(first(L) == NULL){ + insertFirst(L, P); + } + else{ + Q = findElm(L, info(P)); + if(Q == NULL){ + address last = first(L); + while(next(last) != NULL){ + last = next(last); + } + if(info(P).ID <= info(first(L)).ID){ + insertFirst(L, P); + } + else if(info(P).ID >= info(first(L)).ID){ + insertLast(L, P); + } + else{ + Q = first(L); + while(info(next(Q)).ID < info(P).ID){ + Q = next(Q); + } + insertAfter(L, Q, P); + } + } + else{ + cout << "ID duplikat" << endl; + } + } //---------------------------------------- } @@ -29,8 +59,28 @@ void deletebyID(List &L, int id_x) { address Prec, P; //-------------your code here------------- - your code here + infotype x; + x.ID = id_x; + P = findElm(L, x); + if(first(L) != NULL){ + if(P == first(L)){ + deleteFirst(L, P); + deallocate(P); + } + else if(next(P) == NULL){ + deleteLast(L,P); + deallocate(P); + } + else{ + Prec = first(L); + while(next(Prec) != P){ + Prec = next(Prec); + } + deleteAfter(L, Prec, P); + } + + } //---------------------------------------- } @@ -43,8 +93,18 @@ void savePassedMember(List &L, List &L2){ */ address P; //-------------your code here------------- - your code here - + List tmp; + createList(tmp); + while(first(L) != NULL){ + deleteFirst(L,P); + if(info(P).score > 80){ + insertAndSort(L2, info(P)); + } + else{ + insertAndSort(tmp, info(P)); + } + } + L = tmp; //---------------------------------------- }