50011 (Разработка программы обработки экономической информации), страница 3

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка программы обработки экономической информации", который расположен в категории "". Всё это находится в предмете "информатика" из 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.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5057
Авторов
на СтудИзбе
456
Средний доход
с одного платного файла
Обучение Подробнее