Mình Đang làm bài quản lý sinh viên có mục sắp xếp bằng các thuật toán chọn, chèn, trộn, nhanh cho danh sách sinh viên. Nhưng đến phần sắp xếp chọn mình chạy thử lại không thấy sắp xếp. Mọi người cho mình ý kiến với!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
const char *FNAME = "Data.txt"; //char FNAME[] = "Data.txt";
typedef struct
{
char HoVaTen[50], MaLop[10], MaSinhVien[10];
float Diem;
struct NgaySinh
{
int ngay, thang, nam;
} ns;
} SinhVien;
int NhapHoSo(SinhVien sv[], int *n);
int LuuDanhSach(SinhVien sv[], int n);
int InDanhSach(SinhVien sv[], int n);
int SXChon(char khoa, SinhVien sv[], int n);
int SXChen(char khoa);
int SXNhanh(char khoa);
int SXTron(char khoa);
int TKTuanTu(char khoa, SinhVien sv[], int n);
int TKNhiPhan(char khoa);
int LopSoLuong();
int PhanLoaiKetQua();
char Menu()
{
system("cls");
printf("\n\n==================== CHUONG TRINH QUAN LY SINH VIEN ====================\n\n\n");
printf("\t\t\t1. Them Moi Ho So\n\n");
printf("\t\t\t2. In Danh Sach\n\n");
printf("\t\t\t3. Sap Xep\n\n");
printf("\t\t\t4. Tim kiem\n\n");
printf("\t\t\t5. Thong Ke\n\n");
printf("\t\t\t6. Thoat\n\n");
getch();
}
int NhapHoSo(SinhVien sv[], int *n) //tro den o nho can lay gia tri
{
int i, j;
system("cls");
printf("\n\n==================== MOI BAN NHAP THONG TIN SINH VIEN ====================\n\n\n");
printf("\t\t\tSo Sinh Vien Can Them: ");
scanf("%d", &*n);
for(i = 0; i < *n; i++)
{
printf("\t\t\tSinh Vien %d\n", i + 1);
fflush(stdin);
printf("\t\t\tMa Lop: ");
gets(sv[i].MaLop);
printf("\t\t\tMa Sinh Vien: ");
gets(sv[i].MaSinhVien);
fflush(stdin);
printf("\t\t\tHo Va Ten: ");
gets(sv[i].HoVaTen);
// while(sv.HoVaTen[0] == ' ')
// {
// for(i = 0; i < strlen(sv.HoVaTen); i++)
// sv.HoVaTen[i] = sv.HoVaTen[i + 1];
// }
// i = 0;
// while(i < strlen(sv.HoVaTen))
// {
// if(sv.HoVaTen[i] == ' ' && sv.HoVaTen[i + 1] == ' ')
// {
// for(j = i; j < strlen(sv.HoVaTen); j++)
// sv.HoVaTen[j] = sv.HoVaTen[j + 1];
// i--;
// }
// i++;
// }
// while(sv.HoVaTen[strlen(sv.HoVaTen) - 1] == ' ')
// sv.HoVaTen[strlen(sv.HoVaTen)-1] = '\0';
// strlwr(sv.HoVaTen);
// sv.HoVaTen[0] = toupper(sv.HoVaTen[0]);
// for(i = 0; i < strlen(sv.HoVaTen); i++)
// {
// if(sv.HoVaTen[i] == ' ')
// sv.HoVaTen[i + 1] = toupper(sv.HoVaTen[i + 1]);
// }
printf("\t\t\tNgay Thang Nam Sinh: \n");
do {
printf("\t\t\t\tNgay: ");
scanf("%d", &sv[i].ns.ngay);
if((sv[i].ns.ngay < 1)||(sv[i].ns.ngay > 31))
printf("\t\t\t\tNGAY SINH KHONG HOP LE!!\n");
} while((sv[i].ns.ngay < 1)||(sv[i].ns.ngay > 31));
do {
printf("\t\t\t\tThang: ");
scanf("%d", &sv[i].ns.thang);
if((sv[i].ns.thang < 1)||(sv[i].ns.thang > 12))
printf("\t\t\t\tTHANG SINH KHONG HOP LE!!\n");
} while((sv[i].ns.thang < 1)||(sv[i].ns.thang > 12));
do {
printf("\t\t\t\tNam: ");
scanf("%d", &sv[i].ns.nam);
if((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016))
printf("\t\t\tNAM SINH KHONG HOP LE!!\n");
} while((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016));
do {
printf("\t\t\tDiem Trung Binh Tich Luy: ");
scanf("%f", &sv[i].Diem);
if((sv[i].Diem < 0)||(sv[i].Diem > 10))
printf("\t\t\tDIEM TRUNG BINH TICH LUY KHONG HOP LE!!\n");
} while((sv[i].Diem < 0)||(sv[i].Diem > 10));
printf("\n");
}
printf("\t\tLUU DU LIEU THANH CONG! NHAN PHIM BAT KI DE TIEP TUC!");
getch();
return 0;
}
int LuuDanhSach(SinhVien sv[], int n)
{
int i;
FILE *f = fopen(FNAME,"a");
if (f==NULL)
{
printf("FILE ERROR ");
exit(1);
}
for(i = 0; i < n; i++)
{
fprintf(f, "| %s | %s | %s | %d/%d/%d | %f |\n", sv[i].MaLop, sv[i].MaSinhVien, sv[i].HoVaTen, sv[i].ns.ngay, sv[i].ns.thang, sv[i].ns.nam, sv[i].Diem);
fprintf(f, "----------------------------------------------------------------------\n");
}
fclose(f);
return 0;
}
int InDanhSach(SinhVien sv[], int n)
{
system("cls");
char kitu[1000];
printf("\n\n\t==================== DANH SACH SINH VIEN ====================\n\n\n");
printf("| Lop | Ma Sinh Vien | Ho Va Ten | Ngay Sinh | DTBTL |\n");
printf("=====================================================================\n");
FILE *p;
p = fopen(FNAME, "r");
while (fgets(kitu, 1000, p) != NULL)
{
printf("%s", kitu);
}
printf("\nNhan Phim Bat Ki De Tiep Tuc!");
fclose(p);
return 0;
}
int SapXep(SinhVien sv[], int n)
{
system("cls");
printf("\n\n==================== CHON PHUONG PHAP SAP XEP ====================\n\n\n");
printf("\t\t\ta. Selection Sort\n\n");
printf("\t\t\tb. Insertion Sort\n\n");
printf("\t\t\tc. Quick Sort\n\n");
printf("\t\t\td. Merge Sort\n\n");
printf("\t\t\te. Quay Lai\n\n");
char sx;
do
{
sx=getch();
} while (!((sx=='a')||(sx=='b')||(sx=='c')||(sx=='d')||(sx=='e')));
if (sx=='e') return 0;
switch(sx)
{
case 'a':
system("cls");
printf("\n\t******************");
printf("\n\t* SELECTION SORT *");
printf("\n\t******************\n");
SXChon(sx, sv, n);
break;
case 'b':
system("cls");
printf("\n\t******************");
printf("\n\t* INSERTION SORT *");
printf("\n\t******************\n");
SXChen(sx);
break;
case 'c':
system("cls");
printf("\n\t******************");
printf("\n\t* QUICK SORT *");
printf("\n\t******************\n");
SXNhanh(sx);
break;
case 'd':
system("cls");
printf("\n\t******************");
printf("\n\t* MERGE SORT *");
printf("\n\t******************\n");
SXTron(sx);
break;
}
getch();
return 0;
}
int SXChon(char khoa, SinhVien sv[], int n)
{
printf("\n\t\tCHON KHOA DE SAP XEP\n\n");
printf("\t\ta. Ma Sinh Vien\n\n");
printf("\t\tb. Ho Va Ten\n\n");
printf("\t\tc. Ngay Sinh\n\n");
printf("\t\td. Diem TBTL\n\n");
printf("\t\te. Tro lai\n");
do
{
khoa = getch();
}
while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
if(khoa == 'e')
return 0;
int i, j;
switch(khoa)
{
case 'a':
system("cls");
printf("\n\t\tSap Xep Theo Ma Sinh Vien!\n\n");
for(i = 0; i < n - 1; i ++) {
for( j = i + 1; j < n; j++) {
if(sv[i].MaSinhVien > sv[j].MaSinhVien)
{
SinhVien a;
a = sv[i];
sv[i] = sv[j];
sv[j] = a;
}
}
}
break;
case 'b':
system("cls");
printf("\n\t\tSap Xep Theo Ho Va Ten!\n\n");
for (i = 0; i < n - 1; i++) {
for (j = i + 1 ; j < n; j++) {
if (strcmp(sv[i].HoVaTen,sv[j].HoVaTen)>0) {
SinhVien b;
b = sv[i];
sv[i] = sv[j];
sv[j] = b;
}
}
}
InDanhSach(sv, n);
break;
case 'c':
system("cls");
printf("\n\t\tSap Xep Theo Ngay Sinh!\n\n");
break;
case 'd':
system("cls");
printf("\n\t\tSap Xep Theo DTBTL!\n\n");
for(i = 0; i < n - 1; i++) {
for(j = i + 1; j < n; j++) {
if(sv[i].Diem > sv[j].Diem) {
SinhVien d;
d = sv[i];
sv[i] = sv[j];
sv[j] = d;
}
}
}
InDanhSach(sv, n);
break;
}
InDanhSach(sv, n);
getch();
return 0;
}
int SXChen(char khoa)
{
printf("\n\t\tCHON KHOA DE SAP XEP\n\n");
printf("\t\ta. Ma Sinh Vien\n\n");
printf("\t\tb. Ho Va Ten\n\n");
printf("\t\tc. Ngay Sinh\n\n");
printf("\t\td. Diem TBTL\n\n");
printf("\t\te. Tro lai\n");
do
{
khoa = getch();
}
while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
if(khoa == 'e')
return 0;
switch(khoa)
{
case 'a':
system("cls");
printf("\n\t\tSap Xep Theo Ma Sinh Vien!\n\n");
break;
case 'b':
system("cls");
printf("\n\t\tSap Xep Theo Ho Va Ten!\n\n");
break;
case 'c':
system("cls");
printf("\n\t\tSap Xep Theo Ngay Sinh!\n\n");
break;
case 'd':
system("cls");
printf("\n\t\tSap Xep Theo DTBTL!\n\n");
break;
}
getch();
return 0;
}
int SXNhanh(char khoa)
{
printf("\n\t\tCHON KHOA DE SAP XEP\n\n");
printf("\t\ta. Ma Sinh Vien\n\n");
printf("\t\tb. Ho Va Ten\n\n");
printf("\t\tc. Ngay Sinh\n\n");
printf("\t\td. Diem TBTL\n\n");
printf("\t\te. Tro lai\n");
do
{
khoa = getch();
}
while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
if(khoa == 'e')
return 0;
switch(khoa)
{
case 'a':
system("cls");
printf("\n\t\tSap Xep Theo Ma Sinh Vien!\n\n");
break;
case 'b':
system("cls");
printf("\n\t\tSap Xep Theo Ho Va Ten!\n\n");
break;
case 'c':
system("cls");
printf("\n\t\tSap Xep Theo Ngay Sinh!\n\n");
break;
case 'd':
system("cls");
printf("\n\t\tSap Xep Theo DTBTL!\n\n");
break;
}
getch();
return 0;
}
int SXTron(char khoa)
{
printf("\n\t\tCHON KHOA DE SAP XEP\n\n");
printf("\t\ta. Ma Sinh Vien\n\n");
printf("\t\tb. Ho Va Ten\n\n");
printf("\t\tc. Ngay Sinh\n\n");
printf("\t\td. Diem TBTL\n\n");
printf("\t\te. Tro lai\n");
do
{
khoa = getch();
}
while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
if(khoa == 'e')
return 0;
switch(khoa)
{
case 'a':
system("cls");
printf("\n\t\tSap Xep Theo Ma Sinh Vien!\n\n");
break;
case 'b':
system("cls");
printf("\n\t\tSap Xep Theo Ho Va Ten!\n\n");
break;
case 'c':
system("cls");
printf("\n\t\tSap Xep Theo Ngay Sinh!\n\n");
break;
case 'd':
system("cls");
printf("\n\t\tSap Xep Theo DTBTL!\n\n");
break;
}
getch();
return 0;
}
int TimKiem(SinhVien sv[], int n)
{
char ch;
system("cls");
printf("\n\n==================== CHON PHUONG PHAP TIM KIEM ====================\n\n\n");
printf("\t\ta. Tuan Tu\n\n");
printf("\t\tb. Nhi Phan\n\n");
printf("\t\tc. Tro lai\n");
do
{
ch=getch();
} while (!((ch=='a')||(ch=='b')||(ch=='c')));
if (ch=='c') return 0;
switch (ch)
{
case 'a':
system("cls");
printf("\n\t********************");
printf("\n\t* TIM KIEM TUAN TU *");
printf("\n\t********************\n");
TKTuanTu(ch, sv, n);
break;
case 'b':
system("cls");
printf("\n\t*********************");
printf("\n\t* TIM KIEM NHI PHAN *");
printf("\n\t*********************\n");
break;
default:
printf("NHAP SAI! MOI NHAP LAI!");
getch();
}
getch();
return 0;
}
int TKTuanTu(char khoa, SinhVien sv[], int n)
{
system("cls");
printf("\n\t\tCHON KHOA DE TIM KIEM\n\n");
printf("\t\ta. Ma Sinh Vien\n\n");
printf("\t\tb. Ho Va Ten\n\n");
printf("\t\tc. Ngay Sinh\n\n");
printf("\t\td. DTBTL\n\n");
printf("\t\te. Tro Lai \n\n");
do
{
khoa = getch();
}
while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
if(khoa == 'e')
return 0;
switch(khoa) {
case 'a':
char msv[50];
printf("\t\tTim Kiem Theo Ma Sinh Vien\n\n");
printf("Moi Nhap Ma Sinh Vien: ");
gets(msv);
break;
case 'b':
char hvt[50];
printf("\t\tTim Kiem Theo Ho Va Ten\n\n");
printf("Moi Nhap Ho Va Ten: ");
gets(hvt);
break;
case 'c':
int d, m, y;
printf("Tim Kiem Theo Ngay Sinh\n\n");
printf("Moi Nhap Ngay Thang Nam Sinh: ");
printf("\nNgay: ");
scanf("%d", &d);
printf("\nThang: ");
scanf("%d", &m);
printf("\nNam: ");
scanf("%d", &y);
break;
case 'd':
float diem;
printf("Tim Kiem Theo DTBTL\n\n");
printf("Moi Nhap DTBTL: ");
scanf("%f", &diem);
break;
default:
printf("NHAP SAI! MOI NHAP LAI!");
}
getch();
return 0;
}
int TKNhiPhan(char khoa)
{
}
int ThongKe()
{
char ch;
system("cls");
printf("==================== THONG KE BAO CAO ====================\n\n\n");
printf("\t\ta. Lop - So Luong Sinh Vien\n\n");
printf("\t\tb. Phan Loai Ket Qua Hoc Tap\n\n");
printf("\t\tc. Tro lai\n\n");
do
{
ch=getch();
} while (!((ch=='a')||(ch=='b')||(ch=='c')));
if (ch=='c') return 0;
switch (ch)
{
case 'a': LopSoLuong(); break;
case 'b': PhanLoaiKetQua(); break;
}
return 0;
}
int LopSoLuong()
{
return 0;
}
int PhanLoaiKetQua()
{
return 0;
}
int main()
{
SinhVien sv[100];
int n;
char mn = 0;
do
{
mn = Menu();
switch(mn)
{
case '1': NhapHoSo(sv, &n); LuuDanhSach(sv, n); break;
case '2': InDanhSach(sv, n); break;
case '3': SapXep(sv, n); break;
case '4': TimKiem(sv, n); break;
case '5': ThongKe(); break;
case '6': exit(0);
default:
printf("NHAP SAI! MOI NHAP LAI!");
getch();
}
system("pause>nul");
} while(mn != '6');
getch();
return 0;
}