30/09/2018, 21:02

Mọi người giúp e về tập tin trong C++

có 1 file txt được nhập = tay sẵn định dạng như sau
3
Ngô Đình
Diệm
BKEntertainment
Giám đốc
02/09/1995
Ninh Bình
Số 69, Trần Đại Nghĩa
diem@gmail.com
0986666789
03/03/2016
03/03/2016,8h30,17h30
04/03/2016,8h30,17h30
05/03/2016,8h30,17h30
4
Trần Đức
Công
BKFood
Giám đốc
01/06/1995
Nam Định
Số 99, Lê Thanh Nghị
congtd@gmail.com
0123456789
03/03/2016
03/03/2016,8h30,17h30
04/03/2016,8h30,17h30
05/03/2016,8h30,17h30

dữ liệu nhân viên được xây dựng theo kiểu danh sách liên kết đơn
từng node có các thuộc tính sau: MaSo, Ho, Ten, Don Vi, ChucVu,NgaySinh, QueQuan, DiaChi, Email, SoDienThoai, NgayBatDauLamViec, ThongTinNgayLamViec
xây dựng hàm nhập toàn bộ dữ liệu từ file vào danh sách theo từng node trong danh sách

Ngô Doãn Tuấn viết 23:11 ngày 30/09/2018

Tham khảo bài viết sau nhé bạn.

Cách ghi file cực kỳ đơn giản trong C++. Để khi nội dung vào file nằm chung thư mục với code, ta làm như sau: #include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("ltd.txt"); myfile << "DayNhauHoc.Com\n"; myfile.close(); return 0; } Để ghi một file có đường dẫn cụ thể, ta làm như sau: #include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("C:\\Users\\dat\\Des…

Sau khi tham khỏa xong thì hãy ngồi lại code nó rồi up code nếu có vấn đề chưa giải quyết được

Nguyễn Đình Huy viết 23:06 ngày 30/09/2018

e muốn ghi vào danh sách liên kết đơn theo đúng định dạng như cái file .txt ý ạ, tức là dòng 1 thì vào MaSo của Node, dòng 2 vào Ho của Node, dòng 3 vào tên của Node, …xong Node này rồi thì sẽ chuyển sang Node khác để tạo ra danh sách liên kết ạ!

Bách Nguyễn Quang viết 23:02 ngày 30/09/2018

mình nhớ không nhầm trong c có hàm readLine là đọc từng dòng đó

Nguyễn Đình Huy viết 23:11 ngày 30/09/2018

e cũng tìm hiểu hàm getline đọc từng dòng rồi nhưng sau khi đọc xong e vẫn chưa nhập nó vào danh sách đc ạ!

Bách Nguyễn Quang viết 23:10 ngày 30/09/2018

bạn có thể post code lên được không? xem cho dễ

Nguyễn Đình Huy viết 23:16 ngày 30/09/2018
//
//  main.cpp
//  Tutorial_19_TapTin
//
//  Created by Huy Nguyen Dinh  on 5/14/16.
//  Copyright © 2016 Huy Nguyen Dinh. All rights reserved.
//

#include <iostream>
#include <string>
#include <fstream>

#include "ThongTinNhanVien.hpp"
#include "ThongTinBKCorporation.hpp"

using namespace std;

// Bước 1: Khai báo cấu trúc dữ liệu
struct NhanVien
{
    string MaSo, Ho, Ten, DonVi, ChucVu, NgaySinh, QueQuan, DiaChi, Email, SoDienThoai, NgayBatDauLV, ThongTinNgayLV;
};
typedef struct NhanVien NHANVIEN;

struct Node
{
    NHANVIEN Data; // data đang chứa KHACHHANG
    struct Node * pNext; // Con trỏ pNext tạo mối liên kết giữa các Node
};
typedef struct Node NODE;

struct List
{
    NODE * pHead;
    NODE * pTail;
};
typedef struct List LIST;


// Bước 2: Khởi tạo danh sách
void Init(LIST &l) {
    l.pHead = l.pTail = NULL;
}

// Bước 3: Tạo Node trong danh sách (lấy Data đóng vào trong Node)
NODE * GetNode(NHANVIEN data) {
    NODE * p = new NODE;
    
    // Nếu hết bộ nhớ trong máy tính ==> không tạo ra được Node
    if (p == NULL) {
        return NULL;
    }
    p->Data = data;
    p->pNext = NULL;
    return p;
}

// Bước 4: Thêm Node p vào đầu danh sách
void addHead(LIST &l, NODE * p) {
    // Nếu danh sách rỗng
    if (l.pHead == NULL) {
        l.pHead = l.pTail = p;
    }
    else
    {
        p->pNext = l.pHead; // Tạo mối liên kết mới
        l.pHead = p; // Cập nhật lại l.pHead;
    }
}

void addTail(List &l, NODE * p) {
    // Nếu danh sách rỗng
    if (l.pHead == NULL) {
        l.pHead = l.pTail = p;
    }
    else
    {
        l.pTail->pNext = p;
        l.pTail = p;
    }
}

// Hàm nhập khách hàng (sử dụng trong bước 5)
void nhapNhanVien(NHANVIEN &nv) {
    
    fflush(stdin); // xoá bộ nhớ đệm
    cout << "Nhập vào mã số: " << endl;
    getline(cin, nv.MaSo);
    
    fflush(stdin);
    cout << "Nhập vào họ: " << endl;
    getline(cin, nv.Ho);
    
    fflush(stdin);
    cout << "Nhập vào tên: " << endl;
    getline(cin, nv.Ten);
    
    fflush(stdin);
    cout << "Nhập vào đơn vị: " << endl;
    getline(cin, nv.DonVi);

    fflush(stdin);
    cout << "Nhập vào chức vụ: " << endl;
    getline(cin, nv.ChucVu);
    
    fflush(stdin);
    cout << "Nhập vào ngày sinh: " << endl;
    getline(cin, nv.NgaySinh);

    fflush(stdin);
    cout << "Nhập vào quê quán: " << endl;
    getline(cin, nv.QueQuan);
    
    fflush(stdin);
    cout << "Nhập vào địa chỉ: " << endl;
    getline(cin, nv.DiaChi);
    
    fflush(stdin);
    cout << "Nhập vào Email: " << endl;
    getline(cin, nv.Email);
    
    fflush(stdin);
    cout << "Nhập vào số điện thoại: " << endl;
    getline(cin, nv.SoDienThoai);
    
    fflush(stdin);
    cout << "Nhập vào ngày bắt đầu làm việc: " << endl;
    getline(cin, nv.NgayBatDauLV);
    
    fflush(stdin);
    cout << "Nhập vào thông tin ngày làm việc: " << endl;
    getline(cin, nv.ThongTinNgayLV);

}

// Hàm xuất khách hàng (sử dụng trong bước 5)
void xuatNhanVien(NHANVIEN &nv) {
    cout << "\nMã số: " << nv.MaSo;
    cout << "\nHọ: " << nv.Ho;
    cout << "\nTên: " << nv.Ten;
    cout << "\nĐơn vị: " << nv.DonVi;
    cout << "\nChức vụ: " << nv.ChucVu;
    cout << "\nNgày Sinh: " << nv.NgaySinh;
    cout << "\nQuê Quán: " << nv.QueQuan;
    cout << "\nĐịa Chỉ: " << nv.DiaChi;
    cout << "\nEmail: " << nv.Email;
    cout << "\nSố điện thoại: " << nv.SoDienThoai;
    cout << "\nNgày đầu làm việc: " << nv.NgayBatDauLV;
    cout << "\nThông tin ngày làm việc: " << nv.ThongTinNgayLV;
}

// Bước 5: Viết hàm InPut
void inPut(List &l) {
    Init(l);
    int n;
    cout << "Bạn muốn nhập bao nhiêu? " << endl;
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        NHANVIEN data;
        nhapNhanVien(data);
        
        Node * p = GetNode(data); // Đóng data vào trong 1 Node
        addTail(l, p); // Thêm vào cuối
    }
}

void outPut(LIST &l) {
    int dem = 0;
    for (NODE * p = l.pHead; p != NULL; p = p->pNext) {
        cout << "\n----------Thông tin nhân viên thứ: " << ++dem << "----------";
        xuatNhanVien(p->Data);
    }
}

void giaiPhong(LIST &l) {
    NODE * p; // Node phụ sẽ tham gia
    while (l.pHead != NULL) {
        p = l.pHead; // Cho p trỏ tới pHead
        l.pHead = l.pHead->pNext;
        delete p;
    }
}
Nguyễn Đình Huy viết 23:10 ngày 30/09/2018

đây là phần tạo khung danh sách của e

Nguyễn Đình Huy viết 23:16 ngày 30/09/2018
//
//  ThongTinBKCorporation.cpp
//  Tutorial_19_TapTin
//
//  Created by Huy Nguyen Dinh  on 5/15/16.
//  Copyright © 2016 Huy Nguyen Dinh. All rights reserved.
//

#include "ThongTinBKCorporation.hpp"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void ThongTinBKCoporation() {

    fstream f;
    
    string path = "/Users/huynd/Desktop/CodeC++/Tutorial_19_TapTin/";
    f.open(path+"input.txt", ios::in);
    
    string s;
    for(istreambuf_iterator<char,char_traits<char> > it(f.rdbuf());
        it != istreambuf_iterator<char,char_traits<char> >(); it++)   {
        
        s += *it;
    }
    
    f.close();
    cout << s.data() << endl;
}
Nguyễn Đình Huy viết 23:11 ngày 30/09/2018

còn đây là bên đọc file .txt ạ!

Bách Nguyễn Quang viết 23:17 ngày 30/09/2018

theo mình nghĩ bạn dùng hàm getline(f,string s) để đọc file từng dòng 1
khi đọc dòng đầu tiên bạn cho vào nv->maso luôn. còn bạn đọc file như kia là đọc hết cả file và cho vào 1 string

Nguyễn Đình Huy viết 23:16 ngày 30/09/2018

ok a, cho e hỏi thêm là khi đọc hết thằng nhân viên đầu tiên rồi thì làm sao để biết để chuyển sang Node mới cho thằng nhân viên tiếp theo a nhỉ?

Bách Nguyễn Quang viết 23:17 ngày 30/09/2018

nếu mình biết trước số dòng của mỗi nhân viên có thể giới hạn trong vòng lặp luôn

Nguyễn Đình Huy viết 23:04 ngày 30/09/2018

dạ vâng ạ, có biết trước a ạ, em cám ơn anh nhé, em thử xem ạ!

Bài liên quan
0