РАЗРАБОТКА ИНФОРМАЦИОННО-ПОИСКОВОЙ СИСТЕМЫ «РЕГИСТРАЦИЯ КОНТРОЛЬНЫХ РАБОТ ЗАКАЗЧИКОВ»

Курсовая работа по предмету «Программирование»
Информация о работе
  • Тема: РАЗРАБОТКА ИНФОРМАЦИОННО-ПОИСКОВОЙ СИСТЕМЫ «РЕГИСТРАЦИЯ КОНТРОЛЬНЫХ РАБОТ ЗАКАЗЧИКОВ»
  • Количество скачиваний: 15
  • Тип: Курсовая работа
  • Предмет: Программирование
  • Количество страниц: 27
  • Язык работы: Русский язык
  • Дата загрузки: 2014-05-02 02:16:42
  • Размер файла: 104.59 кб
Помогла работа? Поделись ссылкой
Информация о документе

Документ предоставляется как есть, мы не несем ответственности, за правильность представленной в нём информации. Используя информацию для подготовки своей работы необходимо помнить, что текст работы может быть устаревшим, работа может не пройти проверку на заимствования.

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

СОДЕРЖАНИЕ

1 ТИПИЗИРОВАННЫЕ КОНСТАНТЫ. КОНСТАНТЫ-МАССИВЫ, КОНСТАНТЫ-МНОЖЕСТВА…………………………………………………...5
1.1 Общие теоретические сведенья ……………………………………………5
1.1.1 Типизированные константы…………………………………..……...5
1.1.2 Константы-массивы и константы-множества……………………….5
1.2 Примеры с кодом…………………………………………………………....6
2 РАЗРАБОТКА ИНФОРМАЦИОННО-ПОИСКОВОЙ СИСТЕМЫ «РЕГИСТРАЦИЯ КОНТРОЛЬНЫХ РАБОТ ЗАКАЗЧИКОВ»………………..8
2.1 Постановка задачи………………………………………………………….8
2.2 Выбор инструментария…………………………………………………….8
2.3 Описание алгоритма задачи………………………………………………..8
2. 4 Описание исходных данных………………………………………………9
3 ПРАКТИЧЕСКАЯ ЧАСТЬ ВЫПОЛНЕНИЯ ЗАДАЧИ……………………..10
3.1 Описание интерфейса……………………………………………………...10
3.2 Описание каждого блока подпрограммы………………………………...10
ЗАКЛЮЧЕНИЕ………………………………………………………………….14
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ……………………………15
ПРИЛОЖЕНИЕ А……………………………………………………………….16
ПРИЛОЖЕНИЕ Б………………………………………………………………..27


























ВВЕДЕНИЕ

Язык программирования Паскаль был разработан швейцарским профессором Николаусом Виртом в 1973 году. Он обладает рядом несомненных достоинств. Паскаль прост - следовательно, ему легко обучаться, но при этом он содержит все типы данных и реализует все основные конструкции структурного и объектно-ориентированного программирования, присущие современным языкам высокого уровня. Строгий синтаксис обеспечивает хорошую диагностику ошибок, что очень важно для начинающих.
Информационно-поисковая система – это совокупность организационных, технических, программных и информационных средств, объединенных в единую систему с целью сбора, хранения, обработки и выдачи информации или говоря проще база данных.
В этой работе была поставлена цель разработки программы создания информационно-поисковой системы на языке программирования Паскаль, а именно разработка базы данных «Расписание пассажирских поездов». Результатом работы будет таблица, включающая в себя следующие поля: номер поезда, пункт назначения, время отправления, количество свободных мест в каждом поезде, наличие спальных вагонов. Будет возможно создавать новую базу данных и использовать готовую. Также изучить теоретическую часть задания на тему «Методы наследования и полиморфизма для объектных типов».
Закрепить знания, полученные при изучении дисциплины «Основы алгоритмизации и программирование».
























1 ТИПИЗИРОВАННЫЕ КОНСТАНТЫ. КОНСТАНТЫ-МАССИВЫ, КОНСТАНТЫ-МНОЖЕСТВА.

1.1. Общие теоретические сведенья

1.1.1. Типизированные константы

В Турбо Паскале допускается использование типизированных констант. Они задаются в разделе объявления констант следующим образом:
<идентификатор>: <тип> = <значение>
Здесь:
<идентификатор> – идентификатор константы;
<тип> – тип константы;
<значение> – значение константы. [1,с.23-24].
Типизированным константам можно присваивать другие значения в ходе выполнения программы, поэтому фактически они представляют собой переменные с начальными значениями. Типизированная константа приобретает указанное в ее объявлении значение, т.е. инициируется, лишь один раз: к моменту начала работы программы[2, с.34-35]. При повторном входе в блок (процедуру или функцию), в котором она объявлена, инициация типизированной константы не производится и она сохраняет то значение, которое имела к моменту выхода из блока [3, c. 10-12].
Типизированные константы могут быть любого типа, кроме файлов. Нельзя также объявить типизированную константу-запись, если хотя бы одно из ее полей является полем файлового типа [4, c. 67-68].
Поскольку типизированная константа фактически не отличается от переменной, ее нельзя использовать в качестве значения при объявлении других констант или границ типа-диапазона [5,c.12-14].

1.1.2. Константы-массивы и константы-множества

В качестве начального значения типизированной константы-массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки [6, c.23-24].
При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Турбо Паскале хранятся в упакованном формате, поэтому в качестве значения массива-константы типа CHAR допускается задание символьной строки соответствующей длины. [7, c. 56-57].
При объявлении многомерных констант-массивов множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми. В результате образуются вложенные структуры множеств, причем глубина вложения должна соответствовать количеству изменений (размерности) массива. Самые внутренние множества констант связываются с изменением самого правого индекса массива.
Количество переменных в списке констант должно строго соответствовать объявленной длине массива по каждому измерению.
Значение типизированной константы-множества задается в виде правильного конструктора множества [8,c.34-35].

1.2. Примеры с кодом

Примеры объявления констант-массивов:

type
colors = (white, red, black);
const

ColStr : array [colors] of String [5] =(white, red, blaсk);

vector : array [1..5] of Byte = (0,0,0,0,0);
igit : array [0..9] of Char = (0, ‘1,2,3,4,5,6, 7 , 8 , 9 ) ;

digchr: array [0..9] of Char =0123456789;

Следующая программа выведет на экран три строки с монотонно увеличивающимися целыми числами:

var
i, j, k, 1 : Byte;
const
matr : array [1..3, 1..5] of Byte = ((0, 1, 2, 3,4),
(5, 6, 7, 8, 2) , (10,11,12,13,14)) ;
cube : array [0..1, 0..1, 0..2] of Integer =
(((0 ,1 ,2 ), (3 ,4 ,5 )), ((6 ,7 ,8 ), (9 ,10,11))) ;
mas4 : array [0..1, 0..1, 0..1, 0..1] of Word = (
(((0 ,1 ), (2 ,3 )) ,((4 ,5 ), (6 ,7 ))), (((8 ,9 ), (10,11)), ((12,13), (14,15))));
begin
for i := 1 to 3 do
for j := 1 to 5 do Write (matr[i,j] :3) ;
writeln;
for i := 0 to 1 do
for j := 0 to 1 do
for k := 0 to 2 do Write (cube [i,j ,k] :3) ;
writeln;
for i := 0 to 1 do
for j := 0 to 1 do
for k := 0 to 1 do
for := 0 to 1 do Write (mas4 [i,j ,k,l] :3) ;
WriteLn
end.

Пример объявления констант-множеств:

type
days = set of 1. .31;
digc = set of 0 . . 9 ;

error = set of 1..24;
const
WorkDays : days = [1..5, 8.. 12, 15.. 19, 22.. 26, 29, 30];
EvenDigits: digc = [0, 2, 4, 6, 8];
ErrorFlag : error= [] ;









































2 РАЗРАБОТКА ИНФОРМАЦИОННО-ПОИСКОВОЙ СИСТЕМЫ «РЕГИСТРАЦИЯ КОНТРОЛЬНЫХ РАБОТ ЗАКАЗЧИКОВ»

2.1. Постановка задачи

Необходимо разработать информационно-поисковую систему «Регистрация контрольных работ заказчиков». Программа должна содержать в себе информацию о фамилии студента, номере его группы, названии предмета, дате поступления работы, фамилии преподавателя, проверяющего работу и отметке за нее. Все сведенья будут заноситься в базу данных, которая будет храниться в типизированных файлах.
Программа будет выполнять следующие функции: добавления записей в файл, вывод записей из файла на экран в виде таблицы, удаление записи по указанным атрибутам, сортировка записей, а так же дополнительные основные функции, согласно теме курсового проекта.

2.2. Выбор инструментария

Для реализации данного курсового проекта в качестве языка программирования был выбран Паскаль. Язык программирования Паскаль был разработан швейцарским профессором Николаусом Виртом в 1973 году. Он обладает рядом несомненных достоинств. Паскаль прост - следовательно, ему легко обучаться, но при этом он содержит все типы данных и реализует все основные конструкции структурного и объектно-ориентированного программирования, присущие современным языкам высокого уровня. Строгий синтаксис обеспечивает хорошую диагностику ошибок, что очень важно для начинающих.
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Вирта, язык должен способствовать дисциплинированному программированию, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.

2.3. Описание алгоритма задачи

Вызов процедур осуществляется с помощью меню основной программы, выбирая соответствующие пункты. Выбор действия над файлом в меню осуществляется выбором определенного пункта с помощью клавиатуры. Для запуска программы необходимо запустить файл «kursovaua_rabota.exe», либо открыть файл «kursovaua_rabota.pas» в среде программирования «Turbo Pascal» и нажать сочетание клавиш «Ctrl+F9».
Для создания нового файла необходимо выбрать пункт «Ввод записей», в нем необходимо ввести количество записей в таблице, и заполнить запрашиваемую информацию. После окончания ввода данных процедура переходит в главное меню.
Для вывода созданной таблицы необходимо выбрать пункт меню «Вывод записей», на экран выводится информация в виде таблицы.
Для сортировки базы необходимо выбрать пункт меню «Сортировка». По завершению процесса сортировки таблицы на экран автоматически выведется готовая база в виде таблицы.
При выборе пункта «Поиск» программа переходит в меню, где необходимо указать критерий поиска. По окончании процедура выведет на экран записи в виде таблицы, удовлетворяющие ранее указанному критерию.
Для добавления информации в существующую таблицу необходимо выбрать пункт «Добавление записей» в нём необходимо указать количество добавляемых записей, а затем ввести добавляемую информацию. Добавление происходит в конец файла. После окончания ввода данных процедура выходит в главное меню.
Для удаления необходимой записи из таблицы необходимо выбрать пункт меню «Удаление записей по номеру». В нём необходимо ввести номер удаляемой строки.
Для удаления всех записей из таблицы по конкретной группе необходимо выбрать пункт меню «Удаление записей по группе». Далее необходимо указать номер удаляемой группы.
Для замены фамилии студента с заданной на заданную необходимо выбрать пункт меню «Замена фамилии». После выбора пункта меню необходимо ввести исходную фамилию и фамилию, на которую необходимо заменить исходную. В случае, если в таблице нет ни одной записи, соответствующей исходной фамилии, то на экраны будет выведено соответствующее сообщение.
Для вывода все данных о зачетах конкретного лица необходимо выбрать пункт меню «Вывод сведений о зачетах», после чего будет необходимо ввести ФИО студента, информацию о котором необходимо поучить.
Каждая из процедур, после своего выполнения автоматически возвращается в главное меню.

2.4. Описание исходных данных

Для оперирования данными в программе был создан новый тип данных «Kontrol». Данный тип состоит из следующих полей:
Fio – поле типа «string», которое будет хранить в себе информацию о фамилии имени и отчестве студента.
Group - – поле типа «string», которое будет хранить в себе информацию о группе студента.
Predmet – поле типа «string», которое будет хранить в себе информацию о предмете, по которому сдается работа.
Data – поле типа «string», которое будет хранить в себе информацию о дате сдачи работы.
Fioprep – поле типа «string», которое будет хранить в себе информацию о фамилии имени отчестве преподавателя, проверяющего сдаваемую работу.
Zach – поле типа «string», которое будет хранить в себе информацию об отметке за сданную работу.




3 ПРАКТИЧЕСКАЯ ЧАСТЬ ВЫПОЛНЕНИЯ ЗАДАЧИ

3.1. Описание интерфейса

Окно интерфейса программы служит для выбора пользователем необходимых действий. При запуске программа отображается в окне Turbo Pascal, в нем находится меню, состоящее из 9 пунктов:
1) Ввод записей;
2) Вывод записей;
3) Сортировка;
4) Поиск;
5) Добавление записей;
6) Удаление записей по номеру;
7) Удаление записей по группе
8) Замена фамилии
9) Вывод сведений о зачетах

3.2. Описание каждого блока подпрограммы

Процедуры вызываются через меню основной программы, выбирая соответствующие пункты.
Программа содержит процедуры.
1) Menu – процедура для отображения главного меню. Результатом работы является вывод на экран «Главного меню», в котором можно выбирать нужные процедуры. Работа процедуры показана на рисунке 1.



Рисунок 1 – Меню программы

2) Vvod - процедура создания таблицы. В ходе выполнения процедуры указывается количество записываемых полей, а затем заполняем их соответствующей информацией. Работа процедуры показана на рисунках 2 и 3.



Рисунок 2 – Ввод числа записей


Рисунок 3 – Заполнение записей

3) Vivod – процедура просмотра базы данных. Все данные, хранящиеся в файле, отображаются на экране в виде таблицы. Для перехода обратно в меню необходимо нажать на любую клавишу. Результат работы процедуры показан на рисунке 4.


Рисунок 4 – Вывод данных на экран

4) Sorti – процедура сортировки записей. Данная процедура осуществляет сортировку все записей, хранящихся в файле по возрастанию по указанному атрибуту. После завершения сортировки записей процедура вызывает процедуру Vivod. Работа процедуры сортировки показана на рисунке 5.



Рисунок 5 – Вывод отсортированной таблицы на экран

5) Poisk – процедура поиска данных. Процедура выполняет поиск записей в файле базы данных по определенному атрибуту. Записи, отобранные в результате поиска, выводятся на экран в виде таблицы. Для перехода в меню необходимо нажать любую клавишу. Результат работы процедуры поиска показан на рисунках 6 и 7.



Рисунок 6 – Ввод критерия поиска



Рисунок 7 – Вывод результатов поиска на экран

6) Dobav – процедура добавления записей в таблицу. При выполнении процедуры необходимо указать количество добавляемых записей в базу и, соответственно, заполнить определенное количество записей необходимой информацией. Процесс работы процедуры добавления данных показан на рисунках 8 и 9.



Рисунок 8 – Ввод количества добавляемых полей в таблицу



Рисунок 9 – Заполнение записей данными

7) Udal – процедура удаления записей. Процедура осуществляет удаление записи из таблицы по указанному номеру строки. Процесс работы процедуры удаления записей по номеру показан на рисунке 10.



Рисунок 10 – Удаление записи из таблицы по номеру

8) Udal_gr – процедура удаления всех записей по конкретной группе. В ходе работы процедура удаляет все записи из таблицы, которые соответствуют указанной группе. Процесс работы процедуры показан на рисунке 11.



Рисунок 11 – Удаление всех записей из таблицы по конкретной группе

9) Zamena – процедура замены фамилии студента с указанной на указанную. Процедура осуществляет замену фамилии исходную студента на указанную пользователем. В случае, если в базе не будет найдено ни одной записи по студенту с исходной фамилией, то на экран будет выведено соответствующее сообщение. Для перехода в меню программы необходимо нажать на любую клавишу. Результат выполнения процедуры показан на рисунке 12.



Рисунок 12 – Замена фамилии студента с заданной на заданную

10) Zachet – процедура вывода всех сведений о зачтенных работах конкретного лица. Процедура осуществляет поиску по всей базе записей с соответствующими критериями. Процесс работы процедуры показан на рисунках 13 и 14.



Рисунок 13 – Ввод фамилии студента



Рисунок 14 – Вывод данных о зачтенных работах указанного студента

Примечание: каждое поле требует, чтобы в него была введена информация в нужном формате.
























ЗАКЛЮЧЕНИЕ

Результатом моей курсовой работы является информационно-справочная система «Регистрация контрольных работ заказчиков» на языке программирования Паскаль, которая состоит из 10 процедур: Vvod, Vivod, Poisk, Sori, Dobav, Udal, Udal_gr, Zamena, Zachet, Menu. Введенные данные будут формироваться в виде таблицы со следующими полями: ФИО, Группа, Предмет, Дата, ФИО првер., Зач/Не зач. Также есть возможность работы с готовыми базами денных, которые хранятся в файлах с расширением «.dat».
Была изучена теоретическая часть задания на тему «Типизированные константы. Константы-массивы, константы-множества».
Были закреплены знания, полученные при изучении дисциплины «Основы алгоритмизации и программирование».
Данная информационно-справочная система может широко использоваться. Простота и практичность этой базы данных обеспечит легкое и доступное получение нужной информации.































СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Буч, Г.И. Объектно-ориентированный анализ и проектирование с примерами приложений: Бином/ Г.И. Буч - СПб.- Невский диалект: 1999.- 125 с.
2. Фаронов, В.Г. Паскаль/ В.Г. Фаронов - СПб.-Питер: 2002. – 65 с.
3. Ишкова ,Э.К. Паскаль. Начало программирования / Э.К. Ишкова - СПб.-М-Бином: 2001.- 34 с.
4. Немнюгин, С.Г. Изучаем Turbo Pascal/ С.Г. Немнюгин – СПб.- Питер:2002.-89 с.
5. Гайсарян, С.С. Объектно-ориентированное программирование/ С.С. Гайсарян – СПб. – Питер: 2007. – 317 с.
6. Объектно-ориентированная методология программирования [Электронный ресурс].- Электронные данные.- Режим доступа: http://www.math.rsu.ru/smalltalk/sml-a.ru.html. Дата доступа 20.05.2010
7. Принципы объектно-ориентированного программирования [Электронный ресурс].- Электронные данные.- Режим доступа: http://blackman.wp-club.net/lection/object.php. Дата доступа 20.05.2010
8. Стили программирования [Электронный ресурс].- Электронные данные.- Режим доступа: http://media.karelia.ru/~ftt/IVK/new2/Inflect/T_1_16.htm. Дата доступа 20.05.2010




























ПРИЛОЖЕНИЕ А

Разработка информационно-поисковой системы «Регистрация контрольных работ заказчиков»

program kurs;
Uses crt;

{Описываем тип для хранения записей}
type kontrol=record
fio:string[20];
group:string[20];
predmet:string[20];
data:string[20];
fioprep:string[20];
zach:string[20];
end;

var
m:array[1..30] of kontrol;
put: string;
p,b,v:char;
f:file of kontrol;
x,i,j,k,s,a,c,d,n:integer;

{========================================================================}

{Процедура ввода данных}
procedure vvod;
var v:char;
begin
clrscr;

{Подключаем файл, в который будем хранить наши данные и
открываем его для записи}
assign(f,put);
rewrite(f);

{Указываем сколько записей мы будем заполнять}
write(Укажите количество записей-> );
readln(n);

{Заполняем таблицу записями}
for i:=1 to n do begin
clrscr;
writeln;
writeln(Заполнено , i-1, записей из ,n);
writeln(________________________________________________________________);
writeln;
write(ФИО: ); readln(m[i].fio);
write(Группa: ); readln(m[i].group);
write(Предмет: ); readln(m[i].predmet);
write(Дата сдачи работы: ); readln(m[i].data);
write(ФИО проверяющего: ); readln(m[i].fioprep);

writeln(1-Зачет: ); writeln(2-Незачет);
v:= readkey;
if v=1 then m[i].zach:=Зачтено
else if v=2 then m[i].zach:=Не зачтено
else m[i].zach:=Не указанно;

clrscr;

{Записываем введенную строчку в файл}
write(f,m[i]);
end;

{После того, как все данные введены, закрываем файл}
close(f);

end;

{======================================================================}

{Процедура вывода данных из файла}
procedure vivod;
begin

i:=1;

{Подключаем файл и открываем его для чтения из него данных}
assign(f,put);
reset(f);

{Выводим шапку таблицы}
writeln( ФИО Группа Предмет Дата ФИО провер. Зач/Не зач);
writeln(________________________________________________________________________________);

{Выводим все данные из файла (строчки)}
while not eof(f) do
begin
read(f,m[i]);
writeln( m[i].fio:15, | ,m[i].group:7, | ,m[i].predmet:8, | ,m[i].data:10, | ,m[i].fioprep:12, | ,m[i].zach:6 );
inc(i);
end;

{Закрываем таблицу}
writeln(________________________________________________________________________________);

{Закрываем файл}
close(f);

readkey;
clrscr;
end;

{=======================================================================}


{Процедура поиска записей в базе. Поиск осуществляется по полю фамилия}
procedure Poisk;
var e:string;
s,p:integer;
begin

i:=1;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);

{Считываем из файла все данные и записываем их в массив}
while not eof(f) do begin
read(f,m[i]);
inc(i);
end;
n:=i-1;

{Указываем критерий поиска}
write(Укажите фамилию: );
readln(e);

clrscr;

{Выводим шапку}
writeln;
writeln( ФИО Группа Предмет Дата ФИО провер. Зач/Не зач);

writeln(________________________________________________________________________________);

{Выводим только те записи, которые подходят нам по условию}
for i:=1 to n do
if pos(e,m[i].fio) <> 0 then begin
j:=1;
writeln( m[i].fio:15, | ,m[i].group:7, | ,m[i].predmet:8, | ,m[i].data:10, | ,m[i].fioprep:12, | ,m[i].zach:6 );
end;

{Закрываем таблицу}
writeln(________________________________________________________________________________);

{Если небыло найдено ни одной записи, то выводим сообщение}
if j=0 then
begin
clrscr;
writeln;
writeln( По данному запросу ничего не найдено );
end;

readkey;
clrscr;
end;


{==============================================================}

{Процедура сортировки}
procedure Sorti;
var i,j,g: integer;
e:kontrol;

begin
clrscr;
i:=1; n:=0; g:=1;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);

{Считываем из файла все данные и записываем их в массив}
while not eof(f) do
begin
read(f,m[i]);
inc(i);
inc(n);
end;

{Начало сортировки}
for i := 1 to n do
if m[i-1].data>m[i].data then

begin
e.fio := m[i].fio;
e.group := m[i].group;
e.predmet := m[i].predmet;
e.data := m[i].data;
e.fioprep := m[i].fioprep;
e.zach := m[i].zach;

g:=i-1;
while (g>0) and (e.data < m[g].data) do
begin
m[g+1].data := m[g].data;
m[g+1].fio := m[g].fio;
m[g+1].group := m[g].group;
m[g+1].predmet := m[g].predmet;
m[g+1].fioprep := m[g].fioprep;
m[g+1].zach := m[g].zach;
g:=g-1;
end;

m[g+1].fio := e.fio;
m[g+1].group := e.group;
m[g+1].predmet := e.predmet;
m[g+1].data := e.data;
m[g+1].fioprep := e.fioprep;
m[g+1].zach := e.zach;
end;
{Конец сортировки}

{Закрываем файл}
close(f);

{Переоткрываем файл, но теперь уже для записи в него данных}
rewrite(f);

{Записываем отсортированную таблицу в файл}
for i:=1 to n do
write(f,m[i]);

{Закрываем файл}
close(f);

clrscr;

{Выводим сообщение об успешном выполнении сортировки}
writeln;
writeln( База успешно отсортирована );
writeln;

{Выводим таблицу с данными с помощь описанной выше процедуры вывода}
vivod;

end;


{=========================================================================}

{Процедура добавления данных в уже созданную таблицу}
procedure dobav;
var k,r: integer;
begin

clrscr;
i:=1;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);

{Cчитываем из файла данные и записываем их в массив}
while not eof(f) do
begin
read(f,m[i]);
inc(i);
end;

{Закрываем файл}
close(f);
n:=i;

{Указываем сколько будем добавлять записей в таблицу}
write(Укажите число добавляемых записей-> );
readln(a);
r:=n;
k:=a;
a:=a+n-1;

{Вводим данные}
for i:= n to a do begin
clrscr;
writeln;
writeln(Заполнено ,-(r-i), записей из , k);
writeln(________________________________________________________________);
writeln;
write(ФИО: ); readln(m[i].fio);
write(Группa: ); readln(m[i].group);
write(Предмет: ); readln(m[i].predmet);
write(Дата сдачи работы: ); readln(m[i].data);
write(ФИО проверяющего: ); readln(m[i].fioprep);

writeln(1-Зачет: ); writeln(2-Незачет);
v:= readkey;
if v=1 then m[i].zach:=Зачтено
else if v=2 then m[i].zach:=Не зачтено
else m[i].zach:=Не указанно;

end;
n:=i;


clrscr;

{Открываем файл для записи в него новых данных}
reset(f);
rewrite(f);

{Записываем дополненную базу в файл}
for i:=1 to n do
write(f,m[i]);

{Закрываем файл}
close(f);
clrscr;
end;

{=======================================================================}


{Процедура удаления записей из базы}
procedure udal;
begin

clrscr;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);
i:=1;
c:=0;

{Считываем все данный из файла и записываем их в массив}
while not eof(f) do
begin
read(f,m[i]);
inc(i);
inc(c);
end;

{Закрываем файл}
close(f);
writeln;

{Указываем номер удаляемой записи (номер строчки)}
Write(Укажите номер удаляемой записи: );
readln(n);

{Удаляем нужную строчку из массива}
for i:=n to c do
begin
m[i].fio :=m[i+1].fio;
m[i].group :=m[i+1].group;
m[i].predmet:=m[i+1].predmet;
m[i].data:=m[i+1].data;
m[i].fioprep:=m[i+1].fioprep;
m[i].zach:=m[i+1].zach;
end;
dec(c);

{Открываем файл для записи в него новых данных}
rewrite(f);

{Записываем базу в файл}
for i:=1 to c do
write(f,m[i]);

{Закрываем файл}
close(f);
clrscr;
end;



{========================================================================}


{Процедура удаления записей по группе из базы}
procedure udal_gr;
var
mg: array [1..20] of kontrol;
j: integer;
group: string;
begin

clrscr;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);
i:=1;
c:=0;

{Считываем все данный из файла и записываем их в массив}
while not eof(f) do
begin
read(f,m[i]);
inc(i);
inc(c);
end;

{Закрываем файл}
close(f);
writeln;

{Указываем название группы удаляемой записи (стрчки)}
Write(Укажите группу: );
readln(group);


{Удаляем нужную строчку из массива}
j:=1;
for i:=1 to c do
begin
if m[i].group<>group then
begin

mg[j].fio :=m[i].fio;
mg[j].group :=m[i].group;
mg[j].predmet:=m[i].predmet;
mg[j].data:=m[i].data;
mg[j].fioprep:=m[i].fioprep;
mg[j].zach:=m[i].zach;
inc(j);
end;
end;

dec(j);
{Открываем файл для записи в него новых данных}
rewrite(f);

{Записываем базу в файл}
for i:=1 to j do
write(f,mg[i]);

{Закрываем файл}
close(f);
clrscr;
end;

{=======================================================================}


{Процедура замены фамилии}
procedure zamena;
var fam1, fam2: string;
a: integer;
begin

clrscr;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);
i:=1;
c:=0;

{Считываем все данный из файла и записываем их в массив}
while not eof(f) do
begin
read(f,m[i]);
inc(i);
inc(c);
end;

{Закрываем файл}
close(f);
writeln;

write(Укажите фамилию студента, которую нужно заменить );
readln(fam1);

write(Укажите фамилию студента, на которую нужно заменить );
readln(fam2);
a:=0;


{Ищем в массиве строчки с подходящими фамилиями, если находи, то заменяем их}
for i:=1 to c do
begin
if m[i].fio=fam1 then
begin
m[i].fio:=fam2;
a:=1;
end;
end;

if a=0 then
begin
writeln;
writeln( Студентов с фамилией ,fam1, не найдено );
readkey;
end;
{Открываем файл для записи в него новых данных}
rewrite(f);

{Записываем базу в файл}
for i:=1 to c do
write(f,m[i]);

{Закрываем файл}
close(f);
clrscr;
end;

{===========================================================================}


procedure zachet;
var e:string;
s,p:integer;
begin

i:=1;

{Подключаем файл и открываем его для чтения}
assign(f,put);
reset(f);

{Считываем из файла все данные и записываем их в массив}
while not eof(f) do begin
read(f,m[i]);
inc(i);
end;
n:=i-1;

{Указываем критерий поиска}
write(Укажите фамилию: );
readln(e);

clrscr;

{Выводим шапку}
writeln;
writeln( ФИО Группа Предмет Дата ФИО провер. Зач/Не зач);

writeln(________________________________________________________________________________);

{Выводим только те записи, которые подходят нам по условию}
for i:=1 to n do
if (pos(e,m[i].fio) <> 0) and (m[i].zach=Зачтено) then begin
j:=1;
writeln( m[i].fio:15, | ,m[i].group:7, | ,m[i].predmet:8, | ,m[i].data:10, | ,m[i].fioprep:12, | ,m[i].zach:6 );
end;

{Закрываем таблицу}
writeln(________________________________________________________________________________);

{Если не было найдено ни одной записи, то выводим сообщение}
if j=0 then
begin
clrscr;
writeln;
writeln( По данному запросу ничего не найдено );
end;

readkey;
clrscr;
end;

{========================================================================}

procedure menu;
var b:char;
begin

writeln;
writeln( Меню );
writeln( );
writeln( 1-Ввод записей );
writeln( 2-Вывод записей );
writeln( 3-Сортировка );
writeln( 4-Поиск );
writeln( 5-Добавление записей );
writeln( 6-Удаление записей по номеру );
writeln( 7-Удаление записей по группе );
writeln( 8-Замена фамилии );
writeln( 9-Вывод сведений о зачетах );
writeln;
writeln( 0-Выход );
writeln;

b:=readkey;
CASE b OF
1: begin clrscr; vvod; menu; end;
2: begin clrscr; vivod; menu; end;
3: begin clrscr; sorti; menu; end;
4: begin clrscr; poisk; menu; end;
5: begin clrscr; dobav; menu; end;
6: begin clrscr; udal; menu; end;
7: begin clrscr; udal_gr; menu; end;
8: begin clrscr; zamena; menu; end;
9: begin clrscr; zachet; menu; end;
0: exit;
else begin clrscr; menu; end;
end;
end;


begin
textbackground(7);
textcolor(16);
clrscr;
put:=c:/database.dat;
assign(f,put);
menu;
end.

ПРИЛОЖЕНИЕ Б
Процедура создания файла


Процедура создания файла

Процесс работы программы