Chào mn, cho mình hỏi lỗi này là lỗi gì ạ, mình nhập vào số 4 đề tìm , tiếp theo mình nhập 1 đề tim theo mã, mình nhập chuỗi vào thì bị lỗi ạ.
#include <string>
#include <iomanip>
using namespace std;
struct ThoiGian
{
int ngay, thang;
long nam;
};
struct Sach
{
char masach[20];
char tensach[30];
ThoiGian ngayxuatban;
int soluong;
};
struct DSSach
{
Sach ds[100];
int n;
};
typedef struct NODE*NODEPTR;
struct NODE
{
Sach info;
NODEPTR next;
};
void Khoi_Tao(NODEPTR &L);
bool KT_Rong(NODEPTR L);
NODEPTR Tao_Node(Sach s);
void Nhap_1_Quyen_Sach(Sach &s);
void Xuat_1_Quyen_Sach(Sach s);
bool Kiem_Tra1(string s);
bool KT_NgayThangMam(ThoiGian t);
void Chon_Chuong_Trinh(NODEPTR &L);
void Them_Dau(NODEPTR &L, Sach s);
void Them_Cuoi(NODEPTR &L, Sach s);
void Xuat_DS_Sach(NODEPTR L);
void Them_Sach_Vi_Tri_Bat_Ky(NODEPTR &L, int vitri, Sach s);
int Do_Dai_DS(NODEPTR L);
void Tim_Kiem_Ma(NODEPTR L, char ma[20]);
void Khoi_Tao(NODEPTR &L)
{
L = NULL;
}
bool KT_Rong(NODEPTR L)
{
return L == NULL ? true : false;
}
NODEPTR Tao_Node(Sach s)
{
NODEPTR p = new NODE();
p->info = s;
p->next = NULL;
return p;
}
void Nhap_1_Quyen_Sach(Sach &s)
{
string x;
cout << "\nMa sach: ";
fflush(stdin);
cin.getline(s.masach, 20);
cout << "\nTen sach: ";
fflush(stdin);
cin.getline(s.tensach, 20);
tt:
cout << "\nNgay, thang, nam xuat ban: ";
fflush(stdin);
getline(cin, x);
if (!Kiem_Tra1(x))
goto tt;
s.ngayxuatban.ngay = atoi(x.c_str());
fflush(stdin);
getline(cin, x);
if (!Kiem_Tra1(x))
goto tt;
s.ngayxuatban.thang = atoi(x.c_str());
fflush(stdin);
getline(cin, x);
if (!Kiem_Tra1(x))
goto tt;
s.ngayxuatban.nam = atoi(x.c_str());
if (!KT_NgayThangMam(s.ngayxuatban))
goto tt;
tt1:
cout << "\nSo luong: ";
fflush(stdin);
getline(cin, x);
if (!Kiem_Tra1(x))
goto tt1;
s.soluong = atoi(x.c_str());
}
void Xuat_1_Quyen_Sach(Sach s)
{
cout << setw(20) << left << s.masach << "\t" << setw(20) << left << s.tensach << "\t" << setw(8) << left << s.soluong << "\t" << s.ngayxuatban.ngay << "/" << s.ngayxuatban.thang << "/" << s.ngayxuatban.nam << endl;
cout << endl;
}
bool Kiem_Tra1(string s)
{
if (s[0] < 47 || s[0]>57)
return false;
return true;
}
bool KT_NgayThangMam(ThoiGian t)
{
if (t.ngay <= 0 || t.thang <= 0 || t.nam <= 0)
return false;
else
{
if ((t.thang == 1 || t.thang == 3 || t.thang == 5 || t.thang == 7 || t.thang == 8 || t.thang == 10 || t.thang == 12) && (t.ngay >= 1 && t.ngay <= 31))
return true;
else if (t.thang == 2)
{
if (t.nam % 4 == 0 && t.ngay >= 1 && t.ngay <= 29)
return true;
else if (t.nam % 4 != 0 && t.ngay >= 1 && t.ngay <= 28)
return true;
else return false;
}
else if ((t.thang == 2 || t.thang == 4 || t.thang == 6 || t.thang == 9 || t.thang == 11) && (t.ngay >= 1 && t.ngay <= 30))
return true;
else return false;
}
}
void Them_Dau(NODEPTR &L, Sach s)
{
NODEPTR p = Tao_Node(s);
NODEPTR q = L;
if (L == NULL)
L = p;
else
{
p->next = q;
L = p;
}
}
void Them_Cuoi(NODEPTR &L, Sach s)
{
NODEPTR q, p = Tao_Node(s);
if (L == NULL)
{
Them_Dau(L, s);
}
else
{
q = L;
while (q->next != NULL)
{
q = q->next;
}
q->next = p;
}
}
void Xuat_DS_Sach(NODEPTR L)
{
NODEPTR q = L;
while (q != NULL)
{
Xuat_1_Quyen_Sach(q->info);
q = q->next;
}
}
void Tim_Kiem_Ma(NODEPTR L, char ma[20])
{
DSSach ds;
ds.n = 0;
NODEPTR q = L;
while (q != NULL)
{
if (strcmp(q->info.masach, ma) == 0)
{
ds.ds[ds.n++] = q->info;
break;
}
q = q->next;
}
for each (Sach s in ds.ds)
{
Xuat_1_Quyen_Sach(s);
}
}
int Do_Dai_DS(NODEPTR L)
{
int dodai = 0;
NODEPTR q = L;
while (q != NULL)
{
dodai++;
q = q->next;
}
return dodai;
}
void Them_Sach_Vi_Tri_Bat_Ky(NODEPTR &L, int vitri, Sach s)
{
NODEPTR r, q, p = Tao_Node(s);
q = L->next;
r = L;
int dem = 0;
if (vitri == 0)
{
Them_Dau(L, s);
}
else if (vitri == Do_Dai_DS(L) + 1)
{
Them_Cuoi(L, s);
}
else
{
while (dem != vitri)
{
dem++;
q = q->next;
r = r->next;
}
p->next = q;
r->next = p;
}
}
void Chon_Chuong_Trinh(NODEPTR &L)
{
Sach s;
int chon, chon1,chon2,vitri;
char x[20];
tt:
cout << "\n\t\t\tCHUONG TRINH QUAN LY SACH\n";
cout << "\n1/Nhap danh sach sach";
cout << "\n2/Xuat danh sach sach";
cout << "\n3/Them 1 sach vao vi tri bat ky";
cout << "\n4/Tim kiem sach";
cout << "\nChon chuong trinh hoac nhap 0 de thoat: ";
cin >> chon;
switch (chon)
{
case 1:
{
tt1:
cout<<"\nNhap thong tin hoac thoat 1/0";
cin >> chon1;
if (chon1 == 1)
{
Nhap_1_Quyen_Sach(s);
Them_Cuoi(L, s);
goto tt1;
}
break;
}
case 2:
{
Xuat_DS_Sach(L);
break;
}
case 3:
{
cout << "\nNhap thong tin sach muon them: ";
Nhap_1_Quyen_Sach(s);
cout << "\nNhap vi tri muon them: ";
cin >> vitri;
Them_Sach_Vi_Tri_Bat_Ky(L, vitri-1, s);
break;
}
case 4:
{
cout << "\n1/Tim kiem theo ma";
cout << "\n1/Tim kiem theo ten";
cout << "\n1/Tim kiem theo ngay xuat ban";
cin >> chon2;
switch (chon2)
{
case 1:
{
cout << "\nNhap ma tim kiem";
fflush(stdin);
cin.getline(x, 20);
Tim_Kiem_Ma(L, x);
break;
}
default:
break;
}
break;
}
default:
break;
}
if (chon != 0)
goto tt;
}
void main()
{
NODEPTR L;
Khoi_Tao(L);
Chon_Chuong_Trinh(L);
system("Pause");
}


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?