Professional Documents
Culture Documents
Cau G
Cau G
/*
Tra sach: Co 2 cach tra
+ Tra binh thuong
+ Bao mat sach
Neu den thi ok
Neu khong den: khoa the
Xu li:
+ Tra sach binh thuong:
Chinh lai trang thai cua dau sach:
trong DanhSachMuonTra: chuaTra -> daTra va Cap nhat ngay
tra
trong DanhMucSach: daMuon -> choMuonDuoc
+ Bao mat sach va den:
Chinh lai trang thai cua dau sach:
trong DanhSachMuonTra: chuaTra -> lamMatSach(khong cap nhat
ngay tra)
trong DanhMucSach: daMuon -> daThanhLy
+ Bao mat sach va khong den
Chinh lai trang thai cua the doc gia: conHoatDong-> biKhoaThe
Chinh lai trang thai cua dau sach:
trong DanhSachMuonTra: chuaTra -> lamMatSach(khong cap nhat
ngay tra)
trong DanhMucSach: daMuon -> daThanhLy
Date ngayMuon;
Date ngayTra;
TrangThaiMuonTra trangThai;
};
struct NodeMuonTra{
MuonTra info;
NodeMuonTra *next;
};
struct DocGia{
string ho;
string ten;
string phai;
TrangThaiDocGia trangThai;
int thoiGianQuaHan;
NodeMuonTra *mt = NULL;
};
struct NodeDocGia{
int maThe; // Random
DocGia info;
int chiSoCanBang;
NodeDocGia *left, *right;
};
LuuDanhSachMuonTra(NodeDocGia *root) {
ofstream file;
file.open("DanhSachMuonTra.txt", ios_base::out);
file << nMT << endl;
int sp = -1;
const int STACKSIZE = 500;
NodeDocGia* Stack[STACKSIZE];
NodeDocGia *p = root;
do {
while(p!=NULL) {
Stack[++sp] == p;
p = p->left;
}
if(sp == -1){
p = Stack[sp--];
NodeMuonTra *r = p->info.mt;
while(r != NULL) {
file << p->maThe << endl
<< r->info.maSach << endl
<< r->info.ngayMuon.ngay <<" " << r-
>info.ngayMuon.thang <<" " <<r->info.ngayMuon.nam << endl
<< r->info.ngayTra.ngay <<" "<< r->info.ngayTra.thang
<<" "<<r->info.ngayTra.nam << endl
<< r->info.trangThai << endl;
r = r->next;
}
p = p->right;
}
else break;
}while(1);
file.close();
}
void LuuDanhMucSach(DanhSachDauSach dsds){
ofstream file;
file.open("DanhMucSach.txt", ios_base::out);
file << nDMS << endl;
for(int i = 0; i < dsds.n; i++) {
NodeDanhMucSach *r;
for(r = dsds.dsDauSach[i]->dms; r->next != NULL; r = r -> next) {
file <<r->info.maSach << endl
<<r->info.trangThai << endl;
}
}
file.close();
}
int i;
for(i = 0; i < ma.length(); i++)
if(ma[i] == '_') break;
temp = ma.substr(0,i);
NodeDanhMucSach *r = dsds.dsDauSach[i]->dms;
while(r != NULL) {
if(r->info.maSach.compare(ma) == 0) {
r->info.trangThai = daThanhLy;
break;
}
r = r->next;
}
}
/*
+ Bao mat sach va khong den
Chinh lai trang thai cua the doc gia: conHoatDong-> biKhoaThe
Chinh lai trang thai cua dau sach:
trong DanhSachMuonTra: chuaTra -> lamMatSach(khong cap nhat
ngay tra)
trong DanhMucSach: daMuon -> daThanhLy
*/
void BaoMatSachVaKhongDen(NodeDocGia *&p, DanhSachDauSach &dsds) {
p->info.trangThai = biKhoaThe;
NodeMuonTra *v = p->info.mt;
string ma, temp;
while(v != NULL) {
if(v->info.trangThai == chuaTra) { // quyen tai vi tri nhan enter
v->info.trangThai = lamMatSach;
ma = v->info.maSach;
break;
}
v=v->next;
}
int i;
for(i = 0; i < ma.length(); i++)
if(ma[i] == '_') break;
temp = ma.substr(0,i);
NodeDanhMucSach *r = dsds.dsDauSach[i]->dms;
while(r != NULL) {
if(r->info.maSach.compare(ma) == 0) {
r->info.trangThai = daThanhLy;
break;
}
r = r->next;
}
}
TraSachBinhThuong(p, dsds);
LuuDanhSachMuonTra(root);
LuuDanhMucSach (dsds);
cout << "Tra
sach thanh cong, du lieu da duoc luu lai!";
InCacSachDangMuon (p, dsds); // cap nhat lai cac sach dang muon va in ra
sl =
SoLuongSachDangMuon (p);
}
else if(kiTu3 ==
'N' || kiTu3 == 'n') return;
} break;
case F3: if (sl > 0)
{
cout <<"Ban muon den
sach(Y/N)? ";
char kiTu3 =
getch();
if(kiTu3 == 'Y' ||
kiTu3 == 'y') {
BaoMatSachVaDen(p, dsds);
LuuDanhSachMuonTra(root);
LuuDanhMucSach(dsds);
cout << "Den
thanh cong, du lieu da duoc luu lai!";
InCacSachDangMuon (p, dsds); // cap nhat lai cac sach dang muon va in ra
sl =
SoLuongSachDangMuon (p);
}
else if(kiTu3 ==
'N' || kiTu3 == 'n') {
BaoMatSachVaDen(p, dsds);
LuuDocGia(root);
LuuDanhSachMuonTra(root);
LuuDanhMucSach(dsds);
cout << "The
da bi khoa do khong den sach!";
InCacSachDangMuon (p, dsds); // cap nhat lai cac sach dang muon va in ra
sl =
SoLuongSachDangMuon (p);
}
} break;
}
} while (1);
}
} break;
case Backspace:
if (lengthMaTheNhapTuBanPhim > 0)
{
lengthMaTheNhapTuBanPhim--;
cout << " ";
// Dua dau nhay lai vi tri truoc khi in ra khoang
trang
lengthMaTheNhapTuBanPhim /= 10;
} break;
case Esc: return;
default:
{
if (kiTu >= 48 && kiTu <= 57)
{
switch(kiTu)
{
case '0': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 0; break;
case '1': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 1; break;
case '2': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 2; break;
case '3': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 3; break;
case '4': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 4; break;
case '5': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 5; break;
case '6': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 6; break;
case '7': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 7; break;
case '8': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 8; break;
case '9': maTheNhapTuBanPhim =
maTheNhapTuBanPhim * 10 + 9; break;
}
lengthMaTheNhapTuBanPhim++;
cout << kiTu;
}
}
}
} while (1);
}
/*
+ Trang thai the cung doc gia: biKhoaThe
+ Neu so luong sach da muon > 3
+ Co sach muon qua han: giu sach > 7 ngay
==> Thong bao khong cho muon sach
else Thong bao nhan Enter de muon sach (2)
*/
int NamNhuan(Date a) {
return ((a.nam % 4 == 0 && a.nam % 100 != 0) || a.nam % 400 == 0);
}
int SoNgay(Date b) { // so ngay tu 1/1/1990 -> b
int a = b.ngay - 1;
switch (b.thang)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: {
a = a + 31;
//cout <<a <<" ";
break;
}
case 4:
case 6:
case 9:
case 11:
a += 30;
case 2:
a += (NamNhuan(b)) ? 29 :28;
}
for(int i = 1990; i < b.nam; i++) {
a += (NamNhuan(b)) ? 366 :365;
}
return a;
}
int TinhNgay(Date muon, Date tra) {
return SoNgay(tra) - SoNgay(muon);
}
/*+ Xu li muon sach:
+ Xu li muon sach:
+ In ra danh sach dau sach
+ Dung Up/ Down de duy chuyen (thanh sang) de chon sach va nhan enter
de muon sach do
+ Neu nguoi dung chon cuon sach giong sach da muon nhung chua tra
==> Thong bao ban da muon sach nay nhung chua tra.
else:
+ In ra danh muc sach cua dau sach voi cac sach cho muon duoc,
khong in ra cac sach da duoc muon
+ Dung Up/ Down de duy chuyen (thanh sang) de chon sach va nhan
enter de muon sach do
+ quay lai (2)
*/
void InDanhSachDauSach(DanhSachDauSach dsds) {
for(int i = 0; i < dsds.n; i++) {
cout <<dsds.dsDauSach[i]->ISBN
<<dsds.dsDauSach[i]->tenSach
<<dsds.dsDauSach[i]->SoTrang
<<dsds.dsDauSach[i]->tacGia
<<dsds.dsDauSach[i]->namXuatBan
<<dsds.dsDauSach[i]->theLoai;
cout << endl;
}
}
void ChonSachTuDanhMucSach(DanhSachDauSach &dsds, DauSach *a, NodeDocGia *p, int
viTriThanhSang) {
string ma[MAXDAUSACH];
int soLuong = 0;
NodeDanhMucSach *r = a->dms;
while(r!=NULL) {
if(r->info.trangThai == choMuonDuoc) {
ma[soLuong++] = r->info.maSach;
}
r = r->next;
}
if(soLuong > 0) {
r = a->dms;
while(r != NULL) {
if(r->info.maSach.compare(ma[viTriThanhSang])) {
r->info.trangThai = daMuon;
break;
}
}
NodeMuonTra *g = p->info.mt;
if(g == NULL) {
g = new NodeMuonTra;
g->info.maSach = r->info.maSach;
g->info.ngayMuon = NgayHienTai();
g->info.ngayTra.nam = 0;
g->info.ngayTra.ngay = 0;
g->info.ngayTra.thang = 0;
g->info.trangThai = chuaTra;
g->next = NULL;
}
else {
NodeMuonTra *w = p->info.mt;
while(w->next != NULL) // nut cuoi
w = w->next;
NodeMuonTra *e = new NodeMuonTra;
e->info.maSach = r->info.maSach;
e->info.ngayMuon = NgayHienTai();
e->info.ngayTra.nam = 0;
e->info.ngayTra.ngay = 0;
e->info.ngayTra.thang= 0;
e->info.trangThai = chuaTra;
w->next = e;
e->next = NULL;
}
nMT++;
a->luotMuon++;
}
else {
cout <<"Sach nay da duoc muon het. Vui long chon quyen khac. ";
}
}
//In ra: ISBN, tenSach, ISBN_stt cua cac sach co trang thai choMuonDuoc
void InDanhMucSachChoMuonDuoc( NodeDocGia *p, DauSach *a) {// a la dau sach ng
dung chon
// in thong tin dau sach
cout << a->ISBN
<< a->tenSach;
/*
+ Neu nguoi dung chon cuon sach giong sach da muon nhung chua tra
==> Thong bao ban da muon sach nay nhung chua tra.
*/
void ChonDauSach(DanhSachDauSach &dsds, NodeDocGia *&p, int j) { //
dsds.dsDauSach[j]: dau sach ma ng dung chon
NodeMuonTra *r = p->info.mt;
string temp = dsds.dsDauSach[j]->ISBN; // isbn cua dau sach nguoi dung chon
string temp2;
int i;
while (r != NULL) {
if(r->info.trangThai == chuaTra)
for(i = 0; i < r->info.maSach.length(); i++)
if(r->info.maSach[i] == '_')
break;
temp2 = r->info.maSach.substr(0,i);
if(temp2.compare(temp) == 0) { // trung
cout <<"Ban da muon sach nay";
InDanhSachDauSach(dsds);
break;
}
else {
InDanhMucSachChoMuonDuoc( p, dsds.dsDauSach[j]);
break;
}
r = r->next;
}
}