Mọi người giúp mình làm bài này với:


HangHoa * ThemHH(Kho &k, HangHoa h)
{
HangHoa *ph = new HangHoa;
*ph = h;
if (!k.pHead || (k.pHead && ph->MaHH.compare(k.pHead->MaHH) < 0)) {
ph->pNext = k.pHead;
k.pHead = ph;
}
else {
HangHoa *i = k.pHead;
for (; i->pNext && i->pNext->MaHH.compare(ph->MaHH) < 0; i = i->pNext);
ph->pNext = i->pNext;
i->pNext = ph;
}
return ph;
}
void LocHangHoaTinhThue(Kho k, HangHoa *&pHead, double GiaTriTinhThue) {
for (HangHoa *i = k.pHead; i; i = i->pNext)
if (i->Giatri >= GiaTriTinhThue) {
HangHoa * t = new HangHoa;
t->MaHH = i->MaHH;
t->TenHH = i->TenHH;
t->NgayNhap = i->NgayNhap;
t->Giatri = i->Giatri;
t->pNext = 0;
if (!pHead)
pHead = t;
else {
t->pNext = pHead;
pHead = t;
}
}
}
bool lessDate(Date d1, Date d2) {
return (d1.y < d2.y) ||
(d1.y == d2.y && d1.m < d2.m) ||
(d1.y == d2.y && d1.m == d2.m && d1.d < d2.d);
}
HangHoa XuatKho(Kho &k) {
if (!k.pHead)
return HangHoa();
// find the minimum date
HangHoa *pMin = k.pHead;
for (HangHoa *i = k.pHead; i; i = i->pNext)
if (lessDate(i->NgayNhap, pMin->NgayNhap))
pMin = i;
// extract pMin from the list
if (pMin == k.pHead)
k.pHead = k.pHead->pNext;
else
for (HangHoa *i = k.pHead; i->pNext; i = i->pNext)
if (i->pNext == pMin) {
i->pNext = pMin->pNext;
break;
}
pMin->pNext = 0;
return *pMin;
}
void XuatKho(Kho &k, int n) {
if (k.pHead && n > 0) {
for (int i = 0; i < n && k.pHead; ++i) {
HangHoa h = XuatKho(k);
printf("%d : %s\n", i + 1, h.TenHH.c_str());
}
}
}
void printHH(HangHoa *head) {
for (HangHoa *i = head; i; i = i->pNext)
printf("%s\n %d %d %d\n %.1f\n", i->MaHH.c_str(), i->NgayNhap.d, i->NgayNhap.m, i->NgayNhap.y, i->Giatri);
}
int main() {
Kho k;
k.pHead = 0;
HangHoa h1;
h1.MaHH = "005";
h1.TenHH = h1.MaHH;
h1.NgayNhap.d = 2;
h1.NgayNhap.m = 3;
h1.NgayNhap.y = 2005;
h1.Giatri = 10;
HangHoa h2;
h2.MaHH = "015";
h2.TenHH = h2.MaHH;
h2.NgayNhap.d = 7;
h2.NgayNhap.m = 8;
h2.NgayNhap.y = 2008;
h2.Giatri = 15;
HangHoa h3;
h3.MaHH = "010";
h3.TenHH = h3.MaHH;
h3.NgayNhap.d = 7;
h3.NgayNhap.m = 8;
h3.NgayNhap.y = 2009;
h3.Giatri = 18;
HangHoa h4;
h4.MaHH = "007";
h4.TenHH = h4.MaHH;
h4.NgayNhap.d = 10;
h4.NgayNhap.m = 11;
h4.NgayNhap.y = 2004;
h4.Giatri = 4;
// Cau a
HangHoa *result = ThemHH(k, h1);
result = ThemHH(k, h2);
result = ThemHH(k, h3);
result = ThemHH(k, h4);
printHH(k.pHead);
// Cau b
double tax = 12;
printf("\nTax: %.1f\n", tax);
result = 0;
LocHangHoaTinhThue(k, result, tax);
printHH(result);
// Cau c
printf("\nXuat kho:\n");
HangHoa hhh = XuatKho(k);
printf("%s %d %d %d\n", hhh.MaHH.c_str(), hhh.NgayNhap.d, hhh.NgayNhap.m, hhh.NgayNhap.y);
printf("Kho con lai:\n");
printHH(k.pHead);
// Cau d
int n = 2;
printf("\nXuat kho %d lan:\n", n);
XuatKho(k, n);
printf("Kho con lai:\n");
printHH(k.pHead);
delete result;
result = 0;
}