cout của bác nhầm rùi mà. bác chuyển cout và cin thành kiểu printf và scanf là ok đó
Bài này em đã làm xong (viết bằng C++) nhưng có 1 vài chức năng chưa chạy được. Ấn F9 thì thông báo ko có lỗi gì nhưng chỉ có mấy mục 0,1,2,3,4,9,A là chạy được. Ngoài ra lúc in ra cũng ko ra ký tự bình thường mà ra toàn là %x,%y...Các anh có thể kiểm tra hộ em xem đó là lỗi gì ko ?
/* Chuong trinh quan ly sinh vien */
#include<stdio.h>
#include"dos.h"
#include<conio.h>
#include<string.h> //#include"t.h"
#include<ctype.h>
#include<iostream.h>
char file_name[25]="sv.dat";
typedef struct Date
{
int ngay;
int thang;
int nam;
};
typedef struct quequan
{
char tinh[20];
char huyen[20];
char xa[20];
};
typedef struct hoten
{
char ho[20];
char tendem[20];
char ten[20];
};
typedef struct sinh_vien
{
hoten ht;
Date ns;
quequan qq;
float diem_tb;
char ma_so[5];
char lop[20]; //moi them vao
};
typedef struct
{
char tenlop[30];
sinh_vien thanhvien; // long cau truc sinh vien vao vao cau truc lop
int nam,nu; //so dinh vien nam, nu
int nienkhoa,tong;
char danhhieu[20];
}lop;
FILE *f;
int n;
void khoi_tao(sinh_vien a[]);
void in_danh_sach(sinh_vien a[],int n);
void them_sv(sinh_vien a[]);
void loai_sv(sinh_vien a[]);
void sua_chua(sinh_vien a[]);
void sx_ten(sinh_vien a[]);
void sx_ns(sinh_vien a[]);
void sx_tb(sinh_vien a[]);
void sx_ma_so(sinh_vien a[]);
void tim_que(sinh_vien a[]);
void tim_diem(sinh_vien a[]);
void tim_danhhieu(sinh_vien a[]);
void tim_ns(sinh_vien a[]);
void tim_kiem(sinh_vien a[]);
void ghi(sinh_vien a[],int n); // void chuan(void);
void main()
{textmode(C80);
sinh_vien a[150];
char ch='a';
clrscr();
khoi_tao(a);
while(ch!='0')
{
clrscr();
cout<< " \n Sinh vien thuc hien: Hoang Quoc Viet " ;
cout<< " \n Chuong trinh quan ly sinh vien ";
cout<< " \n ****************************************";
cout<< " \n 1: In danh sach sinh vien ";
cout<< " \n 2: Them mot sinh vien vao danh sach ";
cout<< " \n 3: Loai mot sinh vien khoi danh sach ";
cout<< " \n 4: Thay doi thong tin mot sinh vien ";
cout<< " \n 5: Sap xep sinh vien theo ten ";
cout<< " \n 6: Sap xep sinh vien theo ngay sinh ";
cout<< " \n 7: Sap xep sinh vien theo diem trung binh ";
cout<< " \n 8: Sap xep sinh vien theo ma so ";
cout<< " \n 9: Tim kiem sinh vien theo Ten ";
cout<< " \n A: Tim kiem sinh vien theo Que ";
cout<< " \n B: Tim kiem sinh vien theo Diem ";
cout<< " \n C: Tim kiem sinh vien theo Danh hieu ";
cout<< " \n D: Tim kiem sinh vien theo Ngay sinh ";
cout<< " \n 0: Thoat ";
fflush(stdin);
ch=getch();
switch(ch)
{
case '1': in_danh_sach(a,n); break;
case '2': them_sv(a); break;
case '3': loai_sv(a); break;
case '4': sua_chua(a); break;
case '5': sx_ten(a); break;
case '6': sx_ns(a); break;
case '7': sx_tb(a); break;
case '8': sx_ma_so(a); break;
case '9': tim_kiem(a); break;
case 'a': tim_que(a);break;
case '0': ghi(a,n); break;
};
}
}
void khoi_tao(sinh_vien a[])
{
n=0;
sinh_vien sv;
f=fopen("d:\\sv.dat","ab");
if(f==NULL)
f=fopen("file_name","ab");
else
while(fread(&sv,sizeof(sinh_vien),1,f)>0)
{
n++;
a[n]=sv;
}
fclose(f);
}
void in_danh_sach(sinh_vien a[], int n)
{
int i,y=1;
clrscr();
fflush(stdin);
cout<< " ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ";
y++;
gotoxy(1,y); cout<< "³Stt ";
gotoxy(6,y); cout<< "³ Ho va Ten";
gotoxy(34,y); cout<< "³ Ngay sinh";
gotoxy(46,y); cout<< "³ Que quan";
gotoxy(62,y); cout<< "³Diem tb";
gotoxy(72,y); cout<< "³ Ma so ³";
cout<< "ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ?ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄ ?ÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÅÄÄ ?ÄÄÄÄ´";
y++;
for(i=1;i<=n;i++)
{
// chuan(a[i].ho);
// chuan(a[i].ten);
y++;
gotoxy(1,y); cout<< "³ %d",i;
gotoxy(6,y); cout<< "³ %s %s",a[i].ht.ho,a[i].ht.ten;
gotoxy(34,y); cout<< "³%2d:%2d:%d",a[i].ns.ngay,a[i].ns.thang,a[i].ns.nam;
gotoxy(46,y); cout<< "³ %s",a[i].qq.tinh;
gotoxy(62,y); cout<< "³";
if(a[i].diem_tb>=0)
{
gotoxy(63,y); cout<< "%0.2f",a[i].diem_tb;
}
gotoxy(72,y); cout<< "³ %s ³",a[i].ma_so;
if(y>23)
{
if(i==n)
cout<< "ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ?ÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄ ?ÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄ ?ÄÄÄÙ";
getch();
clrscr();
y=0;
}
}
if(y!=0)
{
cout<< "ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ?ÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄ ?ÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄ ?ÄÄÄÄÙ";
getch();
}
}
void them_sv(sinh_vien a[])
{
clrscr();
char s[30];
float tb;
int i,j,d,c;
cout<< " Ho va Ten:"; fflush(stdin); gets(s);
if(s!='\0')
{
n++;
c=strlen(s)-1;
while(s[c]==' '&&c>0) c--;
d=c;
while(s[d]!=' '&&d>0) d--;
j=0;
for(i=d+1;i<=c;i++)
{
a[n].ht.ten[j]=s[i];
j++;
}
a[n].ht.ten[j]='\0';
c=d;
while(s[c]==' '&&c>0) c--;
d=0;
while(s[d]==' '&&d<c) d++;
j=0;
for(i=d;i<=c;i++)
{
a[n].ht.ho[j]=s[i];
j++;
}
a[n].ht.ho[j]='\0';
cout<< " Ngay thang nam sinh:";
cin>>"%d%d%d",&i,&j,&d;
a[n].ns.ngay=i;
a[n].ns.thang=j;
a[n].ns.nam=d;
cout<< " Que quan:";
cout<< " Tinh : "; fflush(stdin);
gets(s);strcpy(a[n].qq.tinh,s);
cout<< " Huyen : "; fflush(stdin);
gets(s);strcpy(a[n].qq.huyen,s);
cout<< "Xa : "; fflush(stdin);
gets(s);strcpy(a[n].qq.xa,s);
cout<< " Diem trung binh:";
cin>>"%f",&tb;
a[n].diem_tb=tb;
cout<< " Ma so sinh vien:"; fflush(stdin);
gets(a[n].ma_so);
}
}
void loai_sv(sinh_vien a[])
{
clrscr();
int k,i;
char ch='n';
cout<< " So thu tu cua sinh vien can xoa:";
scanf("%d",&k);
if(k<1||k>n)
cout<< " Khong tim thay sinh vien thu %d trong danh sach",k;
else
{
cout<< " Sinh vien thu %d la: %s %s",k,a[k].ht.ho,a[k].ht.ten;
cout<< " Sinh ngay %d %d %d",a[k].ns.ngay,a[k].ns.thang,a[k].ns.nam;
cout<< " Que quan:";
cout<< " Tinh: %s",a[k].qq.tinh;
cout<< " Huyen : %s",a[k].qq.huyen;
cout<< " Xa: %s",a[k].qq.xa;
if(a[k].diem_tb>=0)
cout<< " Diem trung binh: %0.2f",a[k].diem_tb;
cout<< " Ma so sinh vien: %s",a[k].ma_so;
cout<< " Ban co chac la xoa sinh vien nay khong (y/n)";
fflush(stdin); ch=getche();
}
if(ch=='y'||ch=='Y')
{
for(i=k;i<n;i++)
a[i]=a[i+1];
n--;
cout<< " Da xoa sinh vien thu %d khoi danh sach",k;
}
getch();
}
void sua_chua(sinh_vien a[])
{
clrscr();
int k,i;
char ch='n';
cout<< " So thu tu cua sinh vien can thay doi:";
cin>>"%d",&k;
if(k<1||k>n)
cout<< " Khong tim thay sinh vien thu %d trong danh sach",k;
else
{
cout<< " Sinh vien thu %d la: %s %s",k,a[k].ht.ho,a[k].ht.ten;
cout<< " Sinh ngay %d %d %d",a[k].ns.ngay,a[k].ns.thang,a[k].ns.nam;
cout<< " Que quan: ";
cout<< " Tinh: %s",a[k].qq.tinh;
cout<< " Huyen: %s",a[k].qq.huyen;
cout<< " Xa: %s",a[k].qq.xa;
if(a[k].diem_tb>=0)
cout<< " Diem trung binh: %0.2f",a[k].diem_tb;
cout<< " Ma so sinh vien: %s",a[k].ma_so;
cout<< " Ban co chac la can phai thay doi khong (y/n)";
fflush(stdin); ch=getche();
}
if(ch=='y'||ch=='Y')
{
them_sv(a);
a[k]=a[n];
n--;
cout<< " Sinh vien thu %d da duoc thay doi",k;
}
getch();
}
void sx_ten(sinh_vien a[])
{
int i,j,h,t;
sinh_vien tg;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
t=strcmpi(a[i].ht.ten,a[j].ht.ten);
h=strcmpi(a[i].ht.ho,a[j].ht.ho);
if(t>0||(t==0&&h>0))
{
tg=a[i]; a[i]=a[j]; a[j]=tg;
}
}
}
void sx_ns(sinh_vien a[])
{
int i,j;
sinh_vien tg;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i].ns.nam>a[j].ns.nam||(a[i].ns.nam==a[j].ns.nam&&(a[i].ns.thang>
a[j].ns.thang||(a[i].ns.thang==a[j].ns.thang&&a[i].ns.ngay>a[j].ns.ngay))))
{
tg=a[i]; a[i]=a[j]; a[j]=tg;
}
}
void sx_tb(sinh_vien a[])
{
int i,j;
sinh_vien tg;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i].diem_tb>a[j].diem_tb)
{
tg=a[i]; a[i]=a[j]; a[j]=tg;
}
}
void sx_ma_so(sinh_vien a[])
{
int i,j,k;
sinh_vien tg;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(strcmp(a[i].ma_so,a[j].ma_so)>0)
{
tg=a[i]; a[i]=a[j]; a[j]=tg;
}
}
void tim_kiem(sinh_vien a[])
{
clrscr();
int i,k;
char s1[27],s2[27];
printf("\n Ho va ten sinh vien can tim:");
fflush(stdin); gets(s1);
for(i=1;i<=n;i++)
{
strcpy(s2,a[i].ht.ho);
k=strlen(s2);
s2[k]=' ';
s2[k+1]='\0';
strcat(s2,a[i].ht.ten);
k=strcmpi(s1,s2);
if(k==0) break;
}
k=i;
if(k>n)
cout<< " Khong tim thay";
else
{
cout<< " Do la sinh vien thu %d",k;
cout<< " Ho va ten: %s %s",a[k].ht.ho,a[k].ht.ten;
cout<< " Sinh ngay %d %d %d",a[k].ns.ngay,a[k].ns.thang,a[k].ns.nam;
cout<< " Que quan: Tinh %s - Huyen %s - Xa %s",a[k].qq.tinh,a[k].qq.huyen,a[k].qq.xa;
if(a[k].diem_tb>=0)
cout<< " Diem trung binh: %0.2f",a[k].diem_tb;
cout<< " Ma so sinh vien: %s",a[k].ma_so;
}
getch();
}
void tim_que(sinh_vien a[])
{
int i,k;
char s1[27],s2[27];
cout<< " Tinh cua nhung sinh vien can tim:";
fflush(stdin); gets(s1);
for(i=1;i<=n;i++)
{
strcpy(s2,a[i].qq.tinh);
k=strlen(s2);
s2[k]=' ';
s2[k+1]='\0';
strcat(s2,a[i].qq.tinh);
k=strcmpi(s1,s2);
if(k==0) break;
}
k=i;
if(k>n)
cout<< " Khong tim thay";
else
{
cout<< " Do la sinh vien thu %d",k;
cout<< " Ho va ten: %s %s",a[k].ht.ho,a[k].ht.ten;
}
getch();
}
void que(sinh_vien a[])
{
char s1[30];
char s2[30];
cout<< " Nhap que cua nhung sinh vien can tim : ";
fflush(stdin);gets(s1);
for(int i=1;i<=n;i++)
{
strcpy(s2,a[i].qq.tinh);
}
}
void ghi(sinh_vien a[],int n)
{
int i;
char ch;
cout<< " Ban co muon luu lai cac thay doi khong (y/n):";
fflush(stdin); ch=getch();
if(ch=='y'||ch=='Y')
{
f=fopen("sv.dat","ab");
for(i=1;i<=n;i++)
fwrite(&a[i],sizeof(sinh_vien),1,f);
cout<< " Hum ..";
delay(500);
fclose(f);
}
}
cout của bác nhầm rùi mà. bác chuyển cout và cin thành kiểu printf và scanf là ok đó
Đại khái 1 dòng là thấy có chuyện rồi ! Trong C++ bác phải viết lại như thế này :cout<< " Ho va ten: %s %s",a[k].ht.ho,a[k].ht.ten;
cout<< " Ho va Ten:" <<a[k].ht.ho<<a[k].ht.ten ;
Còn không thì như tia chớp xanh nói cậu phải chuyển lại thành printf và scanf .
thanks evẻybody. Nhưng mình vẫn chưa chạy dc mục 5,6,7,8 - phần thuật toán sắp xếp ấy. Bạn nào có thể chỉ cho mình đó là lỗi ji` ko ? thanks
hình như mình bị sai ở chỗ là: trong C++ phải khai báo hàm public và private ????? còn bài trên đây mới chỉ là thay cin và cout thui . mọi người cho ý kiến nhé. thanks
Bạn phải thêm dấu{}giữa 2 vòng for thì mục 5 6 7 8 sẽ chạy đúng.
...Every step that I take is another mistake to you...I'm sorry mom..