![]() |
||
Nagrywarki |
Pliki |
Dyski twarde |
Recenzje |
Księgarnia |
Biosy |
Artykuły |
Nagrywanie od A do Z |
Słownik |
FAQ
|
||
|
Komputery - oprogramowanie i sprzęt Pytania i problemy niezwiązane z nagrywaniem, backupem i grami. |
![]() |
|
Opcje związane z dyskusją | Tryby wyświetlania |
![]() |
#1 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
pomocy baza danych w pascalu
Witam..
Prosze o pomoc w napisani bazy danych w pascalu prawie cala mam napisana lecz jest problem przy procedurze usun gdyz nie usuwa ostatniego rekordu i w programi jest kilka bledow bardzo bym prosil o poprawienie mojego programiku jest to bardzo pilne. Z gory dziekuje bardzo za pomoc ![]() ![]() a to kod zrodlowy: program baza_dan; uses dos,crt; type tdane = record tytulfilmu:string[30]; rokprodukcji:string[30]; czastrwania: 1..100; end; const plik : string = 'baza.bin'; var opcja : 1..5; dane : tdane; baza : file of tdane; procedure menu; begin writeln; writeln('1 - dodaj wpis do filmoteki'); writeln('2 - popraw wpis w filmotece'); writeln('3 - usun wpis z filmoteki'); writeln('4 - wyswietl zawartosc filmoteki'); writeln('5 - zakoncz program'); writeln; writeln('Wybierz opcje 1-5'); end; {******************************************} procedure dodaj(rozmiar:byte); var osoba:tdane; begin writeln; write('Podaj tytul filmu: '); readln(osoba.tytulfilmu); write('Podaj rok produkcji: '); readln(osoba.rokprodukcji); write('Podaj czas trwania: '); readln(osoba.czastrwania); seek(baza,rozmiar); write(baza,osoba); end; {******************************************} procedure popraw; var numer:byte; osoba:tdane; begin write('Podaj numer filmu poprawy: '); readln(numer); dodaj(numer-1); end; {******************************************} procedure usun; var numer:byte; temp: file of tdane; dane:tdane; begin write('Podaj numer rekordu do usuniecia: '); readln(numer); assign(temp,'d:\temp.bin'); rewrite(temp); seek(baza,numer); repeat read(baza,dane); write(temp,dane); until eof(baza); seek(baza,numer-1); truncate(baza); seek(baza,filesize(baza)); seek(temp,0); repeat read(temp,dane); write(baza,dane); until eof(temp); close(temp); erase(temp); end; {******************************************} procedure spacja(ile:byte;znak:char); var i:byte; begin for i:=1 to ile do write(znak); end; {******************************************} procedure kreska(ile:byte;znak:char); var i:byte; begin for i:=1 to ile do write(znak); writeln; end; {******************************************} procedure pokaz; var osoba:tdane; lp:byte; begin clrscr; if filesize(baza) = 0 then begin writeln; writeln('************************************'); writeln('* Brak filmow w bazie danych !!! *'); writeln('************************************'); writeln; end else begin lp:=1; seek(baza,0); kreska(73,'-'); write('| Lp. |tytu lfilmu |'); write(' rok produkcji |'); writeln(' czas trwania |'); kreska(73,'-'); repeat read(baza,osoba); write('| ',lp,'|'); write(' ',osoba.tytulfilmu); spacja(20-length(osoba.tytulfilmu)-1,' '); write('| ',osoba.rokprodukcji ); spacja(25-length(osoba.tytulfilmu)-1,' '); write( '| ',osoba.czastrwania,' |'); writeln; kreska(73,'-'); inc(lp); until eof(baza); end; end; procedure inicjalizacja; begin assign(baza,plik); if fsearch(plik,'') = '' then rewrite(baza) else reset(baza); end; begin inicjalizacja; repeat menu; readln(opcja); case opcja of 1: dodaj(filesize(baza)); 2: popraw; 3: usun; 4: pokaz; end; until opcja = 5; close(baza); end. |
![]() |
![]() |
#ads | |
CDRinfo.pl
Reklamowiec
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
|
|
![]() |
![]() |
#2 |
Get a Mac!
![]() Data rejestracji: 18.04.2003
Posty: 10,556
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Znowu szkolne lenistwo ;-)?
Ja moze nieco przekornie napisze ze baza danych w Pascalu to jak dokument napisany w Paincie... Da sie, ale... ;-) |
![]() |
![]() |
![]() |
#3 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
powiem tak szkolne lenistwo to nie bo pisalem ale utknalem w martwym punkcie nie wiem co dalej
oj wiem pascal to przezytek ale coz zrobic w szkole go wymagaja pomozesz ![]() |
![]() |
![]() |
![]() |
#4 |
Թ
Data rejestracji: 14.02.2003
Posty: 3,066
![]() ![]() ![]() ![]() ![]() |
ktoś tu na forum niedawno gorąco zachwalał Pascala.... (Patrix??)
poszukaj kto i napisz do niego PW |
![]() |
![]() |
![]() |
#5 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
dzieki napisalem do Niego ciekawe czy cos odpisze
|
![]() |
![]() |
![]() |
#6 |
Get a Mac!
![]() Data rejestracji: 18.04.2003
Posty: 10,556
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#7 |
Թ
Data rejestracji: 14.02.2003
Posty: 3,066
![]() ![]() ![]() ![]() ![]() |
no co?
![]() |
![]() |
![]() |
![]() |
#8 |
Pingwin specjalista.
Data rejestracji: 22.06.2002
Lokalizacja: Central Park
Posty: 15,089
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
pali no wiesz, żeby tak mnie wkopać ?
![]() to nie było niedawno ja w pascalu ze 2 lata nic nie pisałem. Jutro rzucę na to okiem.
__________________
amiga500site |
![]() |
![]() |
![]() |
#9 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
wielkie dzieki ja to musze oddac do godziny 23 w niedziele wiec byl bym bardzo wdzieczny gdybys cos zdzialal w tej sprawie
![]() ![]() |
![]() |
![]() |
![]() |
#10 |
Թ
Data rejestracji: 14.02.2003
Posty: 3,066
![]() ![]() ![]() ![]() ![]() |
aha, kolego wyhylybymy
Kod źródłowy składa się z części właściwej oraz z komentarzy. Uwierz mi, że nie ma nic gorszego od analizy cudzego kodu bez komentarzy. Można nawet rzec, że kod bez komentarzy jest bezwartościowy, gdyż po czasie nawet sam autor go nie odbuguje, nie mówiąc o innych. W szkole za brak komentów powinieneś dostać bańkę. A co lepsze, prawidłowo komentując kod, można wpaść gdzie porobiło się błędy. Skomentuj ten kod, opisując jego części logiczne, funkcjonalne. I pisz po polsku, pełnymi zdaniami. Albo po angielsku. |
![]() |
![]() |
![]() |
#11 |
Pingwin specjalista.
Data rejestracji: 22.06.2002
Lokalizacja: Central Park
Posty: 15,089
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Cisza spokój to przed spaniem poddałem analizie powyższe wypociny mimo późnej godziny.
Drogi wyhylybymy17, na wstępie zapytam się o coś. Czy Ty nie uważasz na lekcjach i potem musisz edukować się w domu czy wzór tego programu podał nauczyciel ? Jeśli to nie Twoja wina to gorzko... Za ten program dostałbyś u mnie dwóję (w liceum/gimnazjum to i tak pozytywna ocena). Nie bierz tego do siebie ale już wyjaśniam... Każdy program, o którym można powiedzieć, że jest "bazodanowy" obojętnie czy operuje na plikach czy na prawdziwej bazie rozróżnia poszczególne wpisy po niepowtarzalnych identyfikatorach w rekordach - u Ciebie ich brak. Zastosowałeś tu substytut w postaci szurania wskaźnikiem, który w prawdzie działa ale to jest po prostu straszne ![]() Następną straszną rzeczą jest wyświetlanie danych - zastosowałeś tutaj liczbę porządkową co za tym idzie jest ona płynna. Po skasowaniu jakiegoś filmu przed filmem z lp=5 ten film robi się lp=4. Tu znowu daje o sobie znać brak ID bo kasowanie czegoś po zmiennej liczbie porządkowej, która de facto nie ma nic wspólnego z samym zbiorem jest straszne (ponumerować i skatalogować pudełka - rzecz w tym przypadku niemożliwa) ![]() Kasowanie wpisu przy bazie w pliku tekstowym powinno odbywać się mniej więcej tak: - masz bazę w formacie FILM( ID, tytul, produkcja, czas trwania ) - prosisz usera o podanie ID do skasowania - przepisujesz bazę do pliku tymczasowego z pominięciem tego ID - nadpisujesz plik bazy utworzoną kopią, która nie posiada już tego ID - kasujesz plik tymczasowy LUB usuwasz dany ID logicznie (gdzie STAN=1 to pozycja dostepna, STAN=0 to pozycja skasowana) - masz bazę w formacie FILM( ID, STAN, tytul, produkcja, czas trwania ) - prosisz usera o podanie ID do skasowania - zmieniasz stan na 0 przy pozycji o tym ID co za tym idzie pozycja przestaje się wyświetlać i jest pomijana. Twój program jest napisany całkowicie źle - tyle mojego wykładu. Przejdźmy teraz do poprawy kodu. - zadeklarowałeś dwie rzeczy, których nie używasz - nie jest to błąd ale kompilator ma za zadnie poinformować Cię o tym co też czyni. - program sypał się zawsze na ostatnim rekordzie ponieważ zastosowałeś zły typ pętli co za tym idzie w pewnej chwili program chciał odczytać pustkę, coś czego nie ma bo plik już dawno się skończył. W tym przypadku najpierw wykonujesz operację a warunek sprawdzasz na końcu: Kod:
repeat read(baza,dane); write(temp,dane); until eof(baza); Program będzie działać jeśli w procedurze usuń zastosujesz pętlę, która najpierw bada warunek a potem wykonuje operacje tj.: Kod:
while not eof(temp) do begin read(temp,dane); write(baza,dane); end; No to tyle, idę spać, popraw te pętle i program będzie działać. ![]()
__________________
amiga500site Ostatnio zmieniany przez Patrix : 24.10.2010 o godz. 02:19 |
![]() |
![]() |
![]() |
#12 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
wielkie dzieki pomoglo
tylko teraz jak usuwam ostatni rekord to mi caly program wylacza zrobilem kolejne testy lecz gdy usuwam nawet ze srodka jakis rekord to go wylancza tez program jeszcze raz ja poprawilem wszystko juz nie wywala ale pojawil sie taki problem ze gdy mam np.4 rekordy to gdy usuwam 3 to usuwa tez 4 co z tym zrobic ![]() Ostatnio zmieniany przez Reetou : 24.10.2010 o godz. 11:22 |
![]() |
![]() |
![]() |
#13 |
Pingwin specjalista.
Data rejestracji: 22.06.2002
Lokalizacja: Central Park
Posty: 15,089
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Mi działa więc dalej robisz coś źle
![]() Widzę wytłumaczyć to mało ![]()
__________________
amiga500site |
![]() |
![]() |
![]() |
#14 |
Nowy na forum
Data rejestracji: 23.10.2010
Posty: 7
![]() |
dzieki stary juz wszystko wiadomo
![]() |
![]() |
![]() |
![]() |
#15 |
Pingwin specjalista.
Data rejestracji: 22.06.2002
Lokalizacja: Central Park
Posty: 15,089
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
__________________
amiga500site Ostatnio zmieniany przez Patrix : 24.10.2010 o godz. 16:59 |
![]() |
![]() |
![]() |
|
|
![]() |
||||
Dyskusja | Autor | Forum | Odpow. | Ostatni Post |
POMOCY - skasowalem sobie 40GB waznych danych | ryciu | Odzyskiwanie danych | 5 | 17.04.2009 18:47 |
Pascal - baza danych | sight | Off topic | 9 | 29.05.2005 17:39 |
Jak odzyskać skasowane pliki na CD-RW | Jozgaw | Napędy optyczne CD | 7 | 21.06.2004 08:31 |
Baza Danych Access | jelonkowo | Off topic | 0 | 09.12.2003 23:47 |
Baza danych w Accessie 2000 | Niebiessska | Off topic | 26 | 22.05.2003 18:51 |