PDA

View Full Version : vấn đề ghi ra file không được?



thuanbk
19-05-2009, 08:47
Chào các bác !

em lam bai toán lập hóa đơn mua ban san phẩm sau đo ghi vào một file .dat hay .txt để lưu nhưng chẳng lưu được mong các bác giúp em với



#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<fstream>
using namespace std;
class hoaDon{
private:
int ngay, thang, nam;//ngay thang nam tao hoa don
char *tenKH;//ghi ten khach hang dang chuoi
protected:
int soHD;/*so hoa don chung tu tao protected
de class chi tiet hoa don co the thua ke duoc*/
public:
hoaDon();//ham tao khong tham so de cho ngay thang nam soHD bang 0
hoaDon(int );//ham tao so hoa don
hoaDon(int, int, int);//ham tao ngay/thang/nam
void nhapTenKH();//nhap ten khach hang
void display();//hien thi noi dung trong class hoaDon
};
hoaDon::hoaDon(){//dinh nghia ham tao
ngay=0;
thang=0;
nam=0;
soHD=0;
tenKH=NULL;
}
hoaDon::hoaDon(int soHD){//dinh nghia ham tao
this->soHD=soHD;
}
hoaDon::hoaDon(int date, int mon, int year){//dinh nghia ham tao
ngay=date;
thang=mon;
nam=year;
}
void hoaDon::nhapTenKH(){//dinh nghia ham nhap ten khach hang
cout<<"\nNhap ten khach hang : ";
fflush(stdin);
tenKH=new char[35];//tao mang cap phat cho tenKH
cin.getline(tenKH,35);
cout<<endl;
}
void hoaDon::display(){//Ham hien thi chac chang co gi!!!!
char ch='/';
cout<<"So hoa don : "<<soHD;
cout<<"\nNgay viet hoa don : "<<ngay<<ch<<thang<<ch<<nam;
cout<<"\nTen khach hang : "<<tenKH;
}
class chiTietHD:public hoaDon{//class chiTietHD ke thua tu class hoaDon
private:
char *tenSP;//ten san pham
int soLg, donG;//so luong va don gia cho tung san pham
public:
chiTietHD():hoaDon(){//ham tao chiTietHD ke thua tu ham tao hoaDon
soLg=0;//bo cung them soLg va donG cho bang 0
donG=0;
tenSP=NULL;//ten san pham = NULL
}
chiTietHD(int soHD):hoaDon(soHD){}//nhap so hoa don ke thua tu ham tao nhap soHD cua class hoaDon
chiTietHD(int date, int mon, int year, int soHD,int soLg, int donG):hoaDon(date,mon,year){
/*Ham tao nay ke thua tu ham tao hoaDOn 3 tham so cua lop hoaDon co them soHD, soLg
va donG*/
this->soHD=soHD;
this->soLg=soLg;
this->donG=donG;
}
void nhapTenSP(){//nhap ten san pham
hoaDon::nhapTenKH();//goi ham nhap ten khach hang tu lop hoaDon
cout<<"Nhap ten san pham : ";
fflush(stdin);
tenSP=new char[30];//Cai nay chac anh biet chu *_*
cin.getline(tenSP,30);
cout<<endl;
}
void display(){//Ham hien thi cua lop chiTietHD
hoaDon::display();//goi ham display() cua lop hoaDon
cout<<"\nTen san pham : "<<tenSP;
cout<<"\nSo luong hang : "<<soLg<<" Chiec";
cout<<"\ndon gia : "<<donG<<" VND/1 sp";
cout<<"\nTong tien la : "<<soLg*donG<<" VND";
}
void ghiHoaDon(){//Ham ghi hoa don ra file hoaDOn.txt
fstream f;//fstream giup vua doc vua ghi du lieu
f.open("hoaDon.txt",ios::app);//mo file hoaDon.txt de ghi voi che do bo xung vao cuoi tap tin
f.write((char*)this,sizeof(*this));//ghi toan bo noi dung cua doi tuong
f.close();
}

};
void main(){
int soHoaDon, ngay, thang, nam, soLuong, donGia;
char ch;
cout<<"\nNhap so hoa don chung tu : ";cin>>soHoaDon;
cout<<"\nNhap ngay thang nam : (ngay/thang/nam) ";cin>>ngay>>ch>>thang>>ch>>nam;
cout<<"\nNhap so luong hang : ";cin>>soLuong;
cout<<"\nNhap don gia moi san pham (VND/1 san pham) : ";cin>>donGia;
chiTietHD a(ngay,thang,nam,soHoaDon,soLuong,donGia);//tao doi tuong
a.nhapTenSP();
a.display();
a.ghiHoaDon();
_getch();
}


[=========> Bổ sung bài viết <=========]

em sửa f.open("hoaDon.txt",ios::app); thành f.open("hoaDon.txt",ios::app|binary|ios::out) thì no ghi ra được nhưng ký tự lằng nhằng chảng hiểu. khônng biết lỗi ở đâu nữa

thuongshoo
19-05-2009, 11:33
ghi ra file dạng text á! vậy mới coi đuwcj! tui thấy có chữ binary thì hình như bạn đã ghi ra file nhị phân. Vậy coi 0 được là đúng đó!