Advertisement
akevintg

Ticketing In C (fork & pipe)

Nov 4th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.15 KB | None | 0 0
  1. /*
  2. SOAL
  3. =====================================================================================================================
  4. Input
  5. (child)
  6. Nama pemesan boleh spasi(5-20 character ga ada angka, Diawali dengan Huruf Besar)
  7. pilih tempat asal[bandung/jakarta/surabaya](ga case sensitive)
  8. pilihan tujuan[bandung/jakarta/surabaya](ga case sensitive)
  9. jumlah penumpang(harus angka)
  10.  
  11. output
  12. (parent)
  13. 1. nama pemesan
  14. 2. no order, random 2 Kata pertama dari nama(sudah di kapitalkan)+kodeAsal(bandung=01 || jakarta=02 || surabaya= 03)+kodetujuan(bandung=11 || jakarta=12 || surabaya= 13)+random2digit
  15. 3. tiket perorangan harga dari :
  16. jakarta ke -> bandung 50000 || surabya 100000
  17. bandung ke -> jakarta 40000 || surbaya 60000
  18. surabya ke ->jakarta 120000 || bandung 70000
  19. (^ Harga diatas persatuan orang)
  20. 4. Harga Total sebelum diskon
  21. 5. diskon dalam rupiah Jika penumpang 1, harga normal
  22. penumpang 2-5 diskon 12.5 % dari harga total(ati2 ada koma 5)
  23. penumpang >5 orang diskon 17.5% dari harga total
  24. 6. harga total setelah diskon
  25.  
  26. Contoh :
  27. input
  28. Nama : Alexander kevin
  29. Tempat Asal : JakaRTa
  30. Tempat Tujuan : BaNduNg
  31. Jumlah Penumpang : 4
  32.  
  33. Output
  34. Nama : Alexander kevin
  35. No Order : AL021124
  36. Harga Satuan : 50000
  37. Harga Total : 200000
  38. Diskon : 25000
  39. Sub Total :  175000
  40.  
  41. penjelasana :
  42. Order AL021124 (AL dari ALexander,02 dari jakarta,11 ke bandung, 24 Random angka)
  43. Harga Total dari 50000*4
  44. Diskon dari 200000*0.175
  45. *12.5%=0.125
  46. Sub Total dari 200000-25000
  47. */
  48.  
  49. #include <stdio.h>
  50. #include <string.h>
  51. #include <ctype.h>
  52. #include <time.h>
  53. #include <stdlib.h>
  54. #include <unistd.h>
  55.  
  56. struct data{
  57.     char nama[25];
  58.     char asal[10];
  59.     char tujuan[10];
  60.     int jumlah;
  61.     int tHarga;
  62.     int diskon;
  63. };
  64.  
  65. int main(){
  66.     pid_t forking;
  67.     int pipes[2];
  68.     struct data penumpang;
  69.     int flag,i;
  70.     if(pipe(pipes)<0)
  71.         printf("Error");
  72.     forking=fork();
  73.     if(forking==0){
  74.         printf("\nChild PROCESS\n====================\n");
  75.         do{
  76.             flag=0;
  77.             printf("Masukan Nama Lengkap Anda[5..20][Huruf Depan Besar] :");
  78.             scanf("%[^\n]s",penumpang.nama);getchar();
  79.             if(strlen(penumpang.nama)<5||strlen(penumpang.nama)>20)
  80.                 flag=1;
  81.             if(penumpang.nama[0]!=toupper(penumpang.nama[0]))
  82.                 flag=1;
  83.         }while(flag==1);
  84.         do{
  85.             flag=0;
  86.             printf("Masukan Tempat Asal[Bandung/Jakarta/Surabaya] :");
  87.             scanf("%s",penumpang.asal);getchar();
  88.             if(strcasecmp(penumpang.asal,"bandung")!=0&&strcasecmp(penumpang.asal,"jakarta")&&strcasecmp(penumpang.asal,"surabaya"))
  89.                 flag=1;
  90.         }while(flag==1);
  91.         do{
  92.             flag=0;
  93.             printf("Masukan Tempat tujuan[Bandung/Jakarta/Surabaya] :");
  94.             scanf("%s",penumpang.tujuan);getchar();
  95.             if(strcasecmp(penumpang.tujuan,"bandung")!=0&&strcasecmp(penumpang.tujuan,"jakarta")&&strcasecmp(penumpang.asal,"surabaya"))
  96.                 flag=1;
  97.             if(strcasecmp(penumpang.tujuan,penumpang.asal)==0)
  98.                 flag=0;
  99.         }while(flag==1);
  100.         do{
  101.             flag=0;
  102.             printf("Masukan Jumlah Penumpang [1..100]:");
  103.             scanf("%d",&penumpang.jumlah);getchar();
  104.             if(penumpang.jumlah<1||penumpang.jumlah>100)
  105.                 flag=1;
  106.         }while(flag==1);
  107.         close(pipes[0]);
  108.         write(pipes[1],(struct data*)&penumpang,sizeof(penumpang));
  109.     }
  110.     else if(forking>0){
  111.         close(pipes[1]);
  112.         read(pipes[0],(struct data*)&penumpang,sizeof(penumpang));
  113.         printf("\nParent PROCESS\n====================\n");
  114.         printf("Nama Pemesan : %s\n",penumpang.nama);
  115.         int kodeAsal;
  116.         int kodeTujuan;
  117.         if(strcasecmp(penumpang.asal,"bandung")==0)
  118.             kodeAsal=1;
  119.         else if(strcasecmp(penumpang.asal,"Jakarta")==0)
  120.             kodeAsal=2;
  121.         else if(strcasecmp(penumpang.asal,"surabaya")==0)
  122.             kodeAsal=3;
  123.         if(strcasecmp(penumpang.tujuan,"bandung")==0)
  124.             kodeTujuan=1;
  125.         else if(strcasecmp(penumpang.tujuan,"Jakarta")==0)
  126.             kodeTujuan=2;
  127.         else if(strcasecmp(penumpang.tujuan,"surabaya")==0)
  128.             kodeTujuan=3;
  129.         srand(time(NULL));
  130.         printf("No Order : %c%c0%d1%d%d\n",penumpang.nama[0],toupper(penumpang.nama[1]),
  131.             kodeAsal,kodeTujuan,rand()%91+10);
  132.         if(strcasecmp(penumpang.asal,"jakarta")==0){
  133.             if(strcasecmp(penumpang.tujuan,"bandung")==0){
  134.                 penumpang.tHarga=penumpang.jumlah*50000;
  135.                 printf("Harga Tiket perorang : Rp. 50000,00\n");
  136.             }
  137.             else {
  138.                 penumpang.tHarga=penumpang.jumlah*100000;
  139.                 printf("Harga Tiket perorang : Rp. 100000,00\n");
  140.             }
  141.         }
  142.         else if(strcasecmp(penumpang.asal,"bandung")==0){
  143.             if(strcasecmp(penumpang.tujuan,"jakarta")==0){
  144.                 penumpang.tHarga=penumpang.jumlah*40000;
  145.                 printf("Harga Tiket perorang : Rp. 100000,00\n");
  146.             }
  147.             else{
  148.                 penumpang.tHarga=penumpang.jumlah*60000;
  149.                 printf("Harga Tiket perorang : Rp. 100000,00\n");
  150.             }
  151.         }
  152.         else {
  153.             if(strcasecmp(penumpang.tujuan,"bandung")==0){
  154.                 penumpang.tHarga=penumpang.jumlah*70000;
  155.                 printf("Harga Tiket perorang : Rp. 100000,00\n");
  156.             }
  157.             else{
  158.                 penumpang.tHarga=penumpang.jumlah*120000;
  159.                 printf("Harga Tiket perorang : Rp. 100000,00\n");
  160.             }
  161.         }
  162.         printf("Harga Total : Rp. %d,00\n",penumpang.tHarga);
  163.         if(penumpang.jumlah>=2&&penumpang.jumlah<=5)
  164.             penumpang.diskon=penumpang.tHarga*0.125;
  165.         else if(penumpang.jumlah >3)
  166.             penumpang.diskon=penumpang.tHarga*0.175;
  167.         printf("Diskon : Rp. %d,00\n",penumpang.diskon);
  168.         printf("SubTotal : Rp. %d,00\n",penumpang.tHarga-penumpang.diskon);
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement