Технико-экономические показатели
В результате компиляции программы компилятором Borland Pascal 7.0 . был получен исполняемый файл формата DOS EXE размером 20 Кбайт, что является приемлемым как для компьютеров десятилетней давности, так тем более, современных. Для работы программа требует приблизительно 200 Кбайт оперативной памяти (зависит от размера входного файла). Данный объем позволяет программе выполнятся на самом широком круге компьютеров, фактически всех поддерживающих операционную систему DOS. Для выполнения требуется процессор класса 80x86, цветной монитор, поддерживающий текстовый режим 80х50. Размер входного файла зависит от количества символов в нем и для 44 элементов (студентов) составляет 2Кбайта. Размер выходного файла зависит от преобразований. В программе отсутствует ресурсоемкие процедуры, поэтому производительность центрального процессора не критична. Программа может работать под управлением операционной системы класса DOS, при этои сохраняет работоспособность и в режиме эмуляции MS-DOS операционной системой Windows9X,Me и RedHat Linux. Работоспособность в режиме эмуляции под другими операционными системами не проверялось, хотя эта возможность не исключается. Таким образом программа может выполняться практически на любом доступном PC компьютере. Тестовый пример
Проведем эксперимент, чтобы убедиться в работоспособности программы. Возьмем исходную таблицу(рис.4.1):
Рис.4.1- исходная таблица Результат после обработки
Эти данные также будут сохранены в файл с указанным именем и путём к нему. Заключение
Данная программа, составлена в соответствии с постановкой задачи на курсовое проектирование по теме "Разработка программы обработки информации" по дисциплине "Основы программирования и алгоритмические языки" (ОПиАЯ). При написании программы использованы методические указания по курсовому проектированию по дисциплине "ОПиАЯ". Для проверки работоспособности программы и правильности обработки входных данных разработан тестовый пример. Тестирование программы подтвердило, что программа правильно выполняет обработку данных и выдаёт верные результаты. Всё это свидетельствует о работоспособности программы и позволяет сделать вывод о пригодности программы к решению практических задач по обработке экономической информации. Библиографический список
1. Немнюгин С.А. –Turbo Pascal учебник.”Питер”,2001.-496л 2. Фараонов В.В Turbo Pascal 7.0.”Нолидж”2001. 3. Конспект по лекциям ОП и АЯ. Приложение
Листинг программы program Kursovik; Uses crt; type zap=record fio:string[15]; nomergrupp:string[4]; //шифр группы propusk:integer; //число пропусков opravdan:integer; // оправданных neopravdan:integer; //неоправданных summa: integer; //общая сумма неоправданных procent: real; //процент неоправданных end; ukaz=^querty;//создаём структуру querty=record inf:zap; nr,nl:ukaz; end; var sozdan: boolean; //проверяет есть ли файл fp,ft,ff:text; verh,newE,right,left,temp:ukaz; z:zap; c:char; x,kolvo,otpech,i,number:integer;//номер строки (для меню ),кол -во эл -тов procedure okno(t:integer);FORWARD;//печать меню procedure zapis_v_fail;FORWARD;//запись в файл {----------------- ORGANIZACIYA IZ FAILA------------------------------------} procedure org;//организация из файла двунаправленного списка по алфавиту var pop:ukaz; d,stroka,t1,t2,t3,t4:string; p3,p4:array[1..3]of char; schet,pole3,pole4,errcode:integer; begin kolvo:=0; gotoxy(25,25); textcolor(black); writeln('Input the name of file'); textcolor(white); gotoxy(27,27); readln(d); if d='' then begin clrscr; gotoxy(25,25); writeln('This file does not exists!!!!!!!'); gotoxy(25,26); writeln('Push the -enter- and input name of file again. '); readln; sozdan:=false; exit; end; assign(ft,d); {$I-} reset( ft); if IOResult <>0//проверка есть ли файл then begin clrscr; gotoxy(25,25); writeln('This file does not exists!!!!!!!');//сообщение , что файла нет gotoxy(25,26); writeln('Push the -enter- and input name of file again. ');//ещё раз надо ввести имя файла readln; sozdan:= false;//переменной создания файла присвоить ложь exit; end; sozdan:= true; //переменной создания файла присвоить правда schet:=0; while not EOF(ft) do//цикл пока не конец файла begin while schet<>4 do//пропуск 4 строк 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.
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (189)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |