Pomoc w tworzeniu bazy danych.

0

Dawno mnie tu nie było ale do rzeczy. W mojej przecudownej sql nauczyciel przedmiotu Programowanie strukturalne i obiektowe wymyślił, że mamy stworzyć sobie bazę danych (PASCAL) Wszystko byłoby oki gdyby nie zażyczył sobie aby była wykonana ona według jego pomysłu "Darmowa filmoteka" tzn:

Struktura ma wyglądać +- tak:
-Liczba porządkowa
-Tytuł
-Nośnik
-Opis
-Czas trwania

W interfejsie mają się znaleźć następujące rzeczy:
1 Wyświetl zawartość bazy danych
2 Dodaj rekord
3 Usuwanie
4 Edycja
ESC Wyjście

Czyli na przykładzie, wpisujemy poszczególne rekordy załóżmy kilkanaście. Po kliknięciu odpowiedniego klawisza odpowiadającego liczbie porządkowej danego filmu mają się nam wyświetlić wprowadzone wcześniej dane np:

1 Barbie
Animowany
DVD
Opis...
90 min

2 Krzyżacy
historyczny
CD
Opis...
125 min

Nie byłoby w tym nic trudnego ale nie wiem jak poradzić sobie z edycją danego rekordu, no i pozostaje jeszcze kwestia usuwania rekordów. Chciałbym aby przy usunięciu rekordu o numerze np 5 wszystko przesunęło się o 1 miejsce, tak aby nie było luk. Jeżeli ktoś wie jak to rozpracować, zna się na tym i ma troszq czasu proszę o pomoc. Dopiero się uczę dlatego proszę o wyrozumiałość.

0

To chyba zły dział, bo bardziej pasuje do Pascala ;)
Przesuwanie w tablicy to tragedia ;) Lepiej użyć tutaj listy jedno/dwu kierunkowej

0

ja nie widze tu nic trudnego jesli program ma byc w delphi baza w sql to tak naprawde wystarczy 1 tabela w bazie, w aplikacji kontrolka ListView i 4 przyciski (dodaj, edytuj, usuń, zamknij)
Nie napisałeś z jakiej bazy ma kozystac, program do tego w bazie raczej powinno wyglądać tak:

-ID (autoincrement)
-Tytuł
-Nośnik
-Opis
-Czas trwania

gdzie ID to numer nadawany przez baze automatycznie. baza sama przy dodawaniu ustawia kolejny wolny numer, numer musi byc unikalny dla każdego rekordu.
Lp. ustawiasz sobie juz w programie.

Daj jakiś kod co zrobiłeś, naczym stanąłeś itp bo jak mamy ci podpowiedziec inaczej??

0

Ja zrozumiałem to tak, że program ma być w PASCALU, a nie w Delphi. I ma być to "baza danych" bez użycia jakiegokolwiek znanego szbd.

Autor postu musi poczytać przede wszystkim o plikach typowanych(rekordowych), w których dane będą przechowywane. Poza tym pytanie, czy operować na tablicach, czy na listach. Tablice są dużo łatwiejsze w użyciu, ale w Pascalu(a także Delphi do wersji 4) jest pewien problem. Otóż nie ma czegoś takiego jak tablica dynamiczna. Dla Ciebie oznacza to tyle, że w momencie programowania musiałbyś dać jakieś ograniczenie co do ilości możliwych rekordów.

Operacje na listach są nieco trudniejsze, ale tu nie masz żadnych ograniczeń. Poza tym robiąc listę, zobaczysz też, jak wygląda teoria w praktyce :)
Tak więc musisz poczytać o plikach typowanych(rekordowych) i listach.

0

Był taki przykład w książce do turbo pascala. Baza w zmiennej plikowej o dostępie swobodnym. Przy usuwaniu rekordu zapisujemy na jego miejsce rekord ostatni w pliku i następnie zmniejszamy długość pliku o jeden rekord.

0

Właśnie to rozgryzłem lecz teraz pojawił się inny problem. Baza danych ma posiadać opcję zapisu, odczytu, usuwania i rekordów. Niestety gdzieś robię błąd i nie wiem gdzie, może wkleję:

procedure zapisz;
Begin

    assign(plik,'filmoteka.txt');
    rewrite(plik);
    writeln(plik,ilosc);
    i:=0;
            repeat
            i:=i+1;
            writeln(plik,tytul[i]);
            writeln(plik,gatunek[i]);
            writeln(plik,opis[i]);
            writeln(plik,czas[i]);
            until i=ilosc;
    close(plik);

End;

procedure wczytaj;
Begin
assign(plik,'filmoteka.txt');
reset(plik);
readln(plik,ilosc);
i:=0;
while not eof(plik) do
begin
inc(i);
readln(plik,tytul[i]);
readln(plik,gatunek[i]);
readln(plik,opis[i]);
readln(plik,czas[i]);
end;
i:=ilosc;
close(plik);
End;

procedure edytuj;

begin
assign(plik,'filmoteka.txt');
append(plik);

clrscr;
Write('Podaj nr filmu do edycji:');
readln(i);
dec(i);
close(plik);
write('Tytul : ');
readln(tytul[ilosc]);
write('Gatunek : ');
readln(gatunek[ilosc]);
write('Opis : ');
readln(opis[ilosc]);
write('Czas : ');
readln(czas[ilosc]);
end;

procedure usun;

begin
assign(plik, 'filmoteka.txt');
reset(plik);

clrscr;

Write('Podaj nr filmu do usuniecia:');
readln(i);
dec(i);
close(plik);

end;

Prosiłbym o poprawę tak aby zadziałało ;)

0

Nie będzie działać na pliku tekstowym. Musisz utworzyć plik o dostępie swobodnym.

type
osoba=record
nazwisko: string(30);
imie: string(20);
.......
.......
end;

var
osoby: file of osoba;

wtedy można dostać się do konkretnego rekordu (wyszukać) używając seek
obcinasz plik od miejsca wyszukania do końca przez truncate
Plik (po utworzeniu) otwierasz przez reset i, ponieważ to jest plik o dostępie swobodnym, zostanie on otwarty jednocześnie do zapisu i odczytu

0

Mówiłem, że masz poczytać o plikach rekordowych(typowanych), jednak mam wrażenie, że tego nie zrobiłeś.

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