Advertisement
mrgokilz

e test pembaharuan ke 2

Jan 25th, 2017
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.58 KB | None | 0 0
  1. // E-Test by Dedi Susanto
  2. // powered by Indonesia C/C++/C#/Objective-C Programmer Community
  3.  
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <string.h>
  7. #include <windows.h>
  8. void baris(); //fungsi baris talosi
  9. void talosi(); //fungsi talosi : tampilan log in dan sign out
  10. void login(); //fungsi log in
  11. void signup(); //fungsi sign up
  12. void kontalosi(int x); //fungsi pasca input talosi; kontalosi : kondisi talosi
  13. void soal1(); //fungsi soal ke 1
  14. void soal2(); //fungsi soal ke 2
  15. void test(); //fungsi test yang berisikan fungsi soal1 dan soal2
  16. void readPass(char *);
  17.  
  18. char h=0;
  19. int a;
  20.  
  21. static struct
  22. {
  23.     char nama[100];
  24.     char pass[100];
  25.     char jawab[2];
  26. }
  27. akun[60];
  28.  
  29. int main()
  30. {
  31.     do
  32.     {
  33.     talosi();
  34.     kontalosi(a);
  35.     }
  36.     while(a!=1);
  37. }
  38.  
  39. void baris()
  40. {
  41.     puts("===================================");
  42. }
  43.  
  44. void talosi()
  45. {
  46.     do
  47.     {
  48.     baris();
  49.     puts("=  kode perintah  =  keterangan   =");
  50.     baris();
  51.     puts("=       1         =     log in    =");
  52.     puts("=       2         =    sign up    =");
  53.     baris();
  54.     printf("masukan perintah : ");
  55.     fflush(stdin);
  56.     scanf("%d",&a);
  57.     system("cls");
  58.     }
  59.     while(a!=1&&a!=2);
  60. }
  61.  
  62. void login()
  63. {
  64.     char x[100],y[100];
  65.     input:
  66.     printf("\t\t---LOG IN---\n");
  67.     printf("username : ");
  68.     fflush(stdin);
  69.     scanf("%[^\n]",x);
  70.     printf("password : ");
  71.     fflush(stdin);
  72.     readPass(y);
  73.     system("cls");
  74.    
  75.     for(int i=0;i<60;i++)
  76.     {
  77.         if(strcmp(strupr(x),strupr(akun[i].nama))==0&&strcmp(strupr(y),strupr(akun[i].pass))==0)
  78.         {
  79.             test();
  80.             exit(0);
  81.         }
  82.     }
  83.  
  84.     for(int i=0;i<60;i++)
  85.     {
  86.         if(strcmp(strupr(x),strupr(akun[i].nama))!=0&&strcmp(strupr(y),strupr(akun[i].pass))!=0)
  87.         {
  88.             goto input;
  89.         }
  90.     }  
  91. }
  92.  
  93. void signup()
  94. {
  95.     printf("indeks ke-%d\n",h);
  96.     printf("\t\t---SIGN UP---\n");
  97.     printf("masukan username : ");
  98.     fflush(stdin);
  99.     scanf("%[^\n]",akun[h].nama);
  100.     printf("masukan password : ");
  101.     readPass(akun[h].pass);
  102.     h++;
  103.     system("cls");
  104. }
  105.  
  106. void kontalosi(int a)
  107. {
  108.     if(a==1)
  109.     {
  110.         login();
  111.     }
  112.    
  113.     if(a==2)
  114.     {
  115.         signup();
  116.     }
  117. }
  118.  
  119. void soal1()
  120. {
  121. puts("1. Teknik sort yang bekerja dengan prinsip gelembung yang bergerak");
  122. puts("naik keatas secara satu persatu. Adalah teknik sort dengan metode..");
  123. puts("a. insertion");                
  124. puts("b. merge sort");
  125. puts("c. buble sort ");
  126. puts("d. selection sort");
  127. printf("\nmasukan jawaban : ");
  128. }
  129.  
  130. void soal2()
  131. {
  132. puts("2. Teknik Devide and Conquer digunakan dalam memecahkan masalah antara lain :");
  133. puts("a. Array");
  134. puts("b. Matrix");
  135. puts("c. Max & Min");
  136. puts("d. Sorting & Searching");
  137. printf("\nmasukan jawaban : ");
  138. }
  139.  
  140.  
  141. void test()
  142. {
  143.     int i, poin=0;
  144.     for(i=0;i<2;i++)
  145.         {
  146.             if(i==0)
  147.             {
  148.                 soal1();
  149.                 fflush(stdin);
  150.                 scanf("%c",&akun[h].jawab[i]);
  151.                 if(akun[h].jawab[i]=='C'||akun[h].jawab[i]=='c')
  152.                 {
  153.                     poin+=50;
  154.                 }
  155.                 else
  156.                 {
  157.                     poin+=0;
  158.                 }
  159.                 system("cls");
  160.             }
  161.            
  162.             else if(i==1)
  163.             {
  164.                 soal2();
  165.                 fflush(stdin);
  166.                 scanf("%c",&akun[h].jawab[i]);
  167.                 if(akun[h].jawab[i]=='D'||akun[h].jawab[i]=='d')
  168.                 {
  169.                     poin+=50;
  170.                 }
  171.                 else
  172.                 {
  173.                     poin+=0;
  174.                 }
  175.                 system("cls");
  176.             }  
  177.         }
  178.     printf("poin anda : %d\n",poin);
  179. }
  180.  
  181. void readPass(char *temp)
  182. /* fitur menyamarkan password ini saya copy dari
  183. https://learntocodes.wordpress.com/2015/12/06/c-masking-menyamarkan-input-password/
  184. dan saya rubah sedikit dengan mengganti syarat if default dengan isprint, meskipun
  185. intinya sama.
  186. gpp lah, biar keliatan ada usaha dan biar keliatan ga murni copas... :v
  187. */
  188. {
  189.     int key = 0, index = 0;
  190.  
  191.     do {
  192.         key = getch(); /* Simpan karakter yang ditekan ke dalam variabel key */
  193.  
  194.         switch (key)
  195.         {
  196.              
  197.                 /* 0 adalah kode awal untuk tombol fungsi (function key), seperti F1, F2, ..., F12
  198.                  * Misalkan jika tombol F1 ditekan, maka fungsi getch akan mengembalikan
  199.                  * nilai 0 dan menyimpan sebuah kode yang menandakan tombol F1 ditekan ke buffer.
  200.                  */
  201.             case 0:
  202.  
  203.                 /* 224 adalah kode awal untuk tombol panah, home, page up, page down, end dan lain-lain.
  204.                  * Misalkan jika tombol panah ditekan, fungsi getch akan
  205.                  * mengembalikan nilai 224 dan menyimpan sebuah kode
  206.                  * yang menandakan tombol yang ditekan ke buffer.
  207.                  */
  208.             case 224:
  209.                  
  210.                 /* Fungsi getch di sini digunakan untuk membersihkan buffer */
  211.                 getch();
  212.  
  213.                 break;
  214.                  
  215.                 /* Jika tombol back space ditekan, maka mundurkan cursor satu langkah */
  216.             case '\b':
  217.                 if (index > 0)
  218.                 {
  219.                     index = index - 1; /* Kurangi index temp sebesar 1 */
  220.                     temp[index] = 0; /* set temp[index] menjadi kosong (NUL) */
  221.  
  222.                     printf("\b \b"); /* Mundurkan cursor satu langkah */
  223.                 }
  224.  
  225.                 break;
  226.             default:
  227.                  
  228.                 /* Hanya karakter printable yang dapat ditekan, seperti huruf, angka dan karakter spesial */
  229.                 if (isprint(key))
  230.                 {
  231.                     temp[index] = key; /* Simpan karakter ke dalam temp[index] */
  232.                     index = index + 1; /* Naikkan nilai index sebesar 1 */
  233.  
  234.                     printf("*");
  235.                 }
  236.         }
  237.  
  238.         /* 13 adalah kode ASCII untuk karakter enter.
  239.          * Perulangan akan terus dilakukan sampai tombol enter ditekan.
  240.          */
  241.     } while (key != 13);
  242.      
  243.     /* Menambahkan NUL di akhir temp yang menandakan akhir dari sebuah string */
  244.     temp[index] = '\0';
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement