#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAX 100
#define BACK_MENU printf("\n\n Nhan Phim enter. . ."); getch();
typedef struct
{
char MSSV[10];
char hoten[30];
char lop[5];
}student;
int menu()
{
int chon;
do{
system("cls");
printf("====CHUONG TRINH QUAN LY SINH VIEN====\n"
" 1. Them sinh vien.\n"
" 2. Hien thi danh sach sinh vien.\n"
" 3. Hien thi danh sach sinh vien theo lop.\n"
" 4. Tim thong tin sinh vien qua MSSV.\n"
" 5. Sua thong tin sinh vien qua MSSV.\n"
" 6. Sap xep sinh vien theo ten sinh vien va hien thi.\n."
" 7. Thoat!.");
printf("\n Chon: ");
scanf("%d",&chon);
} while (chon<0 || chon>8);
return chon;
}
int kiemtraID(student sinhvien[], char MSSV)
{
int i;
for(i=0; i<MAX; i++)
if(strcmp(sinhvien[i].MSSV,MSSV)==0) //kiem tra mssv trong mang==mssv nhap vao khong?
return i; //neu trung thi tra ve stt cua id trung
return -1; //neu khong bi trung thi tra ve -1
}
int tim_slot(student sinhvien[])
{
int t;
for (t=0;t<MAX && strcmp(sinhvien[t].MSSV,"free")!=0;t++); //thoat khi t=100(qua gioi han)hoac tim dc cho trong"free la chuoi gan cho tung o trong trong ham main()".
if (t==MAX)
return -1; //khi thoat t=100 qua gioi han.
else
return t; //stt cua o trong.
}
void them(student sinhvien[]) //Cau.1
{
system("cls");
int dem=tim_slot(sinhvien), T_or_F=0;
char MSSV[10];
if(dem==-1)
printf("Het Cho Trong Roi!");
else
{
do
{
system("cls");
printf("Nhap MSSV: ");
fflush(stdin);
gets(MSSV);
if(kiemtraID(sinhvien,MSSV)==-1) //neu khong trung
{
sinhvien[dem].MSSV=MSSV;
T_or_F=1; //true
}
else
{
printf("MSSV da ton tai, nhan enter de nhap lai. . . "); //neu trung
getch();
T_or_F=0; //fal
}
} while(T_or_F!=1);
printf("Ten Sinh Vien: ");
fflush(stdin);
gets(sinhvien[dem].hoten);
printf("Nhap lop: ");
gets(sinhvien[dem].lop);
}
BACK_MENU;
}
void danhsach(student sinhvien[]) //cau 2
{
system("cls");
int i;
printf("STT |MA SINH VIEN |HOTEN |LOP \n");
for(i=0;i<MAX;i++)
if(strcmp(sinhvien[i].MSSV,"free")!=0)
printf("%-6d %-17s %-20s %-6s\n",i+1,sinhvien[i].MSSV,sinhvien[i].hoten,sinhvien[i].lop);
BACK_MENU;
}
void dslop(student sinhvien[]) //cau 3
{
char lop[4];
int i,t=1;
printf("Lop: ");
fflush(stdin);
gets(lop);
printf("STT |MA SINH VIEN |HOTEN |LOP \n");
for(i=0;i<MAX;i++)
if(strcmp(sinhvien[i].lop,lop)==0)
{
printf("%-6d %-17s %-20s %-6s\n",t,sinhvien[i].MSSV,sinhvien[i].hoten,sinhvien[i].lop);
t++;
}
BACK_MENU;
}
void tim(student sinhvien[])
{
system("cls");
int t=1,dem;
char MSSV[10];
printf("Ma Sinh Vien: ");
fflush(stdin);
gets(MSSV);
dem=kiemtraID(sinhvien,MSSV);
if(dem==-1)
{
printf("MSSV khong ton tai...");
BACK_MENU;
}
else
{
printf("STT |MA SINH VIEN |HOTEN |LOP \n");
printf("%-6d %-17s %-20s %-6s\n",t,sinhvien[dem].MSSV,sinhvien[dem].hoten,sinhvien[dem].lop);
BACK_MENU;
}
}
void suathongtin(student sinhvien[])
{
system("cls");
int dem;
char MSSV[10];
printf("Ma Sinh Vien: ");
fflush(stdin);
gets(MSSV);
dem=kiemtraID(sinhvien,MSSV);
if(dem==-1)
{
printf("MSSV khong ton tai...");
BACK_MENU;
}
else
{
printf("Ten Sinh Vien: ");
fflush(stdin);
gets(sinhvien[dem].hoten);
printf("Lop sinh hoat moi: ");
gets(sinhvien[dem].lop);
printf("Sua Thanh Cong!");
BACK_MENU;
}

}
main()
{
student sinhvien[MAX];
int number=0,i=0;
for(i=0; i<MAX; i++)
sinhvien[i].MSSV="free";
do
{
number=menu();
switch(number)
{
case 1: them(sinhvien); break;
case 2: danhsach(sinhvien); break;
case 3: dslop(sinhvien);break;
case 4: tim(sinhvien);break;
case 5: suathongtin(sinhvien);break;
//case 6:
}
} while(number!=7);
getch();
}


tớ chả hiểu nôi,khi tớ chuyển tất cả MSSV sang kiêu int,và so sánh như bt thì dùng ngon,còn chuyển sang char thì lại báo lỗi khi dùng làm strcmp,và khi chuyển MSSV sang int thì hàm tìm kiếm theo lớp vẫn đúng,dù là dùng hàm strcmp @@,huhu,giúp mình với,sắp thi rồi