//Ngay lap hoa don, loai, ma nhan vien, 

#include <iostream>
#include <string.h>
#include <fstream>
#include <cstdlib>


using namespace std;

typedef struct{
	int ngay;
	int thang;
	int nam;
}date;

bool KiemTra(int ngay, int thang, int nam) {
	if ((nam % 100 != 0 && nam % 4 == 0) || (nam % 400 == 0)) {
		if(thang==2) {
			if(ngay<=29) return true;
		}
		else if(thang==4 || thang==6 || thang==9 || thang==11) {
			if(ngay<=30) return true;
		}
		else {
			if(ngay<=31) return true;
	    }
	}
	else if ((nam % 100 == 0 && nam % 4 != 0) || (nam % 400 != 0)) {
		if(thang==2) {
			if(ngay<=28) return true; 
		}
		else if(thang==4 || thang==6 || thang==9 || thang==11) {
			if(ngay<=30) return true; 
		}
		else if(ngay<=31) return true; 
	}
	else return false;
}

class Nguoi{
	protected:
		char name[20];
		char maN[10];
	public:
		void setname(char* ten){
			strcpy(name,ten);
		}
		char* getname(){
			return name;
		}
		void setmaN(char *man){
			strcpy(maN,man);
		}
		char* getmaN(){
			return maN;
		}
		void NhapN();
		void ShowN();
};
void Nguoi::NhapN(){
	char ten[20];
	char man[10];
	cout << "Ten:"; cin.ignore(); cin.getline(ten,20); setname(ten);
	cout << "CMND:"; cin.getline(man,10); setmaN(man);
}
void Nguoi::ShowN(){
	cout << "\nTen: " << getname()
		 << "\nCMND: "<< getmaN()
		 <<endl;
}
class HoaDon{
	protected:
		date datein;
		char type[20];
		char soHD[20];
	public:
		void setngaynhap(date ngaylap){
			datein.ngay = ngaylap.ngay;
		}
		int getngaynhap(){
			return datein.ngay;
		}
		void setthangnhap(date ngaylap){
			datein.thang = ngaylap.thang;
		}
		int getthangnhap(){
			return datein.thang;
		}
		void setnamnhap(date ngaylap){
			datein.nam = ngaylap.nam;
		}
		int getnamnhap(){
			return datein.nam;
		}
		void setsoHD(char* sohd){
			strcpy(soHD,sohd);
		}
		char* getsoHD(){
			return soHD;
		}
		void setloai(char* loai){
			strcpy(type,loai);
		}
		char* getloai(){
			return type;
		}
//		void setmaNV(char* manv){
//			strcpy(maNV,manv);
//		}
//		char* getmaNV(){
//			return maNV;
//		}
		void Nhaphoadon();
		void Showhoadon();
	
};
void HoaDon::Nhaphoadon(){
	date ngaylap;
	char sohd[20];
	char loai[20];
//	char manv[30];
	cout << "========== Nhap thong tin Hoa Don. ============ " << endl;
	cout << "Nhap so Hoa Don: "; cin.ignore(); cin.getline(sohd,30); setsoHD(sohd);
	cout << "nhap loai hoa don: "; cin.getline(loai,30); setloai(loai);
//	cout << "Nhap ma nhan vien quan ly: "; cin.getline(manv,30); setmaNV(manv);	

	do {
		cout << "Nhap ngay nhap hoa don: "; cin >> ngaylap.ngay; setngaynhap(ngaylap);
		cout << "Nhap thang nhap hoa don: "; cin >> ngaylap.thang; setthangnhap(ngaylap);
		cout << "Nhap nam nhap hoa don: "; cin >> ngaylap.nam; setnamnhap(ngaylap);
		if (KiemTra(ngaylap.ngay, ngaylap.thang, ngaylap.nam) == false) {
			cout << "Xin nhap lai ngay thang nam\n";
		}
	} while(KiemTra(ngaylap.ngay, ngaylap.thang, ngaylap.nam) == false);	
}

void HoaDon::Showhoadon(){
	cout << "So Hoa Don: " << getsoHD() << endl;
	cout << "Thoi gian nhap hoa don: " << getngaynhap() << "/" << getthangnhap() << "/" << getnamnhap() << endl;
	cout << "loai hoa don: " << getloai() << endl;
//	cout << "Ma nhan vien quan ly: " << getmaNV() << endl;
}

class VATTU {
	private:
		char maVT[10];
		char tenVT[20];
		char hangVT[20];
		int soluong;
		int giaVT;
	public:
		
		void  setmaVT(char* maVTIn) {
			strcpy(maVT,maVTIn);
		};  
		char*  getmaVT(){
			return maVT;
	    };   
		
		void settenVT(char* tenVTIn)
		{
			strcpy(tenVT,tenVTIn);	
		};
		char* gettenVT() {
			return tenVT;
		};
		
		void sethangVT(char* hangVTIn){
			strcpy(hangVT,hangVTIn);
		}
		char* gethangVT(){
			return hangVT;
		}
	
		void  setsoluong(int soluongIn) {
			soluong = soluongIn;
	    };  
		int   getsoluong() {
			return soluong;
		}; 
		void setgiaVT(int giaVTIn){
			giaVT = giaVTIn;
		}
		int getgiaVT(){
			return giaVT;
		}
		void  nhapVT();
		void  hienthiVT();
};

void VATTU::nhapVT() {
	char maVTIn[10];
	char tenVTIn[20];
	char hangVTIn[20];
	int soluongIn;
	int giaVTIn;
	cout << "Nhap ten vat tu:"; cin.ignore(); cin.getline(tenVTIn,20); settenVT(tenVTIn);
	cout << "Nhap ma vat tu: "; cin >> maVTIn; setmaVT(maVTIn);
	cout << "Nhap hang : "; cin.getline(hangVTIn,20); sethangVT(hangVTIn);
	cout << "Nhap gia: "; cin >> giaVTIn; setgiaVT(giaVTIn);
	cout <<"Nhap so luong: "; cin >> soluongIn; setsoluong(soluongIn);
}
void VATTU::hienthiVT(){
	cout << "\nMa vat tu : " << getmaVT() << endl;
	cout << "Ten vat tu :" << gettenVT() << endl;
	cout << "Hang: " << gethangVT() << endl;
	cout << "So luong : " << getsoluong() << endl;
	cout << "Don Gia: " << getgiaVT() << endl;
};

void option(){
	HoaDon *hd = new HoaDon;
	cout << "Nhan phim 1 de mua hang" << endl;
	cout << "Nhan phim 2 de xem hoa don" << endl;
	cout << "Nhan phim 0 de exit" << endl;
	int choose;
	cout << "Your choice: ";
	cin >> choose;
	do{
		switch (choose){
			case 1:{
				fstream ofhd("HoaDon.txt", ios::out|ios::binary);
				if(!ofhd){
					cout << "khong mo duoc tep tin" << endl;
					exit(1);
					}
				hd -> Nhaphoadon();
				ofhd.write( reinterpret_cast <char *> (hd), sizeof(HoaDon));
				ofhd.close();
				break;
			}
			case 2:{    
				fstream ifhd("HoaDon.txt", ios::in|ios::binary);
				if(!ifhd){
					cout << "Khong mo duoc file " << endl;
					exit(1);
				}
				ifhd.read(reinterpret_cast <char *> (hd), sizeof(HoaDon));
				if(!ifhd.eof() ) hd -> Showhoadon();
				ifhd.close();
				}
				break;
		}
	}
	while(choose !=0);	
}

int main(){
	option();
	return 0;
}
