Advertisement
Wan_ich1

tugas tambahan modul 4

Jun 3rd, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. struct data
  7. {
  8.     string namaBarang;
  9.     string deskripsiBarang;
  10.     string merk;
  11.     int harga;
  12.     int stock;
  13. };
  14.  
  15. struct simpul
  16. {
  17.     int index;
  18.     data Data;
  19.     simpul *next=NULL;
  20. } *awal=NULL,*akhir=NULL,*bantu,*bantu2,*baru;
  21.  
  22. int index=-1;
  23.  
  24. void input(int indx)
  25. {
  26.     baru->index=indx;
  27.     cout << "Masukkan nama barang = ";
  28.     cin >> baru->Data.namaBarang;
  29.     cout << "Masukkan deskripsi barang = ";
  30.     cin >> baru->Data.deskripsiBarang;
  31.     cout << "Masukka merk barang = ";
  32.     cin >> baru->Data.merk;
  33.     cout << "Masukkan harga barang = ";
  34.     cin >> baru->Data.harga;
  35.     cout << "Masukkan jumlah stock barang = ";
  36.     cin >> baru->Data.stock;
  37. }
  38.  
  39. void inputData()
  40. {
  41.     index++;
  42.     baru=new simpul;
  43.     input(index);
  44.     baru->next=NULL;
  45.  
  46.     if (awal==NULL)
  47.     {
  48.         awal=akhir=baru;
  49.     }
  50.     else
  51.     {
  52.         akhir->next=baru;
  53.         akhir=baru;
  54.     }
  55. }
  56.  
  57. //bubble short
  58. //void shortAsc()
  59. //{
  60. //    simpul *tmp;
  61. //    bantu=awal;
  62. //    for (int i=0;i<index;i++)
  63. //    {
  64. //        bantu=bantu2=awal;
  65. //        while(bantu->next!=NULL)
  66. //        {
  67. //            if (bantu->Data.namaBarang>bantu->next->Data.namaBarang)
  68. //            {
  69. //                tmp=bantu->next;
  70. //                bantu->next=bantu->next->next;
  71. //                tmp->next=bantu;
  72. //
  73. //                if(bantu==awal)
  74. //                {
  75. //                    awal=bantu2=tmp;
  76. //                }
  77. //                else
  78. //                {
  79. //                    bantu2->next=tmp;
  80. //                }
  81. //                bantu=tmp;
  82. //            }
  83. //            bantu2=bantu;
  84. //            bantu=bantu->next;
  85. //        }
  86. //    }
  87. //
  88. //}
  89. //
  90. //void shortDsc()
  91. //{
  92. //    simpul *tmp;
  93. //    bantu=awal;
  94. //    for (int i=0;i<index;i++)
  95. //    {
  96. //        bantu=bantu2=awal;
  97. //        while(bantu->next!=NULL)
  98. //        {
  99. //            if (bantu->Data.namaBarang < bantu->next->Data.namaBarang)
  100. //            {
  101. //                tmp=bantu->next;
  102. //                bantu->next=bantu->next->next;
  103. //                tmp->next=bantu;
  104. //
  105. //                if(bantu==awal)
  106. //                {
  107. //                    awal=bantu2=tmp;
  108. //                }
  109. //                else
  110. //                {
  111. //                    bantu2->next=tmp;
  112. //                }
  113. //                bantu=tmp;
  114. //            }
  115. //            bantu2=bantu;
  116. //            bantu=bantu->next;
  117. //        }
  118. //    }
  119. //
  120. //}
  121.  
  122.  
  123. //selection short
  124. void shortAsc()
  125. {
  126.     simpul *tmp;
  127.     baru=awal;
  128.     while(baru!=akhir)
  129.     {
  130.         bantu=baru;
  131.         bantu2=baru->next;
  132.         while(bantu2!=NULL)
  133.         {
  134.             if(bantu2->Data.namaBarang < bantu->Data.namaBarang)
  135.             {
  136.                 bantu=bantu2;
  137.             }
  138.             bantu2=bantu2->next;
  139.         }
  140.  
  141.         swap(bantu->Data.namaBarang,baru->Data.namaBarang);
  142.         swap(bantu->Data.harga,baru->Data.harga);
  143.         swap(bantu->Data.merk,baru->Data.merk);
  144.         swap(bantu->Data.deskripsiBarang,baru->Data.deskripsiBarang);
  145.         swap(bantu->Data.stock,baru->Data.stock);
  146.  
  147.         baru=baru->next;
  148.     }
  149. }
  150.  
  151. void shortDsc()
  152. {
  153.     simpul *tmp;
  154.     baru=awal;
  155.     while(baru!=akhir)
  156.     {
  157.         bantu=baru;
  158.         bantu2=baru->next;
  159.         while(bantu2!=NULL)
  160.         {
  161.             if(bantu2->Data.namaBarang > bantu->Data.namaBarang)
  162.             {
  163.                 bantu=bantu2;
  164.             }
  165.             bantu2=bantu2->next;
  166.         }
  167.  
  168.         swap(bantu->Data.namaBarang,baru->Data.namaBarang);
  169.         swap(bantu->Data.harga,baru->Data.harga);
  170.         swap(bantu->Data.merk,baru->Data.merk);
  171.         swap(bantu->Data.deskripsiBarang,baru->Data.deskripsiBarang);
  172.         swap(bantu->Data.stock,baru->Data.stock);
  173.  
  174.         baru=baru->next;
  175.     }
  176. }
  177.  
  178. bool cekAsc()
  179. {
  180.     if(index == -1 || index == 0){
  181.         return true;
  182.     }
  183.  
  184.     bantu = awal;
  185.     for(int i=0;i<index;i++){
  186.         if(bantu->Data.namaBarang > bantu->next->Data.namaBarang ){
  187.             return false;
  188.         }
  189.         bantu=bantu->next;
  190.     }
  191.     return true;
  192. }
  193.  
  194. bool cekDsc()
  195. {
  196.     if(index == -1 || index == 0){
  197.         return true;
  198.     }
  199.  
  200.     bantu = awal;
  201.     for(int i=0;i<index;i++){
  202.         if(bantu->Data.namaBarang< bantu->next->Data.namaBarang ){
  203.             return false;
  204.         }
  205.         bantu=bantu->next;
  206.     }
  207.     return true;
  208. }
  209.  
  210. simpul *cariTengah(simpul *awalNode,simpul *akhirNode){
  211.     if(awalNode == NULL){
  212.         return NULL;
  213.     }
  214.  
  215.     simpul *sekarang = awalNode;
  216.     simpul *depan = awalNode->next;
  217.  
  218.     while(depan!=akhirNode){
  219.         depan = depan->next;
  220.         if(depan!=akhirNode){
  221.             sekarang = sekarang->next;
  222.             depan = depan->next;
  223.         }
  224.     }
  225.     return sekarang;
  226. }
  227.  
  228. void cariData()
  229. {
  230.     if(cekAsc() || cekDsc()){
  231.         bantu = awal;
  232.         bantu2 = NULL;
  233.         string cariNama;
  234.         cout << "Masukkan npm yang mau di cari : ";
  235.         cin >> cariNama;
  236.  
  237.         do{
  238.             simpul *tengah = cariTengah(bantu,bantu2);
  239.  
  240.             if(tengah == NULL){
  241.                 cout << "Data kosong" << endl;
  242.                 system("pause");
  243.                 break;
  244.             }
  245.  
  246.             if(tengah->Data.namaBarang == cariNama){
  247.                 cout << "Data ditemukan pada index ke-" << tengah->index << endl;
  248.                 cout << "Nama barang \t: " << tengah->Data.namaBarang << endl << "Deskripsi barang \t: " << tengah->Data.deskripsiBarang << endl;
  249.                 cout << "Merk \t: " << tengah->Data.merk << endl << "Harga \t: " << tengah->Data.harga << endl << "Stock \t: " << tengah->Data.stock << endl;
  250.                 system("pause");
  251.                 break;
  252.             }
  253.  
  254.             if(cekAsc() == true && cekDsc() == false){
  255.                 if(tengah->Data.namaBarang < cariNama){
  256.                     bantu = tengah->next;
  257.                 }else{
  258.                     bantu2 = tengah;
  259.                 }
  260.             }else{
  261.                 if(tengah->Data.namaBarang > cariNama){
  262.                     bantu = tengah->next;
  263.                 }else{
  264.                     bantu2 = tengah;
  265.                 }
  266.             }
  267.  
  268.  
  269.         }while(bantu2==NULL || bantu2->next != bantu);
  270.     }else{
  271.         cout << "Data belum urut" << endl;
  272.     }
  273. }
  274.  
  275. void show()
  276. {
  277.     if (awal!=NULL)
  278.     {
  279.         cout << "No \tNama \tDeskripsi \tMerk \tHarga \tStock" << endl;
  280.         bantu=awal;
  281.         for (int i=0;i<=index;i++)
  282.         {
  283.             cout << i+1 << ". \t" << bantu->Data.namaBarang << "\t" << bantu->Data.deskripsiBarang << "\t" << bantu->Data.merk << "\t" << bantu->Data.harga << "\t" << bantu->Data.stock << endl;;
  284.             bantu=bantu->next;
  285.         }
  286.     }
  287. }
  288.  
  289. int main()
  290. {
  291.     int pil;
  292.     do
  293.     {
  294.         system("cls");
  295.         cout << "1. input\n";
  296.         cout << "2. short ascending\n";
  297.         cout << "3. short descending\n";
  298.         cout << "4. cari data\n";
  299.         cout << "5. show\n";
  300.         cout << "\nMasukkan pilihan = ";
  301.         cin >> pil;
  302.  
  303.         switch(pil)
  304.         {
  305.             case 1 :
  306.                 {
  307.                     inputData();
  308.                     system("pause");
  309.                     break;
  310.                 }
  311.             case 2:
  312.                 {
  313.                     shortAsc();
  314.                     system("pause");
  315.                     break;
  316.                 }
  317.             case 3:
  318.                 {
  319.                     shortDsc();
  320.                     system("pause");
  321.                     break;
  322.                 }
  323.             case 4:
  324.                 {
  325.                     cariData();
  326.                     break;
  327.                 }
  328.             case 5:
  329.                 {
  330.                     show();
  331.                     system("pause");
  332.                     break;
  333.                 }
  334.         }
  335.     }while(pil<=5);
  336.  
  337.     return 0;
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement