Jump to content

Problem z bazą danych


Perykles

Recommended Posts

Witam,

Żeby poćwiczyć trochę pisanie programów w pascalu ( to nie jest praca domowa, nie chcę żebyście robili za mnie prace domową, po prostu chcę trochę poćwiczyć robienie trochę bardziej skomplikowanych programów niz kalkulator :) )postanowiłem zrobić taką bazę danych, do której wprowadza się nazwę przedmiotu i oceny. Chciałem, żeby to wyglądało jakoś tak:

1. Wprowadz dane

2.Wyswietl dane

3.Zapisz do pliku

4.Wczytaj z pliku

5.Zakończ

 

Dane można by wprowadzać 15 razy (tyle przedmiotów), a potem jak by się wzięło wyświetl, to była by opcja write('Nazwa przedmiotu: ');, i wtedy wczytywało by dane z procedury Wprowadz dane, wyświetlało oceny i liczyło ich średnią arytmetyczną. No i chciałem, żeby można było zapisać/wczytywać dane z pliku. Umiem zrobić taki program:

 

Uses CRT;

Var
 przedmiot:array[1..30] of string;
 oceny,srednia:shortint;
 c,c2:char;
 iloscprzedmiotow:byte;
 numerprzedmiotu:byte;
 plik:text;                                       

PROCEDURE Wprowadz; 
Begin
 ClrScr;
 Iloscprzedmiotow:=iloscprzedmiotow+1;
 Write('Przedmiot: ');
 Readln(przedmiot[iloscprzedmiotow]);
 Write('Oceny: ');
 Readln(oceny[iloscprzedmiotow]);
End;

End;

PROCEDURE Wyswietl; 
 ClrScr;
 Write('Numerprzedmiotu ? (1..', iloscprzedmiotow ,') :');          
 ReadLn(numerprzedmiotu);                                                  
 WriteLn('Przedmiot     : ',przedmiot[numerprzedmiotu] );                                           
 WriteLn;
 Write('Wcisnij jakis klawisz...');
 c2:=readkey;
End;


PROCEDURE Zapisz;                                   
Begin
 Assign(plik,'BAZA.DAN');                           
 ReWrite(plik);                                     
 WriteLn(plik,iloscprzedmiotow);                        
 t1:=0;                                           
 Repeat
   t1:=t1+1;                                      
   WriteLn(plik,przedmiot[numerprzedmiotu] );                                    
 Until t1=iloscprzedmiotow;                               
 Close(plik);                                       
End;

PROCEDURE Czytaj;                                  
Begin
 Assign(plik,'BAZA.DAN');                         
 Reset(plik);                                       
 ReadLn(plik,iloscprzedmiotow);                        
 t1:=0;                                              
 Repeat
   t1:=t1+1;                                     
   ReadLn(plik,przedmiot[numerprzedmiotu] );                                         
 Until t1=iloscprzedmiotow;                                 
 Close(plik);                                         
End;

Begin
 Iloscosob:=0;
 Repeat
 ClrScr;
 WriteLn('1. Nowy wpis');                       
 WriteLn('2. Wyswietlenie wpisu');                  
 WriteLn('3. Odczyt z pliku');                       
 WriteLn('4. Zapis do pliku');                       
 WriteLn('5. Koniec programu');                     
   Repeat
     c:=readkey;
   Until (c>='1') AND (c<='5');                   
 If c='1' Then Wprowadz;
 If c='2' Then Wyswietl;
 If c='3' Then Czytaj;                             
 If c='4' Then Zapisz;                                
 Until c='5';                                         
End.

 

I teraz mam kilka pytan:

 

1) Co mam zrobić, żeby w procedurze Wyswietl zamiast wpisywac numer, móc wpisać nazwę przedmiotu, żeby potem wyświetlały się oceny i średnia z przedmiotu którego nazwę wpisałem?

 

2) Jak zrobić, żeby po wyświetleniu ocen, program obliczał ich średnią? Znalazłem w googlach jakiś algorytm na obliczanie średniej, ale nie wiem jak go użyć w tym programie. Jak to zrobić?

 

3) Nie wiem, czy da się tak zrobić, ale przydało by się jeszcze dać opcję, która otwierała by plik z bazą danych. Można tak zrobić? Jeśli tak, to w jaki sposób?

 

Pomożecie? Z góry dzięki za odpowiedź.

Link to comment
Share on other sites

:)

Trochu sobie namieszałeś.:)

Ja proponuję zrobić to na dwóch plikach. W jednym przechowuj rekordy:

 przedmiot: record
                                 numer: byte;  
                                 nazwa: string[20];
                             end;OSkŚh&Źś+rrkfpjW oceny: record
                           numer:byte; {numer ocenianego przedmiotu}
                           ocena:byte;
                       end;

Każda ocena to osobny rekord, numery będą się powtarzać.

Aby znaleźć szukany przedmiot po nazwie, przeszukujesz plik z rekordami "przedmiot" i jeśli znajdziesz szukany, wtedy przeszukujesz plik z ocenami.

Jeśli znajdziesz szukany mumer, wtedy wyświetl jego ocenę.

 

Ocenę średnią możesz obliczać na bieżąco.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...