50011 (Разработка программы обработки экономической информации), страница 3
Описание файла
Документ из архива "Разработка программы обработки экономической информации", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "50011"
Текст 3 страницы из документа "50011"
begin
readln(ft,stroka);
schet:=schet+1;
end;
readln(ft,stroka);//считывание строки
t1:=copy(stroka,3,7);
t2:=copy(stroka,10,15);
{perevod stroki v integer}
if stroka[30]= ' '
then
t3:=copy(stroka,29,1)
else
t3:=copy(stroka,29,2);
val(t3,pole3,errcode);
{perevod stroki v integer}
if stroka[42]= ' 'then
t4:=copy(stroka,41,1)
else
t4:=copy(stroka,41,2);
val(t4,pole4,errcode);
new(newE);..//создание нового эл-та
newE^.inf.fio:=t2;//идёт присвоение по полям
newE^.inf.nomergrupp:=t1;
newE^.inf.propusk:=pole3;
newE^.inf.opravdan:=pole4;
newE^.nr:=nil;
newE^.nl:=nil;
left:=newE;Right:=newE;
verh:=newE;
kolvo:=kolvo+1;
{--sozdali 1-iy element}
while Not eof(ft) do//покане конец файла
begin
readln(ft,stroka);//чтение строки
if stroka[3]='-'then //сколько знаков не конец ли таблицы
exit;
t1:=copy(stroka,3,7); //копирывание
t2:=copy(stroka,10,15);
{perevod stroki v integer}
if stroka[30]= ' 'then //сколько знаков не конец ли таблицы
t3:=copy(stroka,29,1)
else
t3:=copy(stroka,29,2); //копирывание
val(t3,pole3,errcode); //чтение строки в инт
{perevod stroki v integer}
if stroka[42]= ' 'then
t4:=copy(stroka,41,1)
else
t4:=copy(stroka,41,2);
val(t4,pole4,errcode);
{-----sozdanie o4eredi-------------------------------------}
pop:=verh; // указатель на на чало
while pop<>nil do// цикл пока неконец списка
if t2>= pop^.inf.fio//сравнение по фамилиям
then
pop:=pop^.nr//перевод указателя
else
break; //прервать цикл
new(newE); //создание нового элемента
newE^.inf.fio:=t2;
newE^.inf.nomergrupp:=t1;
newE^.inf.propusk:=pole3;
newE^.inf.opravdan:=pole4;
if pop=nil then//добавление в конец нового элемента
begin
right^.nr:=newE;
newE^.nl:=right;
newE^.nr:=nil;
right:=newE;
kolvo:=kolvo+1;
end
else
if pop=verh then//добавление в начало
begin
pop^.nl:=newE;
newE^.nr:=pop;
newE^.nl:=nil;
kolvo:=kolvo+1;
verh:=newE;
left:=newE;
end
else
begin//добавление в сердину
pop^.nl^.nr:=newE;
newE^.nl:=pop^.nl;
pop^.nl:=newE;
newE^.nr:=pop;
kolvo:=kolvo+1;
end;
end;
end;
right^.nr:=nil; // правый указатель на конкц
close(ft);exit// закрытие файла
end;
{------------------------------------------------------------------------}
{------------------prosmotr_2-----------------------------------------}
{------------------------------------------------------------------------}
procedure prosmotr_2(x:ukaz);
var
n:integer;
c:char;
begin
clrscr;
n:=0; //число выводимых строк
newE:=x; //указатель
writeln('|------|---------------|----------|---------|-----------|--------|-------|');
writeln('|#grupp| Name | amount of| validly | unvalidly | summa |percent|');
writeln('| | | | absence | | | |');
writeln('|------|---------------|----------|---------|-----------|--------|-------|');
while (newE<>right^.nr) and (n<=6) do//цикл пока не конец списка и число строк =6
begin
inc(n);
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('| | | | | | | |');
writeln;
newE:=newE^.nr; //перевод указателя
end;
if otpech=0 then
otpech:=otpech+n;
writeln('|------|---------------|----------|---------|-----------|--------|-------|');
writeln('Push the -enter- to the ExiT'); //для выхода ентер
end;
{------------------------------------------------------------------------------}
{---------------DOBAVLENIE ELEMENTA--------------------------------------------}
{------------------------------------------------------------------------------}
procedure dob;
var
pop:ukaz;
p,i:integer;
begin
gotoxy(25,25);
textcolor(red);
writeln('Push the -*- to the ExiT'); //для выхода
textcolor(white);
gotoxy(25,27);
writeln('Input the name of a new student'); //ввод имени студента
gotoxy(25,28);
readln(z.fio); //чтение имени
{Uslovie vihoda}
if z.fio='*'then//условие выхода
exit;
for i:=1 to 15-length(z.fio) do//достраиваем имя до 15 знаков
z.fio:=z.fio+' ';
gotoxy(25,29); //чтение всех данных о студенте с клавиатуры
writeln('Input tne nomber of grupp');
gotoxy(25,30);
readln(z.nomergrupp);
gotoxy(25,31);
writeln('Input the omount of absence');
gotoxy(25,32);
readln(z.propusk);
gotoxy(25,33);
writeln('Input the omount of validly absence');
gotoxy(25,34);
readln(p);
while p>z.propusk do//если число пропусков меньше числа пропусков по уваж причине
begin
textcolor(red);
writeln('Thi is impossible:');
textcolor(black);
writeln('The omount of validly absence more then just omount of absence');
write('Push the -enter- and input theomount of validly absence again');
readln; textcolor(white);
gotoxy(25,33);
writeln('Input the omount of validly absence');
gotoxy(25,34); //очищение экрана
writeln(' ');
writeln(' ');
writeln(' ');
write(' ');
gotoxy(25,34);
readln(p); //по новой вводим и читаем
end;
z.opravdan:=p;
{-------------------dobavlenie-------------------------}
//происходит так же как при организации
pop:=verh; //указатель на начало
while pop<>nil do//пока не конец списка
if z.fio>= pop^.inf.fio//сравнение по фамилиям
then
pop:=pop^.nr//перевод указателя
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;
while newE<>right^.nr do//пока не конец списка
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;
if otpech=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;
while pop<>nil do//пока не конец списка
begin
pop^.inf.neopravdan:= pop^.inf.propusk- pop^.inf.opravdan; //подсчёт неоправданных пропусков
if pop^.inf.propusk=0 then pop^.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
if left^.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 | amount of| 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);
if t=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);
writeln('є 5.Watch є');
textbackground(blue);
gotoxy(25,30);
if t=6 then
textbackground(black);
writeln('є 6.Search the student. є');
textbackground(blue);
gotoxy(25,31);
if t=7 then
textbackground(black);
writeln('є 7.Write output file. є');
textbackground(blue);
gotoxy(25,32);
if t=8 then
textbackground(black);
writeln('є 8.ExiT. є');
textbackground(blue);
gotoxy(25,33);
writeln('ИННННННННННННННННННННННННННННННННННННННј');
textbackground(blue);
end;
{------------------------------------------------------}
{-------------------------------------------------------------------------}
{----------------------------------------------------------------------------------}
{------------------------------OSNOVNAYA-------------------------------------------}
{----------------------------------------------------------------------------------}
begin
x:=1; //номер строки
textbackground(blue);
okno(x);
while true do//бесконечный цикл
begin
c:=readkey; //чтение клавиши
if ord(c)=13 then//ентер
case x of//выбор процедур по их номеру пунктов
1:begin clrscr;org;if sozdan=true then klavishi(1);end;
2:begin clrscr;obrabotka;end;
3:begin clrscr;udal;end;
4:begin clrscr;dob;end;
5:begin clrscr;obrabotka;klavishi(2);end;
6:begin clrscr;klavishi(3);end;
7:begin clrscr;zapis_v_fail;end;
8:begin clrscr;halt;end;
end;
if c=#0
then
begin
c:=readkey;
if c=#80 then//если вниз
begin
x:=x+1; //увеличение номера строки на 1
if x>8 then//если он больше 8
begin
x:=1; //то он будет =1
okno(x); //печать меню
end
else
okno(x); //печать меню
end
else
if c=#72 then//если вверх
begin
x:=x-1; //уменьшение номера строки на 1
if x<1 then//меньше1
begin
x:=8; //присвоить значение 8
okno(x); //печать меню
end
else
okno(x); //печать меню
end
else
okno(x); //печать меню
end
else
okno(x); //печать меню
end;
end.
1>