Skocz do zawartości

Problem z bazą danych


Perykles

Polecane posty

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 do komentarza
Udostępnij na innych stronach

:)

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 do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...