Strona 1 z 3 123 OstatniOstatni
Pokaż wyniki od 1 do 10 z 22
  1. #1
    Obserwator
    Dołączył
    May 07
    Postów
    7
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Turbo pascal(Baza danych)

    Mam takie zadanie:

    Napisz program o nazwie zbiory multimedialne zawierajcy nastpujce pola w rekordzie:
    -tytu
    -rodzaj danych
    -rodzaj nonika
    -opis
    Program ma umoliwia:
    1.zaoenie nowego pliku
    2.przyjmowanie nowego elementu
    3.wywietlenie wszystkich elementw
    4.wywietlenie pojedynczego elementu
    5.zmiany w elemencie
    6.usunicie elementu
    7.sortowanie elementw

    Cze zadania ju zrobiem ale teraz mi wyskakuje bd procedurze zmiany w elemencie i nie chce dziaa wywietlenie wszystkich elementw ktre wczeniej dziaao przed wprowadzeniem nowych procedur. Prosz pomoc.I jak kto by umia zrobi sortowanie podpunkt 7 tego akurat nie umie . Kod rdowy programu poniej:


    Kod:
    PROGRAM ZBIORY_MULTIMEDIALNE;
    USES CRT;
    TYPE
    DANE_MULTIMEDIA=RECORD
    RODZAJ_DANYCH:STRING[25];
    TYTUL:STRING[25];
    OPIS:STRING[250];
    RODZAJ_NOSNIKA:STRING[10];
    END;
    REKORD_W_PLIKU=FILE OF DANE_MULTIMEDIA;
    DOSTEP=STRING[128];
    VAR
    OKNO_PLIKU:REKORD_W_PLIKU;
    MULTIMEDIA:DANE_MULTIMEDIA;
    LICZNIK:INTEGER;
    WYBRANY_KLAWISZ:CHAR;
    
    
    FUNCTION ISTNIEJE_PLIK (Nazwa_pliku : Dostep):Boolean;
    BEGIN
    (*$I-*);
    Assign(Okno_pliku,Nazwa_pliku);
    Reset(Okno_pliku);
    (*$I+*);
    IF IOResult=0 then
    BEGIN
    close(Okno_pliku);
    istnieje_plik:=True
    END
    else
    istnieje_plik:= False
    End;
    
    
    PROCEDURE Polecenie;
    BEGIN
    TextColor (LightRed);
    Writeln ('Uwaga!!! ',#7#7#7,'Plik musi zostac',+
    'najpierw utworzony! '); Delay (3000);
    NormVideo
    END;
    PROCEDURE Tworzenie_nowego_pliku;
    VAR
    Nowy_plik: Boolean;
    BEGIN
    ClrScr;
    Nowy_plik:=true;
    TextColor(Yellow);
    IF Istnieje_plik('MULTI.DAN') THEN
    BEGIN
    Writeln ('Uwaga!!! ',#7#7#7,' Wszystkie dotychczasowe',+ 'dane zostana usuniete z pliku!');
    Writeln;
    REPEAT
    Write('Wykonywac dalej? (T)ak / (N)ie: ');
    Readln (Wybrany_klawisz)
    UNTIL Wybrany_klawisz IN ['T', 't', 'N', 'n'];
    IF Wybrany_klawisz IN ['N', 'n'] THEN
    Nowy_plik:=FALSE
    END;
    IF Nowy_plik THEN
    BEGIN
    Assign(Okno_pliku, 'MULTI.DAN');
    Rewrite(Okno_pliku);
    Close(Okno_pliku);
    Writeln;
    TextColor (White);
    Writeln ('Nowo utworzony plik nazywa sie MULTI.DAN'); Delay (3000);
    END;
    NormVideo
    END;
    
    
    PROCEDURE dodawanie_nowego_zbioru;
    BEGIN
    Clrscr;
    Textcolor(Yellow);
    IF istnieje_plik('MULTI.DAN') THEN
    BEGIN
    Assign(Okno_pliku,'MULTI.DAN');
    Reset(Okno_pliku);
    Writeln;
    Writeln('Rezygnacja ->>>x<<+>>Enter<<');
    TextColor(LightBlue);
    REPEAT
    Writeln;
    Write('Tytuˆ: ');
    Readln(Multimedia.Tytul);
    IF ((Multimedia.Tytul <> 'x') AND (Multimedia.Tytul <> 'x')) THEN
    BEGIN
    Write('Rodzaj danych: ');
    Readln(Multimedia.Rodzaj_danych);
    Seek(Okno_pliku,FileSize(Okno_pliku));
    Write('Rodzaj nosnika: ');
    Readln(Multimedia.Rodzaj_nosnika);
    Write('Opis: ');
    Readln(Multimedia.opis);
    Write(Okno_pliku,Multimedia);
    Writeln;
    END;
    UNTIL (Multimedia.Tytul = 'X') OR
    (Multimedia.Tytul = 'x');
    Close(Okno_pliku)
    END
    ELSE
    Polecenie;
    NormVideo
    END;
    
    
    PROCEDURE Lista_Multimediow; 
    {Wanie ta procedura mi nie
     dziaa.Dziaaa gdy nie dodaem procedur tych co s poniej.
    Jest napisana poprawnie program si uruchamia ale nie wypisuje}
    
    
    BEGIN
    ClrScr;
    Licznik:=0;
    IF Istnieje_plik('MULTI.DAN') THEN
    BEGIN
    Assign(Okno_pliku,'MULTI.DAN');
    Reset(Okno_pliku);
    TextColor(White) ;
    Writeln (& #39;****************************************************************************
    ');
    Writeln (' Tytul Rodzaj danych Rodzaj nosnika Opis ');
    Writeln (& #39;****************************************************************************
    *');
    TextColor(Yellow) ;
    WHILE NOT Eof (Okno_pliku) DO
    BEGIN
    Licznik:=Licznik+1;
    Read(Okno_pliku,Multimedia);
    GoToXY(4,Licznik+4);
    Write(Multimedia.Tytul);
    GoToXY (20,Licznik+4);
    Write(Multimedia.Rodzaj_danych);
    GoToXY (40,licznik+4);
    Write(Multimedia.Rodzaj_nosnika);
    GoToXY (55,licznik+4);
    Write(Multimedia.Opis);
    IF Licznik = 40 THEN
    BEGIN
    Readln;
    Clrscr;
    licznik:=0
    END
    END;
    TextColor(White);
    GoToXY (1,licznik+8);
    Writeln(& #39;****************************************************************************
    **');
    Close(Okno_pliku)
    END
    ELSE
    Polecenie;
    NormVideo;
    END;
    
    PROCEDURE Edycja_jednego_zbioru;
    var
    szukany_tytul:string[25];
    multimedia_jest_w_pliku:boolean;
    BEGIN
    ClrScr;
    if istnieje_plik('MULTI.DAN') then
    BEGIN
    multimedia_jest_w_pliku:=false;
    Write('Prosze podac tytul poszukiwanych danych multimedialnych : ');
    Readln(Szukany_tytul);
    Assign(okno_pliku,'MULTI.DAN');
    Reset(okno_pliku);
    Writeln;
    Textcolor(red);
    If eof(okno_pliku) then
    Writeln('W pliku nie ma jeszcze zadnego',+'zapisu ! ',#7);
    Textcolor(white);
    While not eof(okno_pliku) do
    BEGIN
    Read(Okno_pliku,multimedia);
    If multimedia.tytul=szukany_tytul then
    BEGIN
    Writeln('Tytul : ',+ multimedia.tytul);
    Writeln('Rodzaj danych : ', + multimedia.rodzaj_danych);
    Writeln('Rodzaj nosnika : ',+ multimedia.rodzaj_nosnika);
    Writeln('Opis : ', + multimedia.opis);
    multimedia_jest_w_pliku:=true
    END
    END;
    If not multimedia_jest_w_pliku then
    Writeln('Szukana multimedia nie znajduja sie w spisie!!!(Mozna je dodac)');
    Close(okno_pliku);
    END
    Else
    Polecenie;
    NormVideo;
    Readln
    End;
    
    
    PROCEDURE Zmiany_w_multimediach;
    VAR
    Podany_tytul:integer;
    BEGIN
    ClrScr;
    If istnieje_plik('MULTI.DAN') then
    BEGIN
    Textcolor(LightGreen);
    Assign(Okno_pliku,'MULTI.DAN');
    Reset(Okno_pliku);
    Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
    ReadLN(Podany_tytul);
    Seek(Okno_pliku,Podany_tytul);
    Read(Okno_pliku,multimedia);
    end;
    end;
    
    
    PROCEDURE Usuwanie_zbioru;
    VAR
    Okno_tymczasowe:FILE OF Dane_multimedia;
    Usuwany_tytul:string[25];
    BEGIN
    Writeln;
    If Istnieje_plik('MULTI.DAN')then
    Begin
    Assign(Okno_pliku, 'MULTI.DAN');
    Reset(Okno_pliku);
    Textcolor(lightred) ;
    Write('Prosze podac tytul usuwanego zbioru multimedialnego');
    Readln(Usuwany_tytul);
    Assign(Okno_tymczasowe,'CHWILOWY.DAN');
    Rewrite(Okno_tymczasowe);
    WHILE NOT Eof(Okno_pliku) do
    Begin
    Read(Okno_pliku,multimedia);
    If (multimedia.tytul) <> Usuwany_tytul Then; {Wanie w tym miejscu mam bd nie wiem dlaczego}
    BEGIN
    multimedia.tytul:=FilePos(Okno_tymczasowe);
    Write(Okno_tymczasowe,multimedia);
    End;
    End;
    Close(Okno Pliku);
    Close(Okno_Tymczasowe);
    Erase(Okno_Pliku);
    Rename(Okno_tymczasowe, 'MULTI.DAN');
    END
    ELSE
    Polecenie;
    normvideo
    END;
    
    
    Procedure Okno_wyboru;{To jest menu.Dziaa bez zarzutw}
    Begin;
    Clrscr;
    TextColor(White);
    Writeln('Potwierdzenie klawiszem ENTER.');
    Writeln;
    Writeln('Prosz&#169; nacisnac odpowiedni klawisz! ');
    Writeln;
    TextColor(White);
    Writeln;
    Write('Tworzenie nowego pliku');
    textcolor(Green);
    writeln('-T');
    textcolor(white);
    Write('Dodanie nowego zbioru multimedialnego');
    textcolor(Green);
    writeln ('-D');
    textcolor(White);
    Write('Lista wszystkich zbiorow multimedialnych');
    Textcolor (Green);
    Writeln('-L');
    Textcolor(White);
    Write('Wyswietla pojedynczy zbior multimedialny');
    Textcolor(Green);
    Writeln('-W');
    Textcolor(White);
    Write('Zmiany w zbiorze multimedialnym');
    Textcolor(Green);
    Writeln('-Z');
    Textcolor(White);
    Write('Usuwanie zbioru multimedialnego');
    Textcolor(Green);
    Writeln('-U');
    Textcolor(White);
    Write('Koniec programu');
    Textcolor(Green);
    Writeln('-K');
    Writeln;
    Write('Twoj wybor: ');
    END;
    
    
    BEGIN
    clrscr;
    REPEAT
    Okno_wyboru;
    Readln(wybrany_klawisz);
    CASE Wybrany_klawisz OF
    'T', 't': Tworzenie_nowego_pliku;
    'D', 'd': Dodawanie_nowego_zbioru;
    'L', 'l': Lista_multimediow;
    'W', 'w': Edycja_jednego_zbioru;
    'Z', 'z': Zmiany_w_multimediach;
    'U', 'u': Usuwanie_zbioru;
    else
    NormVideo
    END
    until Wybrany_klawisz IN ['K', 'k'];
    Repeat Until Keypressed;
    End.

  2. #2
    Obserwator
    Dołączył
    January 07
    Postów
    493
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Nie zastosowałeś znacznika [ CODE ], więc nie będę tego dogłębnie analizował - program jest po prostu nieczytelny.

    Na pierwszy rzut oka tylko spostrzeżenie, że w linii którą oznaczyłeś za błędną masz średnik po "then" - czyli wykonuje się instrukcja pusta, a nie - jak pewnie założyłeś - "begin..end" pod spodem.
    Za to po NormVideo w paru miejscach średnika brakuje. Tyle na naprowadzenie na start..

  3. #3
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Cytat Napisał Bobicz Zobacz post
    PROCEDURE Lista_Multimediow; {Właśnie ta procedura mi nie działa.Działała gdy nie dodałem procedur tych co są poniżej.Jest napisana poprawnie program się uruchamia ale nie wypisuje}
    A próbowałeś uruchomić tylko tę procedurę używając pliku MULTI.DAN, który na pewno jest poprawny? Być może procedury, które dodałeś niepoprawnie modyfikują/zapisują do pliku?

    Powtórzę też za RRybakiem: używaj znacznika [code] przy wklejaniu kodu na forum.

  4. #4
    Obserwator
    Dołączył
    May 07
    Postów
    7
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Poprawiem procedure wypisywania wszystkich danych ale teraz mam problem z procedur zmiany w multimediach konkretnie to w tej linijce mam bd :


    Kod:
    PROCEDURE Zmiany_w_multimediach;
    VAR
    Podany_tytul:string[25];
    BEGIN
    ClrScr;
    If istnieje_plik('MULTI.DAN') then
    BEGIN
    Textcolor(LightGreen);
    Assign(Okno_pliku,'MULTI.DAN');
    Reset(Okno_pliku);
    Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
    ReadLN(Podany_tytul);
    Seek(Okno_pliku,Podany_tytul);{Tutaj mam bd}
    Read(Okno_pliku,multimedia);
    end;
    end;

  5. #5
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Powic si...

    Bobicz, w dobrym stylu jest stosowanie wci przy pisaniu programw. Uatwia to pniejsze ich czytanie i zrozumienie. Oglna zasada jest taka, aby wydziela pewne bloki programu. W przypadku TP zwykle zwikszamy wcicie przy takich sowach kluczowych, jak np. BEGIN oraz wewntrz blokw BEGIN - END. Tak wic Twj kawaek kodu powinien wyglda bardziej tak:
    Kod:
    PROCEDURE Zmiany_w_multimediach;
    VAR
      Podany_tytul:string[25];
    BEGIN
      ClrScr;
      If istnieje_plik('MULTI.DAN') then
        BEGIN
          Textcolor(LightGreen);
          Assign(Okno_pliku,'MULTI.DAN');
          Reset(Okno_pliku);
          Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
          ReadLN(Podany_tytul);
          Seek(Okno_pliku,Podany_tytul);{Tutaj mam bd}
          Read(Okno_pliku,multimedia);
        end;
    end;
    Pamitaj o takich rzeczach...
    8)

  6. #6
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Cytat Napisał Bobicz Zobacz post
    Kod:
    Seek(Okno_pliku,Podany_tytul);{Tutaj mam błąd}
    A jaki błąd?

    O ile mnie pamięć nie myli, to funkcja Seek, jako drugi argument powinna dostawać rekord, który ma wyszukać, lub pozycję w bajtach. Tak więc, aby wyszukać rekord o zadanym tytule powinieneś raczej "pobiegać" po rekordach w pętli i posprawdzać czy kolejny rekord posiada szukany tytuł.

  7. #7
    Obserwator
    Dołączył
    May 07
    Postów
    7
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Wyskakuje mi błąd:
    Error 38:Integer Expression Expected

  8. #8
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Cytat Napisał Bobicz Zobacz post
    Wyskakuje mi błąd:
    Error 38:Integer Expression Expected
    Tak więc, jak pisałem: Seek nie może zostać użyte tak, jak chcesz (niestety). Musisz napisać swoją własną funkcję "Szukaj", która przejrzy rekordy.

  9. #9
    Obserwator
    Dołączył
    May 07
    Postów
    7
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Nie wiem czym mam to zastąpić chciałem aby to było zmieniane po podaniu tytułu ale widzę ze będę musiał z tego zrezygnować i zastąpić liczbami.

  10. #10
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Może jest inne rozwiązanie: dodanie funkcji wyszukajMutlimediaPoTytule, która przeszuka rekordy i zwróci ten, który zawiera poszukiwany tytuł?
    coś w stylu:
    Kod:
    function wyszukajMutlimediaPoTytule(tytul: String) : DANE_MULTIMEDIA;
    begin
      repeat
        Read(Okno_pliku,tmpMultimedia);
      until (tmpMultimedia=tytul) or eof(Okno_pliku);
      if (tmpMultimedia.tytul=tytul) then
        wyszukajMutlimediaPoTytule = tmpMultimedia;
      else
        wyszukajMutlimediaPoTytule = Nothing;
    end;
    * Nie mam TP, więc pisałem po prostu tutaj, w poście - tak więc prawie na pewno funkcje nie zadziała tak sama z siebie, trzeba ją pewnie poprawić, ale mam nadzieję, że wystarczy jako koncept.

    Takie rozwiązanie daje też możliwości rozwoju na przyszłość, jak byś chciał np. wyszukiwać po wilde cards (np. z gwiazdką). Wystarczy wtedy zamienić warunek "until (tmpMultimedia.tytul=tytul) ..." na "until (czyPasuje(tmpMultimedia.tytul, tytul))"...

Informacje o temacie

Users Browsing this Thread

Aktualnie 1 użytkownik(ów) przegląda ten temat. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. bezpieczna baza danych w internecie - jak to zrobić?
    By a-frackowska in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 8
    Ostatni post / autor: 07-01-08, 11:29
  2. jak wygląda sieciowa baza danych MS Access?
    By kamilaza in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 2
    Ostatni post / autor: 16-05-07, 14:00
  3. Turbo Pascal
    By oktawian in forum Programowanie
    Odpowiedzi: 2
    Ostatni post / autor: 22-04-07, 20:09
  4. Turbo Pascal
    By albert1991 in forum Programowanie
    Odpowiedzi: 9
    Ostatni post / autor: 29-01-07, 00:09
  5. Turbo Pascal
    By Kamilo in forum Programowanie
    Odpowiedzi: 5
    Ostatni post / autor: 12-02-05, 11:36

Zakładki

Zakładki

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  

Jak czytać DI?

Powered by  
ATMAN EcoSerwer