Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Lưu file, đọc file với chương trình sử dụng danh sách liên kết như thế nào?

  1. #1
    Ngày gia nhập
    10 2010
    Bài viết
    6

    Exclamation Lưu file, đọc file với chương trình sử dụng danh sách liên kết như thế nào?

    Mọi người giúp đỡ làm sao để thực hiện lưu file với chương trình sử dụng danh sách liên kết kiểu như thế này? Sử dụng lưu file kiểu nhị phân thì không đọc để tìm kiếm và sửa các nút đc =.=
    Code:
    #include<iostream>
    #include<string>
    using namespace std;
    
    class NhanSu
    {
    public:
        NhanSu( ){}
        NhanSu(string ten1,int tuoi1, string maso1, double luong1);
        NhanSu* getLink( )
        {
            return link;
        }
        void setLink(NhanSu *newLink)
        {
            link = newLink;
        }
        void setTen(string newTen)
        {
            ten = newTen;
        }
        string getTen()
        {
            return ten;
        }
        void setTuoi(int newTuoi)
        {
            tuoi = newTuoi;
        }
        int getTuoi()
        {
            return tuoi;
        }
        void setMaso(string newMaso)
        {
            maso = newMaso;
        }
        string getMaso()
        {
            return maso;
        }
        double getLuong()
        {
            return luong;
        }
        void setLuong(double newLuong)
        {
            luong = newLuong;
        }
        void hien()
        {
            cout << "| Ten nhan vien:"<< ten <<endl;
            cout << "| Ma so:"<< maso <<endl;
            cout << "| Tuoi:"<< tuoi <<endl;
            cout << "| Luong:"<< luong <<endl;
        }
    private:
        string ten;
        int tuoi;
        string maso;
        double luong;
        NhanSu *link;
    };
    
    NhanSu::NhanSu(string ten1,int tuoi1, string maso1, double luong1)
    {
        ten = ten1;
        tuoi = tuoi1;
        maso = maso1;
        luong = luong1;
    }
    class LinkList
    {
    public:
        LinkList()
        {
            nv1 = NULL;
        }
        void nhapNhanvien(NhanSu* e);
        void xoaNhanvien(string maso);
        void themNhanvien(NhanSu* newNV);
        NhanSu* timkiem(string maso);
        NhanSu* timkiem1(string maso);
        void hienNhanvien();
    private:
        NhanSu *nv1;
    };
    
    void LinkList::nhapNhanvien(NhanSu* e)
    {
        e->setLink(nv1);
        nv1=e;
    }
    
    
    void LinkList::xoaNhanvien(string maso)
    {
        NhanSu* xoa = timkiem(maso);
        if(xoa == NULL)
        {
            cout << "Khong tim thay nhan vien can xoa" << endl;
            return;
        }
        else
        {
            NhanSu* a = timkiem1(maso);
            a->setLink(xoa->getLink());
            delete xoa;
        }
    }
    NhanSu* LinkList::timkiem(string maso)
    {
        NhanSu *here = nv1;
        while(here != NULL && here->getMaso() != maso)
            here = here->getLink();
        return here;
    }
    
    NhanSu* LinkList::timkiem1(string maso)
    {
        NhanSu *here = nv1;
        while(here != NULL)
        {
            NhanSu *next = here->getLink();
            if(next->getMaso()==maso)break;
            else here = here->getLink();
        }
        return here;
    }
    
    void LinkList::hienNhanvien()
    {
        NhanSu *here = nv1;
        while(here != NULL)
        {
            here->hien();
            here = here->getLink();
        }
    }
    
    void main()
    {
        LinkList nv;
        NhanSu *e;
        string ten, maso, masocu, masomoi;
        int tuoi;
        double luong;
    	
        cout<<"|      CHUONG TRINH QUAN LY NHAN VIEN CONG TY    ="<<endl;
        cout<<"|         1.THEM NHAN VIEN                       ="<<endl;
        cout<<"|         2.XOA NHAN VIEN                        ="<<endl;
        cout<<"|         3.SUA THONG TIN NHAN VIEN              ="<<endl;
        cout<<"|         4.IN RA THONG TIN TOAN BO NHAN VIEN    ="<<endl;
        cout<<"|         5.TIM KIEM NHAN VIEN                   ="<<endl;
        cout<<"|         6.THOAT                        ="<<endl;
        int choose;
        do // Vong lap do- while + cau lenh switch- case
        {
            cout << " *** Moi ban chon chuc nang *** :";
            cin >> choose;
            switch(choose) 
            {
                case 1:
                    cin.ignore();
    				cout << "| Nhap Ten nhan vien:";getline(cin, ten);
                    cout << "| Nhap Ma so:"; cin >> maso;
                    cout << "| Nhap Tuoi:"; cin >> tuoi;
                    cout << "| Nhap Luong:"; cin >> luong;
                    nv.nhapNhanvien(new NhanSu(ten,tuoi, maso, luong));
                    break;
                case 2:
                    cin.ignore();
                    cout << "| Nhap ma so Nhan vien can xoa:"; getline(cin, maso);
                    nv.xoaNhanvien(maso);
                    break;
                case 3:
                    cin.ignore();
                    cout << "| Nhap ma Nhan vien can sua:";getline(cin,masocu);
                    e =nv.timkiem(masocu);
                    if(e == NULL)
                    {
                        cout << "Khong co nhan vien co ma so " << masocu;
                        break;
                    }
                    else
                    {
                        cout << "Thong tin cu cua nhan vien:"<<endl;
                        e->hien();
                        cout << "| Nhap ten moi:"; getline(cin, ten);
                        cout << "| Nhap ma so moi:"; getline(cin, masomoi);
                        cout << "| Nhap tuoi moi:"; cin >> tuoi;
                        cout << "| Nhap luong moi:"; cin >> luong;
    
                        e->setTen(ten);
                        e->setMaso(masomoi);
                        e->setTuoi(tuoi);
                        e->setLuong(luong);
                    }
                    break;
                case 4:
                    cout << "| Thong tin cac nhan vien marketing:" << endl;
                    nv.hienNhanvien();
                    break;
                case 5:
                    cin.ignore();
                    cout << "| Nhap ma nhan vien can tim:"; getline(cin, maso);
                    e =nv.timkiem(maso);
                    if(e == NULL)
    					cout << "Khong co Nhan vien nao co ma so " << maso<<endl;
                    else
                    {
                        cout << "| Thong tin tim thay ve nhan vien:";
                        e->hien();
                    }
                    break;
    			case 6:
                    exit(0);
                default:
                    cout << "| Nhap sai chuc nang, hay nhap lai!";
    
            }
    
        }while(true);
    }
    Đã được chỉnh sửa lần cuối bởi lake202 : 28-11-2010 lúc 01:17 PM.

  2. #2
    Ngày gia nhập
    05 2010
    Nơi ở
    Cách Mạng Tháng 8
    Bài viết
    205


    Tôi demo với List các mảng số nguyên, thấy không sao

    C++ Code:
    1. class Array{
    2. public:
    3.     Array () : n(0),  p(NULL) {}
    4.     Array (int*,int) ;
    5.     Array (Array & a) ;
    6.     Array& operator = (const Array & a) ;
    7.     ~Array () ;
    8.  
    9.     bool operator == (Array & a) ;
    10.     bool operator != (Array & a) ;
    11.  
    12.     bool WriteToFile (FILE * f) ;
    13.     bool ReadFromFile (FILE *f) ;
    14.  
    15.     friend istream& operator >> (istream & is, Array & a) ;
    16.     friend ostream& operator >> (ostream & os, Array & a) ;
    17. private :
    18.     int *p ;
    19.     int n ;
    20. };
    21. //////////////////////////////////////////////////////////////////////////////////////
    22.  
    23. bool Array::WriteToFile (FILE * f) {
    24.     if (!f)
    25.         return false ;
    26.     fwrite (&n, sizeof (int), 1, f) ;
    27.     if (!p)
    28.         return false ;
    29.     fwrite (p, sizeof (int), n, f) ;
    30.     return true ;
    31. }
    32.  
    33. //------------------------------------------------------------------
    34.  
    35. bool Array::ReadFromFile (FILE *f) {
    36.     if (!f)
    37.         return false ;
    38.     n = 0 ;
    39.     fread (&n, sizeof (int), 1, f) ;
    40.     if (!n)
    41.         return false ;
    42.     if (p)
    43.         delete [] p ;
    44.     p = new int [n] ;
    45.     if (!p)
    46.         return false ;
    47.     fread (p, sizeof (int), n, f) ;
    48.     return true ;
    49. }
    50.  
    51. //////////////////////////////////////////////////////////////////////////////////////
    52.  
    53. typedef Array DataType ;
    54. struct Node ;
    55. typedef Node * pNode ;
    56.  
    57. /////////////////////////////////////////////////////////////
    58.  
    59. struct Node {
    60.     DataType data ;
    61.     pNode next ;
    62. } ;
    63.  
    64. pNode getNewNode (DataType x) ;
    65.  
    66. /////////////////////////////////////////////////////////////
    67. /////////////////////////////////////////////////////////////
    68.  
    69. class LinkList {
    70. public:
    71.     LinkList () ;
    72.     ~LinkList () ;
    73.  
    74.     bool isempty () const ;
    75.  
    76.     void beginIterator () ;
    77.     DataType* next () ;
    78.  
    79.     bool inserthead (DataType x) ;
    80.     bool inserttail (DataType x) ;
    81.     bool removehead () ;
    82.     bool removetail () ;
    83.     bool removeNode (DataType x) ;
    84.  
    85.     pNode find (DataType x) ;
    86.  
    87.     bool WriteToFile (char const * filepath) ;
    88.     bool ReadFromFile (char const * filepath) ;
    89.  
    90.     friend istream& operator >> (istream & is, LinkList & L) ;
    91.     friend ostream& operator << (ostream & os, LinkList & L) ;
    92. private:
    93.     pNode head, tail ;
    94.     pNode iterator ;
    95. } ;
    96. //////////////////////////////////////////////////////////////////////////////////////
    97.  
    98. bool LinkList::WriteToFile (char const * filepath) {
    99.     FILE *f = fopen (filepath, "ab") ;
    100.     DataType * x ;
    101.     beginIterator () ;
    102.     while (x = next ())
    103.         if (!x->WriteToFile (f))
    104.             return false ;
    105.     fclose (f) ;
    106.     return true ;
    107. }
    108.  
    109. //---------------------------------------------------------------------
    110.  
    111. bool LinkList::ReadFromFile (char const * filepath) {
    112.     FILE *f = fopen (filepath, "rb") ;
    113.     DataType x ;
    114.     pNode p ;
    115.     while (x.ReadFromFile (f)) {
    116.         p = getNewNode (x) ;
    117.         if (!inserttail (x))
    118.             return false ;
    119.     }
    120.     fclose (f) ;
    121.     return true ;
    122. }
    123.  
    124. ////////////////////////////////////////////////////////////////////////
    125. ////////////////////////////////////////////////////////////////////////
    126.  
    127. pNode getNewNode (DataType x) {
    128.     pNode p = new Node ;
    129.     if (!p)
    130.         return NULL ;
    131.     p->data = x ;
    132.     p->next = NULL ;
    133.     return p ;
    134. }
    135.  
    136. ////////////////////////////////////////////////////////////////////////
    137. ////////////////////////////////////////////////////////////////////////
    138.  
    139. int main () {
    140.     LinkList L ;
    141.     int pa[] = {1, -1} ;
    142.     Array a (pa, 2) ;
    143.     cout << endl << "\tEnter a list of sequences of int number" << endl ;
    144.     cin >> L ;
    145.     cout << L ;
    146.     L.WriteToFile ("list.in") ;
    147.     L.removeNode (a) ;
    148.     cout << L ;
    149.     L.WriteToFile ("list.out") ;
    150.  
    151.  
    152.     cout << "\n\n------------------------------------------------\n\n" ;
    153.  
    154.     L.ReadFromFile ("list.in") ;
    155.     cout << L ;
    156.  
    157.     return 0 ;
    158. }
    Đã được chỉnh sửa lần cuối bởi Nature Master : 28-11-2010 lúc 04:48 PM.
    Nothing last forever !!

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    6

    cám ơn bạn, mình sẽ tham khảo

  4. #4
    Ngày gia nhập
    10 2010
    Bài viết
    6

    Mặc định Đọc và lưu file thêm, tìm kiếm, sửa đổi thông tin 1 nút

    Nếu sử dụng để thêm, tìm kiếm, sửa đổi thông tin 1 nút thì đọc và lưu file như thế nào? Ai biết không giải đáp dùm em cái :(

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Đọc tất vào rồi sửa chữa, thêm xóa, sau đó thì ghi lại ra file.

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    6

    Mặc định Lưu file, đọc file với chương trình sử dụng danh sách liên kết như thế nào?

    Đọc tất vào rồi sửa chữa, thêm xóa, sau đó thì ghi lại ra file.
    Đề bài yêu cầu là nhập MỘT phần tử một lần, thực hiện tìm kiếm, và thay đổi thông tin một phần tử, và em không sử dụng mảng, nhưng muốn tìm kiếm và sửa đổi sau khi đọc file thì phải dùng hàm sửa đổi thao tác trên tệp, và em không biết hàm đấy =.=

  7. #7
    Ngày gia nhập
    03 2010
    Nơi ở
    Nơi nào đó trong vũ trụ
    Bài viết
    550

    Cứ dùng 1 biến tạm để đọc vào từ tệp, nếu là bản ghi cần tìm thì sửa nó rồi dùng hàm fseek để quay trở lại 1 bản ghi rồi thực hiện ghi bản ghi đã được sửa chữa thôi. Như vậy thì ta đã tìm kiếm và sửa chữa trên tệp rồi đó, không cần đọc hết vào mảng. Nếu tệp lớn chắc

  8. #8
    Ngày gia nhập
    10 2010
    Bài viết
    6

    Bạn có thể cho mình ví dụ minh họa được không :|

  9. #9
    Ngày gia nhập
    10 2010
    Bài viết
    6

    Ai làm ơn lưu file đọc file hộ bài mình đã post này đi, mình thật sự đang rất cần!!
    Code:
    #include<iostream>
    #include<string>
    using namespace std;
    
    class NhanSu
    {
    public:
        NhanSu( ){}
        NhanSu(string ten1,int tuoi1, string maso1, double luong1);
        NhanSu* getLink( )
        {
            return link;
        }
        void setLink(NhanSu *newLink)
        {
            link = newLink;
        }
        void setTen(string newTen)
        {
            ten = newTen;
        }
        string getTen()
        {
            return ten;
        }
        void setTuoi(int newTuoi)
        {
            tuoi = newTuoi;
        }
        int getTuoi()
        {
            return tuoi;
        }
        void setMaso(string newMaso)
        {
            maso = newMaso;
        }
        string getMaso()
        {
            return maso;
        }
        double getLuong()
        {
            return luong;
        }
        void setLuong(double newLuong)
        {
            luong = newLuong;
        }
        void hien()
        {
            cout << "| Ten nhan vien:"<< ten <<endl;
            cout << "| Ma so:"<< maso <<endl;
            cout << "| Tuoi:"<< tuoi <<endl;
            cout << "| Luong:"<< luong <<endl;
        }
    private:
        string ten;
        int tuoi;
        string maso;
        double luong;
        NhanSu *link;
    };
    
    NhanSu::NhanSu(string ten1,int tuoi1, string maso1, double luong1)
    {
        ten = ten1;
        tuoi = tuoi1;
        maso = maso1;
        luong = luong1;
    }
    class LinkList
    {
    public:
        LinkList()
        {
            nv1 = NULL;
        }
        void nhapNhanvien(NhanSu* e);
        void xoaNhanvien(string maso);
        void themNhanvien(NhanSu* newNV);
        NhanSu* timkiem(string maso);
        NhanSu* timkiem1(string maso);
        void hienNhanvien();
    private:
        NhanSu *nv1;
    };
    
    void LinkList::nhapNhanvien(NhanSu* e)
    {
        e->setLink(nv1);
        nv1=e;
    }
    
    
    void LinkList::xoaNhanvien(string maso)
    {
        NhanSu* xoa = timkiem(maso);
        if(xoa == NULL)
        {
            cout << "Khong tim thay nhan vien can xoa" << endl;
            return;
        }
        else
        {
            NhanSu* a = timkiem1(maso);
            a->setLink(xoa->getLink());
            delete xoa;
        }
    }
    NhanSu* LinkList::timkiem(string maso)
    {
        NhanSu *here = nv1;
        while(here != NULL && here->getMaso() != maso)
            here = here->getLink();
        return here;
    }
    
    NhanSu* LinkList::timkiem1(string maso)
    {
        NhanSu *here = nv1;
        while(here != NULL)
        {
            NhanSu *next = here->getLink();
            if(next->getMaso()==maso)break;
            else here = here->getLink();
        }
        return here;
    }
    
    void LinkList::hienNhanvien()
    {
        NhanSu *here = nv1;
        while(here != NULL)
        {
            here->hien();
            here = here->getLink();
        }
    }
    
    void main()
    {
        LinkList nv;
        NhanSu *e;
        string ten, maso, masocu, masomoi;
        int tuoi;
        double luong;
    	
        cout<<"|      CHUONG TRINH QUAN LY NHAN VIEN CONG TY    ="<<endl;
        cout<<"|         1.THEM NHAN VIEN                       ="<<endl;
        cout<<"|         2.XOA NHAN VIEN                        ="<<endl;
        cout<<"|         3.SUA THONG TIN NHAN VIEN              ="<<endl;
        cout<<"|         4.IN RA THONG TIN TOAN BO NHAN VIEN    ="<<endl;
        cout<<"|         5.TIM KIEM NHAN VIEN                   ="<<endl;
        cout<<"|         6.THOAT                        ="<<endl;
        int choose;
        do // Vong lap do- while + cau lenh switch- case
        {
            cout << " *** Moi ban chon chuc nang *** :";
            cin >> choose;
            switch(choose) 
            {
                case 1:
                    cin.ignore();
    				cout << "| Nhap Ten nhan vien:";getline(cin, ten);
                    cout << "| Nhap Ma so:"; cin >> maso;
                    cout << "| Nhap Tuoi:"; cin >> tuoi;
                    cout << "| Nhap Luong:"; cin >> luong;
                    nv.nhapNhanvien(new NhanSu(ten,tuoi, maso, luong));
                    break;
                case 2:
                    cin.ignore();
                    cout << "| Nhap ma so Nhan vien can xoa:"; getline(cin, maso);
                    nv.xoaNhanvien(maso);
                    break;
                case 3:
                    cin.ignore();
                    cout << "| Nhap ma Nhan vien can sua:";getline(cin,masocu);
                    e =nv.timkiem(masocu);
                    if(e == NULL)
                    {
                        cout << "Khong co nhan vien co ma so " << masocu;
                        break;
                    }
                    else
                    {
                        cout << "Thong tin cu cua nhan vien:"<<endl;
                        e->hien();
                        cout << "| Nhap ten moi:"; getline(cin, ten);
                        cout << "| Nhap ma so moi:"; getline(cin, masomoi);
                        cout << "| Nhap tuoi moi:"; cin >> tuoi;
                        cout << "| Nhap luong moi:"; cin >> luong;
    
                        e->setTen(ten);
                        e->setMaso(masomoi);
                        e->setTuoi(tuoi);
                        e->setLuong(luong);
                    }
                    break;
                case 4:
                    cout << "| Thong tin cac nhan vien marketing:" << endl;
                    nv.hienNhanvien();
                    break;
                case 5:
                    cin.ignore();
                    cout << "| Nhap ma nhan vien can tim:"; getline(cin, maso);
                    e =nv.timkiem(maso);
                    if(e == NULL)
    					cout << "Khong co Nhan vien nao co ma so " << maso<<endl;
                    else
                    {
                        cout << "| Thong tin tim thay ve nhan vien:";
                        e->hien();
                    }
                    break;
    			case 6:
                    exit(0);
                default:
                    cout << "| Nhap sai chuc nang, hay nhap lai!";
    
            }
    
        }while(true);
    }

  10. #10
    Ngày gia nhập
    04 2008
    Nơi ở
    Hue city
    Bài viết
    40

    Các anh chi em hỏi mình có thể ghi 1 DSLK ra file nhị phân được hay không ?

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

  1. lưu FILE và đọc FILE trong danh sách liên kết
    Gửi bởi lngiang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 23-02-2013, 12:18 PM
  2. Lập trình C++ Chương trình đọc và ghi file Danh Sách Liên Kết Đơn của mình có gì bị lỗi ???
    Gửi bởi bknight092 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-03-2012, 09:34 PM
  3. Bài tập C Làm sao để nhập dữ liệu từ file vào danh sách liên kêt đơn.
    Gửi bởi kyner trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 04-11-2011, 03:27 PM
  4. Lập trình C++ Lưu một danh sách liên kết vào một file như thế nào?
    Gửi bởi anhtai063 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 27-02-2011, 05:05 PM
  5. Đọc từ file lưu vào danh sách liên kết?
    Gửi bởi madaca123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 01-08-2009, 08:20 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