Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- #include "string.h"
- #include "stdlib.h"
- #ifdef _WIN32
- #include "windows.h"
- #define _SLEEP_ Sleep(1);
- #define _CLEAR_ system("cls")
- #elif __linux__
- #include "unistd.h"
- #define _SLEEP_ usleep(1000);
- #define _CLEAR_ system("clear")
- #endif
- #define _LINE_ for(int i=0;i<37;++i) printf("=");puts("");
- struct Mahasiswa{
- char nama[40], nim[14];
- /*
- 1 => tugas
- 2 => uts
- 3 => uas
- */
- float teori[3], praktek[3], nilaiAkhir;
- struct Mahasiswa *next, *prev;
- }*head, *tail, *current;
- typedef struct Mahasiswa mhs;
- //global variable for counting total data in struct
- int DATA_COUNTER = 0;
- /* linklist function starts here */
- void pushHead(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
- void pushTail(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
- void pushByIndex(int index, char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
- void popAll();
- void popHead();
- void popTail();
- void popByIndex(int index);
- int popByNim(char nim[14]);
- void viewFromHead();
- void viewFromTail();
- /* linklist function ends here */
- /* menu function starts here */
- void menu1();
- void menu1_1();
- void menu1_2();
- void menu2();
- void menu3();
- /* menu function ends here */
- int main(int argc, char **agv){
- int menu = 0;
- do{
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- _LINE_;
- puts("1. Insert Data");
- puts("2. Print Data");
- puts("3. Delete Data");
- puts("4. Exit");
- printf("Option : ");
- scanf("%d", &menu);fflush(stdin);
- switch( menu ){
- case 1:
- menu1();
- break;
- case 2:
- menu2();
- break;
- case 3:
- menu3();
- break;
- }
- }while( menu != 4 );
- getchar();
- return 0;
- }
- /* linklist function starts here */
- void pushHead(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
- struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
- strcpy(newNode->nama, nama);
- strcpy(newNode->nim, nim);
- for(int i=0;i<3;++i){
- newNode->teori[i] = teori[i];
- newNode->praktek[i] = praktek[i];
- }
- newNode->nilaiAkhir = nilaiAkhir;
- newNode->next = newNode->prev = NULL;
- ++DATA_COUNTER;
- if( !head ){
- head = tail = newNode;
- return;
- }
- head->prev = newNode;
- newNode->next = head;
- head = newNode;
- }
- void pushTail(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
- struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
- strcpy(newNode->nama, nama);
- strcpy(newNode->nim, nim);
- for(int i=0;i<3;++i){
- newNode->teori[i] = teori[i];
- newNode->praktek[i] = praktek[i];
- }
- newNode->nilaiAkhir = nilaiAkhir;
- newNode->next = newNode->prev = NULL;
- ++DATA_COUNTER;
- if( !head ){
- head = tail = newNode;
- return;
- }
- tail->next = newNode;
- newNode->prev = tail;
- tail = newNode;
- }
- void pushByIndex(int index, char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
- if( index > DATA_COUNTER+1 )
- return;
- if( !head ){
- pushHead(nama, nim, teori, praktek, nilaiAkhir);
- return;
- }
- if( index == 1 )
- pushHead(nama, nim, teori, praktek, nilaiAkhir);
- else if( index == DATA_COUNTER+1 )
- pushTail(nama, nim, teori, praktek, nilaiAkhir);
- else{
- struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
- strcpy(newNode->nama, nama);
- strcpy(newNode->nim, nim);
- for(int i=0;i<3;++i){
- newNode->teori[i] = teori[i];
- newNode->praktek[i] = praktek[i];
- }
- newNode->nilaiAkhir = nilaiAkhir;
- newNode->next = newNode->prev = NULL;
- ++DATA_COUNTER;
- int indexCounter = 0;
- current = head;
- while( current ){
- ++indexCounter;
- if( indexCounter == index-1 )
- break;
- current = current->next;
- }
- newNode->next = current->next;
- newNode->prev = current;
- current->next->prev = newNode;
- current->next = newNode;
- }
- }
- void popAll(){
- if( !head )
- return;
- while( head )
- popHead();
- DATA_COUNTER = 0;
- }
- void popHead(){
- if( !head )
- return;
- current = head;
- head = head->next;
- free(current);
- --DATA_COUNTER;
- }
- void popTail(){
- if( !head )
- return;
- current = tail;
- tail = tail->prev;
- free(current);
- --DATA_COUNTER;
- tail->next = NULL;
- }
- void popByIndex(int index){
- if( index > DATA_COUNTER || index < 1 )
- return;
- if( !head )
- return;
- if( index == 1 )
- popHead();
- else if( index == DATA_COUNTER )
- popTail();
- else{
- int indexCounter = 0;
- current = head;
- while( current ){
- ++indexCounter;
- if( indexCounter == index )
- break;
- current = current->next;
- }
- current->next->prev = current->prev;
- current->prev->next = current->next;
- free(current);
- --DATA_COUNTER;
- }
- }
- int popByNim(char nim[14]){
- int indexCounter = 0;
- current = head;
- while( current ){
- ++indexCounter;
- if( !strcpy(current->nim, nim) )
- break;
- current = current->next;
- }
- if( !current )
- return 0;
- popByIndex(indexCounter);
- return 1;
- }
- void viewFromHead(){
- _CLEAR_;
- char string[3][6] = {"Tugas", "UTS", "UAS"};
- int n = 0;
- if( !head )
- return;
- current = head;
- while( current ){
- printf("Data ke - %d\n", ++n);
- printf("Nama : %s\n", current->nama);
- printf("Nim : %s\n", current->nim);
- puts("Teori");
- for(int i=0;i<3;++i)
- printf("Nilai %-5s : %.1f\n", string[i], current->teori[i]);
- puts("Praktek");
- for(int i=0;i<3;++i)
- printf("Nilai %-5s : %.1f\n", string[i], current->praktek[i]);
- printf("Nilai akhir : %.1f\n", current->nilaiAkhir);
- puts("=======================================\n");
- current = current->next;
- }
- getchar();
- }
- void viewFromTail(){
- _CLEAR_;
- char string[3][6] = {"Tugas", "UTS", "UAS"};
- int n = DATA_COUNTER;
- if( !head )
- return;
- current = tail;
- while( current ){
- printf("Data ke - %d\n", n--);
- printf("Nama : %s\n", current->nama);
- printf("Nim : %s\n", current->nim);
- puts("Teori");
- for(int i=0;i<3;++i)
- printf("Nilai %-5s : %.1f\n", string[i], current->teori[i]);
- puts("Praktek");
- for(int i=0;i<3;++i)
- printf("Nilai %-5s : %.1f\n", string[i], current->praktek[i]);
- printf("Nilai akhir : %.1f\n", current->nilaiAkhir);
- puts("=======================================\n");
- current = current->prev;
- }
- getchar();
- }
- /* linklist function ends here */
- /* menu function starts here */
- void menu1(){
- int menu = 0;
- do{
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- puts(" INSERT DATA");
- _LINE_;
- puts("1. Insert Data");
- puts("2. Insert Data sesuai index");
- puts("3. kembali");
- printf("Option : ");
- scanf("%d", &menu);fflush(stdin);
- switch( menu ){
- case 1:
- menu1_1();
- break;
- case 2:
- menu1_2();
- break;
- }
- getchar();
- }while( menu != 3 );
- }
- void menu1_1(){
- char string[3][6] = {"Tugas", "UTS", "UAS"};
- char temp_nama[40], temp_nim[14];
- float temp_teori[3], temp_praktek[3], temp_nilaiAkhir;
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- _LINE_;
- do{
- printf("Masukkan nama : ");
- scanf("%[^\n]", &temp_nama);fflush(stdin);
- }while( strlen(temp_nama) > 39 );
- do{
- printf("Masukkan nim : ");
- scanf("%[^\n]", &temp_nim);fflush(stdin);
- }while( strlen(temp_nim) > 13 );
- puts("Teori");
- for(int i=0;i<3;++i){
- printf("Masukkan nilai %s : ", string[i]);
- scanf("%f", &temp_teori[i]);fflush(stdin);
- }
- puts("Praktek");
- for(int i=0;i<3;++i){
- printf("Masukkan nilai %s : ", string[i]);
- scanf("%f", &temp_praktek[i]);fflush(stdin);
- }
- temp_nilaiAkhir = (2*(0.3*temp_teori[0]+0.3*temp_teori[1]+0.4*temp_teori[2])/3)+(1*(0.3*temp_praktek[0]+0.3*temp_praktek[1]+0.4*temp_praktek[2])/3);
- pushTail(temp_nama, temp_nim, temp_teori, temp_praktek, temp_nilaiAkhir);
- puts("\nData berhasil dimasukkan!");
- puts("Press any key to continue . . .");
- getchar();
- }
- void menu1_2(){
- int temp_index;
- char string[3][6] = {"Tugas", "UTS", "UAS"};
- char temp_nama[40], temp_nim[14];
- float temp_teori[3], temp_praktek[3], temp_nilaiAkhir;
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- _LINE_;
- do{
- printf("Index ke : ");
- scanf("%d", &temp_index);fflush(stdin);
- }while( temp_index < 1 || temp_index > DATA_COUNTER+1 );
- do{
- printf("Masukkan nama : ");
- scanf("%[^\n]", &temp_nama);fflush(stdin);
- }while( strlen(temp_nama) > 39 );
- do{
- printf("Masukkan nim : ");
- scanf("%[^\n]", &temp_nim);fflush(stdin);
- }while( strlen(temp_nim) > 13 );
- puts("Teori");
- for(int i=0;i<3;++i){
- printf("Masukkan nilai %s : ", string[i]);
- scanf("%f", &temp_teori[i]);fflush(stdin);
- }
- puts("Praktek");
- for(int i=0;i<3;++i){
- printf("Masukkan nilai %s : ", string[i]);
- scanf("%f", &temp_praktek[i]);fflush(stdin);
- }
- temp_nilaiAkhir = (2*(0.3*temp_teori[0]+0.3*temp_teori[1]+0.4*temp_teori[2])/3)+(1*(0.3*temp_praktek[0]+0.3*temp_praktek[1]+0.4*temp_praktek[2])/3);
- pushByIndex(temp_index, temp_nama, temp_nim, temp_teori, temp_praktek, temp_nilaiAkhir);
- puts("\nData berhasil dimasukkan!");
- puts("Press any key to continue . . .");
- getchar();
- }
- void menu2(){
- int menu = 0;
- do{
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- puts(" PRINT DATA");
- _LINE_;
- puts("1. Dari depan");
- puts("2. Dari belakang");
- puts("3. kembali");
- printf("Option : ");
- scanf("%d", &menu);fflush(stdin);
- switch( menu ){
- case 1:
- viewFromHead();
- break;
- case 2:
- viewFromTail();
- break;
- }
- getchar();
- }while( menu != 3 );
- }
- void menu3(){
- int menu = 0, temp_index;
- char temp_nim[14];
- do{
- _CLEAR_;
- _LINE_;
- puts(" MINI DATABASE");
- puts(" DELETE DATA");
- _LINE_;
- puts("1. Semua Data");
- puts("2. Sesuai Index");
- puts("3. Sesuai NIM");
- puts("4. Kembali");
- printf("Option : ");
- scanf("%d", &menu);fflush(stdin);
- switch( menu ){
- case 1:
- popAll();
- puts("Semua data berhasil dihapus");
- puts("Prss any key to continue. . .");
- break;
- case 2:
- do{
- printf("Masukkan index : ");
- scanf("%d", &temp_index);fflush(stdin);
- }while( temp_index < 1 || temp_index > DATA_COUNTER );
- popByIndex(temp_index);
- break;
- case 3:
- printf("Masukkan NIM : ");
- scanf("%[^\n]", &temp_nim);fflush(stdin);
- int success = popByNim(temp_nim);
- if( !success )
- printf("Gagal");
- else
- printf("Success");
- break;
- }
- getchar();
- }while( menu != 4 );
- }
- /* menu function ends here */
Add Comment
Please, Sign In to add comment