ArchI
10-12-06, 12:27
Mam problem z zadaniem z informatyki
Mam podany program i musze go zmodyfikowaæ, tak aby:
1) przed zamkniêciem program pyta³ czy zapisac
2) program (w zale¿no¶ci od tego czego oczekujemy) nadpisywa³ lud dopisywa³ dane
3) wprowadzane dane wpisywa³ z du¿ej litery
4) pozwala³ na edycjê danych
5) pyta³ siê (przy otwieraniu programu) czy wczytaæ dane
Program ten jest zbudowany na zasadzie typu plikowego
Program P12 jest baz± danych z mozliwo¶ci± wprowadzania, przegl±dania, zapisywania i odczytywania danych z dysku
program p12;
uses crt2;
type osoba=record
nazwisko:string[10];
imie:string[10];
wiek:byte;
end;
const Esc =#27;
var listaosob:array[1..100] of osoba;
plik:file of osoba;
i,Nrosoby:integer;
{.......}
procedure czekaj;
var z:char;
begin
writeln;
write(' nacisnij cos');
repeat until KeyPressed;
while KeyPressed do z:=ReadKey;
end;
{.......}
function czytajznak:char;
var z:char;
begin
czytajznak:=UpCase(ReadKey);
end;
{.....}
procedure zapisdanychdopliku;
var i:integer;
begin
assign(plik,'dane0001.dat');
rewrite(plik);
for i:=1 to Nrosoby do write(plik,listaosob[i]);
close(plik);
end;
{........}
procedure odczytdanychzpliku;
var i:integer;
begin
assign(plik,'dane0001.dat');
{$I-}reset(plik);
if IoResult<>0 then begin
clrscr;writeln('brak pliku');
czekaj;
end
{$I+} else begin
i:=1;
while not eof(plik) do begin
read(plik,listaosob[i]);
inc(i)
end;
close(plik);
Nrosoby:=i-1;
clrscr;write('dane wczytane'); delay(1000);clrscr;
end;
end;
{..........}
procedure wprowadzanie;
begin
ClrScr;
writeln('wprowadz dane',Nrosoby+1,'osoby:');
writeln;
Nrosoby:=Nrosoby+1;
with listaosob[Nrosoby] do
begin
writeln('nazwisko:');
readln(nazwisko);
write('imie :');
readln(imie);
write('wiek:');
readln(wiek);
end;
end;
{..........}
procedure przegladanie(i:byte);
begin
clrscr ;
writeln('wyswietlanie danych[',i,'] osoby:');
writeln;
with ListaOsob[i] do begin
writeln ('nazwisko:',nazwisko);
writeln('imie: ',imie);
writeln('wiek: ',wiek) ;
end;
end;
{.........}
procedure menu;
begin
Clrscr;
writeln('***************Lista osob***********');
writeln('[1]-Wprowadzanie danych');
writeln('[2]-Wyswietlanie danych');
writeln('[3]-Zapis danych na dysku');
writeln('[4]-Odczyt danych z dyku');
writeln ('<esc>-koniec pracy');
end;
{....}
begin
NrOsoby:=0 ;
repeat
menu;
case CzytajZnak of
'1':Wprowadzanie;
'2':begin
ClrScr;
if NrOsoby=0 then begin
writeln('brak danych');
czekaj;
end
else for i:=1 to NrOsoby do
begin
Przegladanie(i);
czekaj;
end;
end;
'3': if NrOsoby=0 then begin
ClrScr;writeln('brak danych');
czekaj;
end
else ZapisDanychDoPliku;
'4':OdczytDanychZpliku;
esc:halt(0)
end;
until false;
end.
Prosze o przedstawianie mo¿liwych rozi±zan
licze na Wasz± pomoc, bo u mnie z pascalem nie za dobrze:los:
Mam podany program i musze go zmodyfikowaæ, tak aby:
1) przed zamkniêciem program pyta³ czy zapisac
2) program (w zale¿no¶ci od tego czego oczekujemy) nadpisywa³ lud dopisywa³ dane
3) wprowadzane dane wpisywa³ z du¿ej litery
4) pozwala³ na edycjê danych
5) pyta³ siê (przy otwieraniu programu) czy wczytaæ dane
Program ten jest zbudowany na zasadzie typu plikowego
Program P12 jest baz± danych z mozliwo¶ci± wprowadzania, przegl±dania, zapisywania i odczytywania danych z dysku
program p12;
uses crt2;
type osoba=record
nazwisko:string[10];
imie:string[10];
wiek:byte;
end;
const Esc =#27;
var listaosob:array[1..100] of osoba;
plik:file of osoba;
i,Nrosoby:integer;
{.......}
procedure czekaj;
var z:char;
begin
writeln;
write(' nacisnij cos');
repeat until KeyPressed;
while KeyPressed do z:=ReadKey;
end;
{.......}
function czytajznak:char;
var z:char;
begin
czytajznak:=UpCase(ReadKey);
end;
{.....}
procedure zapisdanychdopliku;
var i:integer;
begin
assign(plik,'dane0001.dat');
rewrite(plik);
for i:=1 to Nrosoby do write(plik,listaosob[i]);
close(plik);
end;
{........}
procedure odczytdanychzpliku;
var i:integer;
begin
assign(plik,'dane0001.dat');
{$I-}reset(plik);
if IoResult<>0 then begin
clrscr;writeln('brak pliku');
czekaj;
end
{$I+} else begin
i:=1;
while not eof(plik) do begin
read(plik,listaosob[i]);
inc(i)
end;
close(plik);
Nrosoby:=i-1;
clrscr;write('dane wczytane'); delay(1000);clrscr;
end;
end;
{..........}
procedure wprowadzanie;
begin
ClrScr;
writeln('wprowadz dane',Nrosoby+1,'osoby:');
writeln;
Nrosoby:=Nrosoby+1;
with listaosob[Nrosoby] do
begin
writeln('nazwisko:');
readln(nazwisko);
write('imie :');
readln(imie);
write('wiek:');
readln(wiek);
end;
end;
{..........}
procedure przegladanie(i:byte);
begin
clrscr ;
writeln('wyswietlanie danych[',i,'] osoby:');
writeln;
with ListaOsob[i] do begin
writeln ('nazwisko:',nazwisko);
writeln('imie: ',imie);
writeln('wiek: ',wiek) ;
end;
end;
{.........}
procedure menu;
begin
Clrscr;
writeln('***************Lista osob***********');
writeln('[1]-Wprowadzanie danych');
writeln('[2]-Wyswietlanie danych');
writeln('[3]-Zapis danych na dysku');
writeln('[4]-Odczyt danych z dyku');
writeln ('<esc>-koniec pracy');
end;
{....}
begin
NrOsoby:=0 ;
repeat
menu;
case CzytajZnak of
'1':Wprowadzanie;
'2':begin
ClrScr;
if NrOsoby=0 then begin
writeln('brak danych');
czekaj;
end
else for i:=1 to NrOsoby do
begin
Przegladanie(i);
czekaj;
end;
end;
'3': if NrOsoby=0 then begin
ClrScr;writeln('brak danych');
czekaj;
end
else ZapisDanychDoPliku;
'4':OdczytDanychZpliku;
esc:halt(0)
end;
until false;
end.
Prosze o przedstawianie mo¿liwych rozi±zan
licze na Wasz± pomoc, bo u mnie z pascalem nie za dobrze:los: