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ố 18 kết quả

Đề tài: Bài tập C | Code bài tập quản lý sinh viên lỗi ở đâu, giúp mình sửa lỗi?

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    0

    Mặc định Bài tập C | Code bài tập quản lý sinh viên lỗi ở đâu, giúp mình sửa lỗi?

    Xin chào mọi người. Em cũng mới học C thôi, nên nhiều cái thấy hơi bi chuối.
    Hiện em đang phải làm một bài tập về quản lý sinh viên, đề bài là:
    Tạo một menu.
    1. Tên và tuổi của sinh viên cần thêm vào(tùy người nhập).
    2. In ra tên và tuổi của sinh viên sau khi đã được sắp xếp.
    3. Thóat(exit).
    Em cũng đã có mầy mò làm nhưng mà chưa đến nơi. Mọi người có thể chỉ giúp em được o? Em xin cảm ơn mọi người.
    Đây là đoạn code mà em đã viết.

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4.  
    5. void main()
    6. {
    7.     char ten[100][50];
    8.     int tuoi[100];
    9.     int i, j;
    10.     int k;
    11.     int n, item;
    12.     char temp[100];
    13.     printf("\n\t\t *** MENU QUAN LY SINH VIEN *** ");
    14.     printf("\n Viec nhap thong tin sinh vien se ket thuc khi ban nhap 'end'.");
    15.     do
    16.     {
    17.         printf("\n1.Nhap thong tin sinh vien.");
    18.         printf("\n2.In ra danh sach sinh vien.");
    19.         printf("\n3.Thoat.");
    20.         printf("\n Moi ban nhap so 1-3 de su dung menu: ");
    21.         scanf("%d", &k);
    22.         do
    23.         {
    24.        
    25.             if(k==1)
    26.                 printf("\n Xin moi ban nhap thong tin cua sinh vien can them vao.");
    27.                 printf("\n Ten cua sinh vien thu %d can them vao la: ", i+1);
    28.                 scanf("%s", &ten[i+1]);
    29.                 printf("\n Tuoi cua sinh vien thu %d can them vao la: ", j+1);
    30.                 scanf("%d", &tuoi[j+1]);   
    31.         }while(strcmp(ten[i++], "end"));
    32.             if(k==2)
    33.                 i=i-1;
    34.                 for(item=0;item<i-1;i++)
    35.                 {
    36.                     for(n=item+1;n<i;n++)
    37.                     {
    38.                         if(strcmp(ten[item], ten[n])>0)
    39.                         {
    40.                             strcpy(temp, ten[item]);
    41.                             strcpy(ten[item], ten[n]);
    42.                             strcpy(ten[n], temp);
    43.                         }
    44.                     }
    45.                 }
    46.            
    47.             for(n=0;n<i;n++)
    48.             {
    49.                 printf("\n+-----+------------------------------------+--------+");
    50.                 printf("\n| STT |         H O   V A   T E N          |   TUOI |");
    51.                 printf("\n+-----+------------------------------------+--------+"); 
    52.             }
    53.             for(n=0;n<i;n++)
    54.             {
    55.                 printf("\n| %3d | ", i+1);
    56.                 printf("%-35s| %2d |", ten);
    57.             }
    58.                 printf("\n+-----+------------------------------------+--------+");
    59.            
    60.             if(k==3)
    61.                 printf("\n Cam on ban da su dung chuong trinh cua chung toi.");
    62.            
    63.                 exit(0);
    64.     }while(k!=4);
    65.     printf("\n Ban nhap sai so.\n Moi ban nhap lai.");
    66.     getch();
    67. }
    Đã được chỉnh sửa lần cuối bởi lethanh : 21-04-2009 lúc 08:33 PM.

  2. #2
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Mình mới coi sơ sơ thấy có vài chỗ cần lưu ý:
    Trích dẫn Nguyên bản được gửi bởi kenlog Xem bài viết
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4.  
    5. void main()
    6. {
    7.     char ten[100][50];//?
    8.     int tuoi[100];//?
    9.     int i, j;//i=0,j=0;
    10.     int k;
    11.     int n, item;
    12.     char temp[100];
    13.     printf("\n\t\t *** MENU QUAN LY SINH VIEN *** ");
    14.     printf("\n Viec nhap thong tin sinh vien se ket thuc khi ban nhap 'end'.");
    15.     do
    16.     {
    17.         printf("\n1.Nhap thong tin sinh vien.");
    18.         printf("\n2.In ra danh sach sinh vien.");
    19.         printf("\n3.Thoat.");
    20.         printf("\n Moi ban nhap so 1-3 de su dung menu: ");
    21.         scanf("%d", &k);
    22.         do
    23.         {
    24.        
    25.             if(k==1)
    26.                 printf("\n Xin moi ban nhap thong tin cua sinh vien can them vao.");
    27.                 printf("\n Ten cua sinh vien thu %d can them vao la: ", i+1);//báo lỗi ở đây do chưa khỏi tạo i
    28.                 scanf("%s", &ten[i+1]);//chỗ này là gets(ten),hoặc nếu scanf thì ko có &.
    29.                 printf("\n Tuoi cua sinh vien thu %d can them vao la: ", j+1);//báo lỗi
    30.                 scanf("%d", &tuoi[j+1]);   
    31.         }while(strcmp(ten[i++], "end"));//?
    32.             if(k==2)
    33.                 i=i-1;
    34.                 for(item=0;item<i-1;i++)
    35.                 {
    36.                     for(n=item+1;n<i;n++)
    37.                     {
    38.                         if(strcmp(ten[item], ten[n])>0)
    39.                         {
    40.                             strcpy(temp, ten[item]);//?
    41.                             strcpy(ten[item], ten[n]);//?
    42.                             strcpy(ten[n], temp);//?
    43.                         }
    44.                     }
    45.                 }
    46.            
    47.             for(n=0;n<i;n++)
    48.             {
    49.                 printf("\n+-----+------------------------------------+--------+");
    50.                 printf("\n| STT |         H O   V A   T E N          |   TUOI |");
    51.                 printf("\n+-----+------------------------------------+--------+"); 
    52.             }
    53.             for(n=0;n<i;n++)
    54.             {
    55.                 printf("\n| %3d | ", i+1);
    56.                 printf("%-35s| %2d |", ten);
    57.             }
    58.                 printf("\n+-----+------------------------------------+--------+");
    59.            
    60.             if(k==3)
    61.                 printf("\n Cam on ban da su dung chuong trinh cua chung toi.");
    62.            
    63.                 exit(0);
    64.     }while(k!=4);
    65.     printf("\n Ban nhap sai so.\n Moi ban nhap lai.");
    66.     getch();
    67. }
    Khi làm một bài tập về sinh viên bạn nên xây dựng cấu trúc cho nó
    typedef struct
    {
    char ten[40];
    int tuoi;
    }sinhvien;
    sau đó khai báo một mảng sinhvien[sôsinhvien]
    chứ cậu khai báo char[100][50],int tuoi[100] không ổn đâu,mà mình cũng chưa thấy kiểu khai báo như vậy bao giờ.
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  3. #3
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Nó dạng ntn này bạn


    C Code:
    1. #include "stdio.h"
    2. #include "conio.h"
    3. #include "string.h"
    4. struct sinhvien
    5.     {
    6.         char  masv[20];
    7.         char  hoten[50];
    8.         float dtb;
    9.         char  qq[50];
    10.     };
    11.  
    12. void main()
    13.     {
    14.         textcolor(10);
    15.         clrscr();
    16.         struct sinhvien sv[50];
    17.         int n,i;
    18.         float tam;
    19.         printf("Muon nhap bao nhieu sinh vien: ");
    20.         scanf("%d",&n);
    21.         for(i=0;i<n;i++)
    22.             {
    23.                 printf("\n\nNhap vao sinh vien thu: %d\n",i+1);
    24.  
    25.                 fflush(stdin);
    26.                 printf("Nhap vao ma sinh vien cua sinh vien: ");
    27.                 gets(sv[i].masv);
    28.  
    29.                 printf("\nNhap vao ho ten cua sinh vien: ");
    30.                 gets(sv[i].hoten);
    31.                 fflush(stdin);
    32.  
    33.                 printf("\nNhap vao que quan cua sinh vien: ");
    34.                 gets(sv[i].qq);
    35.  
    36.                 printf("\nNhap vao diem trung binh cua sinh vien: ");
    37.                 scanf("%f",&tam);
    38.                 sv[i].dtb=tam;
    39.             }
    40.             printf("\n\nCac thong tin ban vua nhap la: ");
    41.             for(i=0;i<n;i++)
    42.             printf("\n%5s %20s %20s %10.1f",sv[i].masv,sv[i].hoten,sv[i].qq,sv[i].dtb);
    43.  
    44.             //tim va in cac sinh vien co trung binh >=5
    45.             printf("\n\nCac thi sinh trung tuyen la: ");
    46.             for(i=0;i<n;i++)
    47.                 if(sv[i].dtb>=5)
    48.             printf("\n%5s %20s %20s %10.1f",sv[i].masv,sv[i].hoten,sv[i].qq,sv[i].dtb);
    49.             getch();
    50.     }

    đây là code mình từ hồi mình mới học struct mình post lên để cho bạn hình dung được 1 ctrinh struct ntn


    +> còn câu sắp xếp theo tuổi bạn làm như sắp xếp như trong mảng

    C Code:
    1. for(i=0;i<n;i++) // n là số sinh viên bạn nhập vào
    2.    for(j=i+1;j<n;j++)
    3.       if(sv[i].tuoi>sv[j].tuoi)
    4.           {
    5.               tam=sv[i];
    6.               sv[i]=sv[j];
    7.               sv[j]=tam;
    8.           }

    +>sắp xếp theo tên
    C Code:
    1. for(i=0;i<n;i++) // n là số sinh viên bạn nhập vào
    2.    for(j=i+1;j<n;j++)
    3.        if(stricmp(sv[i].hoten,sv[j].hoten)>0)
    4.           {
    5.                    tam=sv[i];
    6.                    sv[i]=sv[j];
    7.                    sv[j]=tam;
    8.           }
    @quicksilver89 :Lần sau nhớ cho code vào tag nha bạn.
    Đã được chỉnh sửa lần cuối bởi lethanh : 22-04-2009 lúc 11:46 AM.
    u never know

  4. #4
    Ngày gia nhập
    02 2009
    Bài viết
    0

    em cũng học về xây dựng cấu trúc rùi nhưng mà cô giáo lại o cho sử dụng nó. híc, nên em mới phải sử dụng kiểu này.
    còn đoạn code này:

    for(item=0;item<i-1;i++)
    {
    for(n=item+1;n<i;n++)
    {
    if(strcmp(ten[item], ten[n])>0)
    {
    strcpy(temp, ten[item]);//?
    strcpy(ten[item], ten[n]);//?
    strcpy(ten[n], temp);//?

    em nghĩ là đúng chứ. Nó dùng để sắp xếp lại tên theo thứ tự mà.

  5. #5
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    eck bà giáo đó bị làm sao thế học về struct lại ko cho học sinh sử dụng nó ~,~ pó tay cco giáo bạn luôn ^^!
    u never know

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Mặc định Bài tập C | Code bài tập quản lý sinh viên lỗi ở đâu, giúp mình sửa lỗi?

    Trích dẫn Nguyên bản được gửi bởi kenlog Xem bài viết
    em cũng học về xây dựng cấu trúc rùi nhưng mà cô giáo lại o cho sử dụng nó. híc, nên em mới phải sử dụng kiểu này.
    còn đoạn code này:

    for(item=0;item<i-1;i++)
    {
    for(n=item+1;n<i;n++)
    {
    if(strcmp(ten[item], ten[n])>0)
    {
    strcpy(temp, ten[item]);//?
    strcpy(ten[item], ten[n]);//?
    strcpy(ten[n], temp);//?
    em nghĩ là đúng chứ. Nó dùng để sắp xếp lại tên theo thứ tự mà.
    Nếu đúng thì code của cậu đã chạy được chưa?
    Theo mình nghĩ cậu mang bài này đến hỏi cô giáo của cậu vào giờ thực hành,Lần đầu tiên thấy có người dạy IT kiểu này.
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  7. #7
    Ngày gia nhập
    02 2009
    Bài viết
    0

    hi. bài này chạy ngon. các anh thử test mà xem.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void Nhap();
    void Sapxep();
    void Hienthi();
    char Name[100][30];
    int Tuoi[100];
    static int SVCount;
    static int n;
    void main()
    {
       do{
       printf("===================***Sinh Vien***===================\n\n");
    
       printf("1.Nhap thong tin sinh vien.\n");
       printf("2.Danh sach sinh vien.\n");
       printf("3.Thoat.\n");
       printf("================\n");
       printf("Nhap so de su dung Menu (1-3):");
       scanf("%d",&SVCount);
       switch(SVCount)
       {	
       case 1:
       Nhap();
       break;
       case 2:
       Sapxep();
       Hienthi();
       break;
       }
       }while (SVCount!=3);
       if(SVCount==3)
    			printf("\n Cam on ban da su dung chuong trinh cua chung toi.");
    			printf("\n Chuong trinh do:\n Doan Ngoc Tu\n Le Huu Long\n Nguyen Manh Kien bien soan.\n ");
       getch();
    }
    
    
    	// Nhap thong tin sinh vien.
    void Nhap()
    {
    
    	printf("\n Nhap so luong sinh vien can them vao: ");
       scanf("%d",&n);
    	for(int i=0; i<n; i++)
    	{
    		printf("\n Nhap ten sinh vien %d: ",i+1);
          fflush stdin;
          gets(Name[i]);
          printf("\n Tuoi sinh vien %d:",i+1);
          scanf("%d",&Tuoi[i]);
        }
       return ;
    }
    
    	// Sap xep ten sinh vien theo thu tu abc.
    void Sapxep()
    {
    	char temp[30];
       int t;
       for(int i=0; i<n; i++)
       	{
       		for(int j=i+1; j< n; j++)
    	   	{
          		if((strcmp(Name[i],Name[j])>0)
                  ||((strcmp(Name[i],Name[j])==0)&& (Tuoi[i]>Tuoi[j])))
    		  		{
      				strcpy(temp,Name[i]);
                t=Tuoi[i];
        			strcpy(Name[i],Name[j]);
                Tuoi[i]=Tuoi[j];
         			strcpy(Name[j],temp);
                Tuoi[j]=t;
       			}
       		}
        }
    }
       // Hien thi sau khi sap xep.
    void Hienthi()
    {
    	clrscr;
    			  	printf("\n+-----+------------------------------------+--------+");
    				printf("\n| STT |         H O   V A   T E N          |  TUOI  |");
    				printf("\n+-----+------------------------------------+--------+");
    
    			for(int i=0 ; i<n; i++)
    			   {
    				printf("\n| %3d | ",i+1);
    				printf("%-35s| %4d   |", Name[i],Tuoi[i]);
    			   }
    				printf("\n+-----+------------------------------------+--------+\n");
    
    }

  8. #8
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    chạy ngon rồi thì thôi test làm cái ji nữa cho mất time
    u never know

  9. #9
    Ngày gia nhập
    03 2009
    Nơi ở
    Hải Phòng
    Bài viết
    5

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>

    void Nhap();
    void Sapxep();
    void Hienthi();
    char Name[100][30];
    int Tuoi[100];
    static int SVCount;
    static int n;
    void main()
    {
    do{
    printf("===================***Sinh Vien***===================\n\n");

    printf("1.Nhap thong tin sinh vien.\n");
    printf("2.Danh sach sinh vien.\n");
    printf("3.Thoat.\n");
    printf("================\n");
    printf("Nhap so de su dung Menu (1-3):");
    scanf("%d",&SVCount);
    switch(SVCount)
    {
    case 1:
    Nhap();
    break;
    case 2:
    Sapxep();
    Hienthi();
    break;
    }
    }while (SVCount!=3);
    if(SVCount==3)
    printf("\n Cam on ban da su dung chuong trinh cua chung toi.");
    printf("\n Chuong trinh do:\n Doan Ngoc Tu\n Le Huu Long\n Nguyen Manh Kien bien soan.\n ");
    getch();
    }


    // Nhap thong tin sinh vien.
    void Nhap()
    {

    printf("\n Nhap so luong sinh vien can them vao: ");
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
    printf("\n Nhap ten sinh vien %d: ",i+1);
    fflush stdin;
    gets(Name[i]);
    printf("\n Tuoi sinh vien %d:",i+1);
    scanf("%d",&Tuoi[i]);
    }
    return ;
    }

    // Sap xep ten sinh vien theo thu tu abc.
    void Sapxep()
    {
    char temp[30];
    int t;
    for(int i=0; i<n; i++)
    {
    for(int j=i+1; j< n; j++)
    {
    if((strcmp(Name[i],Name[j])>0)
    ||((strcmp(Name[i],Name[j])==0)&& (Tuoi[i]>Tuoi[j])))
    {
    strcpy(temp,Name[i]);
    t=Tuoi[i];
    strcpy(Name[i],Name[j]);
    Tuoi[i]=Tuoi[j];
    strcpy(Name[j],temp);
    Tuoi[j]=t;
    }
    }
    }
    }
    // Hien thi sau khi sap xep.
    void Hienthi()
    {
    clrscr;
    printf("\n+-----+------------------------------------+--------+");
    printf("\n| STT | H O V A T E N | TUOI |");
    printf("\n+-----+------------------------------------+--------+");

    for(int i=0 ; i<n; i++)
    {
    printf("\n| %3d | ",i+1);
    printf("%-35s| %4d |", Name[i],Tuoi[i]);
    }
    printf("\n+-----+------------------------------------+--------+\n");

    }
    Bài này có lỗi rồi bạn ơi! Lỗi ở chỗ được mình tô đỏ đấy!
    Đã được chỉnh sửa lần cuối bởi lethanh : 28-04-2009 lúc 10:40 AM.
    Đừng spam

  10. #10
    Ngày gia nhập
    04 2009
    Nơi ở
    hải phòng
    Bài viết
    3

    còn thầy mình thì bảo rằng từ nay ai không làm theo kiểu typedef ổng không thèm nhìn mặt, hehe

Các đề tài tương tự

  1. Giúp mình sửa lại code quản lý điểm sinh viên dùm cái. Mình ko biết sửa thế nào cả
    Gửi bởi ronghappy13 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 04-01-2013, 08:49 PM
  2. Tối ưu code quản lý danh sách sinh viên. Mọi người giúp đỡ?
    Gửi bởi trieuvan.n01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 08-01-2011, 08:10 PM
  3. Code bài quản lý điểm sinh viên (không chạy được). Giúp mính sửa?
    Gửi bởi saobang220 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 17
    Bài viết cuối: 23-10-2010, 11:57 PM
  4. Code quản lý sinh viên bằng danh sách lối vòng. Giúp mình thay đổi code kế thừa?
    Gửi bởi caocanha trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 04-05-2009, 03:39 PM
  5. Bài tập C | Code bài tập quản lý sinh viên lỗi ở đâu, giúp mình sửa lỗi?
    Gửi bởi tianlong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 04-05-2009, 06:47 AM

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