CATEGORII DOCUMENTE |
GESTIUNEA INFORMATICA A UNUI EXAMEN DE ADMITERE
ENUNTUL PROIECTULUI:
Se cere sa se scrie un program Pascal care sa primeasca o lista de candidati la un examen cu doua probe in cadrul unei institutii cu un numar de m-locuri disponibile si sa execute doua liste:
a) candidati admisi
b) candidati respinsi
unde,
un candidat reprezinta o structura informatica formata din urmatoarele campuri:
Nume: String;
Prenume: String;
Nota1: Integer; - reprezinta nota primita la proba 1;
Nota2: Integer; - reprezinta nota primita la proba 1;
Media: Real; - reprezinta media aritmetica a celor 2 note;
Se va nota cu n - numarul candidatilor inscrisi la examen.
INTRARI/IESIRI:
Programul lucreaza cu fisiere text formatate astfel:
1. persoane.txt - lista candidatilor inscrisi la examen
Nr. Inscriere.
Nume
Prenume
Nota1
Nota2
Nr. Inscriere.
Nume
Prenume
Nota1
Nota2
2. admisi.txt/respinsi.txt - lista candidatilor admisi/respinsi la examen
Nr. Inscriere.
Nume
Prenume
Media
Nr. Inscriere.
Nume
Prenume
Media
Se obeserva separatorul <crt> pentru campuri, precum si o linie intermediara pentru separarea infomatiilor referitoare la un candidat.
Programul citeste datele din fisierul persoane.txt si creeaza listele de candidati admisi.txt si respinsi.txt .
MODUL DE PROGRAMARE
Programul contine un meniu de lucru cu 5 optiuni:
Vizualizare Date - Vizualizarea informatiilor citite din fisierul cu intrari;
Introducere Date - Introducerea manuala ulterioara de candidati;
Stergere Date - Stergerea manuala dupa criteriu numelui, de candidati. Obs: Programul studiaza posibilitatea existentei mai multor candidati cu acelasi nume.
Vizualizare rezultate - Afisarea si salvarea in fisiere separate a Listelor de Candidati admisi - sortata descrescator dupa medie - si de Candidati respinsi - sortata crescator alfabetic. Obs. Este prevazuta si situatia in care ultimul candidat are un succesor in lista candidatilor cu aceeasi medie. In aceasta situatie se suplimenteaza numarul de locuri.
Exit - Iesirea din program
MODALITATI DE TESTARE:
Programul a fost testat pe o mare varietate de tipuri de intrari, astfel incat sa poata trata toate cazurile reale posibile: Mai multi/putini candidati decat locuri, mai multi/mai putini admisi/respinsi decat numarul de locuri, toti candidatii admisi/respinsi, etc.
EFICIENTA:
Programul nu foloseste tehnici speciale de programare/sortare-cautare, intrucat nu s-a lucrat cu volum mare de date si nici nu face parte din scopul proiectului, acesta avand ca obiectiv principal facilitarea modului de operare cu informatiile precum si listarea in fisiere a rezultatelor, prin folosirea de meniu si functii de lucru cu fisiere.
Pentru rapiditatea in executie si usurinta in urmarire, s-a pus accentul pe proiectarea folosind variabile temporare si exportand toate operatiunile in proceduri, astfel incat programul principal nu are decat un numar minim de variabile si instructiuni/apeluri.
Posibilitari de upgradare si eficientizare:
Programul poate fi upgradat la un numar variabil de examene, in general de informatii referitoare la un numar de candidati, mai multe optiuni de lucru asupra listelor precum si eficientizarea modului de programare folosind obiecte si alocare dinamica a memoriei, functie de volumul inregistrarilor.
De asemenea suporta imbunatatiri asupra modului grafic al meniului si al lucrului cu acesta, folosind diferite unit'uri Borland, precum crt ( clrscr, gotoxy, delay, readkey, etc. ) sau graph, pentru crearea de campuri de introducere de informatii, precum si alte unit'uri publice des folosite, precum cel de lucru cu mouse-ul, pentru usurinta in operare.
Anexat se gaseste discheta continand si:
Programul sursa: admitere.pas
Programul executabil: admitere.exe
Date Sursa: persoane.txt
Lista Admisi: admisi.txt
Lista Respinsi respinsi.txt
-Anexa 1-
Program Admitere;
type pers=RECORD
nume,pren:string;
nota1,nota2:integer;
media:real;
end;
vec = array[1..25] of pers;
var
n,m : integer;
v : vec;
ch: char;
procedure clrscr;
var i,j:integer;
begin
for i:=1 to 50 do
writeln;
end;
procedure citeste( var v:vec; var n:integer );
var f:text; i:integer;
begin
assign(f,'persoane.txt'); reset(f);
while not eof(f) do
begin
readln(f,i);
readln(f,v[i].nume); readln(f,v[i].pren);
readln(f,v[i].nota1); readln(f,v[i].nota2);
v[i].media:=( v[i].nota1 + v[i].nota2 )/2;
readln(f);
end;
n:=i;
close(f);
end;
procedure menu;
begin
clrscr;
writeln('Puteti opta pentru:');writeln;writeln;writeln;
writeln(' --------- 1 ---------- Vizualizare date -------------');writeln;
writeln(' --------- 2 ---------- Introducere date -------------');writeln;
writeln(' --------- 3 ---------- Stergere date -------------');writeln;
writeln(' --------- 4 ---------- Vizualizare rezultate -------------');writeln;
writeln;writeln;
writeln(' --------- X ---------- EXIT -------------');writeln;
writeln;writeln;
end;
procedure afisare( v:vec; n:integer );
var i:integer;
begin
clrscr; readln;
writeln('Lista candidatilor inscrisi:'); writeln;
for i:=1 to n do
writeln(i,'.',' ',v[i].nume,' ',v[i].pren,' ','Nota1 este ',v[i].nota1,' ','Nota2 este ',v[i].nota2);
writeln;writeln;writeln;write('Inapoi in meniu '); readln
end;
procedure inserare( var v:vec; var n:integer );
begin
clrscr; readln;
n:=n+1;
write('Numele candidatului: '); readln(v[n].nume);
write('Prenumele candidatului: '); readln(v[n].pren);
write('Nota 1 a candidatului: '); readln(v[n].nota1);
write('Nota 2 a candidatului: '); readln(v[n].nota2);
v[n].media := ( v[n].nota1 + v[n].nota2 ) / 2;
writeln;writeln;writeln;write('Inapoi in meniu '); readln;
end;
procedure stergere( var v:vec; var n:integer );
var name: string; i,j:integer; ch:char; sters:boolean;
begin
clrscr; readln;
sters:=false; ch:='t';
write('Numele candidatului: '); readln(name);
for i:=1 to n do
if v[i].nume=name then
begin
writeln(v[i].nume,' ',v[i].pren);
write('Confirmati stergerea (y/n) '); readln(ch);
if (ch='y') or (ch='Y') then
begin
sters:=true;
for j:=i to n do v[j]:=v[j+1];
n:=n-1;
end
else
end;
if (sters=false) and (ch='t') then
begin
writeln;writeln;
writeln('Candidatul nu a fost gasit')
end;
if (sters=false) and ( (ch='n') or (ch='N') ) then
begin
writeln;writeln;
writeln('Nici un candidat nu a fost sters');
end;
if sters then
begin
writeln;writeln;
writeln('Stergere efectuata');
end;
writeln;writeln;writeln;write('Inapoi in meniu '); readln;
end;
procedure rezultat( v:vec; n:integer );
var f1,f2:text; i,j,k:integer; p:pers;
begin
clrscr; readln;
assign(f1,'admisi.txt');rewrite(f1);
assign(f2,'respinsi.txt');rewrite(f2);
for i:=1 to n-1 do
for j:=i+1 to n do
if v[i].media < v[j].media then begin
p:=v[i]; v[i]:=v[j]; v[j]:=p end;
for k:=1 to m do if v[k].media <= 4 then break;
if v[m].media>=5 then for i:=m+1 to n do if v[i].media=v[m].media then m:=m+1;
if n>m then
if m<=k then
begin
writeln('Lista candidatilor admisi');
for i:=1 to m do
begin
writeln(i,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f1,i);writeln(f1,v[i].nume);writeln(f1,v[i].pren);writeln(f1,v[i].media:2:2);writeln(f1);
end;
writeln;writeln;writeln('Lista candidatilor respinsi');
for i:=m+1 to n-1 do
for j:=i+1 to n do
if v[i].nume > v[j].nume then begin
p:=v[i]; v[i]:=v[j]; v[j]:=p end;
for i:=m+1 to n do
begin
writeln(abs(i-m),'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f2,i);writeln(f2,v[i].nume);writeln(f2,v[i].pren);writeln(f2,v[i].media:2:2);writeln(f2);
end
end
else
begin
writeln('Lista candidatilor admisi');
for i:=1 to k-1 do
begin
writeln(i,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f1,i);writeln(f1,v[i].nume);writeln(f1,v[i].pren);writeln(f1,v[i].media:2:2);writeln(f1);
end;
writeln;writeln;writeln('Lista candidatilor respinsi');
for i:=k to n-1 do
for j:=i+1 to n do
if v[i].nume > v[j].nume then begin
p:=v[i]; v[i]:=v[j]; v[j]:=p end;
for i:=k to n do
begin
writeln(i-k+1,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f2,i);writeln(f2,v[i].nume);writeln(f2,v[i].pren);writeln(f2,v[i].media:2:2);writeln(f2);
end
end
else
if k <=n then
begin
writeln('Lista candidatilor admisi');
for i:=1 to k-1 do
begin
writeln(i,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f1,i);writeln(f1,v[i].nume);writeln(f1,v[i].pren);writeln(f1,v[i].media:2:2);writeln(f1);
end;
writeln;writeln;writeln('Lista candidatilor respinsi');
for i:=k to n-1 do
for j:=i+1 to n do
if v[i].nume > v[j].nume then begin
p:=v[i]; v[i]:=v[j]; v[j]:=p end;
for i:=k to n do
begin
writeln(i-k+1,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f2,i);writeln(f2,v[i].nume);writeln(f2,v[i].pren);writeln(f2,v[i].media:2:2);writeln(f2);
end
end
else
begin
writeln('Toti candidatii sunt admisi');
for i:=1 to n do
begin
writeln(i,'. ',v[i].nume,' ',v[i].pren,' ',v[i].media:2:2);
writeln(f1,i);writeln(f1,v[i].nume);writeln(f1,v[i].pren);writeln(f1,v[i].media:2:2);writeln(f1);
end
end;
close(f1); close(f2); writeln;writeln;
writeln('Au fost generate fisierele');writeln('admisi.txt');write('respinsi.txt');
writeln;writeln;writeln;write('Inapoi in meniu '); readln;
end;
BEGIN
clrscr;
write('Numar de locuri disponibile ');readln(m);
citeste(v,n);
write('Numarul de candidati incarcat este ',n);
repeat
menu;
read(ch);
case ch of
'1': afisare (v,n);
'2': inserare(v,n);
'3': stergere(v,n);
'4': rezultat(v,n);
'x','X': halt;
else if (ch<>#120) and (ch<>#13) and (ch<>#10) then
begin
writeln('Tasta gresita. Tastati <enter> pentru a continua.');
readln
end
end
until false
END.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1584
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved