Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Rắc rối xử lý input trong bài tập quản lý sinh viên trên C???

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định Rắc rối xử lý input trong bài tập quản lý sinh viên trên C???

    Kim đang làm bài tập quản lý sinh viên.

    Đề bài: Xây dựng kiến trúc quản lý một lớp học với sinh viên có thông tin gồm 5 trường: số báo danh, tên, điểm toán, điểm lý, điểm hóa.

    Bài làm:
    - Cho 3 loại điểm vào một struct:
    C Code:
    1. struct _KimScore {
    2.     float math;
    3.     float physics;
    4.     float chemistry;
    5. };
    6.  
    7. typedef struct _KimScore KimScore;

    - Sau đó khai báo thông tin sinh viên:
    C Code:
    1. struct _KimStudent {
    2.     int id;
    3.     char *name;
    4.     KimScore *score;
    5. };
    6. typedef struct _KimStudent KimStudent;

    - Cuối cùng thông tin lớp học:
    C Code:
    1. struct _KimClass
    2. {
    3.     KimStudent **slist;
    4.     int msize; // max size for class allowed
    5.     int csize; // current size of class , number of students
    6. };
    7. typedef struct _KimClass KimClass;

    * Các quy ước phân chia trong code:
    i) prefix: kim_{class_name}_{operation}
    ii) namespace: kim_{}

    Các file khai báo header:
    1) KimScore.h
    C Code:
    1. #ifndef __SCORE_H__
    2. #define __SCORE_H__
    3.  
    4. #define KSS_MATH        0x01
    5. #define KSS_PHYS        0x02
    6. #define KSS_CHEM        0x03
    7.  
    8. #include <malloc.h>
    9.  
    10. struct _KimScore {
    11.     float math;
    12.     float physics;
    13.     float chemistry;
    14. };
    15.  
    16. typedef struct _KimScore KimScore;
    17.  
    18. KimScore* kim_score_new( );
    19. KimScore* kim_score_new_with_info( const float _m, const float _p, const float _c );
    20.  
    21. void      kim_score_set( KimScore *ks, const float _m, const float _p, const float _c );
    22. void      kim_score_set_single( KimScore *ks, const int _sub, const float _sc);
    23.  
    24. float     kim_score_get_single( const KimScore *ks, const int _sub );
    25.  
    26. KimScore* kim_score_clone( const KimScore *ks );
    27. void      kim_score_copy( KimScore *dks, const KimScore *sks );
    28.  
    29. #endif // __SCORE_H__

    2) KimStudent.h
    C Code:
    1. #ifndef __STUDENT_H__
    2. #define __STUDENT_H__
    3.  
    4. #include "score.h"
    5. #include <malloc.h>
    6. #include <string.h>
    7.  
    8. struct _KimStudent {
    9.     int id;
    10.     char *name;
    11.     KimScore *score;
    12. };
    13. typedef struct _KimStudent KimStudent;
    14.  
    15. KimStudent* kim_student_new( );
    16. KimStudent* kim_student_new_with_info( const int _i, const char *_n, const KimScore *ks );
    17.  
    18. void        kim_student_set( KimStudent *kstd, const int _i, const char *_n, const KimScore *ks );
    19. int         kim_student_get_id( const KimStudent *kstd );
    20. char*       kim_student_get_name( const KimStudent *kstd );
    21. KimScore*   kim_student_get_score( const KimStudent *kstd );
    22.  
    23. KimStudent* kim_student_clone( const KimStudent *kstd );
    24. void        kim_student_copy( KimStudent *dkstd, const KimStudent *skstd );
    25.  
    26.  
    27. #endif // __STUDENT_H__;

    3) KimClass.h
    C Code:
    1. #ifndef __CLASS_H__
    2. #define __CLASS_H__
    3.  
    4. #define CLASS_MAX_SIZE  100
    5.  
    6. #define      KC_SUCCESS             0x20
    7. #define     EKC_MAX_SIZE_EXCEED     0x21
    8. #define     EKC_STUDENT_FOUND       0x22
    9. #define     EKC_STUDENT_NFOUND      0x23
    10. #define     EKC_NOT_EMPTY           0x24
    11.  
    12. #include "student.h"
    13. #include <stdlib.h>
    14. #include <string.h>
    15. #include <stdio.h>
    16.  
    17. struct _KimClass
    18. {
    19.     KimStudent **slist;
    20.     int msize; // max size for class allowed
    21.     int csize; // current size of class , number of students
    22. };
    23. typedef struct _KimClass KimClass;
    24.  
    25. KimClass* kim_class_new();
    26. KimClass* kim_class_new_with_size( const int _ms );
    27.  
    28. int kim_class_insert( KimClass *kc, const KimStudent *ks ); // OK
    29. int kim_class_search_empty( const KimClass *kc ); // OK ??
    30. int kim_class_delete( KimClass *kc, const int _id ); // OK
    31. int kim_class_exist( const KimClass *kc, const int _id ); // OK
    32. int kim_class_edit( KimClass *kc, const int _id, const KimStudent *ks ); // OK
    33. int kim_class_search( const KimClass *kc, const int _id , KimStudent *ks ); //OK
    34.  
    35.  
    36. #endif // __CLASS_H__

    4) KimManage.h
    C Code:
    1. #ifndef __MANAGE_H__
    2. #define __MANAGE_H__
    3.  
    4. #include "class.h"
    5.  
    6. #define  KM_SUCCESS         0x50
    7. #define EKM_INVALID_ID      0x51
    8. #define EKM_INVALID_SCORE   0x52
    9. #define EKM_CANT_ADD        0x53
    10.  
    11. void kim_manage_show_menu();
    12. int kim_manage_get_option();
    13. void kim_manage_process(KimClass *kc, const int _o);
    14.  
    15. int kim_manage_add_student( KimClass *kc );
    16. int kim_manage_edit_student( KimClass *kc );
    17. int kim_manage_find_student( KimClass *kc );
    18. int kim_manage_delete_student( KimClass *kc );
    19.  
    20. #endif // __MANAGE_H__

    Sau đó cho chương trình chạy:
    Code:
    ==================================== 
    [ Class Manager v1.0 ] - by bvKim  ] 
    ==================================== 
    (1). Add a student                   
    (2). Edit a student                  
    (3). Find a student                  
    (4). Delete a student                
    (5). Exit program                    
    ==================================== 
    You choose:
    Không hiểu sao, sau lần input đầu tiên khi add student xong thì không tài nào input được nữa, thêm nữa, cái đoạn trước khi điền `name` thì bịi lỗi thế nào mà nó bỏ qua cái `name`, nó lấy cái `\n` làm giá trị cho `name`, Kim cài đặt vào các kiểu fflush(stdin), getchar(), scanf("%*[^\n]") trước đoạn điền `name` mà nó vẫn thế...

    Không debug được luôn.

    Bạn nào giúp mình xử lý nốt đoạn này với.

    Source attach bên dưới
    Kim cám ơn nhiều!
    Attached Files Attached Files
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    scanf("%*[^\n]") <-- cái này mình ko hiểu nó là cái gì cả ) nhưng mình bỏ nó đi + sửa lại vài chỗ thì chạy được.
    gửi Kim 2 file đã sửa (chỗ fprintf mà in ra stdin thì có trời biết :P)
    Attached Files Attached Files
    code ra gió bão

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trích dẫn Nguyên bản được gửi bởi 6220119 Xem bài viết
    scanf("%*[^\n]") <-- cái này mình ko hiểu nó là cái gì cả ) nhưng mình bỏ nó đi + sửa lại vài chỗ thì chạy được.
    gửi Kim 2 file đã sửa (chỗ fprintf mà in ra stdin thì có trời biết :P)
    khà khà, cảm ơn nha , mấy cái cậu sửa hổng run được trên linux
    nhưng tớ đã nghĩ ra cách fix lỗi rồi ^^!

    giờ thu xếp nộp bài
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

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

  1. Bài tập quản lý sinh viên trong lập trình C#. Tìm kiếm sinh viên in ra cả danh sách?
    Gửi bởi anhduc12c5 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 24-08-2011, 08:32 AM
  2. Chương trình quản lí sinh viên viết trong visual c++ 2010. Lỗi không chạy khi in danh sách sinh viên theo năm
    Gửi bởi hikaru1015 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 9
    Bài viết cuối: 03-06-2011, 09:31 AM
  3. Làm chương trình quản lý sinh viên _ trên màn hình dos như thế nào?
    Gửi bởi dauhoi_8x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 25-09-2010, 07:41 AM
  4. Insert Sinh viên mới trong chương trình quản lý sinh viên?
    Gửi bởi matmeoviet trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 21-06-2009, 08:00 AM
  5. Bài tập về File trên C | Đọc và ghi dữ liệu cho chương trình quản lý sinh viên?
    Gửi bởi noob trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 14-06-2009, 06:52 PM

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