01/10/2018, 12:24
Nhờ mọi người giúp đỡ đoạn code: Danh sách liên kết đơn có nhiều danh sách
Danh sách liên kết đơn có nhiều danh sách. ai sửa giúp mình được k mình viết hàm ra rồi mà k biết gọi lại nó như thế nào
#include <conio.h>
/*QUAN LY AN BAN TRU CUA HOC HOC SINH
- thong tin cua HS: mHS, hTen, nSinh, sBuoi
- thong tin cua GV: mGV, hTen, dThoai
- thong tin cua PhieuBT: mPhieu, mGV, thang, shs, HS ds[], tTien chuong trinh quan ly cac phieu ban tru
+ nhap danh sach phieu ban tru (kiem tra ma GV tu danh sach GV da co, co danh sach HS trong moi phieu ban tru)
+ in danh sach phieu ban tru
+ tinh tong tien tat ca cac phieu ban tru
+ Luu danh sach thong tin vao File
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//int GVQ;
/* QUẢN LÝ ĂN BÁN TRÚ
*/
//Khai bao cau truc dang DSLK don de chua danh sach HS
struct HS
{
int mHS;
char hTen[25]; char nSinh[10]; int sBuoi;
};
struct NodeHS
{
HS info;
struct NodeHS *next;
};
struct ListHS
{
NodeHS *Head; NodeHS *Tail;
};
//-----------
//Khai bao cau truc dang DSLK don de chua danh sach GV
struct GV
{
int mGV;
char hTen[25]; char dThoai[11];
};
struct NodeGV
{
GV info;
struct NodeGV *next;
};
struct ListGV
{
NodeGV *Head; NodeGV *Tail;
};
//------------------
//Khai bao CTDL dang DSLK don de chua danh sach phieu an Ban tru
struct PhieuBT
{
int mPhieu;
char lop[10];
int mGV;
int thang;
int shs;
HS ds[30];
int tTien;
};
struct NodePhieuBT
{
PhieuBT info;
struct NodePhieuBT *next;
};
struct ListPhieuBT
{
NodePhieuBT *Head; NodePhieuBT *Tail;
};
//============= ListHS QHS; ListGV QGV; ListPhieuBT QPBT;
//====================================
//Dinh nghia cac thao tac voi danh sach hoc sinh
void nhapHS(HS &x)
{
printf("
Nhap Ma HS:"); scanf("%d", &x.mHS);
printf("Nhap Ho ten:"); fflush(stdin); gets(x.hTen);
printf("Nhap Ngay sinh:"); fflush(stdin); gets(x.nSinh);
printf("Nhap so buoi ban tru cua thang:"); scanf("%d",&x.sBuoi);
}
void inHS(HS x)
{
printf("
%4d",x.mHS);
printf("%20s", x.hTen);
printf("%15s", x.nSinh);
printf("%7d", x.sBuoi);
}
void initDSHS(ListHS &Q)
{
Q.Head = NULL;
Q.Tail = NULL;
}
NodeHS *getNodeHS(HS x)
{
NodeHS *p;
p = new NodeHS();
if(p==NULL)
{
printf("
Khong thanh cong"); exit(0);
}
p->info = x;
p->next = NULL; return p;
}
void chenDauHS(ListHS &Q, NodeHS *p)
{
if(Q.Head == NULL)
{
}
else
Q.Head = p; Q.Tail =p;
{
p->next = Q.Head; Q.Head = p;
}
}
void nhapDSHS(ListHS &Q)
{
int n,i;
NodeHS *p;
HS x;
float tg;
printf("Nhap so HS:"); scanf("%d",&n);
for(i=0;i<n;i++)
{
nhapHS(x);
p = getNodeHS(x);
chenDauHS(Q,p);
}
}
void inDSHS(ListHS Q)
{
NodeHS *p;
for(p=Q.Head; p!=NULL; p=p->next)
inHS(p->info);
}
NodeHS *TimHSMa(ListHS Q,int k)
{
NodeHS *p;
for(p=Q.Head; p!=NULL; p=p->next)
if(p->info.mHS==k)
break;
return p;
}
NodeHS *TimHSTen(ListHS Q,char s[])
{
NodeHS *p;
for(p=Q.Head; p!=NULL; p=p->next) if(strcmp(p->info.hTen,s)==0) break;
return p;
}
void luuFileHS(FILE *f,ListHS Q,char *nameF)
{
f = fopen(nameF,"wb"); int n=0;
NodeHS *p;
for(p=Q.Head; p!=NULL; p=p->next)
n = n + 1;
fwrite(&n,sizeof(int),1,f);
for(p=Q.Head;p!=NULL; p=p->next)
fwrite(&p->info,sizeof(HS),1,f);
fclose(f);
}
void docFileHS(FILE *f,ListHS &Q, char *nameF)
{
HS x;
int i,n; NodeHS *p;
f = fopen(nameF,"rb");
fread(&n,sizeof(int),1,f);
for(i=0;i<n;i++)
{
fread(&x,sizeof(HS),1,f);
p = getNodeHS(x);
chenDauHS(Q,p);
}
fclose(f);
}
//===================================================
//dinh nghia cac thao tac voi giao vien
void nhapGV(GV &x)
{
printf("
Nhap Ma GV:"); scanf("%d", &x.mGV);
printf("Nhap Ho ten:"); fflush(stdin); gets(x.hTen);
printf("Nhap dien thoai:"); fflush(stdin); gets(x.dThoai);
}
void inGV(GV x)
{
printf("
%4d",x.mGV);
printf("%20s", x.hTen); printf("%15s", x.dThoai);
}
void initDSGV(ListGV &Q)
{
Q.Head = NULL; Q.Tail = NULL;
}
NodeGV *getNodeGV(GV x)
{
NodeGV *p;
p = new NodeGV();
if(p==NULL)
{
printf("
Khong thanh cong"); exit(0);
}
p->info = x;
p->next = NULL; return p;
}
void chenDauGV(ListGV &Q, NodeGV *p)
{
if(Q.Head == NULL)
{
}
else
{
Q.Head = p; Q.Tail =p;
p->next = Q.Head; Q.Head = p;
}
}
void nhapDSGV(ListGV &Q)
{
int n,i;
NodeGV *p;
GV x;
float tg;
printf("Nhap so GV:"); scanf("%d",&n);
for(i=0;i<n;i++)
{
nhapGV(x);
p = getNodeGV(x);
chenDauGV(Q,p);
}
}
void inDSGV(ListGV Q)
{
NodeGV *p;
for(p=Q.Head; p!=NULL; p=p->next)
inGV(p->info);
}
NodeGV *TimGVMa(ListGV Q,int k)
{
NodeGV *p;
for(p=Q.Head; p!=NULL; p=p->next)
if(p->info.mGV==k)
break;
return p;
}
NodeGV *TimGVTen(ListGV Q,char s[])
{
NodeGV *p;
for(p=Q.Head; p!=NULL; p=p->next)
if(strcmp(p->info.hTen,s)==0)
break;
return p;
}
void luuFileGV(FILE *f,ListGV Q,char *nameF)
{
f = fopen(nameF,"wb"); int n=0;
NodeGV *p;
for(p=Q.Head; p!=NULL; p=p->next)
n = n + 1;
fwrite(&n,sizeof(int),1,f);
for(p=Q.Head;p!=NULL; p=p->next)
fwrite(&p->info,sizeof(GV),1,f);
fclose(f);
}
void docFileGV(FILE *f,ListGV &Q, char *nameF)
{
GV x;
int i,n; NodeGV *p;
f = fopen(nameF,"rb");
fread(&n,sizeof(int),1,f);
for(i=0;i<n;i++)
{
fread(&x,sizeof(GV),1,f);
p = getNodeGV(x);
chenDauGV(Q,p);
}
fclose(f);
}
//===================================
//Quan ly phieu an ban tru
void nhapPhieuBT(PhieuBT &x)
{
NodeGV *p;
printf("
Nhap Ma phieu:"); scanf("%d",&x.mPhieu);
printf("Nhap lop:"); fflush(stdin); gets(x.lop);
do
{
printf("Nhap ma GV:"); scanf("%d",&x.mGV);
p = TimGVMa(GVQ, x.mGV);
if (p==NULL)
printf("
Ban nhap ma GV chua co trong danh sach. Moi nhap lai!");
}
while (p!=NULL);
printf("Nhap thang:"); scanf("%d",&x.thang);
printf("Nhap so hoc sinh cua lop:"); scanf("%d",&x.shs);
for(int i = 0; i<x.shs; i++)
nhapHS(x.ds[i]);
x.tTien = 0;
for(int i = 0; i<x.shs; i++)
x.tTien = x.tTien + x.ds[i].sBuoi * 35000;
}
/* int mPhieu;
char lop[10]; int mGV;
int thang; int shs; HS ds[30];
int tTien;
*/
void inPhieuBT(PhieuBT x)
{
printf("
Ma phieu:%4d",x.mPhieu);
printf("
Lop:%20s", x.lop);
printf("
Giao vien:%d",x.mGV);
printf("
Thang: %d",x.thang);
printf("
Tong so hoc sinh an ban tru:%d",x.shs);
printf("
Danh sach hoc sinh chi tiet
");
for(int i=0;i<x.shs;i++) inHS(x.ds[i]);
printf("
Thanh tien ban tru:%d",x.tTien);
}
void initPhieuBT(ListPhieuBT &Q)
{
Q.Head = NULL; Q.Tail = NULL;
}
NodePhieuBT *getNodePhieuBT(PhieuBT x)
{
NodePhieuBT *p;
p = new NodePhieuBT();
if(p==NULL)
{
printf("
Khong thanh cong"); exit(0);
}
p->info = x;
p->next = NULL;
return p;
}
void chenDauPhieuBT(ListPhieuBT &Q, NodePhieuBT *p)
{
if(Q.Head == NULL)
{
}
else
{
Q.Head = p; Q.Tail =p;
p->next = Q.Head; Q.Head = p;
}
}
void nhapDSPhieuBT(ListPhieuBT &Q)
{
int n,i;
NodePhieuBT *p;
PhieuBT x;
float tg;
printf("Nhap so phieu ban tru:"); scanf("%d",&n);
for(i=0;i<n;i++)
{
nhapPhieuBT(x);
p = getNodePhieuBT(x);
chenDauPhieuBT(Q,p);
}
}
void inDSPhieuBT(ListPhieuBT Q)
{
NodePhieuBT *p;
for(p=Q.Head; p!=NULL; p=p->next)
inPhieuBT(p->info);
}
NodePhieuBT *TimPhieuBTLop(ListPhieuBT Q,int k)
{
NodePhieuBT *p;
for(p=Q.Head; p!=NULL; p=p->next)
if(p->info.mGV==k)
break;
return p;
}
void luuFilePhieuBT(FILE *f,ListPhieuBT Q,char *nameF)
{
f = fopen(nameF,"wb");
int n=0;
NodePhieuBT *p;
for(p=Q.Head; p!=NULL; p=p->next)
n = n + 1;
fwrite(&n,sizeof(int),1,f);
for(p=Q.Head;p!=NULL; p=p->next)
fwrite(&p->info,sizeof(PhieuBT),1,f);
fclose(f);
}
void docFilePhieuBT(FILE *f,ListPhieuBT &Q, char *nameF)
{
PhieuBT x;
int i,n;
NodePhieuBT *p;
f = fopen(nameF,"rb");
fread(&n,sizeof(int),1,f);
for(i=0;i<n;i++)
{
fread(&x,sizeof(PhieuBT),1,f);
p = getNodePhieuBT(x);
chenDauPhieuBT(Q,p);
}
fclose(f);
}
//=====================================================
int main()
{
NodeHS *p;
FILE *f;
NodeGV *q;
initDSHS(QHS);
initDSGV(QGV);
initPhieuBT(QPBT);
//nhapDSHS(Q); docFileHS(f,QHS,"DSHS.dat"); printf("
DSHS da nhap:"); inDSHS(QHS);
//luuFileHS(f,Q,"DSHS.dat");
nhapDSGV(QGV);
printf("
Danh sach giao vien da nhap
");
getch();
}
Bài liên quan
mình chưa hiểu cái đề của bạn lắm nhưng danh sách lồng trong 1 danh sách khác thì đây là VD