Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Mấy anh chị coi dùm em bài tập này voiứ?

  1. #1
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Mặc định Mấy anh chị coi dùm em bài tập này voiứ?

    câu hỏi?
    Sử dụng cấu trúc danh sách liên kết viết chương trình thực hiện các yêu cầu:
    a. Hãy khai báo cấu trúc dữ liệu của một danh sách các hộp sữa (HopSua). Biết rằng
    một hộp sữa gồm những thành phần như sau: Nhãn hiệu (chuỗi tối đa 20 ký tự),
    Trọng lượng (kiểu số thực), Hạn sử dụng (kiểu ngày bao gồm 3 thông tin: ngày,
    tháng và năm).
    b. Cài đặt tất cả các thao tác cơ bản cho danh sách liên kết các hộp sữa.
    c. Đếm số lượng hộp sữa sản xuất trước năm 2009 trong danh sách.
    d. Tìm hộp sữa mới nhất trong danh sách. (thời điểm xét 2011)
    e. Tính tổng trọng lượng các hộp sữa.
    f. Sắp xếp các hộp sữa tăng dần theo hạn sử dụng (chỉ tính theo năm)


    mấy anh xem bài giải của em rồi sửa lại dùm em với!!!
    em viết code mà không chạy không biết đúng không nữa,nhờ mấy anh chị xem và giúp sữa lại dùm em em cảm ơn!!!

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    #include <string.h>
    #include <math.h>
    using namespace std;

    //typedef int ElementType;

    typedef struct
    {
    char NhanHieu[20];
    float TrongLuong;
    }S;

    typedef struct
    {
    int ngay;
    int thang;
    int nam;
    }Ng;

    typedef struct
    {
    int SoLuong;
    S sua;
    Ng Ngay,Thang,Nam;
    }ElementType;



    typedef struct Node
    {
    ElementType Element;//noi dung cau phan tu
    Node *Next;//con tro chi den phan tu ke tiep
    }pNode;

    typedef Node *PtrToNode;
    typedef PtrToNode Position;//kieu vi tri
    typedef PtrToNode List;//danh sach
    void Makenull_List( List &L );
    void thongtinnhom(List L);
    void Read_List(List L);
    void Write_List(List L);
    int IsEmpty_List( List L );
    int IsLast( Position P);
    void Delete_List( char NhanHieu[20], List L );
    Position LocatePrevious( char NhanHieu[20], List L );
    void Insert_List( ElementType X, Position P, List L );
    void Delete_All_List( List L );
    Position Header( List L );
    Position First_List( List L );
    Position End_List( List L);
    Position Advance( Position P );
    ElementType Retrieve( Position P );
    int SL2009(List L);
    int SuaMoi(List L);
    float TongTrongLuong(List L);
    void hoandoi(int *ngay,int *thang,int *nam,int *a,int *b,int *c);
    void SelectionSort(List L);

    /* MAIN PROGRAM */
    int main()
    {
    {
    int chon,tieptuc;
    List L;
    Makenull_List(L);
    do
    {
    printf("\n CHAO THAY!!! ");
    printf("\n ************************************************** ****");
    printf("\n * Quan li sua *");
    printf("\n * 1.Thong tin nhom *");
    printf("\n * 2.Nhap Danh Sach Sua *");
    printf("\n * 3.Xuat Danh Sach Sua da nhap *");
    printf("\n * 4.Cac thao tac lien quan hop sua *");
    printf("\n * 5.Dem so luong sua nam 2009 *");
    printf("\n * 6.Tim tim hop sua moi nhat *");
    printf("\n * 7.Tinh tong trong luong cac hop sua *");
    printf("\n * 8.Sap xep tang dan theo HSD *");
    printf("\n * 9.Thoat *");
    printf("\n ************************************************** ****");
    printf("\n Moi ban chon: ");
    do{
    scanf("%d",&chon);
    }while(chon>9||chon<1);
    putc(chon,stdout);
    chon=chon-0;
    switch(chon)
    {
    case 1:
    thongtinnhom(L);
    break;
    case 2:
    Read_List(L);
    break;
    case 3:

    Write_List(L);
    break;
    case 4:
    void Makenull_List( List &L );
    int IsEmpty_List( List L );
    int IsLast( Position P);
    void Delete_List( char NhanHieu[20], List L );
    Position LocatePrevious( char NhanHieu[20], List L );
    void Insert_List( ElementType X, Position P, List L );
    void Delete_All_List( List L );
    Position Header( List L );
    Position First_List( List L );
    Position End_List( List L);
    Position Advance( Position P );
    ElementType Retrieve( Position P );
    break;
    case 5:
    SL2009(L);
    break;
    case 6:
    SuaMoi(L);
    break;
    case 7:
    TongTrongLuong(L);
    break;
    case 8:
    SelectionSort(L);
    break;
    case 9:
    printf("\nBan co chac thoat khong!: Nhan phim bat ki de thoat");
    getch();
    exit(1);
    break;
    }
    printf("\n\t\tBan co muon nhap tiep tuc khong Y/N");
    tieptuc=getch();
    }while(tieptuc=='Y'||tieptuc=='y');
    printf("\n Bye! nhan phim de ket thuc");
    getch();
    }

    getch();

    }
    void thongtinnhom(List L)
    {
    printf("\n**************************************** *****************");
    printf("\n* CHAO THAY,DA DEN VOI PHAN TRINH BAY CUA NHOM EM! *");
    printf("\n* EM XIN TU GIOI THIEU! *");
    printf("\n* NHOM EM CO 3 THANH VIEN LA *");
    printf("\n* 1. PHAM VAN PHUOC MSSV:CST107540 *");
    printf("\n* 2. Le Van Be MSSV:CST107329 *");
    printf("\n* 3. Bui Quang Chinh MSSV:CST107332 *");
    printf("\n* CAM ON THAY DA XEM THONG TIN NHOM EM! *");
    printf("\n* CHUC THAY LUON THANH CONG TRONG CUOC SONG NHE! *");
    printf("\n* I AM SEE YOU AGAIN *");
    printf("\n**************************************** *****************");

    }

    /* Nhap danh sach */
    /* Gia su gia tri cac phan tu la so nguyen - int */
    void Read_List(List L)
    {
    int i,n;
    ElementType x;
    Position P;
    do
    {

    printf("Nhap so luong: ");
    scanf("%d",&x.SoLuong);
    P = Header(L);
    i = 1;
    while(i<=x.SoLuong)
    {
    printf("Thong tin hop thu %d: \n",i);
    fflush(stdin);
    printf("\tNhap nhan hieu: ");
    gets(x.sua.NhanHieu);
    // if(1<=x.sua.ngay||x.sua.ngay<=31)
    printf("\tNhap ngay san xuat: ");scanf("%d",&x.Ngay.ngay);
    printf("\tNhap thang san xuat: ");scanf("%d",&x.Thang.thang);
    printf("\tNhap nam san xuat: ");scanf("%d",&x.Nam.nam);
    printf("\tTrong luong hop sua : ");scanf("%f",&x.sua.TrongLuong);
    Insert_List(x,P, L);
    P = P->Next;
    P->Next = NULL;
    i++;

    }
    break;
    }
    while(x.SoLuong!=0);
    }
    /* In danh sach */
    void Write_List(List L)
    {
    // Elements Ng;
    ElementType Ng;
    Position P;
    if(!IsEmpty_List(L))
    {
    P = First_List(L);
    while(P != NULL)
    {
    printf("\nNhan Hieu: %s\tNgay sx: %d\tThang sx: %d\tNam sx: %d\tTrong luong: %4.1f",P->Element.sua.NhanHieu,P->Element.Ngay.ngay,P->Element.Thang.thang,P->Element.Nam.nam,P->Element.sua.TrongLuong);
    P=P->Next;
    }
    }
    else
    printf("List is empty!");
    printf("\n");
    }


    /* Cai dat cac ham*/
    /*Tao 1 danh sach rong*/
    void Makenull_List(List &L)
    {
    L = new Node;
    if (L== NULL){
    printf("Khong du bo nho");
    exit(1);
    }
    L->Next = NULL;
    }

    /* Kiem tra danh sach rong? */
    int IsEmpty_List( List L )
    {
    return L->Next == NULL;
    }

    /* Kiem tra P co tro den phan tu cuoi cua ds khong? */

    int IsLast( List P )
    {
    return P->Next == NULL;
    }

    /* Tim vi tri phan tu x trong ds */

    Position Locate(char NhanHieu[10], List L )
    {
    Position P;

    P = L->Next;
    while( P != NULL && P->Element.sua.NhanHieu!=NhanHieu )
    P = P->Next;

    return P;
    }

    /* Xoa 1 phan tu */
    void Delete_List(char NhanHieu[10], List L )
    {
    Position P, TmpCell;
    P = LocatePrevious( NhanHieu, L );
    if( !IsLast(P) )
    {
    TmpCell = P->Next;
    P->Next = TmpCell->Next;
    free( TmpCell );
    }
    }

    /* Tim vi tri cua phan tu X */
    Position LocatePrevious(char NhanHieu[20] , List L )
    {
    Position P;

    P = L;
    while( P->Next != NULL && P->Next->Element.sua.NhanHieu!=NhanHieu)
    P = P->Next;
    return P;

    }
    /* Chen 1 phan tu vao danh sach */
    void Insert_List( ElementType X, List P, List L )
    {
    Position TmpCell;
    TmpCell = new Node;

    if (TmpCell == NULL)
    {
    printf("Khong du bo nho");
    exit(1);
    }
    TmpCell->Element = X;
    TmpCell->Next = P->Next;
    P->Next = TmpCell;
    }

    /* Xoa danh sach */

    void Delete_All_List( List L )
    {
    Position P, Tmp;

    P = L->Next;
    L->Next = NULL;
    while( P != NULL )
    {
    Tmp = P->Next;
    free( P );
    P = Tmp;
    }
    }
    /* Tim phan tu header */
    Position Header( List L )
    {
    return L;
    }

    /* Tim phan tu dau tien */
    Position First_List( List L )
    {
    return L->Next;
    }

    /* Tim phan tu ke tiep */
    Position Advance( Position P )
    {
    return P->Next;
    }

    /* Tim gia tri cua 1 phan tu */
    ElementType Retrieve( Position P )
    {
    return P->Element;
    }




    void Swap(Position P, Position Q)
    {
    float temp;
    temp=P->Element.sua.TrongLuong;
    P->Element.sua.TrongLuong= Q->Element.sua.TrongLuong;
    Q->Element.sua.TrongLuong = temp;
    }
    int SL2009(List L)
    {
    Position P;
    int dem;
    if(!IsEmpty_List(L))
    {
    P = First_List(L);
    while(P->Element.Nam.nam == 2009)
    {
    dem++;
    P=P->Next;
    }
    //tong++;
    return dem;
    }

    }
    int SuaMoi(List L)
    {
    int ngay,thang,nam,temp;
    for(int i=0;i<=ngay;i++)
    {
    for(int j=0;j<=ngay;j++)
    {
    temp=j;
    }
    if(temp<i)
    {return i;}
    else
    {return temp;}
    break;
    }
    for(int i=0;i<=thang;i++)
    {
    for(int j=0;j<=thang;j++)
    {
    temp=j;
    }
    if(temp<i)
    {return i;}
    else
    {return temp;}
    break;
    }
    for(int i=0;i<=nam;i++)
    {
    for(int j=0;j<=nam;j++)
    {
    temp=j;
    }
    if(temp<i)
    {return i;}
    else
    {return temp;}
    break;
    }

    }

    float TongTrongLuong(List L)
    {
    Position P,temp;
    float tong=0;
    int dem=0;
    if(!IsEmpty_List(L))
    {
    P = First_List(L);
    while(P != NULL)
    {
    tong=tong+P->Element.sua.TrongLuong;
    P=P->Next;
    }
    return tong;
    }
    }

    void hoandoi(int *ngay,int *thang,int *nam,int *a,int *b,int *c)
    {
    int temp,temp1,temp2;
    temp=*ngay;
    *ngay=*a;
    *a=temp;

    temp1=*thang;
    *thang=*b;
    *b=temp1;

    temp2=*nam;
    *nam=*c;
    *c=temp2;
    }
    void SelectionSort(List L){
    int *k,*k1,*k2,*ngay,*thang,*nam;
    for(int i=0;i<*ngay-1;i++)
    {
    *k=i;
    for(int j=i+1;j<*ngay;j++)
    if(j<*k)
    *k=j;
    // hoandoi(k,i);
    }
    // break;
    for(int i=0;i<*thang-1;i++)
    {
    *k1=i;
    for(int j=i+1;j<*thang;j++)
    if(j<*k1)
    *k1=j;
    // hoandoi(*k1,i);
    }
    for(int i=0;i<*nam-1;i++)
    {
    *k2=i;
    for(int j=i+1;j<*nam;j++)
    if(j<*k2)
    *k2=j;
    // hoandoi(&L->Elements[k2],&L->Elements[i]);
    }
    }

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Của bạn đây, tôi đã làm toàn bộ hết cho bạn rồi. Mất gần 2 tiếng, hix. Bạn hơi nhập nhằng về vụ ngày sản xuất và hạn sử dụng, tôi không biết nhập cái nào. Hạn sử dụng tính ra sao. Phần này bạn tự tính nhé. Àk nên xây dựng lại struct Date thành một class tốt hơn, thêm hàm nhập ngày tháng, và in ngày tháng, cộng thêm số ngày,... Như vậy sẽ gọn hơn. Có nhiều source trên diễn đàn rồi đó. Bạn tự tìm nhé.
    Source gồm 2 phần danh sách liên kết dôi và phần quản lý:

    Danh sách liên kết, header và source:
    C++ Code:
    1. #if !defined(__dbLinkedList_HEADER_FILE_82DDD139689B8D73C15C6165472A8E14__INCLUDED_)
    2. #define __dbLinkedList_HEADER_FILE_82DDD139689B8D73C15C6165472A8E14__INCLUDED_
    3. #include <stdio.h>
    4. #include <stdlib.h>
    5. #include <memory.h>
    6. #include <malloc.h>
    7.  
    8.     typedef struct _dbLinkedList
    9.     {
    10.         _dbLinkedList(void *Data = NULL,_dbLinkedList *Next = NULL, _dbLinkedList *Prev = NULL)
    11.             :data(Data), next(Next), prev(Prev)
    12.         {
    13.         }
    14.         struct _dbLinkedList *next;
    15.         struct _dbLinkedList *prev;
    16.         void *data;
    17.     }
    18.     dbLinkedList;
    19.     typedef int     (*dbLinkedListFunc2Const)   (const void *, const void *);
    20.     typedef void    (*dbLinkedListFunc2)        (void *, void *);
    21.     typedef void    (*dbLinkedListFunc1)        (void *);
    22.     dbLinkedList*   dbLinkedList_append         (dbLinkedList *list, void *data);
    23.     dbLinkedList*   dbLinkedList_prepend        (dbLinkedList *list, void *data);
    24.     dbLinkedList*   dbLinkedList_remove_link    (dbLinkedList *list, const dbLinkedList *link);
    25.     dbLinkedList*   dbLinkedList_remove         (dbLinkedList *list, void *data, dbLinkedListFunc1  freedata);
    26.     dbLinkedList*   dbLinkedList_insert_sorted  (dbLinkedList *list, void *data, dbLinkedListFunc2Const comp);
    27.     dbLinkedList*   dbLinkedList_copy           (dbLinkedList *list);
    28.     dbLinkedList*   dbLinkedList_concat         (dbLinkedList *list, dbLinkedList *add);
    29.     dbLinkedList*   dbLinkedList_find           (dbLinkedList *list, const void *data);
    30.     dbLinkedList*   dbLinkedList_find_custom    (dbLinkedList *list, const void *data, dbLinkedListFunc2Const comp);
    31.     dbLinkedList*   dbLinkedList_nth            (dbLinkedList *list, int n);
    32.     void            dbLinkedList_foreach        (dbLinkedList *list, dbLinkedListFunc1 fn);
    33.     void            dbLinkedList_foreach        (dbLinkedList *list, dbLinkedListFunc2 fn, void *user_data);
    34.     void            dbLinkedList_free           (dbLinkedList *list, dbLinkedListFunc1 freeFunc);
    35.     void            dbLinkedList_free           (dbLinkedList *list);
    36.     int             dbLinkedList_length         (const dbLinkedList *list);
    37.     bool            dbLinkedList_empty          (const dbLinkedList *list);
    38.     bool            dbLinkedList_singleton      (const dbLinkedList *list);
    39.  
    40.     #define         dbLinkedList_first          (list) list;
    41.     #define         dbLinkedList_next           (list) list->next
    42.     #define         dbLinkedList_prev           (list) list->prev
    43.     dbLinkedList*   dbLinkedList_last           (dbLinkedList *list);
    44. #endif
    C++ Code:
    1. #include "dbLinkedList.h"
    2. /* Thêm phần tử vào cuối danh sách. */
    3. dbLinkedList* dbLinkedList_append(dbLinkedList *list, void *data)
    4. {
    5.     dbLinkedList *n = NULL;
    6.     dbLinkedList *attach_to = NULL;
    7.  
    8.     dbLinkedList *new_list = new dbLinkedList(data);
    9.  
    10.     /* Tìm phần tử cuối dùng của danh sách. */
    11.     for (n = list; n; n = n->next)
    12.         attach_to = n;
    13.  
    14.     /* Tìm được vị trí cuối danh sách. (danh sách không rỗng) */
    15.     if (attach_to)
    16.     {  
    17.         /* Chèn vào cuối. */
    18.         new_list->prev = attach_to;
    19.         attach_to->next = new_list;
    20.         return list;
    21.     }
    22.     else
    23.     {
    24.         /* Danh sách rỗng, phần tử đầu tiên.*/
    25.         new_list->prev = NULL;
    26.         return new_list;
    27.     }
    28. }
    29.  
    30. /* Thêm phần tử vào đầu danh sách. */
    31. dbLinkedList* dbLinkedList_prepend(dbLinkedList *list, void *data)
    32. {
    33.     dbLinkedList *n = new dbLinkedList(data, list);
    34.  
    35.     if (list)
    36.         list->prev = n;
    37.  
    38.     return n;
    39. }
    40.  
    41. /* Nối hai danh sách. */
    42. dbLinkedList* dbLinkedList_concat(dbLinkedList *list, dbLinkedList *add)
    43. {
    44.     dbLinkedList *l = NULL;
    45.    
    46.     if (!list)
    47.         return add;
    48.    
    49.     if (!add)
    50.         return list;
    51.  
    52.     /* Di chuyển đến phần tử cuối danh sách.*/
    53.     for (l = list; l->next; l = l->next);
    54.  
    55.     l->next = add;
    56.     add->prev = l;
    57.  
    58.     return list;
    59. }
    60.  
    61. /* Loại bỏ một phần tử khỏi danh sách. */
    62. dbLinkedList* dbLinkedList_remove(dbLinkedList *list, void *data, dbLinkedListFunc1 freedata)
    63. {
    64.     dbLinkedList *n = NULL;
    65.     for (n = list; n != NULL; n = n->next)
    66.         if (n->data == data)
    67.         {
    68.             list = dbLinkedList_remove_link(list, n);
    69.             freedata(data);
    70.             delete n;
    71.             break;
    72.         }
    73.     return list;
    74. }
    75.  
    76. /* Tháo liên kết phần tử khỏi danh sách. Phần tử trở nên "tự do". */
    77. dbLinkedList* dbLinkedList_remove_link(dbLinkedList *list, const dbLinkedList *link)
    78. {
    79.     if (!link)
    80.         return list;
    81.     if (link->next)
    82.         link->next->prev = link->prev;
    83.  
    84.     if (link->prev)
    85.         link->prev->next = link->next;
    86.  
    87.     if (link == list)
    88.         list = link->next;
    89.     return list;
    90. }
    91.  
    92. /* Chiều dài danh sách. */
    93. int dbLinkedList_length(const dbLinkedList *list)
    94. {
    95.     int iLength(0);
    96.  
    97.     for (const dbLinkedList *n = list; n; n = n->next, ++iLength);
    98.  
    99.     return iLength;
    100. }
    101. /* Kiểm tra danh sách rỗng. */
    102. bool dbLinkedList_empty(const dbLinkedList *list)
    103. {
    104.     return (!list);
    105. }
    106.  
    107. /* Một phần tử duy nhất? */
    108. bool dbLinkedList_singleton(const dbLinkedList *list)
    109. {
    110.     return (list && list->next == NULL);
    111. }
    112.  
    113. /* Sao chép danh sách, không sao chép phần tử !*/
    114. dbLinkedList* dbLinkedList_copy(dbLinkedList *list)
    115. {
    116.     dbLinkedList *copy = NULL;
    117.     for (dbLinkedList *n = list; n; n = n->next)
    118.         copy = dbLinkedList_append(copy, n->data);
    119.     return copy;
    120. }
    121.  
    122. /* Giải phóng danh sách. Gọi hàm giải phóng tuỳ chọn. */
    123. void dbLinkedList_free(dbLinkedList *list, dbLinkedListFunc1 freeFunc)
    124. {
    125.     if (list)
    126.     {
    127.         dbLinkedList *n = list;
    128.         while(n != NULL)
    129.         {
    130.             dbLinkedList *next = n->next;
    131.             freeFunc(n->data);
    132.             delete n;
    133.             n = next;
    134.         }
    135.     }
    136. }
    137.  
    138. /* Giải phóng danh sách. */
    139. void dbLinkedList_free(dbLinkedList *list)
    140. {
    141.     if (list!=NULL)
    142.     {
    143.         dbLinkedList *n = list;
    144.         while(n != NULL)
    145.         {
    146.             dbLinkedList *next = n->next;
    147.             delete n->data;
    148.             delete n;
    149.             n = next;
    150.         }
    151.     }
    152. }
    153.  
    154. /* Tìm phần tử trong danh sách. */
    155. dbLinkedList* dbLinkedList_find(dbLinkedList *list, const void *data)
    156. {
    157.     dbLinkedList *l;
    158.     for (l = list; (l && (l->data != data)); l = l->next) ;
    159.     return l;
    160. }
    161.  
    162. /* Tìm phần tử trong danh sách. Tuỳ chọn kiểu tìm kiếm. */
    163. dbLinkedList* dbLinkedList_find_custom(dbLinkedList *list, const void *data, dbLinkedListFunc2Const comp)
    164. {
    165.     dbLinkedList *l;
    166.     for (l = list; l!=NULL; l = l->next)
    167.         if (comp(l->data, data) != 0)
    168.             return l;
    169.     return NULL;
    170. }
    171.  
    172. /* Duyệt danh sách. */
    173. void dbLinkedList_foreach(dbLinkedList *list, dbLinkedListFunc1 fn)
    174. {
    175.     for (; list; list = list->next)
    176.         fn(list->data);
    177. }
    178.  
    179. /* Duyệt danh sách, kèm theo dữ liệu. */
    180. void dbLinkedList_foreach(dbLinkedList *list, dbLinkedListFunc2 fn, void *user_data)
    181. {
    182.     for (; list; list = list->next)
    183.         fn(list->data, user_data);
    184. }
    185.  
    186. /* Trả về phần tử thứ n.*/
    187. dbLinkedList* dbLinkedList_nth(dbLinkedList *list, int n)
    188. {
    189.     for (; list && n; list = list->next, n--);
    190.     return list;
    191. }
    192.  
    193. /* Chèn có sắp xếp. */
    194. dbLinkedList* dbLinkedList_insert_sorted(dbLinkedList *list, void *data, dbLinkedListFunc2Const comp)
    195. {
    196.     dbLinkedList *l = NULL;
    197.     dbLinkedList *prev = NULL;
    198.    
    199.     if (!list)
    200.         return dbLinkedList_append(list, data);
    201.  
    202.     /* Tìm vị trí chèn. */
    203.     for (l = list; (l && (comp(l->data, data) <= 0)); l = l->next)
    204.         prev = l;
    205.  
    206.     dbLinkedList *n = new dbLinkedList(data);
    207.     if (l)
    208.     {
    209.         n->prev = l->prev;
    210.         l->prev = n;
    211.     }
    212.     else
    213.         n->prev = prev;
    214.  
    215.     n->next = l;
    216.     if (n->prev)
    217.     {
    218.         n->prev->next = n;
    219.         return list;
    220.     }
    221.     else
    222.         return n;
    223. }
    224.  
    225. /* Trả về phần tử cuối cùng. */
    226. dbLinkedList* dbLinkedList_last(dbLinkedList *list)
    227. {
    228.    
    229.     for(; list && list->next; list = list->next);
    230.     return list;
    231. }
    232.  
    233. /*
    234. dbLinkedList* dbLinkedList_next(dbLinkedList *list)
    235. {
    236.     return list->next;
    237. }
    238. dbLinkedList* dbLinkedList_prev(dbLinkedList *list)
    239. {
    240.     return list->prev;
    241. }
    242. */

    Phần mã nguồn chương trình quản lý: source
    C++ Code:
    1. // ConsoleApplication.cpp : Defines the entry point for the console application.
    2. //
    3. /*  Author: doicanhden@gmail.com
    4.     Date: 09/04/2012
    5. */
    6. #include <stdlib.h>
    7. #include <stdio.h>
    8. #include <conio.h>
    9. #include <string.h>
    10. #include <math.h>
    11. #include <iostream>
    12. #include "dbLinkedList.h"
    13. using namespace std;
    14.  
    15. typedef struct _Date
    16. {
    17.     int day;
    18.     int month;
    19.     int year;
    20.     inline bool isLeapYear(int iYear)
    21.     {
    22.         return ((iYear % 4 == 0 && iYear % 100 != 0) || iYear % 400 == 100);
    23.     }
    24.     inline int daysOfMonths(int iMonth, int iYear)
    25.     {
    26.         int iDay(0);
    27.         switch ((iMonth <= 0) ? iMonth + 12 : iMonth)
    28.         {
    29.         case 12:
    30.             iDay += 31;
    31.         case 11:
    32.             iDay += 30;
    33.         case 10:
    34.             iDay += 31;
    35.         case 9:
    36.             iDay += 30;
    37.         case 8:
    38.             iDay += 31;
    39.         case 7:
    40.             iDay += 31;
    41.         case 6:
    42.             iDay += 30;
    43.         case 5:
    44.             iDay += 31;
    45.         case 4:
    46.             iDay += 30;
    47.         case 3:
    48.             iDay += 31;
    49.         case 2 :
    50.             iDay += isLeapYear(iYear) ? 29 : 28;
    51.         case 1:
    52.             iDay += 31;
    53.         }
    54.         return iDay;
    55.     }
    56.     inline int operator-(const _Date& date)
    57.     {
    58.         int iDay(0);
    59.        
    60.         for (int i(date.year + 1); i < year; i++)
    61.             if (isLeapYear(i))
    62.                 iDay++;
    63.  
    64.         iDay += (year - date.year) * 365;
    65.         iDay += (isLeapYear(date.year) ? 366 : 365) - daysOfMonths(date.month - 1, date.year) - date.day;
    66.         iDay += daysOfMonths(month - 1, year) + day;
    67.  
    68.         return iDay;
    69.     }
    70. }Date;
    71.  
    72. typedef struct _MilkBox
    73. {
    74.     char            label[20];
    75.     unsigned long   weight;
    76.     Date            date;
    77.  
    78. }MilkBox, *PMilkBox;
    79. typedef struct _YearCount
    80. {
    81.     int iCount;
    82.     int iYear;
    83. }YearCount,*PYearCount;
    84. /* So sánh ngày tháng. */
    85. int _byDate(const void *data1, const void *data2)
    86. {
    87.     PMilkBox milkBox1 = (PMilkBox)data1;
    88.     PMilkBox milkBox2 = (PMilkBox)data2;
    89.     return milkBox1->date - milkBox2->date;
    90. }
    91.  
    92. /* Tính khối lượng sữa. */
    93. void countMilkWeight(void *data, void *data2)
    94. {
    95.     PMilkBox milkBox = (PMilkBox)data;
    96.     unsigned long &iCount = *(unsigned long*)data2;
    97.     iCount += milkBox->weight;
    98. }
    99.  
    100. /* Đếm số lượng sữa theo năm. */
    101. void countMilkSerialYear(void *data1, void *data2)
    102. {
    103.     PMilkBox milkBox = (PMilkBox)data1;
    104.     PYearCount counter = (PYearCount)data2;
    105.  
    106.     if(milkBox->date.year == counter->iYear)
    107.         counter->iCount++;
    108. }
    109.  
    110. /* Xuất thông tin hộp sữa. */
    111. void milkBoxDetail(void *data)
    112. {
    113.     PMilkBox milkBox = (PMilkBox)data;
    114.     cout << "******************************************************" << endl;
    115.     cout << "** Thong tin hop sua *********************************" << endl;
    116.     cout << "** Nhan hieu: " << milkBox->label << endl;
    117.     cout << "** Ngay san xuat: " << milkBox->date.day << "/" << milkBox->date.month << "/" << milkBox->date.year << endl;
    118.     cout << "******************************************************" << endl;
    119. }
    120.  
    121. /* Thông tin về nhóm. */
    122. inline void groupInfo()
    123. {
    124.     cout << "******************************************************" << endl;
    125.     cout << "** CHAO THAY,DA DEN VOI PHAN TRINH BAY CUA NHOM EM! **" << endl;
    126.     cout << "** EM XIN TU GIOI THIEU!                            **" << endl;
    127.     cout << "** NHOM EM CO 3 THANH VIEN LA:                      **" << endl;
    128.     cout << "** 1. PHAM VAN PHUOC     *****   MSSV:CST107540.    **" << endl;
    129.     cout << "** 2. LE VAN BE          *****   MSSV:CST107329.    **" << endl;
    130.     cout << "** 3. BUI QUANG CHINH    *****   MSSV:CST107332.    **" << endl;
    131.     cout << "** CAM ON THAY DA XEM THONG TIN NHOM EM!            **" << endl;
    132.     cout << "** CHUC THAY LUON THANH CONG TRONG CUOC SONG NHE!   **" << endl;
    133.     cout << "** I AM SEE YOU AGAIN.                              **" << endl;
    134.     cout << "******************************************************" << endl;
    135. }
    136. /* Menu */
    137. inline void showMenu()
    138. {
    139.     cout << "******************************************************" << endl;
    140.     cout << "** Xin chao!                                        **" << endl;
    141.     cout << "** Day la chuong trinh quan ly sua:                 **" << endl;
    142.     cout << "** 1. Thong tin nhom.                               **" << endl;
    143.     cout << "** 2. Nhap danh sach sua.                           **" << endl;
    144.     cout << "** 3. Xuat danh sach sua da nhap.                   **" << endl;
    145.     cout << "** 4. Dem so sua theo nam.                          **" << endl;
    146.     cout << "** 5. Tim hop sua moi nhat.                         **" << endl;
    147.     cout << "** 6. Tinh tong trong luong sua trong cac hop.      **" << endl;
    148.     cout << "** 7. Sap xep tang dang theo ngay san xuat.         **" << endl;
    149.     cout << "** 8. Thoat.                                        **" << endl;
    150.     cout << "******************************************************" << endl;
    151.     cout << "** Moi ban chon:                                    **" << endl;
    152.     cout << "******************************************************" << endl;
    153. }
    154. /* Nhập danh sách các hộp sữa. */
    155. void input(dbLinkedList *&milkList)
    156. {
    157.  
    158.     int iNumberOf(0);
    159.     int iCount(0);
    160.     cout << "******************************************************" << endl;
    161.     cout << "** Nhap so luong hop sua: ";
    162.     cin >> iNumberOf;
    163.     fflush(stdin);
    164.  
    165.     while(iNumberOf--)
    166.     {
    167.         cout << "******************************************************" << endl;
    168.         /* Đếm số hộp sữa. */
    169.         ++iCount;
    170.         /* Tạo hộp sữa mới. */
    171.         PMilkBox milkBox = new MilkBox;
    172.         cout << "** Hop sua thu: " << iCount << endl;
    173.  
    174.         cout << "** Nhap nhan hieu: ";
    175.         cin.getline(milkBox->label, sizeof(milkBox->label));
    176.         fflush(stdin);
    177.  
    178.         cout << "** Nhap trong luong sua: ";
    179.         cin >> milkBox->weight;
    180.         fflush(stdin);
    181.  
    182.         cout << "** Nhap ngay thang nam san xuat (dd mm yyyy): ";
    183.         cin >> milkBox->date.day >> milkBox->date.month >> milkBox->date.year;
    184.         fflush(stdin);
    185.  
    186.         /* Thêm hộp sữa vào danh sách. (Có sắp xếp.) */
    187.         milkList = dbLinkedList_insert_sorted(milkList, milkBox, _byDate);
    188.     }
    189.     cout << "******************************************************" << endl;
    190. }
    191.  
    192. /* Xuất danh sách các hộp sữa. */
    193. void ouput(dbLinkedList *&milkList)
    194. {
    195.     if(dbLinkedList_empty(milkList))
    196.         cout << "** Khong co hop sua nao trong danh sach." << endl;
    197.  
    198.     /* Duyệt danh sách các hộp sữa. */
    199.     dbLinkedList_foreach(milkList, milkBoxDetail);
    200. }
    201.  
    202. /* Đếm các hộp sửa năm 2009. */
    203. int serialYear(dbLinkedList *&milkList)
    204. {
    205.     YearCount counter = {0};
    206.    
    207.     cout << "******************************************************" << endl;
    208.     cout << "** Nhap so nam san xuat hop sua: ";
    209.     cin >> counter.iYear;
    210.     fflush(stdin);
    211.  
    212.     /* Duyệt danh sách các hộp sữa. */
    213.     dbLinkedList_foreach(milkList, countMilkSerialYear, &counter);
    214.     cout << "** So hop sua san xuat trong nam: " << counter.iYear << " la " << counter.iCount << endl;
    215.     cout << "******************************************************" << endl;
    216.     return counter.iCount;
    217. }
    218.  
    219. /* Tìm hộp sữa mới nhất. */
    220. PMilkBox newestMilkBox(dbLinkedList *&milkList)
    221. {
    222.     PMilkBox newest = (PMilkBox)dbLinkedList_last(milkList)->data;
    223.     cout << "******************************************************" << endl;
    224.     cout << "** Hop sua moi nhat: *********************************" << endl;
    225.     /* Xuất thông tin hộp sữa mới nhất. */
    226.     milkBoxDetail(newest);
    227.     cout << "******************************************************" << endl;
    228.     return newest;
    229. }
    230.  
    231. unsigned long totalMilkWeight(dbLinkedList *&milkList)
    232. {
    233.     unsigned long ulTotalWeight(0);
    234.     cout << "******************************************************" << endl;
    235.     /* Duyệt danh sách các hộp sữa. */
    236.     dbLinkedList_foreach(milkList, countMilkWeight, &ulTotalWeight);
    237.     cout << "** Tong trong luong sua la: " << ulTotalWeight << endl;
    238.     cout << "******************************************************" << endl;
    239.     return ulTotalWeight;
    240. }
    241. int main()
    242. {
    243.     dbLinkedList *milkList = NULL;
    244.  
    245.     char C;
    246.     do
    247.     {
    248.         showMenu();
    249.  
    250.         do
    251.         {
    252.             cin.get(C);
    253.         }while (C <= '0' && '8' <= C);
    254.         fflush(stdin);
    255.         switch(C)
    256.         {
    257.         case '1':
    258.             groupInfo();
    259.             break;
    260.         case '2':
    261.             input(milkList);
    262.             break;
    263.         case '4':
    264.            
    265.             serialYear(milkList);
    266.             break;
    267.         case '5':
    268.             newestMilkBox(milkList);
    269.             break;
    270.         case '6':
    271.             totalMilkWeight(milkList);
    272.             break;
    273.         case '7':
    274.             cout << "** Danh sach cac hop sua sau khi sap xep: " << endl;
    275.         case '3':
    276.             ouput(milkList);
    277.             break;
    278.         case '8':
    279.             cout << "Ban co muon tiep tuc khong? (Y/N):";
    280.             cin.get(C);
    281.             if(C != 'Y' && C != 'y')
    282.                 goto labs_end;
    283.             break;
    284.         }
    285.     } while(true);
    286. labs_end:
    287.     cout << "Bye! nhan phim de ket thuc" << endl;
    288.     /* Giải phóng dữ liệu. */
    289.     dbLinkedList_free(milkList);
    290.     getch();
    291.     return 0;
    292. }
    Đã được chỉnh sửa lần cuối bởi doicanhden : 09-04-2012 lúc 11:10 AM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

Các đề tài tương tự

  1. Lập trình C++ coi dùm minh bài code sai ở chỗ nào và sữa dùm mình với
    Gửi bởi hchuy94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 02-09-2013, 10:16 AM
  2. Lập trình C tìm lỗi dùm em với
    Gửi bởi dammelaptrinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 20-12-2011, 12:23 AM
  3. Mình mới vừa học lập trình ,xin fix lỗi dùm mình và cho mình hỏi 1 vải điều .
    Gửi bởi ANHCHANG60GIAY trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 30-04-2010, 11:40 AM
  4. Ai sữa dùm với
    Gửi bởi sangu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 18-11-2008, 09:07 PM
  5. xem dùm bài đệ quy t=x^n??
    Gửi bởi #include# trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 10-04-2008, 11:41 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn