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();
}
Nguyễn Phú Thành viết 14:26 ngày 01/10/2018
struct game
{
    char tengame[50];
    float dungluong;
    int sogiodachoi;
};
struct node_game
{
    game info;
    node_game *next;
};
struct list_game
{
    node_game *dau;
    node_game *cuoi;
};
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
struct user
{
    char id[50];
    char pass[50];
    list_game a;
};
struct node_user
{
    user info;
    node_user *next;
}
struct list_user
{
    node_user *dau;
    node_user *cuoi;
};

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

Bài liên quan
0