#include <iostream>
#include <string>
#include <fstream>
struct Mahasiswa {
int pk{};
std::string NIM{};
std::string Name{};
std::string Jurusan{};
};
void write_data(std::fstream &data, int posisi, Mahasiswa &input_mahasiswa) {
data.seekp((posisi-1)*sizeof(Mahasiswa), std::ios::beg);
data.write(reinterpret_cast < char*> (&input_mahasiswa), sizeof(Mahasiswa));
}
Mahasiswa read_data(std::fstream &data, int posisi) {
Mahasiswa input_mahasiswa;
data.seekg((posisi - 1) * sizeof(Mahasiswa), std::ios::beg);
data.read(reinterpret_cast<char*>(&input_mahasiswa), sizeof(Mahasiswa));
return input_mahasiswa;
}
int get_datasize(std::fstream& data) {
int start;
int end;
data.seekg(0, std::ios::beg);
start = data.tellg();
data.seekg(0, std::ios::end);
end = data.tellg();
return (end - start) / sizeof (Mahasiswa);
}
void display_data(std::fstream &data) {
Mahasiswa show_data;
int ukuran_data{ get_datasize(data) };
`std::cout << "PK t" << "NIM t" << "NAMA t" << "JURUSAN n";`
`for (int i{ 1 }; i <= ukuran_data; i++) {`
`show_data = read_data(data, i);`
`std::cout << "PK :" << show_data.pk << "t";`
`std::cout << "NIM :" << show_data.NIM << "t";`
`std::cout << "NAMA :" << show_data.Name << "t";`
`std::cout << "JURUSAN :" << show_data.Jurusan << "n";`
`}`
}
void check_data(std::fstream &data) {
if (data.is_open()) {
std::cout << "Data ditemukan n";
}
else {
data.close();
std::cout << "Data tidak ditemukan n";
data.open("data.bin", std::ios::trunc | std::ios::out | std::ios::in | std::ios::binary);
}
}
int main()
{
`std::fstream data;`
`data.open("data.bin", std::ios::out | std::ios::in | std::ios::binary);`
`check_data(data);`
`int ukuran_data{ get_datasize(data) };`
`std::cout << "Ukuran data: " << ukuran_data << std::endl;`
`Mahasiswa input_mahasiswa;`
`Mahasiswa last_mahasiswa;`
`if (ukuran_data == 0) {`
`input_mahasiswa.pk = 1;`
`}`
`else {`
`last_mahasiswa = read_data(data, ukuran_data);` // I guess this part is not working cause the read_data()
`std::cout << "PK: " << last_mahasiswa.pk << std::endl;`
`input_mahasiswa.pk = last_mahasiswa.pk + 1;`
`}`
`std::cout << "NIM = ";`
`std::getline(std::cin, input_mahasiswa.NIM);`
`std::cout << "Name = ";`
`std::getline(std::cin, input_mahasiswa.Name);`
`std::cout << "Jurusan = ";`
`std::getline(std::cin, input_mahasiswa.Jurusan);`
`write_data(data, ukuran_data + 1, input_mahasiswa);`
`display_data(data);`
`return 0;`
}
I think the write and read for data is not working because the program is stop while on the read_data(), especially on the debug mode. But why the code working without any problem while on the release mode? Can anyone explain why?
Maryanto is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.