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

Đề tài: Bài tập quản lí sinh viên, Bài tập C++

  1. #1
    Ngày gia nhập
    07 2007
    Nơi ở
    Hà Tây
    Bài viết
    0

    Question Bài tập quản lí sinh viên, Bài tập C++

    Xin chào các anh em!
    Mình là thành viên mới của diễn đàn được gần 1 tuần. Nhờ diễn đàn mà mình đã học được nhiều nhiều. Mình cũng mới học C++. Mình có một bài tập, như thế này (Trích dẫn ở dưới), đã viết nhiều kiểu nhưng cứ viết được phần này thì hỏng phần kia. Nay post lên, nhờ anh em giúp đỡ. Xin cám ơn trước!

    Đây là đề bài nhé!
    Code:
    Đề bài:
    Hệ quản lý điểm của sinh viên bao gồm lớp Sinh viên với các thuộc tính:
    - Tên sinh viên
    - Địa chỉ
    - Điểm
    Trong đó, địa chỉ có dạng cấu trúc gồm số nhà và đường phố.
    Viết chương trình:
    a. Nhập các thông tin cho sinh viên
    b. Ghi vào tệp
    c. Hiển thị ra màn hình
    d. Sắp xếp tên theo thứ tự
    Và đây là code mình đã viết!

    C++ Code:
    1.  
    2. // He quan li diem Sinh Vien
    3.  
    4. #include <stdio.h>
    5. #include <dos.h>
    6. #include <conio.h>
    7. #include <string.h>
    8. #include <ctype.h>
    9. #include <iostream.h>
    10. #include <fstream.h>
    11. #include <stdlib.h>
    12.  
    13.  
    14. const int length = 25;
    15. // Dinh nghia cau truc dia chi
    16.  
    17. typedef struct{
    18.     char sonha[10]; // Vi so nha co the co dang 12345/543
    19.     char tenpho[50];
    20. } Diachi;
    21.  
    22. // Dinh nghia lop Sinh Vien
    23.  
    24. class Sinhvien{
    25.     private:           
    26.                char ten[20];
    27.       Diachi dc;
    28.       float diem;
    29.     public:
    30.       void nhapsv();
    31.       void hienthi();
    32.       void sapxep();
    33. };
    34. // Dinh nghia phuong thuc ngoai lop
    35.  
    36. void Sinhvien::nhapsv(){
    37.  
    38.     cout << "    Ho Ten: ";
    39.     cin.ignore();
    40.     cin.getline(ten,20);
    41.     cout << "    So nha: "; cin.getline(dc.sonha,10);
    42.     cout << "    Ten pho: ";cin.getline(dc.tenpho,20);
    43.     cout << "    Diem: "; cin >> diem;
    44. }
    45. void Sinhvien::hienthi(){
    46.     cout << endl;
    47.     cout << endl;
    48.     cout << " == Thong tin quan li diem sinh vien === " << endl;
    49.     cout << "           Nam hoc 2006 - 2007           " << endl;
    50.     cout << endl;
    51.     cout << " Sinh Vien " << ten << endl;
    52.     cout << " Dia chi: " << dc.sonha << " - " << " " << dc.tenpho << endl;
    53.     cout << " So diem dat duoc: " << diem << endl;
    54.             cout << endl;
    55. }
    56.  
    57.  
    58. void main(){
    59. int n;
    60. int j;
    61. char fileName[length];
    62. Sinhvien *sv = new Sinhvien[n];
    63.  
    64. //float bandau;
    65. cout << " "<< endl;
    66. cout << " ********* Chuong trinh Quan Ly Sinh Vien ********* ";
    67. cout << " "<< endl;
    68. cout << " "<< endl;
    69. cout << " "<< endl;
    70. cout << "  Xin cho biet so luong sinh vien muon nhap : n = ";cin >> n;
    71. cout << "  Xin cho biet ten tep tin muon luu : ";cin >> fileName;
    72. fstream fileOut(fileName, ios::out|ios::binary);
    73.     if(!fileOut){   // Không mo duoc tap tin
    74.     cout << "Khong the tao duoc tep tin " << fileName << endl;
    75.     exit(1);
    76. }
    77. cout << endl;
    78. // Bat dau nhap sinh vien trong vong lap for
    79. for(int i=0;i<n;i++){
    80. sv[i].nhapsv();
    81.  
    82. // Ghi du lieu vao tep
    83.         fileOut.write(reinterpret_cast<char *>(&sv),    sizeof(Sinhvien));
    84. }
    85.  
    86.  
    87. //fileOut.close();
    88. // Dong tep va duyet thong tin
    89. cout << "          Ban muon duyet thong tin? (1/0) " << endl;
    90. cin >> j;
    91. if(j==1)
    92. {
    93. fstream fileIn(fileName, ios::in|ios::binary); // Khai bao mo tep tin
    94. while(fileIn)
    95.     {
    96.     fileIn.read(reinterpret_cast<char *>(&sv), sizeof(Sinhvien));   // Doc ki tu tu tep tin
    97.  
    98.     cout << "";endl;
    99.     cout << "  Ban muon cho hien thi sinh vien thu i = "; cin >> i;
    100.     sv[i].hienthi();
    101.     cout << "  Ban thay Sinh vien nay the nao? ";
    102.     fileIn.close();
    103.     }
    104.  
    105. }
    106.  
    107. else{
    108. cout << " Ban that la ngoc ";} // hii hii
    109. delete [] sv;       // Xoa bo nho dong da cap cho mang doi tuong *sv
    110. }

    Đó, mình làm rất nhiều cách rồi, và đây là cách cuối, vẫn thấy nó không ổn nên nhờ anh em xem giúp.
    Tình hình là nếu không có phần ghi vào tệp dạng nhị phân thì nhập và xuất thông tin bình thường.
    Nếu thêm vần ghi tệp thì khi xuất thông tin ra, nó không nhu lúc nhập vào, toàn kí tự lạ thôi.
    Và phần sắp xếp theo tên thì mình không làm được. Rất mong được giúp đỡ.

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Biến int n chưa được khởi tạo, lấy đâu ra mà new Sinhvien[n]. Trên các compiler cũ của DOS (Turbo/Borland), n có thể đã được gán gái trị 0. Ct không crash là hay đấy. Biến j cũng vậy.
    Nguyên tắc quan trong khi coding: Khi dùng 1 biến nào, phải chắc chắn nó đã được khởi tạo, còn sống và có trị khởi gán hợp lý cho nó.

  3. #3
    Ngày gia nhập
    05 2007
    Nơi ở
    HCMC
    Bài viết
    60

    Sắp xếp ds sinh viên theo tên cũng tương tự như sắp xếp ds số, nhưng khi so sánh thì dùng hàm so sánh chuỗi trong thư viện "string.h" như sau:

    - int strcmp(s1,s2): hàm so sánh chuỗi, trả về giá trị 0 nếu s1 = s2; và trả về 1 nếu s1 <> s2

    - int stricmp(s1,s2): giống strcmp, nhưng có phân biệt chữ hoa và chữ thường

    Trường hợp đọc file nhị phân mà chỉ thấy "toàn ký tự lạ" là... tất nhiên rồi. Bạn nên xem lại phần "đọc/ghi file nhị phân" trong diễn đàn này (đã được hỏi nhiều trước đây)

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Nguyên tắc quan trong khi coding: Khi dùng 1 biến nào, phải chắc chắn nó đã được khởi tạo, còn sống và có trị khởi gán hợp lý cho nó.
    Hay ! Thank TQN .

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    Hà Tây
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi TQN Xem bài viết
    Biến int n chưa được khởi tạo, lấy đâu ra mà new Sinhvien[n]. Trên các compiler cũ của DOS (Turbo/Borland), n có thể đã được gán gái trị 0. Ct không crash là hay đấy. Biến j cũng vậy.
    Nguyên tắc quan trong khi coding: Khi dùng 1 biến nào, phải chắc chắn nó đã được khởi tạo, còn sống và có trị khởi gán hợp lý cho nó.
    Cám ơn anh em đã chỉ giúp. Nhưng mình không biết phải sửa thế nào cho ổn nữa. Mong anh em cho hướng code cụ thể hơn. Vì mình khai báo int n là để sau đó mới khởi tạo từ thao tác nhập bàn phím. Mình được dạy như vậy đấy. Xin chỉ giáo thêm.
    Mình sửa theo hướng này có được ko?
    Code:
    cout << "  Xin cho biet so luong sinh vien muon nhap : n = ";cin >> n;
    Sinhvien *sv = new Sinhvien[n];
    Còn phần sắp xếp, cám ơn anh em. mình sẽ viết thử theo hướng đó.
    Mong sớm nhân được giúp đỡ.

  6. #6
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Mặc định Bài tập quản lí sinh viên, Bài tập C++

    Được, nhưng hãy đặt trường hợp, thằng nào chơi ác, nhập không hay số âm thì sao, lại crash cái đùng, vì biến n của cậu là int mà.
    Khi code, nhớ thêm 1 điều nữa là luôn luôn kiểm tra, không tin vào ai cả, mình còn chưa tin mình huống chi.
    Bản thân tui đây, viết lib cho các member # trong team gọi, vậy mà đến khi chính mình dùng lib của mình còn gọi sai nữa là.
    Quy tắc trong coding thì nhiều lắm, tui nhớ không hết. Các cậu nên tìm đọc cuốn "Code Completed" của cha gì đó quên rồi.

  7. #7
    Ngày gia nhập
    07 2007
    Nơi ở
    Hà Tây
    Bài viết
    0

    Xin cảm ơn TQN! Mình hiểu hơn chút rồi. Nếu ai có hướng dân cụ thể về code, xin cứ gửi lên. Mình đang làm lại rồi. Thanks anh em!

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Hà Tây
    Bài viết
    0

    Anh e à! Xin giúp đỡ cụ thể hơn vì mình đã viết theo hướng đó. Nhưng nó crash luôn. Ặc ặc. Không bít làm thế nào nữa!

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

  1. Quản lí sinh viên bằng stack dùng danh sách liên kết. Làm sao để nhập nhiều sinh viên?
    Gửi bởi hoainamken trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 24-08-2011, 10:34 AM
  2. 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
  3. 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
  4. Kỹ thuật C code bài tập về quản lý sinh viên. Không hiển thị đc tên với mã số sinh viên?
    Gửi bởi seudaudokt 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: 06-09-2010, 12:18 AM
  5. Chương trình quản lý sinh viên viết bằng C. Làm sao tìm kiếm sinh viên theo tên và sắp xếp?
    Gửi bởi linhdong24 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 24-06-2009, 12:53 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