ClavinJune

saat sedang nganggur

Sep 28th, 2017
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.59 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "stdlib.h"
  4. #ifdef _WIN32
  5.     #include "windows.h"
  6.     #define _SLEEP_ Sleep(1);
  7.     #define _CLEAR_ system("cls")
  8. #elif __linux__
  9.     #include "unistd.h"
  10.     #define _SLEEP_ usleep(1000);
  11.     #define _CLEAR_ system("clear")
  12. #endif
  13.  
  14. #define _LINE_ for(int i=0;i<37;++i) printf("=");puts("");
  15.  
  16. struct Mahasiswa{
  17.     char nama[40], nim[14];
  18.     /*
  19.         1 => tugas
  20.         2 => uts
  21.         3 => uas
  22.     */
  23.     float teori[3], praktek[3], nilaiAkhir;
  24.     struct Mahasiswa *next, *prev;
  25. }*head, *tail, *current;
  26. typedef struct Mahasiswa mhs;
  27.  
  28. //global variable for counting total data in struct
  29. int DATA_COUNTER = 0;
  30.  
  31. /* linklist function starts here */
  32. void pushHead(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
  33. void pushTail(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
  34. void pushByIndex(int index, char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir);
  35. void popAll();
  36. void popHead();
  37. void popTail();
  38. void popByIndex(int index);
  39. int popByNim(char nim[14]);
  40. void viewFromHead();
  41. void viewFromTail();
  42. /* linklist function ends here */
  43.  
  44. /* menu function starts here */
  45. void menu1();
  46. void menu1_1();
  47. void menu1_2();
  48. void menu2();
  49. void menu3();
  50. /* menu function ends here */
  51.  
  52. int main(int argc, char **agv){
  53.     int menu = 0;
  54.     do{
  55.         _CLEAR_;
  56.         _LINE_;
  57.         puts("             MINI DATABASE");
  58.         _LINE_;
  59.         puts("1. Insert Data");
  60.         puts("2. Print Data");
  61.         puts("3. Delete Data");
  62.         puts("4. Exit");
  63.         printf("Option : ");
  64.         scanf("%d", &menu);fflush(stdin);
  65.  
  66.         switch( menu ){
  67.             case 1:
  68.                     menu1();
  69.                     break;
  70.             case 2:
  71.                     menu2();
  72.                     break;
  73.             case 3:
  74.                     menu3();
  75.                     break;
  76.         }
  77.     }while( menu != 4 );
  78.     getchar();
  79.     return 0;
  80. }
  81.  
  82. /* linklist function starts here */
  83. void pushHead(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
  84.     struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
  85.     strcpy(newNode->nama, nama);
  86.     strcpy(newNode->nim, nim);
  87.  
  88.     for(int i=0;i<3;++i){
  89.         newNode->teori[i] = teori[i];
  90.         newNode->praktek[i] = praktek[i];
  91.     }
  92.  
  93.     newNode->nilaiAkhir = nilaiAkhir;
  94.     newNode->next = newNode->prev = NULL;
  95.     ++DATA_COUNTER;
  96.  
  97.     if( !head ){
  98.         head = tail = newNode;
  99.         return;
  100.     }
  101.  
  102.     head->prev    = newNode;
  103.     newNode->next = head;
  104.     head          = newNode;
  105. }
  106.  
  107. void pushTail(char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
  108.     struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
  109.     strcpy(newNode->nama, nama);
  110.     strcpy(newNode->nim, nim);
  111.  
  112.     for(int i=0;i<3;++i){
  113.         newNode->teori[i] = teori[i];
  114.         newNode->praktek[i] = praktek[i];
  115.     }
  116.  
  117.     newNode->nilaiAkhir = nilaiAkhir;
  118.     newNode->next = newNode->prev = NULL;
  119.     ++DATA_COUNTER;
  120.  
  121.     if( !head ){
  122.         head = tail = newNode;
  123.         return;
  124.     }
  125.  
  126.     tail->next    = newNode;
  127.     newNode->prev = tail;
  128.     tail          = newNode;
  129. }
  130.  
  131. void pushByIndex(int index, char nama[40], char nim[14], float teori[3], float praktek[3], float nilaiAkhir){
  132.     if( index > DATA_COUNTER+1 )
  133.         return;
  134.  
  135.     if( !head ){
  136.         pushHead(nama, nim, teori, praktek, nilaiAkhir);
  137.         return;
  138.     }
  139.  
  140.     if( index == 1 )
  141.         pushHead(nama, nim, teori, praktek, nilaiAkhir);
  142.     else if( index == DATA_COUNTER+1 )
  143.         pushTail(nama, nim, teori, praktek, nilaiAkhir);
  144.     else{
  145.         struct Mahasiswa *newNode = (mhs*)malloc(sizeof(mhs));
  146.         strcpy(newNode->nama, nama);
  147.         strcpy(newNode->nim, nim);
  148.  
  149.         for(int i=0;i<3;++i){
  150.             newNode->teori[i] = teori[i];
  151.             newNode->praktek[i] = praktek[i];
  152.         }
  153.  
  154.         newNode->nilaiAkhir = nilaiAkhir;
  155.         newNode->next = newNode->prev = NULL;
  156.         ++DATA_COUNTER;
  157.  
  158.         int indexCounter = 0;
  159.         current          = head;
  160.  
  161.         while( current ){
  162.             ++indexCounter;
  163.             if( indexCounter == index-1 )
  164.                 break;
  165.             current = current->next;
  166.         }
  167.  
  168.         newNode->next       = current->next;
  169.         newNode->prev       = current;
  170.         current->next->prev = newNode;
  171.         current->next       = newNode;
  172.     }
  173. }
  174.  
  175. void popAll(){
  176.     if( !head )
  177.         return;
  178.  
  179.     while( head )
  180.         popHead();
  181.  
  182.     DATA_COUNTER = 0;
  183. }
  184.  
  185. void popHead(){
  186.     if( !head )
  187.         return;
  188.  
  189.     current    = head;
  190.     head       = head->next;
  191.     free(current);
  192.     --DATA_COUNTER;
  193. }
  194.  
  195. void popTail(){
  196.     if( !head )
  197.         return;
  198.  
  199.     current = tail;
  200.     tail    = tail->prev;
  201.     free(current);
  202.     --DATA_COUNTER;
  203.     tail->next = NULL;
  204. }
  205.  
  206. void popByIndex(int index){
  207.     if( index > DATA_COUNTER || index < 1 )
  208.         return;
  209.     if( !head )
  210.         return;
  211.  
  212.     if( index == 1 )
  213.         popHead();
  214.     else if( index == DATA_COUNTER )
  215.         popTail();
  216.     else{
  217.         int indexCounter = 0;
  218.         current          = head;
  219.  
  220.         while( current ){
  221.             ++indexCounter;
  222.             if( indexCounter == index )
  223.                 break;
  224.             current = current->next;
  225.         }
  226.  
  227.         current->next->prev = current->prev;
  228.         current->prev->next = current->next;
  229.         free(current);
  230.         --DATA_COUNTER;
  231.     }
  232. }
  233.  
  234. int popByNim(char nim[14]){
  235.     int indexCounter = 0;
  236.     current          = head;
  237.     while( current ){
  238.         ++indexCounter;
  239.         if( !strcpy(current->nim, nim) )
  240.             break;
  241.         current = current->next;
  242.     }
  243.     if( !current )
  244.         return 0;
  245.     popByIndex(indexCounter);
  246.     return 1;
  247. }
  248.  
  249. void viewFromHead(){
  250.     _CLEAR_;
  251.     char string[3][6] = {"Tugas", "UTS", "UAS"};
  252.     int n = 0;
  253.     if( !head )
  254.         return;
  255.     current = head;
  256.  
  257.     while( current ){
  258.         printf("Data ke - %d\n", ++n);
  259.         printf("Nama           : %s\n", current->nama);
  260.         printf("Nim            : %s\n", current->nim);
  261.         puts("Teori");
  262.         for(int i=0;i<3;++i)
  263.             printf("Nilai %-5s    : %.1f\n", string[i], current->teori[i]);
  264.         puts("Praktek");
  265.         for(int i=0;i<3;++i)
  266.             printf("Nilai %-5s    : %.1f\n", string[i], current->praktek[i]);
  267.         printf("Nilai akhir    : %.1f\n", current->nilaiAkhir);
  268.         puts("=======================================\n");
  269.         current = current->next;
  270.     }
  271.     getchar();
  272. }
  273.  
  274. void viewFromTail(){
  275.     _CLEAR_;
  276.     char string[3][6] = {"Tugas", "UTS", "UAS"};
  277.     int n = DATA_COUNTER;
  278.     if( !head )
  279.         return;
  280.     current = tail;
  281.  
  282.     while( current ){
  283.         printf("Data ke - %d\n", n--);
  284.         printf("Nama           : %s\n", current->nama);
  285.         printf("Nim            : %s\n", current->nim);
  286.         puts("Teori");
  287.         for(int i=0;i<3;++i)
  288.             printf("Nilai %-5s    : %.1f\n", string[i], current->teori[i]);
  289.         puts("Praktek");
  290.         for(int i=0;i<3;++i)
  291.             printf("Nilai %-5s    : %.1f\n", string[i], current->praktek[i]);
  292.         printf("Nilai akhir    : %.1f\n", current->nilaiAkhir);
  293.         puts("=======================================\n");
  294.         current = current->prev;
  295.     }
  296.     getchar();
  297. }
  298. /* linklist function ends here */
  299.  
  300. /* menu function starts here */
  301. void menu1(){
  302.     int menu = 0;
  303.     do{
  304.         _CLEAR_;
  305.         _LINE_;
  306.         puts("             MINI DATABASE");
  307.         puts("              INSERT DATA");
  308.         _LINE_;
  309.         puts("1. Insert Data");
  310.         puts("2. Insert Data sesuai index");
  311.         puts("3. kembali");
  312.         printf("Option : ");
  313.         scanf("%d", &menu);fflush(stdin);
  314.  
  315.         switch( menu ){
  316.             case 1:
  317.                     menu1_1();
  318.                     break;
  319.             case 2:
  320.                     menu1_2();
  321.                     break;
  322.         }
  323.         getchar();
  324.     }while( menu != 3 );
  325. }
  326.  
  327. void menu1_1(){
  328.     char string[3][6] = {"Tugas", "UTS", "UAS"};
  329.     char temp_nama[40], temp_nim[14];
  330.     float temp_teori[3], temp_praktek[3], temp_nilaiAkhir;
  331.     _CLEAR_;
  332.     _LINE_;
  333.     puts("             MINI DATABASE");
  334.     _LINE_;
  335.  
  336.     do{
  337.         printf("Masukkan nama : ");
  338.         scanf("%[^\n]", &temp_nama);fflush(stdin);
  339.     }while( strlen(temp_nama) > 39 );
  340.  
  341.     do{
  342.         printf("Masukkan nim : ");
  343.         scanf("%[^\n]", &temp_nim);fflush(stdin);
  344.     }while( strlen(temp_nim) > 13 );
  345.  
  346.     puts("Teori");
  347.     for(int i=0;i<3;++i){
  348.         printf("Masukkan nilai %s : ", string[i]);
  349.         scanf("%f", &temp_teori[i]);fflush(stdin);
  350.     }
  351.  
  352.     puts("Praktek");
  353.     for(int i=0;i<3;++i){
  354.         printf("Masukkan nilai %s : ", string[i]);
  355.         scanf("%f", &temp_praktek[i]);fflush(stdin);
  356.     }
  357.  
  358.     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);
  359.  
  360.     pushTail(temp_nama, temp_nim, temp_teori, temp_praktek, temp_nilaiAkhir);
  361.     puts("\nData berhasil dimasukkan!");
  362.     puts("Press any key to continue . . .");
  363.     getchar();
  364. }
  365.  
  366. void menu1_2(){
  367.     int temp_index;
  368.     char string[3][6] = {"Tugas", "UTS", "UAS"};
  369.     char temp_nama[40], temp_nim[14];
  370.     float temp_teori[3], temp_praktek[3], temp_nilaiAkhir;
  371.     _CLEAR_;
  372.     _LINE_;
  373.     puts("             MINI DATABASE");
  374.     _LINE_;
  375.  
  376.     do{
  377.         printf("Index ke : ");
  378.         scanf("%d", &temp_index);fflush(stdin);
  379.     }while( temp_index < 1 || temp_index > DATA_COUNTER+1 );
  380.  
  381.     do{
  382.         printf("Masukkan nama : ");
  383.         scanf("%[^\n]", &temp_nama);fflush(stdin);
  384.     }while( strlen(temp_nama) > 39 );
  385.  
  386.     do{
  387.         printf("Masukkan nim : ");
  388.         scanf("%[^\n]", &temp_nim);fflush(stdin);
  389.     }while( strlen(temp_nim) > 13 );
  390.  
  391.     puts("Teori");
  392.     for(int i=0;i<3;++i){
  393.         printf("Masukkan nilai %s : ", string[i]);
  394.         scanf("%f", &temp_teori[i]);fflush(stdin);
  395.     }
  396.  
  397.     puts("Praktek");
  398.     for(int i=0;i<3;++i){
  399.         printf("Masukkan nilai %s : ", string[i]);
  400.         scanf("%f", &temp_praktek[i]);fflush(stdin);
  401.     }
  402.  
  403.     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);
  404.  
  405.     pushByIndex(temp_index, temp_nama, temp_nim, temp_teori, temp_praktek, temp_nilaiAkhir);
  406.     puts("\nData berhasil dimasukkan!");
  407.     puts("Press any key to continue . . .");
  408.     getchar();
  409. }
  410.  
  411. void menu2(){
  412.     int menu = 0;
  413.     do{
  414.         _CLEAR_;
  415.         _LINE_;
  416.         puts("             MINI DATABASE");
  417.         puts("              PRINT DATA");
  418.         _LINE_;
  419.         puts("1. Dari depan");
  420.         puts("2. Dari belakang");
  421.         puts("3. kembali");
  422.         printf("Option : ");
  423.         scanf("%d", &menu);fflush(stdin);
  424.  
  425.         switch( menu ){
  426.             case 1:
  427.                     viewFromHead();
  428.                     break;
  429.             case 2:
  430.                     viewFromTail();
  431.                     break;
  432.         }
  433.         getchar();
  434.     }while( menu != 3 );
  435. }
  436.  
  437. void menu3(){
  438.     int menu = 0, temp_index;
  439.     char temp_nim[14];
  440.     do{
  441.         _CLEAR_;
  442.         _LINE_;
  443.         puts("             MINI DATABASE");
  444.         puts("              DELETE DATA");
  445.         _LINE_;
  446.         puts("1. Semua Data");
  447.         puts("2. Sesuai Index");
  448.         puts("3. Sesuai NIM");
  449.         puts("4. Kembali");
  450.         printf("Option : ");
  451.         scanf("%d", &menu);fflush(stdin);
  452.  
  453.         switch( menu ){
  454.             case 1:
  455.                     popAll();
  456.                     puts("Semua data berhasil dihapus");
  457.                     puts("Prss any key to continue. . .");
  458.                     break;
  459.             case 2:
  460.                     do{
  461.                         printf("Masukkan index : ");
  462.                         scanf("%d", &temp_index);fflush(stdin);
  463.                     }while( temp_index < 1 || temp_index > DATA_COUNTER );
  464.                     popByIndex(temp_index);
  465.                     break;
  466.             case 3:
  467.                     printf("Masukkan NIM : ");
  468.                     scanf("%[^\n]", &temp_nim);fflush(stdin);
  469.                     int success = popByNim(temp_nim);
  470.                     if( !success )
  471.                         printf("Gagal");
  472.                     else
  473.                         printf("Success");
  474.                     break;
  475.         }
  476.         getchar();
  477.     }while( menu != 4 );
  478. }
  479. /* menu function ends here */
Add Comment
Please, Sign In to add comment