01/10/2018, 12:06
Em làm thế này thì sắp xếp danh sách mình phải làm sao... mò cả đêm vẫn mà viết vẫn bị lỗi
// DE TAI QUAN LY HOC SINH TRUNG HOC PHO THONG (GVCN)
#include <stdio.h<stdio.h>>
#include <<conio.h>conio.h>
#include <<string.h>string.h>
typedef struct
{
char ngay;
char thang;
int nam;
}ngaythang;
typedef struct
{
float van;
float toan;
float ly;
float hoa;
float sinh;
float su;
float dia;
float anhvan;
}diemcacmon;
typedef struct
{
char mshs[100];
char ten[100];
ngaythang ngaysinh;
char diachi[100];
char sdt[100];
char gioitinh[100];
diemcacmon diemso;
char xeploai[100];
}hocsinh;
void demsolan(int a) // in so lan thuc hien chuong trinh
{
FILE *f;
f = fopen("dem.txt","a+b");
int n;
int c = fread(&n, sizeof(n), 1, f);
fclose(f);
f = fopen("dem.txt","w+b");
if(c=0) n=0;
n=n+1;
fwrite(&n, sizeof(n), 1,
f);
printf("Chuong trinh da thuc hien %d lan...
", n);
fclose(f);
getch();
}
void nhaphs(hocsinh s) // Nhap thong tin hoc sinh
{
FILE *f;
f=fopen("DanhSachHocSinh.txt","wb");
int n;
printf("Nhap bao nhieu HS:"); scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("Sinh vien thu %d
",i);
fflush(stdin);
printf("- MSHS:"); gets(s.mshs);
printf("- HO VA TEN:"); gets(s.ten);
printf("- GIOI TINH:"); gets(s.gioitinh);
printf("- Ngay sinh:"); scanf("%d",&s.ngaysinh.ngay);
printf("- Thang sinh:"); scanf("%d",&s.ngaysinh.thang);
printf("- Nam sinh:"); scanf("%d",&s.ngaysinh.nam);
fflush(stdin);
printf("- SDT:"); gets(s.sdt);
printf("- DIA CHI:"); gets(s.diachi);
printf("NHAP DIEM CUA HOC SINH
");
printf("- Ngu Van:"); scanf("%f",&s.diemso.van);
printf("- Toan:"); scanf("%f",&s.diemso.toan);
printf("- Ly:"); scanf("%f",&s.diemso.ly);
printf("- Hoa:"); scanf("%f",&s.diemso.hoa);
printf("- Sinh:"); scanf("%f",&s.diemso.sinh);
printf("- Su:"); scanf("%f",&s.diemso.su);
printf("- Dia:"); scanf("%f",&s.diemso.dia);
printf("- Anh Van:"); scanf("%1f",&s.diemso.anhvan);
fwrite(&s,sizeof(s),1,f);
}
printf("-----------------------------------------------------------------
");
fclose(f);
getch();
}
void indiemhs(hocsinh s) // In diem hoc sinh ra man hinh
{
FILE *f;
f=fopen("DanhSachHocSinh.txt","rb");
printf(" MSHS | HO VA TEN | NGU VAN | TOAN | LY | HOA | SINH | SU | DIA | ANH VAN | TRUNG BINH | XEP LOAI
");
fread(&s,sizeof(s),1,f);
while(!feof(f))
{
float a=((s.diemso.van*2)+(s.diemso.toan*2)+s.diemso.ly+s.diemso.hoa+s.diemso.sinh+s.diemso.su+s.diemso.dia+s.diemso.anhvan)/10;
if(a>=8 && s.diemso.van>=6.5 && s.diemso.toan>=6.5 && s.diemso.ly>=6.5 && s.diemso.hoa>=6.5 && s.diemso.sinh>=6.5 && s.diemso.su>=6.5 && s.diemso.dia>=6.5 && s.diemso.anhvan>=6.5) printf(" %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f HSG
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
else if(a>=6.5 && s.diemso.van>=5 && s.diemso.toan>=5 && s.diemso.ly>=5 && s.diemso.hoa>=5 && s.diemso.sinh>=5 && s.diemso.su>=5 && s.diemso.dia>=5 && s.diemso.anhvan>=5) printf(" %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f HSK
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
else if (a>=5 && s.diemso.van>=3.5 && s.diemso.toan>=3.5 && s.diemso.ly>=3.5 && s.diemso.hoa>=3.5 && s.diemso.sinh>=3.5 && s.diemso.su>=3.5 && s.diemso.dia>=3.5 && s.diemso.anhvan>=3.5) printf(" %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f HSTB
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
else if(a>=3.5 && s.diemso.van>=2 && s.diemso.toan>=2 && s.diemso.ly>=2 && s.diemso.hoa>=2 && s.diemso.sinh>=2 && s.diemso.su>=2 && s.diemso.dia>=2 && s.diemso.anhvan>=2) printf(" %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f HSY
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
else printf(" %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f HSK
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
fread(&s,sizeof(s),1,f);
}
printf("-------------------------------------------------------------------------------------------------
");
fclose(f);
getch();
}
void inhs(hocsinh s) // In thong tin hoc sinh ra man hinh
{
FILE *f;
f=fopen("DanhSachHocSinh.txt","rb");
printf(" MSHS | HO VA TEN | GIOI TINH | NAM SINH | SDT | DIA CHI
");
fread(&s,sizeof(s),1,f);
while(!feof(f))
{
printf("%s %s %s %d-%d-%d %s %s
",s.mshs,s.ten,s.gioitinh,s.ngaysinh.ngay,s.ngaysinh.thang,s.ngaysinh.nam,s.sdt,s.diachi);
fread(&s,sizeof(s),1,f);
}
printf("--------------------------------------------------------------------------------
");
fclose(f);
getch();
}
void timkiemhs(hocsinh s) // Tim kiem bang ma so hoc sinh
{
char maso[10];
fflush(stdin);
FILE *f;
f=fopen("DanhSachHocSinh.txt","rb");
int timkiem=0;
printf("- Nhap MSHS can tim:"); gets(maso);
fflush(stdin);
while(timkiem==0 && !feof(f))
{
fread(&s,sizeof(s),1,f);
if(strcmp(s.mshs,maso)==0) timkiem=1;
}
printf("-----------------------------------
");
float a=((s.diemso.van*2)+(s.diemso.toan*2)+s.diemso.ly+s.diemso.hoa+s.diemso.sinh+s.diemso.su+s.diemso.dia+s.diemso.anhvan)/10;
if(timkiem==1)
{
printf("Da tim thay hoc sinh co ma so:%s
",maso);
printf("- HO VA TEN: %s
",s.ten);
printf("- GIOI TINH: %s
",s.gioitinh);
printf("- Nam sinh: %d-%d-%d
",s.ngaysinh.ngay,s.ngaysinh.thang,s.ngaysinh.nam);
printf("- SDT: %s
",s.sdt);
printf("- DIA CHI :%s
",s.diachi);
printf("------------------------
");
printf("DIEM CUA HOC SINH""
");
printf("- Ngu Van: %.1f
",s.diemso.van);
printf("- Toan: %.1f
",s.diemso.toan);
printf("- Ly: %.1f
",s.diemso.ly);
printf("- Hoa: %.1f
",s.diemso.hoa);
printf("- Sinh: %.1f
",s.diemso.sinh);
printf("- Su: %.1f
",s.diemso.su);
printf("- Dia: %.1f
",s.diemso.dia);
printf("- Anh Van: %.1f
",s.diemso.anhvan);
printf("- Diem trung binh:%.1f
",a);
if(a>=8 && s.diemso.van>=6.5 && s.diemso.toan>=6.5 && s.diemso.ly>=6.5 && s.diemso.hoa>=6.5 && s.diemso.sinh>=6.5 && s.diemso.su>=6.5 && s.diemso.dia>=6.5 && s.diemso.anhvan>=6.5) printf("- Xep loai: Hoc sinh gioi.
");
else if(a>=6.5 && s.diemso.van>=5 && s.diemso.toan>=5 && s.diemso.ly>=5 && s.diemso.hoa>=5 && s.diemso.sinh>=5 && s.diemso.su>=5 && s.diemso.dia>=5 && s.diemso.anhvan>=5) printf("- Xep loai: Hoc sinh kha.
");
else if (a>=5 && s.diemso.van>=3.5 && s.diemso.toan>=3.5 && s.diemso.ly>=3.5 && s.diemso.hoa>=3.5 && s.diemso.sinh>=3.5 && s.diemso.su>=3.5 && s.diemso.dia>=3.5 && s.diemso.anhvan>=3.5) printf("- Xep loai: Hoc sinh trung binh.
");
else if(a>=3.5 && s.diemso.van>=2 && s.diemso.toan>=2 && s.diemso.ly>=2 && s.diemso.hoa>=2 && s.diemso.sinh>=2 && s.diemso.su>=2 && s.diemso.dia>=2 && s.diemso.anhvan>=2) printf("- Xep loai: Hoc sinh yeu.
");
else printf("- Xep loai: Hoc sinh kem.
");
} else printf("Khong tim thay hoc sinh co ma so %s
",maso);
fclose(f);
printf("-----------------------------------
");
getch();
}
void themhocsinh(hocsinh s) //them hoc sinh vao danh sach
{
FILE *f;
f=fopen("DanhSachHocSinh.txt","ab");
int n;
printf("Them bao nhieu HS:"); scanf("%d",&n);
fread(&s,sizeof(s),1,f);
for(int i=1;i<=n;i++)
{
fread(&s,sizeof(s),1,f);
printf("Hoc sinh thu %d
",i);
fflush(stdin);
printf("- MSHS:"); gets(s.mshs);
printf("- HO VA TEN:"); gets(s.ten);
printf("- GIOI TINH:"); gets(s.gioitinh);
printf("- Ngay sinh:"); scanf("%d",&s.ngaysinh.ngay);
printf("- Thang sinh:"); scanf("%d",&s.ngaysinh.thang);
printf("- Nam sinh:"); scanf("%d",&s.ngaysinh.nam);
fflush(stdin);
printf("- SDT:"); gets(s.sdt);
printf("- DIA CHI:"); gets(s.diachi);
printf("NHAP DIEM CUA HOC SINH
");
printf("- Ngu Van:"); scanf("%f",&s.diemso.van);
printf("- Toan:"); scanf("%f",&s.diemso.toan);
printf("- Ly:"); scanf("%f",&s.diemso.ly);
printf("- Hoa:"); scanf("%f",&s.diemso.hoa);
printf("- Sinh:"); scanf("%f",&s.diemso.sinh);
printf("- Su:"); scanf("%f",&s.diemso.su);
printf("- Dia:"); scanf("%f",&s.diemso.dia);
printf("- Anh Van:"); scanf("%1f",&s.diemso.anhvan);
fwrite(&s,sizeof(s),1,f);
}
printf("-----------------------------------------------------------------
");
fclose(f);
getch();
}
void sapxep(hocsinh s)
{
}
int main()
{
int c; int a;
FILE *f;
f=fopen("DanhSachHocSinh.txt","ab");
hocsinh hs;
for(;;)
{
printf("1. Nhap danh sach hoc sinh
");
printf("2. Xem danh sach hoc sinh
");
printf("3. Xem diem hoc sinh
");
printf("4. Tim kiem hoc sinh
");
printf("5. Them hoc sinh
");
printf("6. Xoa hoc sinh
");
printf("10. Thoat ra
");
scanf("%d",&c);
if(c==1) nhaphs(hs);
else if(c==2) inhs(hs);
else if(c==3) indiemhs(hs);
else if(c==4) timkiemhs(hs);
else if(c==5) themhocsinh(hs);
else if(c==6) sapxep(hs);
else if(c==10)
{
demsolan(a);
break;
}
}
fclose(f);
getch();
return 0;
}
Bài liên quan
e đọc file txt vào ram rồi sắp xếp mảng vừa đọc theo 1 tiêu chí sắp xếp nào đó như giảm dần đtb, sau đó ghi lại ra file,
sắp xếp 1 mảng trong cấu trúc là tất cả các trường còn lại đều sắp xếp theo lun hả a
Mình thì mình trải thêm 1 dọc pointer (tạm) nữa, chứ vầy thì phê lắm
Vả lại phần xếp loại có thể viết lại.
Bạn phải viết 1 hàm so sánh 2 struct riêng, sau đó sort dựa trên kết quả so sánh.