...

F3
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Konto zlikwidowane
0

Witam. Mam taki problem. Robię projekt - Firma Turystyczna w Delphi, sęk w tym iż nie działa mi coś wyświetlanie osób (w MENU znajduje się pod 5), wygląda tak jak by w ogóle nie zapisywał , możliwe że w zapisywaniu osób jest błąd, bo nie znajduję nikogo, a i USUWANIE nie działa także, usuwanie nigdzie nie działa.
Proszę o pomoc. Z góry dziękuję. Pozdrawiam Fabian3223.

http://4programmers.net/Pastebin/2072

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Miałeś dodać w tagi sam kod, nie całego posta...
Jeden z błędów jakie wychwyciłem:

Kopiuj
sprzedane:=filesize(c);

To zwróci rozmiar całego pliku w bajtach, a nie ilość sprzedanych czegoś-tam (zmienna nie mówi zbyt wiele, a komentarzy brak).
Musisz to podzielić przez rozmiar odpowiedniego rekordu.</del>

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Błędem jest min. seek we wczytajosobe jak wczytujesz z pliku osoby to po read automatycznie przechodzi do następnego rekordu. Wywal ten seek i sprawdź jak cos to pisz to poszuka się co jeszcze.
EDIT//
tam chyba jeszcze powinno być jakieś:
osoby:= filesize(b);

SI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
0

W wielu miejscach w kodzie masz takie wyrażenie

Kopiuj
if FileExists(Plik) then Reset(Plik) else Rewrite(Plik)

Czy to ma sens? Zdecyduj się, czy chcesz odczytywać plik, czy do niego zapisywać.

PS. Te szlaczki i puste linie, to mógłbyś sobie, albo raczej nam, darować.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Ciekawa też jest funkcja dodawania... co się stanie jeżeli osoby wynosi 0 (przy pustym pliku) a tablica indeksowana jest od 1 ? Wydaje mi sie że tam powinno być osoby + 1. Ogólnie to trudno coś połapać się w tym zagmatwanym kodzie ;)

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Poprawiłem w sensie doprowadziłem do działania, bo tak naprawdę ten cały kod to masakra ;) dodawanie, osuwanie i wczytywanie osób pewnie reszta ma te same błedy (w ogóle nie sprawdzałem) ale wszytko chyba odbywa się podobnie to chyba sobie poradzisz.

Kopiuj
procedure wczytajosobe;
var
  b : file of t_osoba;
  i : byte;
begin
  assign(b, 'osoby.bin');
  if fileexists('osoby.bin') then
    reset(b)
  else
    rewrite(b);

  for i := 1 to osoby do
  begin
    //seek(b, i); //<-- jak juz wczesniej pisalem to seek tutaj niepotrzebne
    read(b, osoba[i]);
  end;
  close(b);
  liczenie;
end;

//------------------------------------------------------//

procedure dodajosobe;
var
  b : file of t_osoba;

begin
  wczytajosobe;
  writeln('# Dodaj nowa osobe');
  write('| Imie : ');
  readln(osoba[osoby + 1].imie); //<-- tu wszedzie + 1
  write('| Nazwisko : ');
  readln(osoba[osoby + 1].nazwisko);
  write(' | ID : ');
  readln(osoba[osoby + 1].indeks);
  writeln;
  assign(b, 'osoby.bin');  //<-- moze zdecydowalbys sie na ta sama nazwa pliku a nie raz osoba raz osoby
  if not fileexists('osoby.bin') then
    rewrite(b)
  else
    reset(b);
  seek(b, osoby);
  write(b, osoba[osoby + 1]);
  close(b);
  liczenie;
  readln;
end;

//--------------------------------------------//

procedure wyswietlosoby;
var
  i : byte;
begin
  wczytajosobe;
  Write('# Aktualny spis klientow: ');
  if osoby = 0 then
    writeln('Brak klientow !')
  else
  begin
    writeln;
    //i := 0; //<-- to po co?
    for i := 1 to osoby do
    begin
      writeln('Imie: ', osoba[i].imie);
      writeln('Nazwisko: ', osoba[i].nazwisko);
      writeln('ID: ', osoba[i].indeks);
      writeln;

    end;
  end;
  writeln('>> Nacisnij [ENTER] by kontynuowac');
  readln;
  liczenie;
end;

//--------------------------------------------//

procedure usunosobe;
var
  indeks : integer;
  j : integer;
  b : file of t_osoba;
  deleted: Boolean;
begin
  deleted:= False;
  wczytajosobe;
  write(' ID osoby do usuniecia: ');
  readln(indeks);
  assign(b, 'osoby.bin'); //<-- tez blad nazwy pliku

  //tak chyba bardziej po ludzku
  rewrite(b);
  for j := 1 to osoby do
    if indeks <> osoba[j].indeks then
      write(b, osoba[j])
    else
       deleted:= True;
  close(b);

  {for j := 1 to osoby do
    if indeks = osoba[j].indeks then
    begin
      reset(b);
      seek(b, j - 1);
      read(b, osoba[j]);
      seek(b, j - 1);
      write(b, osoba[j]);
      close(b);
    end; }

  if deleted = True then
    writeln('>> Usunieto.')
  else
    writeln('>> NIE ZNALEZIONO osoby o podanym ID: ', indeks) ;
  writeln('>> Nacisnij [ENTER] by kontynuowac');
  readln;
end;
olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
0
Fabian3223 napisał(a):

Zacząłem studia inzynieryjne na kierunku informatyka, nie wiem jak mozesz oceniac moja wiedze ale dobra nie beda na te zaczepki

Wiesz co, trochę pokory w tych komentarzach i postcie. Nikt Ci nie każe czcić Użytkownika @kAzek, ale ma On pełne prawo oceniać Twoją "wiedzę". Wypowiedział się już na temat jakości Twojego "kodu". Nie dość, że w oryginale tematu już na "dzień dobry" się na nas wydzierałeś zablokowanym [?] CapsLockiem to jeszcze według mnie bezpodstawnie śmiesz negować podstawy Usera @kAzek do oceniania Ciebie. Ocenia Ciebie ponieważ przede wszystkim w przeciwieństwie do Ciebie posiada większą wiedzę. Wiadomo, zaczynasz studia, ale po to się uczysz i piszesz na forum oraz chodzisz na zajęcia żeby już chyba coś wiedzieć oraz żeby tę wiedzę poszerzać. A @kAzek jest na forum dłuższy stażem. Poza tym wielokrotnie pomagał (nie tylko mi, bo ja i tak używam Synapse) wielu ludziom z Indy czy chociaż WinAPI (tutaj akurat też i mi). A imo pisanie w WinAPI prawidłowych i złożonych kodów jest raczej wyższym stopniem doświadczenia niż klepanie czegoś na pałę bez pomyślunku, jak Ty to zrobiłeś. I jeszcze dodatkowo ignorowanie wskazówek. Pokazałeś kod na forum więc dałeś też prawo oceny go i wystawienia na komentowanie. Nie musimy się tutaj licytowac, kto ma jaką wiedzę, ale radzę na przyszłość szanować opinię i nie polemizować z wiedzą ludzi, których doświadczenie oraz wiedzę można zweryfikować jeśli poświęci się czas i przeanalizuje poprzednie posty napisane przez @kAzek. Tyle chciałem wyrazić. Nie tyle - jak pewnie tu mi ktoś zarzuci "w obronie @kAzek", bo imo wiedza i doświadczenie obronią się same. Pisze jako można to ując oburzony faktem, że nowa osoba na forum, która nie radzi sobie z własnym problemem zaliczeniowym (który po uzyskaniu wiedzy podczas zajęć na studiach powinna ogarnąć), ignorując próby pomocy, śmie dodatkowo jeszcze zarzucać Użytkownikowi @kAzek brak podstaw do oceniania swojej własnej, nikłej wiedzy. Jakby jednocześnie zarzucając Mu brak doświadczenia i posiadanej przez niego wiedzy. A końcowej oceny Ciebie, mającej konsekwencje w możliwości dalszego studiowania i toku tych studiów, a także wpisami w indeksie dokona Twój wykładowca. Tutaj oceniamy bez większych konsekwencji, poza pokazaniem co jest nie tak. Cytując prawie klasyka "dziękuję, do widzenia".

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.