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

Đề tài: Vấn đề sửa, xóa, tìm kiếm khi đọc file?

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    5

    Mặc định Vấn đề sửa, xóa, tìm kiếm khi đọc file?

    Mình đang gặp vấn đề với các hàm sửa, xóa, tìm kiếm dữ liệu đã đc lưu vào file, tìm hiểu mấy ngày nay vẫn chưa nghĩ ra giải pháp nên post lên nhờ các bạn giúp đỡ

    Mình có 1 phương thức readfile() được viết trong lớp NhanVien như sau :

    Code:
    void NhanVien::readfile(){
    const int SIZE = 100;
        char input[SIZE];
        fstream file;
        file.open("NhanVien.dat", ios::in);
        if(!file)
        {
                 cout << "Khong tim thay file!";
                 return 0;
        }
        
        file.getline(input, SIZE, '$');
        while(!file.eof())
        {        
            cout << input << endl;
                           
        }    
        file.close();
    Cấu trúc file NhanVien.dat đc lưu như sau
    Code:
    123$nguyen cong hiep$123$221288$nam$30/4$can tho$giam doc
    ...và hàm ghi vào file mình viết như sau
    Code:
    void NhanVien::writefile(){     
         ofstream file;     
                            file.open("NhanVien.dat", ios::app);
                            file << endl; // moi nhan vien them vao se tren 1 dong
                            file << msnv;
                            file << "$";
                            file << hoten;
                            file << "$";
                            file << cmnd;
                            file << "$";
                            file << ngaysinh;
                            file << "$";
                            file << gioitinh;
                            file << "$";                        
                            file << diachi;
                            file << "$";
                            file << noisinh;
                            file << "$";
                            file << chucvu;
                            file.close();
         cout << "Da ghi vao tap tin thanh cong!\n\n\n";
    Vấn đề 1 : khi mình đọc dữ liệu từ file thì nó sẽ in ra tất cả các thông tin đc ngăn cách bởi dấu "$", mỗi cái trên 1 dòng. Nhưng mình muốn nó sẽ in ra cụm thông tin của từng nhân viên riêng (chứ ko luông tuồng như vậy)

    Vấn đề 2 :
    khi viết hàm tìm kiếm thì sẽ nhập vào mã số và xuất ra nhân viên đó. Làm sao để dò tìm trên mã số của từng nhân viên?? Nếu đọc file như thế thì khi lấy ra mã số thì nó là chuỗi hay số nguyên (msnv kiểu int)

    Vấn đề 3 : hàm sửa, xóa ???

    Đang bập bẹ C++ mà phải làm đồ án, nên có gì sai sót mong các bạn bỏ qua và sửa chữa giúp mình^^
    Chân thành cám ơn!

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    File chỉ là nơi lưu trữ dữ liệu thôi.Các thao tác tìm kiếm, sửa, xóa thì làm trên các đối tượng chứ không nên làm trên file.
    Ở đây có người cũng gặp vấn đề gần giống như bạn xem có giúp ích được gì cho bạn không
    http://forums.congdongcviet.com/showthread.php?t=16883
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    5

    Làm sao để đọc thông tin của 1 file và đưa vào 1 mảng với mỗi phần tử là 1 nhân viên riêng biệt...???
    Mình đọc mãi vẫn chưa có cách nào cả :(

    Không biết code trên mình viết có vấn đề gì ko nhỉ ??

  4. #4
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    trong class nhân viên của bạn không có phần set thông tin cho nhân viên ah
    Đọc hết 1 dòng thì sử dụng hàm của string để cắt xâu lấy được ra thành các phần rồi set thông tin lấy được từ dòng đó ra để set thông tin vào 1 nhân viên.
    Xem các hàm về string ở đây http://www.cplusplus.com/reference/string/string/
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    5

    hix, đang rối quá, ko biết làm thế nào nữa, các bạn xem giúp mình lớp NhanVien với T_T
    trước giờ toàn code PHP đỡ rắc rối hơn :(

    Code:
    #include<iostream>
    #include<conio.h>
    #include "Nguoi.cpp"
    using namespace std;
    
    class NhanVien: public Nguoi{
          private:
                  int msnv;
                  char* chucvu;              
          public:
                 NhanVien();
                 NhanVien(char*, int, char*, Date, char*, char*, int, char*);
                 NhanVien(const NhanVien&);
                 ~NhanVien();
                 
                 friend ostream& operator<<(ostream&, NhanVien);
                 friend istream& operator>>(istream&, NhanVien&);
                 
                 int layMsnv();
                 int count();
                 void nhapnv();
                 void xuatnv();
                 void suanv();
                 void xoanv();
                 void timnv();
                 
                 void readfile();
                 void writefile(int);
                 void writefile();
                 
    };             
    
    NhanVien::NhanVien():Nguoi(){                     
                         msnv = 0;
                         chucvu = new char[50];
    }
    
    NhanVien::NhanVien(char* ht,int cm, char* gt, Date ns, char* nois, char* dc, int ms, char* cv) : Nguoi(ht,cm,gt,ngaysinh,nois,dc){
                         
                         msnv = ms;
                         chucvu = strdup(cv);
    }
    
    NhanVien::NhanVien(const NhanVien& nv):Nguoi(nv){
                             
                             msnv = nv.msnv;
                             chucvu = strdup(nv.chucvu);
    }
                             
    NhanVien::~NhanVien(){
                                  delete[] chucvu;
    }
    
    ostream& operator<<(ostream& os, NhanVien nv){
             os << (Nguoi)nv;
             os << nv.msnv ;
             os << nv.chucvu;
             return os;
    }
    
    istream& operator>>(istream& is, NhanVien& nv){
             is >> *(Nguoi*)&nv;
             is >> nv.msnv;
             is >> nv.chucvu;
             return is;
    }
    
    int NhanVien::layMsnv(){
        return msnv;
    }
    
    int NhanVien::count(){
        ifstream file;
        file.open("NhanVien.dat",ios::binary);
        file.seekg(0,ios::end);
        return (int)file.tellg()/sizeof(NhanVien);
    }
                      
    void NhanVien::nhapnv(){
         Nguoi:nhap();
         cout << "Nhap ma so nhan vien: "; cin >> msnv;
         cout << "Nhap chuc vu: ";fflush(stdin); cin.getline(chucvu,50);
         
    }
    
    void NhanVien::xuatnv(){
         Nguoi:xuat();     
         cout << "\nMa so nhan vien: " << msnv;
         cout << "\nChuc vu: " << chucvu;
         cout << "\n---------------------------\n";
    }
    
    void NhanVien::readfile(){
        /*int sonv = NhanVien::count();
        NhanVien *ds = new NhanVien[sonv]
        fstream file;
        file.open("NhanVien.dat", ios::in);
        if(!file)
        {
                 cout << "Khong tim thay file!";
                 exit;
        }
        for(int i=0;i<sonv;i++)
        {
            while(getline)
            {        
                
                file.getline(input, SIZE, '$');               
            }    
        cout << input << "|";// << endl;
        file.close();*/
    }
    
    void NhanVien::writefile(){     
         ofstream file;     
                            file.open("NhanVien.dat", ios::app);
                            file << endl;
                            file << msnv;
                            file << "$";
                            file << hoten;
                            file << "$";
                            file << cmnd;
                            file << "$";
                            file << ngaysinh;
                            file << "$";
                            file << gioitinh;
                            file << "$";                        
                            file << diachi;
                            file << "$";
                            file << noisinh;
                            file << "$";
                            file << chucvu;
                            file.close();
         cout << "Da ghi vao tap tin thanh cong!\n\n\n";
    }
    /*       
    void NhanVien::suanv(){
         int n=0;
         cout << "NHAP VAO THONG TIN CAN SUA\n";
         cout << "*******************************";
         cout << "\n1 - Ho ten nhan vien";
         cout << "\n2 - CMND";
         cout << "\n3 - Ngay, thang, nam sinh";
         cout << "\n4 - ";
    }            
    
    void NhanVien::xoanv(){
         int ms;
         int sonv=NhanVien::count();
         cout<<"So nhan vien hien tai la :"<< sonv;
         NhanVien* ds=new NhanVien[sonv];
         for(int i=0;i<sonv;i++)
           {
                  ds[i].readfile(i);
           }
        fflush(stdin);
        NhanVien::timnv();
        cout<<"\n Nhap ma so nhan vien can xoa: \n";
        cin>>ms;
        for(int i=0;i<sonv;i++)
            if(layMsnv() == ms)
               for(int j=i;j<sonv;j++) 
            ds[j+1].writefile(j);//viet vao file bo 1 mau tin 
         
    }
    */
    void NhanVien::timnv(){
          int found=0;   
          int ms;
          NhanVien* ds;
          int sonv=NhanVien::count();
           //cout<<sonv;
            ds=new NhanVien[sonv];
            cout << "\n NHAN VIEN CAN TIM : \n";
            cout << "\n Nhap ma so nhan vien can tim: ";cin >> ms;
            
            for(int i=0;i<sonv;i++)
            {                         
               ds[i].readfile();
               //ds[i].xuatnv();
            }
             /* for(int i=0;i<sonv;i++)
              {
                      if (ds[i].layMsnv() == ms)
                      {
                       found=1;
                       ds[i].xuatnv();
                      }
              }*/ 
              if(found==0)
              cout<<"\n Khong tim thay nhan vien nay!!!";
    }
    
    /*int main(){
        NhanVien nv;
        //nv.nhapnv();
        //nv.writefile();
        //nv.xuatnv();
        nv.readfile();
        //nv.xuatnv();
        //int i = nv.count();
        //cout << i;
        //nv.timnv();
        //nv.timnv();
         
        getch();
    }
    */
    biết ơn các bạn nhiều lắm !!
    Đã được chỉnh sửa lần cuối bởi tep_riu : 21-04-2009 lúc 12:32 PM.

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Vấn đề sửa, xóa, tìm kiếm khi đọc file?

    - Đọc vào từng dòng rồi cắt chuỗi bằng kí tự $ thôi, suy nghĩ một tí cho quen đi cậu.

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    5

    Mình đọc dữ liệu đc lấy ra từ file NhanVien.dat thông qua hàm readfile() như sau


    Thời gian hiện tại đối với mình rất gấp rút, hiện giờ mình phải chuẩn bị nộp 3 đồ án và báo cáo trong vòng tuần này. Vì vậy mình ko có nhiều thời gian dành cho môn này trong khi đó 3 ngày nữa là phải báo cáo rồi.
    Các bạn có thể giúp mình hàm tìm kiếm và xóa với class NhanVien trên dc ko? (nếu có thể thì hàm sửa luôn cũng tốt)

    Mình biết nhờ giúp đỡ vậy là ko tốt, nhưng thời gian cấp bách quá nên đành post lên nhờ các bạn vậy. Hy vọng đc sự giúp đỡ!

    Chân thành cám ơn!
    Đã được chỉnh sửa lần cuối bởi tep_riu : 22-04-2009 lúc 01:00 AM.

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

  1. Không thể xóa file trong IsolatedStorageFile, cách nào để xóa?
    Gửi bởi mrdungx trong diễn đàn Lập trình Windows Mobile bằng C#
    Trả lời: 0
    Bài viết cuối: 04-04-2013, 11:25 PM
  2. Viết chương trình tìm kiếm một tập tin nếu có thì đưa ra thông báo và xóa nó trong ổ đĩa
    Gửi bởi huynhpchau trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 19-03-2010, 12:06 AM
  3. Tìm kiếm trên file! Tìm kiếm xâu mẫu dùng giải thuật Naive | Giúp mình code sai ở đâu
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 19-04-2009, 08:22 PM
  4. code xóa một tệp, lỗi không xóa được file nào?
    Gửi bởi rong3sao trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 12-04-2009, 06:41 PM
  5. [LT][Tìm kiếm]Xóa node trong cây nhị phân tìm kiếm
    Gửi bởi schtroumpfs trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 05-06-2007, 05:47 PM

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