Advertisement
UniC

Linked_List_Mobile_Phone

Oct 7th, 2015
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.40 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. struct DienThoai
  6. {
  7.     int MaSo, SoLuong;
  8.     char TenDT[20], HangSX[15];
  9.     float GiaBan;
  10. };
  11. typedef struct DienThoai DIENTHOAI;
  12.  
  13. void NhapDT(DIENTHOAI &dt)
  14. {
  15.     do{
  16.         printf("\nNhap vao ma so: ");
  17.         scanf("%d", &dt.MaSo);
  18.  
  19.         if(dt.MaSo < 0)
  20.             printf("\nMa so phai lon hon 0.");
  21.     }while(dt.MaSo < 0);
  22.  
  23.     fflush(stdin);
  24.     printf("\nNhap vao ten dien thoai: ");
  25.     gets(dt.TenDT);
  26.  
  27.     do{
  28.         printf("\nNhap vao gia ban: ");
  29.         scanf("%f", &dt.GiaBan);
  30.  
  31.         if(dt.GiaBan < 0)
  32.             printf("\nGia ban phai lon hon 0.");
  33.     }while(dt.GiaBan < 0);
  34.  
  35.     do{
  36.         printf("\nNhap vao so luong ton: ");
  37.         scanf("%d", &dt.SoLuong);
  38.  
  39.         if(dt.SoLuong < 0)
  40.             printf("\nSo luong phai lon hon 0.");
  41.     }while(dt.SoLuong < 0);
  42.  
  43.     fflush(stdin);
  44.     printf("\nNhap vao hang san xuat: ");
  45.     gets(dt.HangSX);
  46. }
  47.  
  48. void XuatDt(DIENTHOAI dt)
  49. {
  50.     //printf("\nMa DT     Ten DT     Gia ban     So Luong     Hang SX");
  51.     printf("\n%d       %11s %8.2f     %2d     %11s", dt.MaSo, dt.TenDT, dt.GiaBan, dt.SoLuong, dt.HangSX);
  52. }
  53.  
  54. struct Node
  55. {
  56.     DIENTHOAI DaTa;
  57.     struct Node *pNext;
  58. };
  59. typedef struct Node NODE;
  60.  
  61. struct List
  62. {
  63.     NODE *pHead;
  64.     NODE *pTail;
  65. };
  66. typedef struct List LIST;
  67.  
  68. void Init(LIST &l)
  69. {
  70.     l.pHead = l.pTail = NULL;
  71. }
  72.  
  73. NODE *CreateNode(DIENTHOAI data)
  74. {
  75.     NODE *p = new NODE;
  76.     if(p == NULL)
  77.     {
  78.         printf("\nKhong du bo nho!");
  79.         getch();
  80.         return NULL;
  81.     }
  82.  
  83.     p->DaTa = data;
  84.     p->pNext = NULL;
  85.  
  86.     return p;
  87. }
  88.  
  89. void AddHead(LIST &l, NODE *p)
  90. {
  91.     if(l.pHead == NULL)
  92.         l.pHead = l.pTail = p;
  93.     else
  94.     {
  95.         p->pNext = l.pHead;
  96.         l.pHead = p;
  97.     }
  98. }
  99.  
  100. void AddTail(LIST &l, NODE *p)
  101. {
  102.     if(l.pHead == NULL)
  103.         l.pHead = l.pTail = p;
  104.     else
  105.     {
  106.         l.pTail->pNext = p;
  107.         l.pTail = p;
  108.     }
  109. }
  110.  
  111. void InPut(LIST &l, int n)
  112. {
  113.     Init(l); // khởi tạo
  114.     for(int i = 1; i <= n; i++)
  115.     {
  116.         printf("\nNhap vao NODE thu %d: ", i);
  117.         DIENTHOAI dt;
  118.         NhapDT(dt);
  119.         NODE *p = CreateNode(dt);
  120.         AddTail(l, p);
  121.     }
  122. }
  123.  
  124. void OutPut(LIST l)
  125. {
  126.     printf("\nMa DT     Ten DT     Gia ban     So Luong     Hang SX");
  127.     for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  128.     {
  129.         XuatDt(q->DaTa);
  130.     }
  131. }
  132.  
  133. float TonGiaTri(LIST l)
  134. {
  135.     float Tong = 0;
  136.     for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  137.     {
  138.         Tong = Tong + q->DaTa.GiaBan * q->DaTa.SoLuong * 0.9;
  139.     }
  140.     return Tong;
  141. }
  142.  
  143. void Swap(DIENTHOAI &a, DIENTHOAI &b)
  144. {
  145.     DIENTHOAI temp = a;
  146.     a = b;
  147.     b = temp;
  148. }
  149.  
  150. void SeclectionSort(LIST &l)
  151. {  
  152.     for(NODE *q = l.pHead; q != l.pTail; q = q->pNext)
  153.     {
  154.         NODE *Max = q;
  155.         {
  156.             for(NODE *p = q->pNext; p != NULL; p = p->pNext)
  157.             {
  158.                 if(Max->DaTa.SoLuong < p->DaTa.SoLuong)
  159.                 {
  160.                     Max = p;
  161.                 }
  162.             }
  163.             if(Max != q)
  164.                 Swap(Max->DaTa, q->DaTa);
  165.         }
  166.     }
  167. }
  168.  
  169. void XuatNode(NODE *p)
  170. {
  171.     XuatDt(p->DaTa);
  172. }
  173.  
  174. NODE *TimDT(LIST l, char TenDT[])
  175. {
  176.     for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  177.     {
  178.         if(strcmp(q->DaTa.TenDT, TenDT) == 0)
  179.         {
  180.             return q;
  181.         }
  182.     }
  183.     return NULL;
  184. }
  185.  
  186. void InSertAfter(LIST &l, NODE *p, NODE *q) // thêm q vào sau p
  187. {
  188.     if(p == NULL || q == NULL)
  189.         return;
  190.     q->pNext = p->pNext; // xác định cái đằng sau, đặt lại liên kết
  191.     p->pNext = q; // xác định mốc trỏ tới
  192.  
  193.     if(p = l.pTail)
  194.         l.pTail = q;
  195. }
  196.  
  197. void ThemDTKhongSort(LIST &l, DIENTHOAI dt)
  198. {
  199.     NODE *p = CreateNode(dt);
  200.     if(p->DaTa.SoLuong >= l.pHead->DaTa.SoLuong)
  201.     {
  202.         AddHead(l, p);
  203.         return;
  204.     }  
  205.  
  206.     //  Xác định NODE nhỏ hơn dt trước đó
  207.     // Thêm vào sau cái NODE đ4 xác định (tức là vẫn nhỏ hơn dt);
  208.     for(NODE *i = l.pHead; i != NULL; i = i->pNext)
  209.     {
  210.         if(i->pNext->DaTa.SoLuong < dt.SoLuong) // có NODE i < SoLuong, i ->pNext < SoLuong
  211.         {
  212.             InSertAfter(l, i, p);
  213.             return;
  214.         }
  215.     }
  216. }
  217.  
  218. NODE *TImDTCoGiaMin(LIST l)
  219. {
  220.     NODE *Min = l.pHead;
  221.     for(NODE *p = l.pHead->pNext; p != NULL; p = p->pNext)
  222.     {
  223.         if(p->DaTa.GiaBan < Min->DaTa.GiaBan)
  224.             Min = p;
  225.     }
  226.     return Min;
  227. }
  228.  
  229. void DeleteHead(LIST &l)
  230. {
  231.     NODE *p =l.pHead;
  232.     l.pHead = l.pHead->pNext;
  233.     delete p;
  234. }
  235.  
  236. void DeleteAfter(LIST &l, NODE *q)
  237. {
  238.     if(q == NULL)
  239.         return;
  240.     NODE *p = q->pNext; // xác định NODE sau q
  241.     q->pNext = p->pNext; // đặt lại liên kết
  242.  
  243.     if(l.pTail == p)
  244.         l.pTail = q;
  245.  
  246.     delete p;
  247.  
  248. }
  249.  
  250. void XoaDTCoGiaNhoHon200(LIST &l)
  251. {
  252.     while(l.pHead != NULL && l.pHead->DaTa.GiaBan < 200)
  253.     {
  254.         DeleteHead(l);
  255.     }
  256.     if(l.pHead == NULL)
  257.         return;
  258.     else
  259.     {
  260.         NODE *q = l.pHead;
  261.         while(q->pNext != NULL)
  262.         {
  263.             if(q->pNext->DaTa.SoLuong < 200)
  264.             {
  265.                 DeleteAfter(l, q);
  266.             }
  267.             else
  268.                 q = q->pNext;
  269.         }
  270.     }
  271. }
  272.  
  273. void GiaiPhong(LIST &l)
  274. {  
  275.     while(l.pHead != NULL)
  276.     {
  277.         NODE *p = l.pHead;
  278.         l.pHead = l.pHead->pNext;
  279.         delete p;
  280.     }
  281. }
  282.  
  283. int main()
  284. {
  285.     LIST l;
  286.     int n;
  287.     printf("\nNhap vao so luong dien thoai: ");
  288.     scanf("%d", &n);
  289.     InPut(l, n);
  290.     OutPut(l);
  291.  
  292.     float Tong = TonGiaTri(l);
  293.     printf("\nTong gia tri: %.2f", Tong);
  294.  
  295.     printf("\nSau khi seclection sort: ");
  296.     SeclectionSort(l);
  297.     OutPut(l);
  298.  
  299.     printf("\nDien thoai can tim: ");
  300.     NODE *timdt = TimDT(l, "Lumia 1520");
  301.     if(timdt != NULL)
  302.         XuatNode(timdt);
  303.     else
  304.         printf("\nKhong co dien thoai nay!");
  305.  
  306.     printf("\nThem dien thoai: ");
  307.     DIENTHOAI dt;
  308.     NhapDT(dt);
  309.     ThemDTKhongSort(l, dt);
  310.     OutPut(l);
  311.  
  312.     printf("\nDien thoai co gia ban thap nhat la: ");
  313.     NODE *min = TImDTCoGiaMin(l);
  314.     XuatNode(min);
  315.  
  316.     printf("\nSau khi xoa Dien thoai co gia ban nho hon 200: ");
  317.     XoaDTCoGiaNhoHon200(l);
  318.     OutPut(l);
  319.  
  320.     getch();
  321.     return 0;
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement