Witam, bardzo proszę o pomoc w przerobieniu kodu pod tekst zadania. Niestety jestem laikiem w programowaniu a potrzebuję jednorazowej pomocy w napisaniu programu na studia. Więcej nie będę miała do czynienia z programowaniem. Byłam chora i niestety opuściłam jedne zajęcia i teraz mam braki.
Tekst zadania:
- Prosta baza danych reprezentowana strukturę zawiera imię i nazwisko pacjenta, numer badania i
kwotę usługi medycznej. Przeczytać dane do struktury z pliku tekstowego o nazwie podanej z
klawiatury i zapisać do pliku binarnego o nazwie podanej z klawiatury. Struktura powinna zawierać
funkcję pozwalającą na odczyt danych z pliku. Zapis binarny wykonać za pomocą funkcji pobierającej
jako argument obiekt zaprojektowanej struktury.
Kod do przerobienia
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
const char znak_podzialu = ';';
struct struktura_klienta{
string imie;
string nazwisko;
float srodki;
string waluta;
void wczytaj_klienta(string a, string b, float c, string d);
void wyswietl();
void zapis_binarny(string sciezka, struktura_klienta struktura);
};
int wielkosc_pliku(string plik);
int main(int argc, char** argv) {
string plik_odczyt;
cout << "Wpisz sciezke do pliku z danymi" << endl;
cin >> plik_odczyt;
int plik_rozmiar = wielkosc_pliku(plik_odczyt);
if(wielkosc_pliku>=0)
{
struktura_klienta *klient = new struktura_klienta[plik_rozmiar];
FILE *odczyt;
char znak;
int i = 0;
int j = 0;
int b;
float n;
int pom = 0;
string a[4] ="";
odczyt=fopen(plik_odczyt.c_str(),"r");
if(odczyt==NULL){
cout << "Brak pliku" << endl;
return -1;
}
do
{
znak=fgetc(odczyt);
switch(znak)
{
case znak_podzialu:
i++;
pom = 0;
break;
case '\n':
if(pom==0)
{
pom = 1;
n = atof(a[2].c_str());
klient[j].wczytaj_klienta(a[0],a[1],n,a[3]);
j++;
i=0;
a[0] = "";
a[1] = "";
a[2] = "";
a[3] = "";
}
break;
case EOF:
if(a[0]!="")
{
n = atof(a[2].c_str());
klient[j].wczytaj_klienta(a[0],a[1],n,a[3]);
j++;
}
break;
default:
a[i]=a[i]+znak;
break;
}
}while(znak != EOF);
fclose(odczyt);
char znak_decyzji;
int t1 = 0;
do
{
cout << "Wyswietlic struktura_klienta z wczytanych struktur?" << endl << "<T/t> Tak" << endl << "<N/n> Nie" << endl;
znak_decyzji = getchar();
system("cls");
if((znak_decyzji == 't') || (znak_decyzji == 'T')){
for(int i =0;i<j;i++){
cout << "..................." << i+1 << "...................." << endl;
klient[i].wyswietl();
}
cout << "......................................" << endl;
t1 = 1;
}
if((znak_decyzji == 'n') || (znak_decyzji == 'N')){
t1 = 1;
}
}while(t1!=1);
cout << "Wpisz sciezke pliku do zapisu binarnego" << endl;
string plik_sciezka_zapis;
cin >> plik_sciezka_zapis;
for(int i = 0; i<j;i++){
klient[i].zapis_binarny(plik_sciezka_zapis,klient[i]);
}
delete[] klient;
}
}
int wielkosc_pliku(string plik)
{
fstream odczyt;
odczyt.open(plik.c_str());
if(!odczyt){
cout << "Nie ma takiego pliku" << endl;
return -1;
}
int numer_lini=0;
string wiersz;
while ( !odczyt.eof() )
{
getline(odczyt,wiersz);
numer_lini++;
}
odczyt.close();
return numer_lini;
}
void struktura_klienta::wczytaj_klienta(string a, string b, float c, string d)
{
imie = a;
nazwisko = b;
srodki = c;
waluta = d;
}
void struktura_klienta::wyswietl()
{
cout << "Imie: " << imie << endl;
cout << "Nazwisko: " << nazwisko << endl;
cout << "Srodki: " << srodki << endl;
cout << "Waluta: " << waluta << endl;
}
void struktura_klienta::zapis_binarny(string sciezka, struktura_klienta struktura)
{
ofstream zapisanie;
zapisanie.open(sciezka.c_str(),ios::binary|ios::app);
if(zapisanie.fail())
{
cout << "Zapis zakonczony bledem" << endl;
}
zapisanie.write((char*) &struktura,sizeof(struktura));
zapisanie.close();
}