Реферат по предмету "Информатика, программирование"


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

Министерство образованияи науки Украины
Севастопольский государственный техническийуниверситет
КафедраИнформационных систем
/>/> 
Пояснительная записка
к курсовому проекту
Разработка программы обработки экономической информации
по курсу Основы программирования и алгоритмическиеязыки
Выполнил:
ст. гр. И-21д
Климашевский С.В.
Проверил:
Руководитель проекта
Крицкий А.В.
Севастополь
2003

/>/>Аннотация
В данном документеописывается программа, написанная в соответствии с постановкой задачи накурсовое проектирование по теме «Обработка экономической информации»по дисциплине «Основы программирования и алгоритмические языки».Данная программа предназначена для удобной обработки информации, содержащейсведения о студентах, код группы, фамилия студента, количество пропущенныхзанятий и число оправданных пропусков, составления и вывода на экран и(или) вфайл отчётных таблиц. Входными данными является таблица, записью которойявляются код группы, фамилия студента, количество пропущенных занятий,количество оправданных пропусков, количество не оправданных пропусков, сумма неоправданных пропусков и процентное соотношение пропусков. Для проверки работыпрограммы разработан тестовый пример. Результаты тестирования доказывают, чтопрограмма правильно выполняет все операции по обработке входных данных иформирования выходных данных.

Содержание
Введение
1. Назначение и область применения
2. Технические характеристики
2.1 Постановка задачи
2.2 Описание основных типов данных
2.3 Входные данные
2.4 Выходные данные
2.5 Внутреннее представление данных
2.6 Описание алгоритма программ
3. Технико-экономические показатели
4. Тестовый пример
Заключение
Библиографический список
Приложение

/>/>/>Введение
 
По окончанию курса “Основыпрограммирования и алгоритмические языки” стоит задача в закреплении навыковпрограммирования на ЭВМ. Она состоит в написании программы на языке высокогоуровня PASCAL или Си знакомстве с организацией и принципамидействия операционных систем, изучение правил оформление программнойдокументации.
В современном мире обработкиинформации очень удобно использование диалогового режима работы. Программа быларазработана в среде Turbo PASCAL 6.0 .

1. Назначениеи область применения
 
Данная программапредназначена для удобной обработки информации, содержащей сведения остудентах, код группы, фамилия студента, количество пропущенных занятий и числооправданных пропусков, составления и вывода на экран и в файл отчётных таблиц,задаваемый пользователем.
Область применения программы– различные учебные учреждения, где ведется учет пропусков занятий студентами.
Требованием к аппаратному ипрограммному обеспечению является наличие любого IBM-совместимогокомпьютера с наличием накопителя на гибких и (или) жестких магнитных дисках,видеоадаптера класса VGA иналичием достаточного количества оперативной памяти. На компьютере должна бытьустановлена операционная система MS-DOS v2.1(иливыше) или любая другая, совместимая с ней. Применяться может любымпользователем, который хочет проверитьпосещаемость для какой-либо группы лиц.

2. Техническиехарактеристики
 
2.1 Постановка задачи
Требуется написать программуобработки экономической информации, осуществляющую ввод исходной информации,обработку в соответствии с вариантом задания №8 методических указаний, а такжепечать содержимого исходных файлов и файлов расчетов. Выводимую информациюоформить в виде таблицы со всеми необходимыми полями записей и результатоврасчетов.
Даны сведения за месяц опропуске занятий студентами групп. Структура записи: шифр группы (6 символов),фамилия (15 символов), пропущено часов, оправдано часов. Подсчитать количествонеоправданных часов по каждому студенту, суммарные показатели по каждому виду,а также процент неоправданных пропусков в целом.
Работу программы организовать в форме меню:
1). Загрузка информации изисходного файла
2). Обработка данных таблицы
3). Удаление данных окаком-либо студенте.
4). Добавление данных окаком-либо новом студенте.
5). Поиск элемента в таблице
6). Просмотр данных
7). Запись данных в новыйфайл
8). Выход.
Программа реализована на языке программирования высокогоуровня Pascal. В основе программы лежит двунаправленныйсписок с пятью информационными полями.
Мною был выбран двунаправленный список, потому что он проств управлении, доступ к элементам списка осуществляется путем указания имениструктуры и соответствующего информационного поля, содержимую информацию, вдвунвправленном списке, можно вывести так, что после вывода будет осуществлятьпросмотр данных с использованием некоторы клавиш: -вверх- и -вниз-.Использование двунаправленных списков позволяет работать с динамическойпамятью, что позволяет экономнее использовать память и ресурсы компьютера. Программасохраняет выходные данные в файле на жестком диске.Выходнй файл имеет такойформат, который позволяет загружать (при новом запуске программы ) из него.
Просмотр осуществляется дважды: 1-ый раз – при загрузкеданных из исходного файла, 2-ой раз — при просмотре обработанных данных(именно они будут записаны в выходной файл).
2.2 Описание основных типов данных
Для внутреннего хранения входных данных о слогахиспользуется комбинированный тип данных:
type
zap=record
fio:string[15];
nomergrupp:string[4];
propusk:integer;
opravdan:integer;
neopravdan:integer;
summa:integer;
procent:real;
end;
Информация, содержащаяся в полях:
fio: массив для хранения фамилиистудента;
nomergrupp: шифр группы;
propusk: число пропусков занятийстудентом;
opravdan: число пропусков занатий поуважительной причине;
neopravdan: число пропусков занатийбез уважительной причины;
summa: общая сумма пропусков по всемстудентам;
procent: процент пропусков безуважительной причины;
Для того чтобы возможно былообрабатывать большое число записей из исходной ведомости, необходимоорганизовать их структуру данных. Для удобнойработы с записями в качестве структуры данных была выбрана линейная структура — двунаправленный список
. При использовании двунаправленного списка, возможноорганизовать просмотр записей всего списка: от начала в конец (прямоенаправление) и из конца в начало (обратное), что используется в процедуре просмотрапри перемещении от одной записи к другой.
/>/>/>2.3 Входные данные
Входные данные передаются впрограмму следующим способом:
Чтение входных данных изпредварительно подготовленного файла, определенного формата.
Предполагается, что входныеданные содержатся в текстовом файле правильного формата, имя которого dano.txt,а местонахождение — текущий каталог.
Пример входных данных текстовыйфайл приведен на рисунке 2.1

/>
Рисунок 2.3.1 – Пример файл входных данных
/>/>/> 
2.4 Выходные данные
В процессе ввода входныхданных из файла, формируется динамическая структура – двунаправленный список.Информационным полем элемента списка является запись таблицы входных данных.Для просмотра данных используются функции обхода двунаправленного списка.
В результате обработки данныхсоставляется ведомость, которая при выборе меню watch and write output file отображаетсяна экране и записывается в новый файл с выполненными по заданию расчетами ввиде таблицы:

/>
Рисунок 2.4.1 – Пример файла выходных данных
2.5 Внутреннеепредставление данных
Программа написана на языкевысокого уровня Turbo Pascal и скомпилированакомпилятором Borland Pascal 7.0.
Файл, может включать в себянеизвестное заранее количество строк, но должен иметь определённый формат, поэтомудля хранения входной информации статические переменные неприемлемы. Наиболееподходящим оказывается двунаправленный список, так как в нем возможны:перестановка порядка следования элементов без копирования самой структуры;поиск как в прямом, так и обратном направлении; удаление элементов наиболееоптимальным образом. В тоже время не требуется поддержка сложных структурданных и методов работы, как в деревьях.Но тем не менее скорость работы двунаправленногосписка ниже, чем у нелинейных структур, например, деревьев.
/>/>/> 
2.6 Описание алгоритма программ
Структура алгоритма задачи для процедуры org;- считывание из файла и создание двунаправленногосписка с упорядоченной структурой по полю fio (фамилиястудента) по алфавиту. (рис. 2.6.1.) .
Блок1-обнуляет число элементов.
Блок2-чтение имени файла.
Блок3-проверка введено ли имя.
Блок4-Вывод окна сообщений о том, что имя не введено.
Блок5- присвоение булевой переменной определяющей есть лиданный файл значения false.
Блок6-выход из процедуры.
Блок7-открытие файла.
Блок8-проверка на наличие файла.
Блок9-вывод на экран сообщения о том. что файла такого нет.
Блок10-булевой переменной определяющей есть ли данный файлзначения true.Обнуление числа строк
Блок11- присвоение булевой переменной определяющей есть лиданный файл значения false.
Блок12-цикл пока не конец файла
Блок13-цикл пока не почитал 4 строки
Блок15-подсчёт строк
Блок16-чтение строки
Блок17-считывание частей строк в промежуточные переменные.
Блок18-проверка двузначное ли число пропусков
Блок19-(да)копируем из строки 1 эл-т
Блок20-(нет)-2 эл-та
Блок21-перевод строки в целое число
Блок22-проверка двузначное ли число пргопусков по ув.причине
Блок23-(да)копируем из строки 1 эл-т
Блок24-(нет)-2 эл-та
Блок25-перевод строки в целое число
Блок26-выделние памяти и присвоение всех указателей дляпервого элемента.
Блок27-цикл пока не конец файла
Блок28-чтение строки
Блок29-считывание частей строк в промежуточные переменные.
Блок30-проверка двузначное ли число пропусков
Блок31-(да)копируем из строки 1 эл-т
Блок32-(нет)-2 эл-та
Блок33-перевод строки в целое число
Блок34-проверка двузначное ли число пргопусков по ув.причине
Блок35-(да)копируем из строки 1 эл-т
Блок36-(нет)-2 эл-та
Блок37-перевод строки в целое число
Блок38-присвоение указателю значение первого
Блок39-цикл пока не конец списка
Блок40-сравнение считанной переменной с фамилиями списка
Блок41-(больше)-перевод указателя на следующий эл-т
Блок42-выход из цикла
Блок43-выделение памяти новому эл-ту
Блок44-прверка, если указатель на последний эл-т
Блок45-(да)добавление эл-та в конец
Блок46-(нет)проверка указатель на первый или нет
Блок47-(да)добавление эл-та в начало
Блок48-добавление в любле другое место
Блок49-указателю конца приваем значение nil
Блок50-закрытие файла
Блок51-конец.
/>
Рисунок 2.6.1-процедурачтения информации из файла и организация списка.

/>
Рисунок 2.6.1 – продолжение

/>
Рисунок 2.6.1- продолжение

/>
Рисунок 2.6.1 –продолжение.

/>
Рисунок 2.6.1 – продолжение.
/>/>/> 
Структура алгоритма задачи для процедуры zapis_v_fail; — сохранение результата вфайл (рис. 2.6.2)
Блок1-чтение имени файла
Блок2-установка связи сфайлом
Блок3-открытие его в режимезаписи
Блок4-присвение первогозначения указателю
Блок5-запись шапки таблицы вфайл
Блок6-цикл пока не конецсписка —
Блок7-(конец) запись в файлнижней границы таблицы
Блок8-очистка экрана
Блок9-вывод на экранинформации о том, что файл был записан
Блок10-закрытие файла
Блок11-конец
Блок12запись данных в файл
Блок13-первод указателя наследующий элемент

/> 
Рисунок 2.6.2-процедуразаписи данных в файл.

/>
Рисунок 2.6.2-продолжение
Структура алгоритма задачи процедуры okno(t:integer).Печать меню и выделениестроки под номером t. (Рис.2.6.3);
Блок1-присваение значения номера строки переменной p
Блок2-печать верхней рамки меню
Блок3-проверка значения p=1
Блок4-(да)цвет фона строки изменяется на чёрный
Блок5-(нет)печать 1-ого пункта меню
Блок6-возврат к прежнему фону
Блок7-проверка значения p=2
Блок8-(да)цвет фона строки изменяется на чёрный
Блок9-(нет)печать 2-ого пункта меню
Блок10-возврат к прежнему фону
Блок11-проверка значения p=3
Блок12-(да)цвет фона строки изменяется на чёрный
Блок13-(нет)печать 3-ого пункта меню
Блок14-возврат к прежнему фону
Блок15-проверка значения p=4
Блок16-(да)цвет фона строки изменяется на чёрный
Блок17-(нет)печать 4-ого пункта меню
Блок18-возврат к прежнему фону
Блок19-проверка значения p=5
Блок20-(да)цвет фона строки изменяется на чёрный
Блок21-(нет)печать 5-ого пункта меню
Блок22-возврат к прежнему фону
Блок23-проверка значения p=6
Блок24-(да)цвет фона строки изменяется на чёрный
Блок25-(нет)печать 6-ого пункта меню
Блок26-возврат к прежнему фону
Блок27-проверка значения p=7
Блок28-(да)цвет фона строки изменяется на чёрный
Блок29-(нет)печать 7-ого пункта меню
Блок30-возврат к прежнему фону
Блок31-проверка значения p=8
Блок32-(да)цвет фона строки изменяется на чёрный
Блок33-(нет)печать 8-ого пункта меню
Блок34-возврат к прежнему фону
Блок35-печать нижней рамки меню
Блок36- возврат к прежнему фону
Блок37-конец.

/>
Рис 2.6.3.процедура okno-печатьменю.

/>
Рис 2.6.3.-продолжение

/>
Рисунок 2.6.3-продолжение
Структура алгоритма задачипроцедуры poisk(x:ukaz;imya:string) ищет необходимого студентав таблице.(Рис.2.6.4) .
Блок1-обнуление переменныхчисла выводимых на экран строк(n), числа элементов с требуемым именем(i) иррисвоение указателю значения первого.
Блок2-цикл пока не конецсписка
Блок3-подсчёт числа э-тов вспискес данным именем
Блок4-первод указателя наследующий эл-т
Блок5-проверка равно ли числостудентов с аким именм 0
Блок6-(да)вывод на экрансообщения о том, что такого э-та нет
Блок7-(нет)изменениеуказателя на переданный
Блок8-выход из процедуры
Блок9-печать шапки таблицы
Блок10-цикл пока число n0(число выводимых строк)
Блок11-подсчёт числа такихэл-тов
Блок12-проверка тот ли этоэл-т по фамилии
Блок13-(не тот)не выделять
Блок14-(тот)выделить
Блок15-печать эл-та
Блок16-возвращение к прежнемуцвету
Блок17изменение указателя наследующий
Блок18-печать нижней границытаблицы
Блок19-конец.

/>
Рис.2.6.4-процедура поиска нужного студента.

/>
Рис.2.6.4-продолжение.
Структура алгоритма задачидля структурных схем, выполненных на чертеже формата А1.
Для основной программы:
Блок1-присваивает значениюномера строки еденицу
Блок2-организовывает печатьменю с выделенной первой строкой
Блок3-организует бесконечныйцикл
Блок4-организует считываниеклавиш
Блок5-сравнивает код клавиш скодом enter
Блок6-сравнивает код клавишис 0
Блок7-роганизовывает вызовпроцедур по номеру строки
Блок8-чтение клавиши
Блок9-сравнивает код клавишис кодом стрелки вниз
Блок10-привыполнении условияв блоке 9 увеличивает номер текущей строки на 1
Блок11-сравнивает номерстроки с его максимальным значением
Блок12-сравнивает код клавишис кодом стрелки вверх
Блок13-при выполнении условияв блоке 12 уменьшает значение текущей строки на 1
Блок14- сравнивает номерстроки с его минимальным значением
Блок15-в случае выполненияусловия блока 14 присваивают номеру строки максимальное значение
Блоки16,17,18-организуютвызов процедуры печати меню
Блоки19-25- организуют вызовпроцедур, соответствующих номеру строки
Блок26-выход из программы.
Блок27- при выполненииусловия в блоке 11 присваивает значению номера текущей строки минимальное
Блок28-вызывает процедурупечати меню.
Для процедуры obrabotka:
Блок1-присвамивает указателюначальное значение и обнуляет промежуточную величину x.
Блок2-создает цикл обходасписка.
Блок3 –находит значения полянеоправданных пропусков для каждого эл-та.
Блок4-прверяет не равно личисло пропусков 0.Тогда:
Блок5-если не равен находитпроцент пропусков без уважительной причины.
Блок6- присваивает значение 0полю процента пропусков без уважительной причины.
Блок7-нахождениепромежуточной величины x для дальнейшего нахождения значения поля суммы общихпрогулов без уважительной причины.
Блок8-нахождение значениясуммы общих пропусков без уважительной причины. и перевод указателя наследующий эл-т.
Блок9-выводит на экранинформацию о том, что обработка данных завершилась.
Описание процедур.
procedure org;-организует ввод данных из файла, созданиедвунаправленного сриска упорядоченного по фамилиям студентов по алфавиту.
procedure okno(t:integer);-выводитна экран меню программы.
procedure dob;-добавляет нового студента в таблицу, не нарушаяупорядоченности.
procedure udal;-удаление элемента.
procedure poisk;-поиск студента по фамилии.
procedure obrabotka;-обработка данных по заданию.
procedure zapis_v_fail;-сохранениетекущей таблицы данных в файл, который укажет пользователь.
procedure klavishi(nom:integer);-считывает коды клавишь ипозволяет просматривать всю таблицу в процедурах поиска и просмотра.
procedure prosmotr_2(x:ukaz);-выводит на экран текущуютаблицу со всеми изменениями.
Выбор языка программирования.
Язык Turbo Pascal и компилятор выбраны из-за егогибкости, широкого распространения (субъективный фактор), малого объемаисполняемого файла и достаточно высокой скорости выполнения. Компилятор Borland Pascal 7.0. к тому же включает в себя опциональную возможностьоптимизации кода программы как по скорости, так и по размеру. Основным факторомвыбора языка Pascal была его более простая
работа со строками. А в данном курсовом пректе это оченьважно так как чтение исходных данных производится из текстового файла, данные вкотором хранятся в виде таблицы. Этот язык программирования относительно прост,он гибкий и развитый в отношнии типов языка.Язык Си более сложный принаписании, поэтому в данном проекте задача была реализована на я зыке Turbo Pascal, хотя не отрицается возможнсть успешной реализации задачи на языке Си.

3. Технико-экономические показатели
В результате компиляции программы компилятором Borland Pascal 7.0. был получен исполняемый файл формата DOS EXE размером 20 Кбайт, что являетсяприемлемым как для компьютеров десятилетней давности, так тем более,современных.
Для работы программа требует приблизительно 200 Кбайтоперативной памяти (зависит от размера входного файла). Данный объем позволяетпрограмме выполнятся на самом широком круге компьютеров, фактически всехподдерживающих операционную систему DOS.
Для выполнения требуется процессор класса 80x86, цветной монитор, поддерживающий текстовый режим 80х50.
Размер входного файла зависит от количества символов в нем идля 44 элементов (студентов) составляет 2Кбайта. Размер выходного файла зависитот преобразований.
В программе отсутствует ресурсоемкие процедуры, поэтомупроизводительность центрального процессора не критична.
Программа может работать под управлением операционнойсистемы класса DOS, при этои сохраняетработоспособность и в режиме эмуляции MS-DOS операционной системой Windows9X,Me и RedHat Linux. Работоспособность в режимеэмуляции под другими операционными системами не проверялось, хотя этавозможность не исключается.
Таким образом программа может выполняться практически налюбом доступном PC компьютере.

/>/>/>4. Тестовый пример
Проведем эксперимент, чтобыубедиться в работоспособности программы.
Возьмем исходную таблицу(рис.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 notexists!!!!!!!');
gotoxy(25,26);
writeln('Push the -enter- and input nameof 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 notexists!!!!!!!');//сообщение, чтофайланет
gotoxy(25,26);
writeln('Push the -enter- and input nameof file again. ');//ещё раз надо ввести имя файла
readln;
sozdan:=false;//переменнойсоздания файла присвоить ложь
exit;
end;
sozdan:=true;//переменной создания файла присвоить правда
schet:=0;
while not EOF(ft) do//циклпоканеконецфайла
begin
while schet4 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);
{-----sozdanieo4eredi-------------------------------------}
pop:=verh;// указатель на на чало
while popnil 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 (newEright^.nr) and (ndo//цикл пока не конец списка и число строк =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;
{------------------------------------------------------------------------------}
{---------------DOBAVLENIEELEMENTA--------------------------------------------}
{------------------------------------------------------------------------------}
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 newstudent'); //вводименистудента
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 validlyabsence');
gotoxy(25,34);
readln(p);
while p>z.propusk do//есличисло пропусков меньше числа пропусков по уваж причине
begin
textcolor(red);
writeln('Thi is impossible:');
textcolor(black);
writeln('The omount of validly absencemore then just omount of absence');
write('Push the -enter- and inputtheomount of validly absence again');
readln; textcolor(white);
gotoxy(25,33);
writeln('Input the omount of validlyabsence');
gotoxy(25,34); //очищениеэкрана
writeln(' ');
writeln(' ');
writeln(' ');
write(' ');
gotoxy(25,34);
readln(p);//по новой вводим и читаем
end;
z.opravdan:=p;
{-------------------dobavlenie-------------------------}
//происходит так же как при организации
pop:=verh;//указатель на начало
while popnil 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
{----------------vseredinu------------------------------}
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 studentwhich 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 newEright^.nr do//покане конец списка
begin
{------------------------Uslovie esliposledniy---------------------}
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-tudalyayut--------------}
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 ne1-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 beenfinded !!!'); //неудалили
gotoxy(15,27);
writeln('Input his name without mistakesagain'); //введитеимяснова
textcolor(white);
readln;
exit;
end;
{------------------------------------------------------------------------------}
{-------------------------------P O I SK --------------------------------}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
//смотретьprosmotr_2 –всёаналогично
procedure poisk(x:ukaz;imya:string);
var
n,i:integer;
c:char;
begin
clrscr;
n:=0;
i:=0;
newE:=verh;
while (newEright^.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 (newEright^.nr) and(n
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 popnil 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 pushthe -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 (newEright^.nr) and(n
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:beginclrscr;gotoxy(20,25);textcolor(white);Writeln('Input the name of a studentwhich cold been finded');
textcolor(white);gotoxy(25,27);readln(z.fio);fori:=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 VFAIL----------------------------------}
{--------------------------------------------------------------------------}
procedure zapis_v_fail;
var
t:text;
pop:ukaz;
d:string;
begin
gotoxy(25,25);
writeln('Input the name of outputfile'); //вводименифайла
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 (newEnil) 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-nomerstroki}
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 thenklavishi(1);end;
2:begin clrscr;obrabotka;end;
3:begin clrscr;udal;end;
4:begin clrscr;dob;end;
5:beginclrscr;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 xthen//меньше1
begin
x:=8; //присвоить значение 8
okno(x); //печатьменю
end
else
okno(x); //печатьменю
end
else
okno(x); //печатьменю
end
else
okno(x);//печать меню
end;
end.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Страхование в Украине 2
Реферат Особенности безработицы в современной России
Реферат Требования к воспроизведению текстовой информации на экране
Реферат Основы фотографии
Реферат Реинжиниринг бизнес-процессов в турфирме
Реферат ChaucerS Wife Of Bath Essay Research Paper
Реферат Проблемы самопознания и культурной идентичности в русской философии 30–40-х годов XIX века (Чаадаев и Гоголь)
Реферат Спортивная программа и организация базы данных
Реферат Аннотация к программе дисциплины Разнообразие растений и грибов
Реферат Классификация расходов и доходов бюджетов РФ
Реферат Быт чиновничества и разночинцев во второй половине XIX века и начала XX
Реферат Основные теории международной торговли 3
Реферат Pro Tips Of Hunting Essay Research Paper
Реферат Учет готовой и реализованной продукции, товаров, работ и услуг
Реферат Оптические характеристики материалов для изготовления оптических деталей