Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- struct DienThoai
- {
- int MaSo, SoLuong;
- char TenDT[20], HangSX[15];
- float GiaBan;
- };
- typedef struct DienThoai DIENTHOAI;
- void NhapDT(DIENTHOAI &dt)
- {
- do{
- printf("\nNhap vao ma so: ");
- scanf("%d", &dt.MaSo);
- if(dt.MaSo < 0)
- printf("\nMa so phai lon hon 0.");
- }while(dt.MaSo < 0);
- fflush(stdin);
- printf("\nNhap vao ten dien thoai: ");
- gets(dt.TenDT);
- do{
- printf("\nNhap vao gia ban: ");
- scanf("%f", &dt.GiaBan);
- if(dt.GiaBan < 0)
- printf("\nGia ban phai lon hon 0.");
- }while(dt.GiaBan < 0);
- do{
- printf("\nNhap vao so luong ton: ");
- scanf("%d", &dt.SoLuong);
- if(dt.SoLuong < 0)
- printf("\nSo luong phai lon hon 0.");
- }while(dt.SoLuong < 0);
- fflush(stdin);
- printf("\nNhap vao hang san xuat: ");
- gets(dt.HangSX);
- }
- void XuatDt(DIENTHOAI dt)
- {
- //printf("\nMa DT Ten DT Gia ban So Luong Hang SX");
- printf("\n%d %11s %8.2f %2d %11s", dt.MaSo, dt.TenDT, dt.GiaBan, dt.SoLuong, dt.HangSX);
- }
- struct Node
- {
- DIENTHOAI DaTa;
- struct Node *pNext;
- };
- typedef struct Node NODE;
- struct List
- {
- NODE *pHead;
- NODE *pTail;
- };
- typedef struct List LIST;
- void Init(LIST &l)
- {
- l.pHead = l.pTail = NULL;
- }
- NODE *CreateNode(DIENTHOAI data)
- {
- NODE *p = new NODE;
- if(p == NULL)
- {
- printf("\nKhong du bo nho!");
- getch();
- return NULL;
- }
- p->DaTa = data;
- p->pNext = NULL;
- return p;
- }
- void AddHead(LIST &l, NODE *p)
- {
- if(l.pHead == NULL)
- l.pHead = l.pTail = p;
- else
- {
- p->pNext = l.pHead;
- l.pHead = p;
- }
- }
- void AddTail(LIST &l, NODE *p)
- {
- if(l.pHead == NULL)
- l.pHead = l.pTail = p;
- else
- {
- l.pTail->pNext = p;
- l.pTail = p;
- }
- }
- void InPut(LIST &l, int n)
- {
- Init(l); // khởi tạo
- for(int i = 1; i <= n; i++)
- {
- printf("\nNhap vao NODE thu %d: ", i);
- DIENTHOAI dt;
- NhapDT(dt);
- NODE *p = CreateNode(dt);
- AddTail(l, p);
- }
- }
- void OutPut(LIST l)
- {
- printf("\nMa DT Ten DT Gia ban So Luong Hang SX");
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- XuatDt(q->DaTa);
- }
- }
- float TonGiaTri(LIST l)
- {
- float Tong = 0;
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- Tong = Tong + q->DaTa.GiaBan * q->DaTa.SoLuong * 0.9;
- }
- return Tong;
- }
- void Swap(DIENTHOAI &a, DIENTHOAI &b)
- {
- DIENTHOAI temp = a;
- a = b;
- b = temp;
- }
- void SeclectionSort(LIST &l)
- {
- for(NODE *q = l.pHead; q != l.pTail; q = q->pNext)
- {
- NODE *Max = q;
- {
- for(NODE *p = q->pNext; p != NULL; p = p->pNext)
- {
- if(Max->DaTa.SoLuong < p->DaTa.SoLuong)
- {
- Max = p;
- }
- }
- if(Max != q)
- Swap(Max->DaTa, q->DaTa);
- }
- }
- }
- void XuatNode(NODE *p)
- {
- XuatDt(p->DaTa);
- }
- NODE *TimDT(LIST l, char TenDT[])
- {
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- if(strcmp(q->DaTa.TenDT, TenDT) == 0)
- {
- return q;
- }
- }
- return NULL;
- }
- void InSertAfter(LIST &l, NODE *p, NODE *q) // thêm q vào sau p
- {
- if(p == NULL || q == NULL)
- return;
- q->pNext = p->pNext; // xác định cái đằng sau, đặt lại liên kết
- p->pNext = q; // xác định mốc trỏ tới
- if(p = l.pTail)
- l.pTail = q;
- }
- void ThemDTKhongSort(LIST &l, DIENTHOAI dt)
- {
- NODE *p = CreateNode(dt);
- if(p->DaTa.SoLuong >= l.pHead->DaTa.SoLuong)
- {
- AddHead(l, p);
- return;
- }
- // Xác định NODE nhỏ hơn dt trước đó
- // Thêm vào sau cái NODE đ4 xác định (tức là vẫn nhỏ hơn dt);
- for(NODE *i = l.pHead; i != NULL; i = i->pNext)
- {
- if(i->pNext->DaTa.SoLuong < dt.SoLuong) // có NODE i < SoLuong, i ->pNext < SoLuong
- {
- InSertAfter(l, i, p);
- return;
- }
- }
- }
- NODE *TImDTCoGiaMin(LIST l)
- {
- NODE *Min = l.pHead;
- for(NODE *p = l.pHead->pNext; p != NULL; p = p->pNext)
- {
- if(p->DaTa.GiaBan < Min->DaTa.GiaBan)
- Min = p;
- }
- return Min;
- }
- void DeleteHead(LIST &l)
- {
- NODE *p =l.pHead;
- l.pHead = l.pHead->pNext;
- delete p;
- }
- void DeleteAfter(LIST &l, NODE *q)
- {
- if(q == NULL)
- return;
- NODE *p = q->pNext; // xác định NODE sau q
- q->pNext = p->pNext; // đặt lại liên kết
- if(l.pTail == p)
- l.pTail = q;
- delete p;
- }
- void XoaDTCoGiaNhoHon200(LIST &l)
- {
- while(l.pHead != NULL && l.pHead->DaTa.GiaBan < 200)
- {
- DeleteHead(l);
- }
- if(l.pHead == NULL)
- return;
- else
- {
- NODE *q = l.pHead;
- while(q->pNext != NULL)
- {
- if(q->pNext->DaTa.SoLuong < 200)
- {
- DeleteAfter(l, q);
- }
- else
- q = q->pNext;
- }
- }
- }
- void GiaiPhong(LIST &l)
- {
- while(l.pHead != NULL)
- {
- NODE *p = l.pHead;
- l.pHead = l.pHead->pNext;
- delete p;
- }
- }
- int main()
- {
- LIST l;
- int n;
- printf("\nNhap vao so luong dien thoai: ");
- scanf("%d", &n);
- InPut(l, n);
- OutPut(l);
- float Tong = TonGiaTri(l);
- printf("\nTong gia tri: %.2f", Tong);
- printf("\nSau khi seclection sort: ");
- SeclectionSort(l);
- OutPut(l);
- printf("\nDien thoai can tim: ");
- NODE *timdt = TimDT(l, "Lumia 1520");
- if(timdt != NULL)
- XuatNode(timdt);
- else
- printf("\nKhong co dien thoai nay!");
- printf("\nThem dien thoai: ");
- DIENTHOAI dt;
- NhapDT(dt);
- ThemDTKhongSort(l, dt);
- OutPut(l);
- printf("\nDien thoai co gia ban thap nhat la: ");
- NODE *min = TImDTCoGiaMin(l);
- XuatNode(min);
- printf("\nSau khi xoa Dien thoai co gia ban nho hon 200: ");
- XoaDTCoGiaNhoHon200(l);
- OutPut(l);
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement