Budżet Domowy

0

Witam. Piszę koledze projekt z programowania.

Napisać program "budżet domowy", który umożliwia zapisanie poszczególnych
wydatków i przychodów - kwota, opis, rodzaj (jedzenie, rozrywka, ubrania, itp.).
Umożliwić zapis/odczyt bazy z/do pliku oraz dodawanie/edytowanie/usuwanie
poszczególnych wydatków/przychodów. Program powinien umożliwić tworzenie raportów .
Dodać możliwość zapisu raportu do pliku tekstowego. Dobrać odpowiednią strukturę
danych.

Niestety napotkałem na pewien błąd w działaniu list. Otóż kiedy dodaje drugi element do listy(dodaje do już istniejącej kategorii drugi wydatek) program się wysypuje.
Wcześniej wszystko działało(czyli zanim dodałem przychody.Program zapisywał same wydatki. Próbowałem wywalić nową część ale nadal ten sam błąd). Już 2 dni szukam błędu. Wiem że to dużo pracy zanalizować kogoś kod ale może komuś Od razu w oczy się rzuci błąd.
Z góry dziękuje za pomoc i pozdrawiam.

Aha i Obsługę plików narzazie pominąłem.

program Project1;
uses crt;
type

wsk_kat = ^kategorie;
wsk_dan = ^dana;

  dana = record
    nazwa:string;
    koszt:real;
    nast_dan:wsk_dan;
    end;

  kategorie =record
    nazwa:string;
    opis:string ;
    nast_kat:wsk_kat;
    pier_dan:wsk_dan;
    end;
//*****************************
PROCEDURE nowa_dana(var pierwsza:wsk_dan);
var
  nowy:wsk_dan;
  tmp:wsk_dan;
  co_robic:byte;
  nazwa:string;
begin
  writeln('Podaj nazwe wydatku');
  readln(nazwa);
  if pierwsza = nil  then  // jesli lista pusta
     begin
     new(nowy);
     writeln('Podaj koszt wydatku');
     nowy^.nazwa := nazwa;
     readln(nowy^.koszt);
     nowy^.nast_dan := nil;
     pierwsza := nowy;
     end
  else
     begin
       tmp := pierwsza;
       while( (nazwa <> tmp^.nazwa) and (tmp^.nast_dan <> nil)  ) do
            tmp := tmp^.nast_dan;
       if(nazwa = tmp^.nazwa) then  // jesli nazwa istnieje
          begin
          writeln('Podany wydatek juz istnieje. Jesli chesz edytowac podaj 1 a jesli pominac podaj 2');
          readln(co_robic);
          if(co_robic = 1) then
             begin
             writeln('Podaj kosztwydatku ');
             nowy^.nazwa := nazwa;
             readln(nowy^.koszt);
             end;
          end

       else                         // jesli dana nie istnieje
          begin
          new(nowy);
          tmp^.nast_dan := nowy;
          writeln('Podaj  koszt wydatku');
          readln(nowy^.koszt);
          nowy^.nast_dan := nil;
          end;
     end



end;

//---------
PROCEDURE nowa_kat(var glowa:wsk_kat ; nazwa:string);
var
  nowy:wsk_kat;
  tmp:wsk_kat;
begin
  if glowa = nil  then  // jesli lista pusta
     begin
     new(nowy);
     nowy^.nazwa := nazwa;
     writeln('Podaj opis ' ,nazwa,' (maks 255 znakow)');
     readln(nowy^.opis);
     nowy^.nast_kat := nil;
     nowy^.pier_dan := nil;
     glowa := nowy;
     nowa_dana(glowa^.pier_dan)
     end
  else
     begin
       tmp := glowa;
       while( (nazwa <> tmp^.nazwa) and (tmp^.nast_kat <> nil)  ) do
            tmp := tmp^.nast_kat;
       if(nazwa = tmp^.nazwa) then  // jesli kategoria istnieje
         nowa_dana(nowy^.pier_dan)
       else                         // jesli kateogira nie istnieje
          begin
          new(nowy);
          tmp^.nast_kat := nowy;
          nowy^.nazwa := nazwa;
          writeln('Podaj opis kateogri(maks 255 znakow)');
          readln(nowy^.opis);
          nowy^.nast_kat := nil;
          nowy^.pier_dan := nil;
          nowa_dana(nowy^.pier_dan)
          end
     end
end;
//-------------
FUNCTION wyswietl(tmp:wsk_kat) : real ;
var
temp:wsk_dan;
sum:real = 0;
sum_kat:real;
begin
  while(tmp <> nil) do
  begin
  writeln('KATEGORIA: ' , tmp^.nazwa);
  writeln();
  writeln('  ', tmp^.opis);
  writeln();

      temp := tmp^.pier_dan;
      sum_kat := 0;
      while(temp <> nil) do
           begin
           writeln(temp^.nazwa , ' ' , temp^.koszt:0:2);
           writeln();
           sum_kat := sum_kat + temp^.koszt;
           temp := temp^.nast_dan;
           end;
           writeln('Wydatki/Przychody w ', temp^.nazwa ,' to: ' , sum_kat:0:2);
      sum := sum + sum_kat;
      tmp := tmp^.nast_kat;
      writeln();
      wyswietl := sum;

  end;

end;

//-------------
PROCEDURE wyswietl_raport(rozchody:wsk_kat ; przychody:wsk_kat);
var
  sum_przychody,sum_wydatki,roznica:real;
begin
      writeln('-------------==WYDATKI==-------------');
      sum_wydatki :=wyswietl(rozchody);
      writeln('-------------==PRZYCHODY==-------------');
      sum_przychody := wyswietl(przychody);
      roznica :=sum_przychody - sum_wydatki;
      writeln('Twoje wydatki to:', sum_wydatki, ' a przychody: ' , sum_przychody,#10#13, 'Roznica miedzy przychodami a wydatkami to: ' ,roznica );
      if (roznica < 0) then
        writeln('Suma wydatków przekracza suma przychodów. Wprowadz zmiany do swojego budżetu !!!');
      writeln('Wcisniej ENTER jesli chcesz kontynulowac');
      readln();
end;



//******************************

var
  nazwa_kat:string;
  glowa_wydatki:wsk_kat = nil;
  glowa_przychody:wsk_kat = nil;
  co_robic:byte;
  wyd_przy:boolean;
//******************************
begin
  REPEAT
    clrscr;
    write('----------------------'+#10#13+'Co chcesz wykonac ?'+#10#13+'1 - Dodaj wydadki'+#10#13+'2 - Dodaj przychody'+#10#13+'3 - Wczytaj wydatki'+#10#13+'4 - Zapisz wydakit'+#10#13+'5 - Drukuj Raport'+#10#13+'9 - Zakoncz'+#10#13+'----------------------'+#10#13);
    readln(co_robic);
    clrscr;
    case co_robic of
      1:
       begin
       writeln('Podaj nazwe kateogori do ktorej chcesz dodac wydatek.'+#10#13+'Jesli katoegoria nie istnieje zostanie ona dodana');
       readln(nazwa_kat);
       clrscr;
       nowa_kat(glowa_wydatki,nazwa_kat);
       end;
      2:
       begin
       writeln('Podaj nazwe kateogori do ktorej chcesz dodac przychod.'+#10#13+'Jesli katoegoria nie istnieje zostanie ona dodana');
       readln(nazwa_kat);
       clrscr;
       nowa_kat(glowa_przychody,nazwa_kat);
       end;
      3:;
      5: wyswietl_raport(glowa_wydatki,glowa_przychody);
      9: co_robic := 9;
    else
      writeln('Nieprawidlowa komenda');
    end;


  UNTIL co_robic = 9;
end.
0

To nieładnie że za kolegę piszesz projekty. Daj mu szansę. Niech się wykaże. - pelsta
Kolega zawalił w roku i teraz walczy na kolejnych terminów egzaminów a zależy mi żeby dalej studiował. Ja już mam wolne więc chce mu pomóc.

1

czy wy nie znacie nic innego oprócz tp i fpc, jak dla mnie to się to powinno pisać w jakiś obiektowych czy graficznych żeby było łatwiej i kolega ma racje pomóż mu a nie pisz za niego bo krzywdę mu robisz, a później taki na admina jakiejś strony się dostanie i będzie jak na sejm.gov.pl w ostatnim tygodniu, serwer padnie bo nie będzie zabezpieczony odpowiednio ...

0
proqix polaczeq napisał(a)

czy wy nie znacie nic innego oprócz tp i fpc, jak dla mnie to się to powinno pisać w jakiś obiektowych [..] a później taki na admina jakiejś strony się dostanie i będzie jak na sejm.gov.pl w ostatnim tygodniu, serwer padnie bo nie będzie zabezpieczony odpowiednio ...

FP jest obiektowy, OOP nie rozwiązuje w magiczny sposób wszystkich problemów, administrator nie zajmuje się programowaniem, strony rządowe są realizowane przez zewnętrzne firmy na zasadzie przetargu, absolutnie każdy serwer padnie pod odpowiednio silnym DDoSem, przed tym nie da się skutecznie zabezpieczyć. Podsumowując: skończ [CIACH!] bo Ci gimbus ucieknie.

0

Ale jest łatwiej i wygodniej. Nie masz tak nasrane bezsensownego kodu żeby jakoś to ładnie wyglądało w konsoli...
To fakt ale co do przetargów ale administrator zajmuje się już poprawkami i aktualizacjami jeżeli popełni błąd jego wina.
Nie chodzi mi o dzieci anonaów co ddos jadą cały czas a koxa co się wjebał na serwer i wrzucił filmik z gitez majonez ;]
co niby to dosem zrobił ? nie trzeba się wjebać do ftp albo preparować dziurawy kod strony ;]

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