Wpisywanie do pliku kilku rzeczy tak, by nie były kasowane poprzednie

0

Witajcie serdecznie!
Jestem tutaj nowym członkiem, więc chciałbym się ze wszystkimi serdecznie przywitać.

Mam na zaliczenie zrobić program: Sklep spożywczy, oparty na wskaźnikach i strukturach dynamicznych. I to już jest.
Jednak prowadząca nie popuszcza i kazała dopisać funkcję robiącą zakupy i zapisującą zakupy do pliku .txt.
Procedurę zapisu do pliku umieściłem w pętli, bo nie mam innego pomysłu jak to zrealizować.
Gdy np. wybierzemy n produkty do zakupienia, to wtedy pętla z wpisem do pliku kręci n razy, czyli zapisujemy do pliku dane n razy. Z tym, że zapisany mam tylko ostatni produkt, bo funkcja rewrite kasuje to, co było poprzednio w pliku. Jak to ominąć? Tak, żeby plik nie był czyszczony, tylko by były do niego dane dopisywane?
Procedura:

{ZAPISYWANIE DO PLIKU LISTY ZAKUPOW}

procedure zakupy_do_pliku(glowa: pprodukt;ilosc_1:integer; do_zaplaty:real);
var plik:text;
begin
assign(plik, 'lista_zakupow.txt');
rewrite(plik);
writeln(plik,'ZAKUPILES:');
writeln(plik,'Nazwa produktu: ',glowa^.nazwa_produktu);
writeln(plik,'Wybrana ilosc produktu; ',ilosc_1);
writeln(plik,'Cena za produkt/y: ',do_zaplaty2);
close(plik);
end;

Cały program tutaj:
[url]http://pastebin.com/02E4uUDj[/url]

Bardzo proszę o pomoc!

0

Jedno z dwóch:

  1. Do funkcji jako jeden z parametrów przekazuj var plik:text; zaś assign(plik, 'lista_zakupow.txt'); rewrite(plik); close(plik); wynieś poza pętle.
  2. Przenieś tą pętle do funkcji.
0

Jednak prowadząca nie popuszcza i kazała dopisać funkcję robiącą zakupy i zapisującą zakupy do pliku .txt.
Procedurę zapisu do pliku umieściłem w pętli, bo nie mam innego pomysłu jak to zrealizować.

Jeśli teraz w pętli wywołujesz procedurę zakupy_do_pliku to fakt - wykonujesz dużo zbędnych operacji przez ciągłe otwieranie, zapisywanie i zamykanie pliku przy każdym produkcie; Możesz jako argument przekazać listę zakupów, dzięki temu procedurę wykonasz raz, a zostanie zapisane wszystko;

Z tym, że zapisany mam tylko ostatni produkt, bo funkcja rewrite kasuje to, co było poprzednio w pliku. Jak to ominąć? Tak, żeby plik nie był czyszczony, tylko by były do niego dane dopisywane?

Jeśli już koniecznie chcesz dopisać coś do pliku to nie otwieraj go procedurą ReWrite, a Append, jednak to i tak będzie przekombinowane;

Osobiście to wolałbym mieć procedurę zapisującą całe zakupy, a nie poszczególne produkty, bo skoro i tak musisz zapisać całą listę zakupów do pliku to zrób to od razu w specjalnej procedurze; A jest róznica między zakupy_do_pliku a produkt_do_pliku;

0
furious programming napisał(a):

Jednak prowadząca nie popuszcza i kazała dopisać funkcję robiącą zakupy i zapisującą zakupy do pliku .txt.
Procedurę zapisu do pliku umieściłem w pętli, bo nie mam innego pomysłu jak to zrealizować.

Jeśli teraz w pętli wywołujesz procedurę zakupy_do_pliku to fakt - wykonujesz dużo zbędnych operacji przez ciągłe otwieranie, zapisywanie i zamykanie pliku przy każdym produkcie; Możesz jako argument przekazać listę zakupów, dzięki temu procedurę wykonasz raz, a zostanie zapisane wszystko;

Z tym, że zapisany mam tylko ostatni produkt, bo funkcja rewrite kasuje to, co było poprzednio w pliku. Jak to ominąć? Tak, żeby plik nie był czyszczony, tylko by były do niego dane dopisywane?

Jeśli już koniecznie chcesz dopisać coś do pliku to nie otwieraj go procedurą ReWrite, a Append, jednak to i tak będzie przekombinowane;

Osobiście to wolałbym mieć procedurę zapisującą całe zakupy, a nie poszczególne produkty, bo skoro i tak musisz zapisać całą listę zakupów do pliku to zrób to od razu w specjalnej procedurze; A jest róznica między zakupy_do_pliku a produkt_do_pliku;

Wiem, jak bym miał jeszcze tydzień to pewnie bym tak zrobił. Ale muszę jeszcze sprawozdanie napisać i uczyć się na egzaminy.
Append całkowicie wystarczy, i za tą informację serdecznie dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1