Lab1_Отчет
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение
высшего профессионального образования
"Донской государственный технический университет"
ДГТУ
Кафедра "Программное обеспечение вычислительной техники и
автоматизированных систем"
Утверждаю
Зав. каф. «ПОВТ и АС»
Нейдорф Р. А.
«____»____________20 __ г.
Пояснительная записка
к работе по дисциплине
"Основы программирования"
Тема: «Обработка структурированных типов данных»
Автор работы Здоровцов Денис Владимирович
Направление 231000 "Программная инженерия"
Обозначение работы Группа ВПР 21
Руководитель работы Слоновский А. В. _
(подпись) (Ф.И.О.)
Работа защищена
(дата) (оценка)
Члены комиссии
(Подпись) (Ф.И.О.)
(Подпись) (Ф.И.О.)
Ростов–на–Дону
2012 г.
Содержание
Содержание 3
Условие задачи 3
Блок-схемы алгоритмов 4
Добавление элемента 4
Изменение элемента 4
Вывод элементов 6
Общая схема 7
Скриншоты 11
Условие задачи
Написать программу для учета спортсменов, занявших призовые места. В программе должны содержаться база фамилии, имена и призовые места. Должны быть следующие функции: добавление нового участника, удаление элемента, вывод, изменение.
Блок-схемы алгоритмов
В блок схемах не отмечена обработка исключений, реализованная конструкциями try .. except.
Добавление элемента
Пояснения:
В качестве входных данных процедура принимает запись, содержащую всю информацию об элементе.
Изменение элемента
Пояснения:
Данные о пользователе просто заменяются новыми.
Удаление элемента
Пояснения:
В качестве входных данных процедура принимает номер удаляемого элемента. Все элементы массива, следующие за удаляемым, сдвигаются на одну позицию назад, затирая удаляемый элемент. Преимущество этого алгоритма в сохранении порядка элементов.
Вывод элементов
Пояснения:
Элементы выводятся постранично (10 элементов на странице).
Общая схема
Пояснения:
Простое текстовое меню в форме диалога.
Код программы
program dataBase;
uses CRT;
type
TListItem = record
name: string[30];
age: integer;
team: integer;
end;
var
a: array of TListItem;
n: integer;
//Вывод сообщения об ошибке
procedure error(n: byte);
var str: string;
begin
if (n <> 0) then
begin
textColor(4);
write('Ошибка: ');
case (n) of
1: str:= 'Неверный ввод';
2: str:= 'Выход за границы списка';
3: str:= 'Ошибка при добавлении элемента';
4: str:= 'Ошибка при удалении элемента';
5: str:= 'Неизвестная ошибка';
end;
writeln(str);
writeln('Для продолжения нажмите Enter');
textColor(7);
readln();
end;
end;
//Редактировать элемент
procedure editItem(n: integer; listItem: TListItem);
begin
try
a[n] := listItem
except
error(2);
end;
end;
//Добавить элемент
procedure addItem(listItem: TListItem);
begin
try
setLength(a, length(a) + 1);
a[length(a) - 1] := listItem;
except
error(3);
end;
end;
//Удаление элемента
procedure deleteItem(n: integer);
var i:integer;
begin
if ((n > 0) and (n < length(a))) then
begin
for i := n to length(a) - 2 do
a[i] := a[i + 1];
setLength(a, length(a) - 1);
end
else
error(4);
end;
//Заполнение всех полей
function getFildsDialog(): TListItem;
var listItemTmp:TListItem;
begin
while true do
begin
try
write('Введите имя: ');
readln(listItemTmp.name);
write('Введите возраст: ');
readln(listItemTmp.age);
write('Введите команду: ');
readln(listItemTmp.team);
break;
except
error(1);
continue;
end;
end;
result := listItemTmp;
end;
//Диалог редактирования элемента
procedure editDialog;
var n:integer;
begin
try
write('Введите номер элемента в списке:');
readln(n);
if ((n <= length(a)) and (n > 0)) then
editItem(n - 1,getFildsDialog())
else
error(2);
except
error(1);
end;
end;
//Диалог добавления элемента
procedure addDialog();
begin
addItem(getFildsDialog());
end;
//Диалог удаления элемента
procedure deleteDialog();
var n:integer;
begin
write('Введите номер удаляемого элемента: ');
readln(n);
deleteItem(n);
end;
//Диалог просмотра списка элементов
procedure viewDialog();
var i:integer;
begin
writeln(' № |','Имя':15,'':15,'|','Возраст','|','Команда','|');
for i:= 0 to length(a) - 1 do
begin
writeln(i + 1:3,'|',a[i].name:30,'|',a[i].age:7,'|',a[i].team:7,'|');
if (((i + 1) mod 10) = 0) then
readln();
end;
readln();
end;
//Точка входа
begin
while (true) do
begin
clrscr;
writeln('Выберите действие:');
writeln('1: Добавить элемент');
writeln('2: Удалить элемент');
writeln('3: Редактировать элемени');
writeln('4: Просмотреть список');
writeln('0: Выход');
writeln();
write('Выберите пункт меню: ');
readln(n);
writeln();
case n of
0: break;
1: addDialog();
2: deleteDialog();
3: editDialog();
4: viewDialog();
else continue;
end;
end;
end.
Скриншоты
Рисунок 1 Главное меню
Рисунок 2 Добавление элемента
Рисунок 3 Просмотр списка