Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Không sắp xếp được struct

  1. #1
    Ngày gia nhập
    04 2018
    Bài viết
    8

    Mặc định Không sắp xếp được struct

    Mọi người xem cho mình với, mình đang code phần mềm quản lý sinh viên mà đến đoạn sắp xếp mình chạy thử nó lại không sắp xếp gì cả. Mọi người giúp đỡ nhé!! Với lại có nhiều chỗ thừa thãi mong mọi người góp ý!! Mình cảm ơn!!

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    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);
    int TKNhiPhan(char khoa);
    int LopSoLuong();
    int PhanLoaiKetQua();
    
    char Menu()
    {
    	system("cls");
    	printf("\n\n\t==================== CHUONG TRINH QUAN LY SINH VIEN ====================\n\n\n");
    	printf("\t\t\t\t1. Them Moi Ho So\n\n");
    	printf("\t\t\t\t2. In Danh Sach\n\n");
    	printf("\t\t\t\t3. Sap Xep\n\n");
    	printf("\t\t\t\t4. Tim kiem\n\n");
    	printf("\t\t\t\t5. Thong Ke\n\n");
    	printf("\t\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\t==================== MOI BAN NHAP THONG TIN SINH VIEN ====================\n\n\n");
    	printf("\t\t\t\tSo Sinh Vien Can Them: ");
    	scanf("%d", &*n);
    	for(i = 0; i < *n; i++)
    	{
    		printf("\t\t\t\tSinh Vien %d\n", i + 1);
    		fflush(stdin);
    		printf("\t\t\t\tMa Lop: ");
    		gets(sv[i].MaLop);
    		printf("\t\t\t\tMa Sinh Vien: ");
    		gets(sv[i].MaSinhVien);
    		fflush(stdin);
    		printf("\t\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\t\tNgay Thang Nam Sinh: \n");
    		do {
    			printf("\t\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\t\tNGAY SINH KHONG HOP LE!!\n");
    		} while((sv[i].ns.ngay < 1)||(sv[i].ns.ngay > 31));
    		do {
    			printf("\t\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\t\tTHANG SINH KHONG HOP LE!!\n");
    		} while((sv[i].ns.thang < 1)||(sv[i].ns.thang > 12));
    		do {
    			printf("\t\t\t\t\tNam: ");
    			scanf("%d", &sv[i].ns.nam);
    			if((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016))
    				printf("\t\t\t\t\tNAM SINH KHONG HOP LE!!\n");
    		} while((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016));
    		do {
    		printf("\t\t\t\tDiem Trung Binh Tich Luy: ");
    		scanf("%f", &sv[i].Diem);
    		if((sv[i].Diem < 0)||(sv[i].Diem > 10))
    			printf("\t\t\t\tDIEM TRUNG BINH TICH LUY KHONG HOP LE!!\n");
    		} while((sv[i].Diem < 0)||(sv[i].Diem > 10));
    		printf("\n");
    	}
    	printf("\t\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, "\t|  %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, "\t------------------------------------------------------------ \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("\t|   Lop   | Ma Sinh Vien |     Ho Va Ten     |   Ngay Sinh   | DTBTL |\n");
    	printf("\t=====================================================================\n");
    	FILE *p;
    	p = fopen(FNAME, "r");
    	while (fgets(kitu, 1000, p) != NULL)
    	{
    		printf("%s", kitu);
    	}
    	fclose(p);
    	getch();
    	return 0;
    }
    int SapXep(SinhVien sv[], int n)
    {
    	system("cls");
    	printf("\n\n\t==================== CHON PHUONG PHAP SAP XEP ====================\n\n\n");
    	printf("\t\t\t\ta. Selection Sort\n\n");
    	printf("\t\t\t\tb. Insertion Sort\n\n");
    	printf("\t\t\t\tc. Quick Sort\n\n");
    	printf("\t\t\t\td. Merge Sort\n\n");
    	printf("\t\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\t\tCHON KHOA DE SAP XEP\n\n");
    	printf("\t\t\ta. Ma Sinh Vien\n\n");
    	printf("\t\t\tb. Ho Va Ten\n\n");
    	printf("\t\t\tc. Ngay Sinh\n\n");
    	printf("\t\t\td. Diem TBTL\n\n");
    	printf("\t\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\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; 
    					}
    				}
    			}
    			LuuDanhSach(sv, n);
    			InDanhSach(sv, n);
    			break;
    		case 'b':
    			system("cls");
    			printf("\n\t\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\t\tSap Xep Theo Ngay Sinh!\n\n");
    			break;
    		case 'd':
    			system("cls");
    			printf("\n\t\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;
    	}
    	getch();
    	return 0;
    }
    int SXChen(char khoa)
    {
    	printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    	printf("\t\t\ta. Ma Sinh Vien\n\n");
    	printf("\t\t\tb. Ho Va Ten\n\n");
    	printf("\t\t\tc. Ngay Sinh\n\n");
    	printf("\t\t\td. Diem TBTL\n\n");
    	printf("\t\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\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    			break;
    		case 'b':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    			break;
    		case 'c':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    			break;
    		case 'd':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    			break;
    	}
    	getch();
    	return 0;
    }
    int SXNhanh(char khoa)
    {
    	printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    	printf("\t\t\ta. Ma Sinh Vien\n\n");
    	printf("\t\t\tb. Ho Va Ten\n\n");
    	printf("\t\t\tc. Ngay Sinh\n\n");
    	printf("\t\t\td. Diem TBTL\n\n");
    	printf("\t\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\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    			break;
    		case 'b':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    			break;
    		case 'c':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    			break;
    		case 'd':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    			break;
    	}
    	getch();
    	return 0;
    }
    int SXTron(char khoa)
    {
    	printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    	printf("\t\t\ta. Ma Sinh Vien\n\n");
    	printf("\t\t\tb. Ho Va Ten\n\n");
    	printf("\t\t\tc. Ngay Sinh\n\n");
    	printf("\t\t\td. Diem TBTL\n\n");
    	printf("\t\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\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    			break;
    		case 'b':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    			break;
    		case 'c':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    			break;
    		case 'd':
    			system("cls");
    			printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    			break;
    	}
    	getch();
    	return 0;
    }
    int TimKiem()
    {
    	char ch;
    	system("cls");
    	printf("==================== CHON PHUONG PHAP TIM KIEM ====================\n\n\n");
    	printf("\t\t\ta. Tuan Tu\n\n");
    	printf("\t\t\tb. Nhi Phan\n\n");
    	printf("\t\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");
    			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();
    	}
    	printf("\n==================== CHON KHOA DE TIM KIEM ====================\n\n\n");
    	printf("\t\t\ta. Ma S.Vien\n\n");
    	printf("\t\t\tb. Ho va ten\n\n");
    	printf("\t\t\tc. Ngay sinh\n\n");
    	printf("\t\t\td. Diem TBTL\n\n");
    	printf("\t\t\te. Tro lai \n\n");
    	char kh;
    	do
    	{
    		kh=getch();
    	} while (!((kh=='a')||(kh=='b')||(kh=='c')||(kh=='d')||(kh=='e')));
    	if (kh=='e') return 0;
    	
    	printf("\n---------------------");
    	printf("\nGia tri khoa can tim: "); 
    	getch();
    	switch (ch)
    	{	
    		case 'a': TKTuanTu(kh); break;
    		case 'b': TKNhiPhan(kh); break;
    	}
    	printf("\nKet qua tim kiem!");
    	getch();
    	return 0;
    }
    int TKTuanTu(char khoa)
    {
    }
    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();		break;
    			case '5':	ThongKe();		break;
    			case '6':	exit(0);
    			default:
    				printf("NHAP SAI! MOI NHAP LAI!");
    				getch();
    		}
    	} while(mn != '6');
    	getch();
    	return 0;
    }
    Đã được chỉnh sửa lần cuối bởi skydefender : 17-04-2018 lúc 11:42 PM.

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    2,769

    Trích dẫn Nguyên bản được gửi bởi skydefender Xem bài viết
    Mọi người xem cho mình với, mình đang code phần mềm quản lý sinh viên mà đến đoạn sắp xếp mình chạy thử nó lại không sắp xếp gì cả. Mọi người giúp đỡ nhé!! Với lại có nhiều chỗ thừa thãi mong mọi người góp ý!! Mình cảm ơn!!
    ...
    định dạng - format rõ, đúng cho dễ đọc
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <string.h>
    5. #include <ctype.h>
    6.  
    7. char *FNAME = "Data.txt";
    8.  
    9. typedef struct
    10. {
    11.     char HoVaTen[50], MaLop[10], MaSinhVien[10];
    12.     float Diem;
    13.     struct NgaySinh
    14.     {
    15.         int ngay, thang, nam;
    16.     } ns;
    17. } SinhVien;
    18.  
    19. int NhapHoSo(SinhVien sv[], int *n);
    20. int InDanhSach(SinhVien sv[], int n);
    21. int SXChon(char khoa, SinhVien sv[], int n);
    22. int SXChen(char khoa);
    23. int SXNhanh(char khoa);
    24. int SXTron(char khoa);
    25. int TKTuanTu(char khoa);
    26. int TKNhiPhan(char khoa);
    27. int LopSoLuong();
    28. int PhanLoaiKetQua();
    29.  
    30. char Menu()
    31. {
    32.     system("cls");
    33.     printf("\n\n\t==================== CHUONG TRINH QUAN LY SINH VIEN ====================\n\n\n");
    34.     printf("\t\t\t\t1. Them Moi Ho So\n\n");
    35.     printf("\t\t\t\t2. In Danh Sach\n\n");
    36.     printf("\t\t\t\t3. Sap Xep\n\n");
    37.     printf("\t\t\t\t4. Tim kiem\n\n");
    38.     printf("\t\t\t\t5. Thong Ke\n\n");
    39.     printf("\t\t\t\t6. Thoat\n\n");
    40.     getch();
    41. }
    42.  
    43. int NhapHoSo(SinhVien sv[], int *n) //tro den o nho can lay gia tri
    44. {
    45.     FILE *f;
    46.     f = fopen(FNAME, "a");
    47.     int  i, j;
    48.     system("cls");
    49.     printf("\n\n==================== MOI BAN NHAP THONG TIN SINH VIEN ====================\n\n\n");
    50.     printf("\t\t\tSo Sinh Vien Can Them: ");
    51.     scanf("%d", &*n);
    52.     for(i = 0; i < *n; i++)
    53.     {
    54.         printf("\t\t\tSinh Vien %d\n", i + 1);
    55.         fflush(stdin);
    56.         printf("\t\t\tMa Lop: ");
    57.         gets(sv[i].MaLop);
    58.         printf("\t\t\tMa Sinh Vien: ");
    59.         gets(sv[i].MaSinhVien);
    60.         fflush(stdin);
    61.         printf("\t\t\tHo Va Ten: ");
    62.         gets(sv[i].HoVaTen);
    63. //      while(sv.HoVaTen[0] == ' ')
    64. //      {
    65. //          for(i = 0; i < strlen(sv.HoVaTen); i++)
    66. //              sv.HoVaTen[i] = sv.HoVaTen[i + 1];
    67. //      }
    68. //      i = 0;
    69. //      while(i < strlen(sv.HoVaTen))
    70. //      {
    71. //          if(sv.HoVaTen[i] == ' ' && sv.HoVaTen[i + 1] == ' ')
    72. //          {
    73. //              for(j = i; j < strlen(sv.HoVaTen); j++)
    74. //                  sv.HoVaTen[j] = sv.HoVaTen[j + 1];
    75. //              i--;
    76. //          }
    77. //          i++;
    78. //      }
    79. //      while(sv.HoVaTen[strlen(sv.HoVaTen) - 1] == ' ')
    80. //          sv.HoVaTen[strlen(sv.HoVaTen)-1] = '\0';
    81. //      strlwr(sv.HoVaTen);
    82. //      sv.HoVaTen[0] = toupper(sv.HoVaTen[0]);
    83. //      for(i = 0; i < strlen(sv.HoVaTen); i++)
    84. //      {
    85. //          if(sv.HoVaTen[i] == ' ')
    86. //              sv.HoVaTen[i + 1] = toupper(sv.HoVaTen[i + 1]);
    87. //      }
    88.         printf("\t\t\tNgay Thang Nam Sinh: \n");
    89.         do {
    90.             printf("\t\t\t\tNgay: ");
    91.             scanf("%d", &sv[i].ns.ngay);
    92.             if((sv[i].ns.ngay < 1)||(sv[i].ns.ngay > 31))
    93.                 printf("\t\t\t\tNGAY SINH KHONG HOP LE!!\n");
    94.         } while((sv[i].ns.ngay < 1)||(sv[i].ns.ngay > 31));
    95.         do {
    96.             printf("\t\t\t\tThang: ");
    97.             scanf("%d", &sv[i].ns.thang);
    98.             if((sv[i].ns.thang < 1)||(sv[i].ns.thang > 12))
    99.                 printf("\t\t\t\tTHANG SINH KHONG HOP LE!!\n");
    100.         } while((sv[i].ns.thang < 1)||(sv[i].ns.thang > 12));
    101.         do {
    102.             printf("\t\t\t\tNam: ");
    103.             scanf("%d", &sv[i].ns.nam);
    104.             if((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016))
    105.                 printf("\t\t\t\tNAM SINH KHONG HOP LE!!\n");
    106.         } while((sv[i].ns.nam < 1900)||(sv[i].ns.nam > 2016));
    107.         do {
    108.         printf("\t\t\tDiem Trung Binh Tich Luy: ");
    109.         scanf("%f", &sv[i].Diem);
    110.         if((sv[i].Diem < 0)||(sv[i].Diem > 10))
    111.             printf("\t\t\tDIEM TRUNG BINH TICH LUY KHONG HOP LE!!\n");
    112.         } while((sv[i].Diem < 0)||(sv[i].Diem > 10));
    113.         printf("\n");
    114.  
    115.         if (f==NULL)
    116.         {
    117.             printf("FILE ERROR ");
    118.             exit(1);
    119.         }
    120.         else
    121. //          fwrite(&sv, sizeof(SinhVien),1,f);
    122.             fprintf(f, "\t|  %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);
    123.             fprintf(f, "\t------------------------------------------------------------ \n");
    124.     }
    125.     printf("\t\tLUU DU LIEU THANH CONG! NHAN PHIM BAT KI DE TIEP TUC!");
    126.     fclose(f);
    127.     getch();
    128.     return 0;
    129. }
    130.  
    131. int InDanhSach(SinhVien sv[], int n)
    132. {
    133.     system("cls");
    134.     char kitu[1000];
    135.     printf("\n\n\t==================== DANH SACH SINH VIEN ====================\n\n\n");
    136.     printf("\t|   Lop   | Ma Sinh Vien |     Ho Va Ten     |   Ngay Sinh   | DTBTL |\n");
    137.     printf("\t=====================================================================\n");
    138.     FILE *p;
    139.     p = fopen(FNAME, "r");
    140. //  fread(&sv, sizeof(SinhVien), 1, p);
    141.     while (fgets(kitu, 1000, p) != NULL)
    142.     {
    143.         printf("%s", kitu);
    144.     }
    145.     fclose(p);
    146.     getch();
    147.     return 0;
    148. }
    149. int SapXep(SinhVien sv[], int n)
    150. {
    151.     system("cls");
    152.     printf("\n\n\t==================== CHON PHUONG PHAP SAP XEP ====================\n\n\n");
    153.     printf("\t\t\t\ta. Selection Sort\n\n");
    154.     printf("\t\t\t\tb. Insertion Sort\n\n");
    155.     printf("\t\t\t\tc. Quick Sort\n\n");
    156.     printf("\t\t\t\td. Merge Sort\n\n");
    157.     printf("\t\t\t\te. Quay Lai\n\n");
    158.     char sx;
    159.     do
    160.     {
    161.         sx=getch();
    162.     } while (!((sx=='a')||(sx=='b')||(sx=='c')||(sx=='d')||(sx=='e')));
    163.     if (sx=='e') return 0;
    164.     switch(sx)
    165.     {
    166.         case 'a':
    167.             system("cls");
    168.             printf("\n\t******************");
    169.             printf("\n\t* SELECTION SORT *");
    170.             printf("\n\t******************\n");
    171.             SXChon(sx, sv, n);
    172.             break;
    173.         case 'b':
    174.             system("cls");
    175.             printf("\n\t******************");
    176.             printf("\n\t* INSERTION SORT *");
    177.             printf("\n\t******************\n");
    178.             SXChen(sx);
    179.             break;
    180.         case 'c':
    181.             system("cls");
    182.             printf("\n\t******************");
    183.             printf("\n\t*   QUICK SORT   *");
    184.             printf("\n\t******************\n");
    185.             SXNhanh(sx);
    186.             break;
    187.         case 'd':
    188.             system("cls");
    189.             printf("\n\t******************");
    190.             printf("\n\t*   MERGE SORT   *");
    191.             printf("\n\t******************\n");
    192.             SXTron(sx);
    193.             break;
    194.     }
    195.     getch();
    196.     return 0;
    197. }
    198. int SXChon(char khoa, SinhVien sv[], int n)
    199. {
    200.     printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    201.     printf("\t\t\ta. Ma Sinh Vien\n\n");
    202.     printf("\t\t\tb. Ho Va Ten\n\n");
    203.     printf("\t\t\tc. Ngay Sinh\n\n");
    204.     printf("\t\t\td. Diem TBTL\n\n");
    205.     printf("\t\t\te. Tro lai\n");
    206.     do
    207.     {
    208.         khoa = getch();
    209.     }
    210.     while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
    211.     if(khoa == 'e')
    212.         return 0;
    213.     int i, j;
    214.     switch(khoa)
    215.     {
    216.         case 'a':
    217.             system("cls");
    218.             printf("\n\t\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    219.             for(i = 0; i < n - 1; i ++) {
    220.                 for( j = i + 1; j < n; j++) {
    221.                     if(sv[i].MaSinhVien > sv[j].MaSinhVien)
    222.                     {
    223.                         SinhVien a;
    224.                         a = sv[i];
    225.                         sv[i] = sv[j];
    226.                         sv[j] = a;
    227.                     }
    228.                 }
    229.             }
    230.             InDanhSach(sv, n);
    231.             break;
    232.         case 'b':
    233.             system("cls");
    234.             printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    235.             break;
    236.         case 'c':
    237.             system("cls");
    238.             printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    239.             break;
    240.         case 'd':
    241.             system("cls");
    242.             printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    243.             for(i = 0; i < n - 1; i++) {
    244.                 for(j = i + 1; j < n; j++) {
    245.                     if(sv[i].Diem > sv[j].Diem) {
    246.                         SinhVien b;
    247.                         b = sv[i];
    248.                         sv[i] = sv[j];
    249.                         sv[j] = b;
    250.                     }
    251.                 }
    252.             }
    253.             InDanhSach(sv, n);
    254.             break;
    255.     }
    256.     getch();
    257.     return 0;
    258. }
    259. int SXChen(char khoa)
    260. {
    261.     printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    262.     printf("\t\t\ta. Ma Sinh Vien\n\n");
    263.     printf("\t\t\tb. Ho Va Ten\n\n");
    264.     printf("\t\t\tc. Ngay Sinh\n\n");
    265.     printf("\t\t\td. Diem TBTL\n\n");
    266.     printf("\t\t\te. Tro lai\n");
    267.     do
    268.     {
    269.         khoa = getch();
    270.     }
    271.     while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
    272.     if(khoa == 'e')
    273.         return 0;
    274.     switch(khoa)
    275.     {
    276.         case 'a':
    277.             system("cls");
    278.             printf("\n\t\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    279.             break;
    280.         case 'b':
    281.             system("cls");
    282.             printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    283.             break;
    284.         case 'c':
    285.             system("cls");
    286.             printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    287.             break;
    288.         case 'd':
    289.             system("cls");
    290.             printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    291.             break;
    292.     }
    293.     getch();
    294.     return 0;
    295. }
    296. int SXNhanh(char khoa)
    297. {
    298.     printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    299.     printf("\t\t\ta. Ma Sinh Vien\n\n");
    300.     printf("\t\t\tb. Ho Va Ten\n\n");
    301.     printf("\t\t\tc. Ngay Sinh\n\n");
    302.     printf("\t\t\td. Diem TBTL\n\n");
    303.     printf("\t\t\te. Tro lai\n");
    304.     do
    305.     {
    306.         khoa = getch();
    307.     }
    308.     while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
    309.     if(khoa == 'e')
    310.         return 0;
    311.     switch(khoa)
    312.     {
    313.         case 'a':
    314.             system("cls");
    315.             printf("\n\t\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    316.             break;
    317.         case 'b':
    318.             system("cls");
    319.             printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    320.             break;
    321.         case 'c':
    322.             system("cls");
    323.             printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    324.             break;
    325.         case 'd':
    326.             system("cls");
    327.             printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    328.             break;
    329.     }
    330.     getch();
    331.     return 0;
    332. }
    333. int SXTron(char khoa)
    334. {
    335.     printf("\n\t\t\tCHON KHOA DE SAP XEP\n\n");
    336.     printf("\t\t\ta. Ma Sinh Vien\n\n");
    337.     printf("\t\t\tb. Ho Va Ten\n\n");
    338.     printf("\t\t\tc. Ngay Sinh\n\n");
    339.     printf("\t\t\td. Diem TBTL\n\n");
    340.     printf("\t\t\te. Tro lai\n");
    341.     do
    342.     {
    343.         khoa = getch();
    344.     }
    345.     while (!((khoa == 'a')||(khoa == 'b')||(khoa == 'c')||(khoa == 'd')||(khoa == 'e')));
    346.     if(khoa == 'e')
    347.         return 0;
    348.     switch(khoa)
    349.     {
    350.         case 'a':
    351.             system("cls");
    352.             printf("\n\t\t\tSap Xep Theo Ma Sinh Vien!\n\n");
    353.             break;
    354.         case 'b':
    355.             system("cls");
    356.             printf("\n\t\t\tSap Xep Theo Ho Va Ten!\n\n");
    357.             break;
    358.         case 'c':
    359.             system("cls");
    360.             printf("\n\t\t\tSap Xep Theo Ngay Sinh!\n\n");
    361.             break;
    362.         case 'd':
    363.             system("cls");
    364.             printf("\n\t\t\tSap Xep Theo DTBTL!\n\n");
    365.             break;
    366.     }
    367.     getch();
    368.     return 0;
    369. }
    370. int TimKiem()
    371. {
    372.     char ch;
    373.     system("cls");
    374.     printf("==================== CHON PHUONG PHAP TIM KIEM ====================\n\n\n");
    375.     printf("\t\t\ta. Tuan Tu\n\n");
    376.     printf("\t\t\tb. Nhi Phan\n\n");
    377.     printf("\t\t\tc. Tro lai\n");
    378.     do
    379.     {
    380.         ch=getch();
    381.     } while (!((ch=='a')||(ch=='b')||(ch=='c')));
    382.     if (ch=='c') return 0;
    383.     switch (ch)
    384.     {  
    385.         case 'a':
    386.             system("cls");
    387.             printf("\n\t********************");
    388.             printf("\n\t* TIM KIEM TUAN TU *");
    389.             printf("\n\t********************\n");
    390.             break;
    391.         case 'b':
    392.             system("cls");
    393.             printf("\n\t*********************");
    394.             printf("\n\t* TIM KIEM NHI PHAN *");
    395.             printf("\n\t*********************\n");
    396.             break;
    397.         default:
    398.             printf("NHAP SAI! MOI NHAP LAI!");
    399.             getch();
    400.     }
    401.     printf("\n==================== CHON KHOA DE TIM KIEM ====================\n\n\n");
    402.     printf("\t\t\ta. Ma S.Vien\n\n");
    403.     printf("\t\t\tb. Ho va ten\n\n");
    404.     printf("\t\t\tc. Ngay sinh\n\n");
    405.     printf("\t\t\td. Diem TBTL\n\n");
    406.     printf("\t\t\te. Tro lai \n\n");
    407.     char kh;
    408.     do
    409.     {
    410.         kh=getch();
    411.     } while (!((kh=='a')||(kh=='b')||(kh=='c')||(kh=='d')||(kh=='e')));
    412.     if (kh=='e') return 0;
    413.    
    414.     printf("\n---------------------");
    415.     printf("\nGia tri khoa can tim: ");
    416.     getch();
    417.     switch (ch)
    418.     {  
    419.         case 'a': TKTuanTu(kh); break;
    420.         case 'b': TKNhiPhan(kh); break;
    421.     }
    422.     printf("\nKet qua tim kiem!");
    423.     getch();
    424.     return 0;
    425. }
    426. int TKTuanTu(char khoa)
    427. {
    428. }
    429. int TKNhiPhan(char khoa)
    430. {
    431. }
    432. int ThongKe()
    433. {
    434.     char ch;
    435.     system("cls");
    436.     printf("==================== THONG KE BAO CAO ====================\n\n\n");
    437.     printf("\t\ta. Lop - So Luong Sinh Vien\n\n");
    438.     printf("\t\tb. Phan Loai Ket Qua Hoc Tap\n\n");
    439.     printf("\t\tc. Tro lai\n\n");
    440.     do
    441.     {
    442.         ch=getch();
    443.     } while (!((ch=='a')||(ch=='b')||(ch=='c')));
    444.     if (ch=='c') return 0;
    445.     switch (ch)
    446.     {  
    447.         case 'a': LopSoLuong(); break;
    448.         case 'b': PhanLoaiKetQua(); break;
    449.     }
    450.     return 0;
    451. }
    452. int LopSoLuong()
    453. {
    454.     return 0;
    455. }
    456. int PhanLoaiKetQua()
    457. {
    458.     return 0;
    459. }
    460. int main()
    461. {
    462.     SinhVien sv[100];
    463.     int n;
    464.     char mn = 0;
    465.     do
    466.     {
    467.         mn = Menu();
    468.         switch(mn)
    469.         {
    470.             case '1':   NhapHoSo(sv, &n);   break;
    471.             case '2':   InDanhSach(sv, n);  break;
    472.             case '3':   SapXep(sv, n);      break;
    473.             case '4':   TimKiem();      break;
    474.             case '5':   ThongKe();      break;
    475.             case '6':   exit(0);
    476.             default:
    477.                 printf("NHAP SAI! MOI NHAP LAI!");
    478.                 getch();
    479.         }
    480.     } while(mn != '6');
    481.     getch();
    482.     return 0;
    483. }

  3. #3
    Ngày gia nhập
    04 2018
    Bài viết
    8

    Cảm ơn nhé mình sẽ rút kinh nghiệm

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    2,769

    Học tới top-down chưa ?

    hàm
    char Menu()

    nó trả về cái gì ! Biên dịch có thấy cảnh báo (warning) không ?

    Xem:
    coi thường các cảnh báo

  5. #5
    Ngày gia nhập
    04 2018
    Bài viết
    8

    Mình chưa học cái đó. Đúng là có cảnh báo thật mà mình thấy nó chạy được nên toàn bỏ qua. Hóa ra cũng là do nó

  6. #6
    Ngày gia nhập
    08 2017
    Bài viết
    2,769

    Mặc định Không sắp xếp được struct

    Cái sảy nảy cái ung, không phải tất cả là do nó

    Xem:
    http://diendan.congdongcviet.com/threads/t400425::ctdl-giai-thuat-dung-de-lam-gi.cpp/page2/

  7. #7
    Ngày gia nhập
    04 2018
    Bài viết
    8

    dòng system("pause>nul"); có chức năng j vậy b. lúc nãy sửa sang const char *FNAME và nó đã hết cảnh báo r. Tuy nhiên mình vẫn không hiểu sao nó không chạy code sắp xếp
    Đã được chỉnh sửa lần cuối bởi skydefender : 19-04-2018 lúc 10:45 PM.

  8. #8
    Ngày gia nhập
    08 2017
    Bài viết
    2,769

    cls có nghĩa là gì !
    C Code:
    1.     system("cls");

    cũng vậy, pause>nul là gì: mở cmd gõ (copy / paste) xem nó làm gì!
    http://diendan.congdongcviet.com/threads/t400627::script-and-interpret.cpp

    không viết tắt, không chơi loại chưa lớn, leng ten

  9. #9
    Ngày gia nhập
    04 2018
    Bài viết
    8

    ừ thì bạn lớn. thế cuối cùng bạn có giúp tôi hiểu xem tại sao code nó không sắp xếp được không?? dài dòng văn tự

  10. #10
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    902

    Xem qua mã bên trên thì thấy phần lớn các chức năng sắp xếp chưa cài đặt, có 1 cái cài đặt thì bạn lại so sánh chuỗi trực tiếp : if(sv[i].MaSinhVien > sv[j].MaSinhVien) <== sai
    Bạn phải dùng các hàm so sánh chuỗi nhé : strcmp, strcmpi,...

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn