Смекни!
smekni.com

Разработка программы обработки экономической информации (стр. 4 из 5)

else

break; //прервать цикл

new(newE); //для нового элемента

newE^.inf.fio:=z.fio;

newE^.inf.propusk:=z.propusk;

newE^.inf.opravdan:=z.opravdan;

newE^.inf.nomergrupp:=z.nomergrupp;

newE^.inf.neopravdan:= newE^.inf.propusk- newE^.inf.opravdan;

{----------------v konec------------------------------}

if pop=nil then

begin

right^.nr:=newE;

newE^.nl:=right;

newE^.nr:=nil;

right:=newE;

kolvo:=kolvo+1;

end

else

{----------------v na4alo------------------------------

if pop=verh then

begin

pop^.nl:=newE;

newE^.nr:=pop;

newE^.nl:=nil;

kolvo:=kolvo+1;

verh:=newE;

left:=newE;

end

else

{----------------v seredinu------------------------------}

begin

pop^.nl^.nr:=newE;

newE^.nl:=pop^.nl;

pop^.nl:=newE;

newE^.nr:=pop;

kolvo:=kolvo+1;

end;

end;

{---------------------------------------------------------------------------------}

{---------------------------------------UDALENIE----------------------------------}

{---------------------------------------------------------------------------------}

procedure udal;

var

i:integer;

begin

gotoxy(20,25);

textcolor(black);

writeln('Input the name of a student which could be delete ');

textcolor(white);

gotoxy(25,27);

readln(z.fio); //ввод и чтение имени

for i:=1 to (15-length(z.fio)) do//достаиваем фамилию до 15 знаков

z.fio:=z.fio+' ';

newE:=verh;

whilenewE<>right^.nrdo//пока не конец списка

begin

{------------------------Uslovie esli posledniy---------------------}

if newE^.inf.fio=z.fio then

begin

if newE=right then

begin

temp:=newE;

newE:=newE^.nl;

newE^.nr:=nil;

right:=newE;

dispose(temp);

kolvo:=kolvo-1;

clrscr;

textcolor(green);

gotoxy(24,25);

writeln('The student has been deleted'); //удалили

readln;

exit;

end

else

{-----------------Uslovie esli 1-iy el-t udalyayut--------------}

if newE =left then

begin

temp:=newE;

newE:=newE^.nr;

newE^.nl:=nil;

verh:=newE;

dispose(temp);

kolvo:=kolvo-1;

clrscr;

textcolor(green);

gotoxy(24,25);

writeln('The student has been deleted'); //удалили

readln;

exit;

end

{-------------------Esli lyuboy no ne 1-iy i ne posledniy-------------}

else

begin

temp:=newE;

newE^.nl^.nr:=temp^.nr;

newE^.nr^.nl:=newE^.nl;

dispose(temp);

kolvo:=kolvo-1;

clrscr;

textcolor(green);

gotoxy(24,25);

writeln('The student has been deleted'); //удалили

readln;

exit;

end;

end;

newE:=newE^.nr; //перевод указателя

end;

gotoxy(15,25);

clrscr;

textcolor(red);

gotoxy(15,25);

writeln('This student has not been finded !!!'); //не удалили

gotoxy(15,27);

writeln('Input his name without mistakes again'); //введите имя снова

textcolor(white);

readln;

exit;

end;

{------------------------------------------------------------------------------}

{-------------------------------P O I S K --------------------------------}

{------------------------------------------------------------------------------}

{------------------------------------------------------------------------------}

//смотреть prosmotr_2 –всё аналогично

procedure poisk(x:ukaz;imya:string);

var

n,i:integer;

c:char;

begin

clrscr;

n:=0;

i:=0;

newE:=verh;

while (newE<>right^.nr) do begin//пока не конец списка

if newE^.inf.fio=imya then

inc(i); // подсчёт людей с таким именем

newE:=newE^.nr;

end;

if i=0 then begin clrscr;gotoxy(27,25); textcolor(red);writeln('This student does not EXIST'); exit; end; //такого нет

newE:=x;

textcolor(white);

textbackground(blue);

writeln('|------|---------------|----------|---------|-----------|--------|-------|');

writeln('|#grupp| Name | amount of| validly | unvalidly | summa |percent|');

writeln('| | | | absence | | | |');

writeln('|------|---------------|----------|---------|-----------|--------|-------|');

while (newE<>right^.nr) and (n<=6) do

begin

inc(n);

if newE^.inf.fio=z.fio then

textbackground(red) //выделение элемента красным если это тот

else

textbackground(blue);

write('|', newE^.inf.nomergrupp:5,' '); //печать информации по полям

write('|',newE^.inf.fio:15);

write('|',newE^.inf.propusk:5,' ');

write('|', newE^.inf.opravdan:5,' |');

write(newE^.inf.neopravdan:7,' |');

write(newE^.inf.summa:6,' |');

writeln(newE^.inf.procent:5:2,' |');

write('| | | | | | | |');

textbackground(blue);

writeln;

newE:=newE^.nr;

end;

ifotpech=0 then//изменение установок для печати

otpech:=otpech+n;

textcolor(white);

writeln('|------|---------------|----------|---------|-----------|--------|-------|');

writeln('Push the -enter- to the ExiT'); //для выхода ентер

end;

{-------------------------------------------------------------------------}

procedure obrabotka;

var

pop:ukaz;

x:integer; //промежуточная величина

begin

pop:=verh; //указатель на начало

x:=0;

whilepop<>nildo//пока не конец списка

begin

pop^.inf.neopravdan:= pop^.inf.propusk- pop^.inf.opravdan; //подсчёт неоправданных пропусков

ifpop^.inf.propusk=0 thenpop^.inf.procent:=0//если пропуски=0 то и процент =0

else

pop^.inf.procent:=( pop^.inf.neopravdan/ pop^.inf.propusk)*100; //подсчёт процента

x:=x+pop^.inf.neopravdan; //нахождение промежуточной величины

pop^.inf.summa:=x;

pop:=pop^.nr;

end;

gotoxy(25,25);

writeln('Processing data is over push the -enter-'); //завершилась обработка

readln;

end;

{------------------------------------------------------------------------}

{------------------prosmotr----------------------------------------------}

{------------------------------------------------------------------------}

//смотреть prosmotr_2 – всё аналогично ,только добавляются нолвые поля.

procedure prosmotr(x:ukaz);

var

n:integer;

c:char;

begin

clrscr;

n:=0;

newE:=x;

writeln('|------|---------------|----------|---------|');

writeln('|#grupp| Name | amount of| validly |');

writeln('| | | absence | |');

writeln('|------|---------------|----------|---------|');

while (newE<>right^.nr) and (n<=6) do

begin

inc(n);

write('|', newE^.inf.nomergrupp:5,' ');

write('|',newE^.inf.fio:15);

write('|',newE^.inf.propusk:5,' ');

writeln('|', newE^.inf.opravdan:5,' |');

write('| | | | |');

writeln;

newE:=newE^.nr;

end;

if otpech=0 then

otpech:=otpech+n;

writeln('|------|---------------|----------|---------|');

writeln('Push the -enter- to the Exit');

end;

procedure klavishi(nom:integer);

var

c:char;

left:ukaz;

begin

otpech:=0; //обнуляем

left:=verh; //указатель на начало

case nom of//выбор

1:prosmotr(left);

2:prosmotr_2(left);

3:begin clrscr;gotoxy(20,25);textcolor(white);Writeln('Input the name of a student which cold been finded');

textcolor(white);gotoxy(25,27);readln(z.fio);for i:=1 to (15-length(z.fio)) do

z.fio:=z.fio+' ';left:=verh;poisk(left,z.fio); end; //установки перед процедурой поиска

end;

while true do//бесконечный цикл

begin

c:=readkey; //чтение клавиши

if ord(c)=13 then//если ентер-выход

case nom of

1:exit;

2:exit;

3:exit;

end

else// иначе

if c=#0 then

begin

c:=readkey;

if c=#80 then//если вниз

begin

if left=right then case nom of//если конец списка

1:prosmotr(left); //выбор

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

else

begin

if (kolvo-otpech=0) then//если всё отпечатали

case nom of

1:prosmotr(left); //выбор

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

else

begin

otpech:=otpech+1; //увеличение числа отпечатанных на 1

left:=left^.nr; //перевод указателя

case nom of//выбор

1:prosmotr(left);

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

end;

end;

end;

if c=#72 then//если вверх

begin

ifleft^.nl=nil//если список из 1-го эл-та

then case nom of//выбор

1:prosmotr(left);

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

else//иначе

begin

otpech:=otpech-1; //уменьшение числа отпечатанных на1

left:=left^.nl; //перевод указателя

case nom of//выбор

1:prosmotr(left);

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

end;

end

else//иначе не вверз не вниз не ентер

case nom of//выбор

1:prosmotr(left);

2:prosmotr_2(left);

3:poisk(left,z.fio);

end

end

end;

end;

{-------------------------------------------------------------------------}

{---------------------------ZAPIS V FAIL----------------------------------}

{--------------------------------------------------------------------------}

procedure zapis_v_fail;

var

t:text;

pop:ukaz;

d:string;

begin

gotoxy(25,25);

writeln('Input the name of output file'); //ввод имени файла

gotoxy(25,26);

readln(d);

assign(t,'d'); //установка связи сним

rewrite(t); //открытие в режиме записи

newE:=verh; //указатель на начало

//запись в файл шапки

writeln(t,'|-------|---------------|----------|---------|----------|--------|-------|');

writeln(t,'|#grupp | Name| amountof| validly | unvalidly| summa|percent|');

writeln(t,'| | | | absence | | | |');

writeln(t,'|-------|---------------|----------|---------|----------|--------|-------|');

while (newE<>nil) do//пока не конец сиска

begin//запись таблицы

write(t,'|', newE^.inf.nomergrupp:5,' ');

write(t,'|',newE^.inf.fio:15);

write(t,'|',newE^.inf.propusk:5,' ');

write(t,'|', newE^.inf.opravdan:5,' |');

write(t,newE^.inf.neopravdan:7,' |');

write(t,newE^.inf.summa:6,' |');

writeln(t,newE^.inf.procent:5:2,' |');

writeln;

newE:=newE^.nr; //перевод указателя

end;

//запись в файл последней строки

write(t,'|-------|---------------|----------|---------|----------|--------|-------|');

clrscr;

gotoxy(25,25);

writeln('File has been written '); //всё записали

readln;

close(t); //закрытие файла

end;

{--------------------------------------MENYU--------------------------------}

procedure okno(t:integer);{t-nomer stroki}

var

p:integer;

begin

clrscr;

textcolor(white); //смена цвета

textbackground(blue);

writeln('МНННННННННННННННННННННННННННННННННННННН№');

gotoxy(25,25);

ift=1 then//печать пунктов меню и если t равно номеру их строки то выделение чёрным цветом(для каждого)

textbackground(black);

writeln('є1.Input the filename. є');

textbackground(blue);

gotoxy(25,26);

if t=2 then

textbackground(black);

writeln('є2.Processing data. є');

textbackground(blue);

gotoxy(25,27);

if t=3 then

textbackground(black);

writeln('є3.Delete the student. є');

textbackground(blue);

gotoxy(25,28);

if t=4 then

textbackground(black);

writeln('є4.Add student. є');

textbackground(blue);

gotoxy(25,29);

if t=5 then

textbackground(black);