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!
// He quan li diem Sinh Vien
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
const int length = 25;
// Dinh nghia cau truc dia chi
typedef struct{
char sonha[10]; // Vi so nha co the co dang 12345/543
char tenpho[50];
} Diachi;
// Dinh nghia lop Sinh Vien
class Sinhvien{
private:
char ten[20];
Diachi dc;
float diem;
public:
void nhapsv();
void hienthi();
void sapxep();
};
// Dinh nghia phuong thuc ngoai lop
void Sinhvien::nhapsv(){
cout << " So nha: "; cin.
getline(dc.
sonha,
10); cout << " Ten pho: ";cin.
getline(dc.
tenpho,
20); }
void Sinhvien::hienthi(){
cout << " == Thong tin quan li diem sinh vien === " << endl
; cout << " Nam hoc 2006 - 2007 " << endl
; cout << " Sinh Vien " << ten
<< endl
; cout << " Dia chi: " << dc.
sonha << " - " << " " << dc.
tenpho << endl
; cout << " So diem dat duoc: " << diem
<< endl
; }
void main(){
int n;
int j;
char fileName[length];
Sinhvien *sv = new Sinhvien[n];
//float bandau;
cout << " ********* Chuong trinh Quan Ly Sinh Vien ********* "; cout << " Xin cho biet so luong sinh vien muon nhap : n = ";cin >> n
; cout << " Xin cho biet ten tep tin muon luu : ";cin >> fileName
; fstream fileOut(fileName, ios::out|ios::binary);
if(!fileOut){ // Không mo duoc tap tin
cout << "Khong the tao duoc tep tin " << fileName
<< endl
; exit(1);
}
// Bat dau nhap sinh vien trong vong lap for
for(int i=0;i<n;i++){
sv[i].nhapsv();
// Ghi du lieu vao tep
fileOut.write(reinterpret_cast<char *>(&sv), sizeof(Sinhvien));
}
//fileOut.close();
// Dong tep va duyet thong tin
cout << " Ban muon duyet thong tin? (1/0) " << endl
; if(j==1)
{
fstream fileIn(fileName, ios::in|ios::binary); // Khai bao mo tep tin
while(fileIn)
{
fileIn.read(reinterpret_cast<char *>(&sv), sizeof(Sinhvien)); // Doc ki tu tu tep tin
cout << " Ban muon cho hien thi sinh vien thu i = "; cin >> i
; sv[i].hienthi();
cout << " Ban thay Sinh vien nay the nao? "; fileIn.close();
}
}
else{
cout << " Ban that la ngoc ";} // hii hii delete [] sv; // Xoa bo nho dong da cap cho mang doi tuong *sv
}
Đó, 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 đỡ.