Пояснительная записка по курсовой работе по дисциплине «Программирование»
Работа допущена Работу выполнил студент
к защите учебной группы 15 -ЗИЭ
____________________ ____________А.А. Алексеев
(подпись и Ф.И.О.
руководителя работы)
____________ 2016 г.
Калининград, 2016
Аннотация
В настоящей пояснительной записке приведены результаты разработки программы решения задачи Сведения о сотрудниках отдела, выполненной в соответствии с заданием по курсовой работе по дисциплине «Программирование» – постановка указанной задачи, проектные решения и программа (на языке Турбо – Паскаль), результаты испытания (тестирования) программы.
СОДЕРЖАНИЕ (страницы указаны в пределах курсовой работы)
Стр.
1. Описание постановки задачи | |
1.1. Характеристика задачи | |
1.2. Исходные данные | |
1.3. Результаты решения | |
2. Описание проектных решений | |
2.1. Функциональная структура задачи, программы | |
2.2. Описание алгоритма задачи | |
3. Описание программы | |
3.1. Структура программы | |
3.2. Текст программы | |
3.3. Исполнение программы | |
4. Описание результатов испытаний программы | |
Приложение 1. Исходный текст программы | |
Приложение 2. Текст тестового файла | |
Приложение 3. Тексты программ создания и печати тестового файла | |
Приложение 4. Контрольные примеры исполнения программы |
1. Описание постановки задачи
1.1. Характеристика задачи
Задача Сведения о сотрудниках отдела решается с целью получения сведений о сотрудниках определенного возраста и определения самого молодого сотрудника. Исходными для решения задачи данными является набор данных (файл) на магнитном диске, содержащий информацию о сотрудниках. В начале решения задачи вводится с клавиатуры запрос, представляющий собой год рождения, определяющий список сотрудников, родившихся до указанного года
1.2. Исходные данные
Исходная для решения задачи Сведения о сотрудниках отдела информация содержится в одном дисковом файле и в указываемом (вводимом с клавиатуры) в начале решения задачи запросе пользователя.
Структура элемента файла sved (дисковое имя – ‘sved.dat ’):
Фамилия (строка),
Название отдела (строка),
Год рождения (целое число),
Оклад (вещественное число)
Запрос пользователя представляет собой:
Год рождения (строка)
1.3. Результаты решения
Результатом решения задачи на ПК является таблица "Список сотрудниках отдела" (рис. 1.1), которая содержит:
Порядковый номер (целое число),
Фамилия (строка),
Название отдела (строка),
Оклад (вещественное число)
Данные в таблице располагаются в алфавитной порядке.
Список сотрудников отдела
№ | Фамилия | Название отдела | Оклад |
Иванов | 9800.00 | ||
… | … | … |
Самый молодой сотрудник: …………
2. Описание проектных решений
2.1. Функциональная структура задачи, программы
На рис. 2.1 представлена схема иерархии процедур задачи Сведения о сотрудниках отдела, полученная в результате её декомпозиции.
Рис. 2.1 Схема иерархии процедур задачи
На рис. 2.2 представлена функциональная структура программы решения задачи, полученная на основе схемы иерархии ее процедур.
Рис. 2.2 Функциональная структура программы
Помимо основной программы с именем K_RABOTA, программа содержит следующие подпрограммы:
подпрограмму-процедуру zapros (VAR god: integer; VAR f: Boolean), которая обеспечивает ввод запроса – года рождения;
подпрограмму-процедуру proverka (god_zap: string; VAR f: Boolean), которая обеспечивает проверку запроса;
подпрограмму-процедуру obrab (god: integer; VAR rez: mas; VAR n: integer), которая обеспечивает обработку файла sved с целью получения массива фамилий, названий отделов и окладов сотрудников по запросу;
подпрограмму-процедуру sort (VAR rez: mas; n: integer), которая обеспечивает сортировку данных в алфавитном порядке по фамилиям;
подпрограмму-функцию molod (rez: mas; n: integer), которая определяет самого молодого сотрудника;
подпрограмму-процедуру vuvod (rez: mas; n: integer; fammol: string), которая обеспечивает вывод результатов на экран монитора.
2.2. Описание алгоритма задачи
На рис. 2.3. – 2.7 представлены схемы обобщенного алгоритма задачи Сведения о сотрудниках отдела и алгоритмов отдельных её процедур. Смысл используемых в них условных обозначений (имен, идентификаторов) приведен в табл. 2.1. Обобщенный алгоритм описывается в основной программе. Алгоритмы отдельных процедур – в соответствующих подпрограммах (см. 2.1.).
Таблица 2.1.
Идентификатор | Формат | Смысл |
sved | файл записей | исходные данные |
n, к, i | целые числа | счетчики |
fам-rez | массив записей | результат |
god_z | целое число | год запроса |
… | … | … |
3. Описание программы
3.1. Структура программы
При написании программы решения задачи Сведения о сотрудниках отдела использовалась система (язык) программирования Турбо-Паскаль (версия 7.0.)
Функциональная структура программы (состав и взаимосвязь программных единиц исходного текста её – основной программы и подпрограмм) определена в 2.1.
Программа является описанием алгоритма задачи, приведенного в 2.2.
3.2. Текст программы
Исходный текст программы решения задачи Сведения о сотрудниках отдела (на языке Турбо-Паскаль, версия 7.0) приведен в приложении 1.
Рис. 2.3 Схема обобщенного алгоритма задачи Сведения о сотрудниках отдела
Рис. 2.4 Схема алгоритма выбора данных
Рис. 2.5 Схема алгоритма сортировки
…………………………………..
Рис. 2.6 Схема алгоритма запроса
……………………………………
Рис. 2.7 Схема алгоритма проверки запроса
3.3. Исполнение программы
Для исполнения программы решения задачи Сведения о сотрудниках отдела необходим ПК типа PC с клавиатурой и монитором. Программа предварительно откомпилирована, вызывается для исполнения стандартными средствами.
До начала исполнения программы на магнитном диске должен быть сформирован файл с исходными данными, структура, содержание и имя которого описаны в 1.2. В начале исполнения программы необходимо ввести с клавиатуры запрос, конкретизирующий условия решения задачи (см. 1.2).
4. Описание результатов испытаний программы
В ходе испытаний (тестирования и контрольных примеров исполнения) программы решения задачи Сведения о сотрудниках отдела использовался тестовый файл, текст которого приведен в приложении 2 (программы создания и печати тестового файла приведен в приложении 3), а также запросы для разных вариантов решения задачи:
4) 1975
5) 2005
6) 1990
7) Авсд
8) …….
После устранения ошибок в программе для указанных исходных данных (контрольных примеров) получены правильные результаты решения задачи (приложение 4), что свидетельствует о правильности разработанной программы.
Приложение 1
Исходный текст программы решения задачи Сведения о сотрудниках отдела
PROGRAM K_RABOTA;
{Курсовая работа по Программированию
студента 15-ЗИЭ Алексеева А.А. Вариант 40}
TYPE zap=record
fam: string[20];
otdel: string[30];
god: integer;
oklad: real;
end;
mas = array [1..20] of zap;
VAR
sved: file of zap;
X: zap;
god_z, kol: integer;
fam_rez: mas;
fam_mol: string [20];
f_z: boolean;
PROCEDURE proverka
(VAR g: integer; god_zap: string; VAR f: Boolean);
{Подпрограмма проверки запроса}
Var code: integer;
BEGIN
f:=false;
Val (god_zap, g, Code);
if Code=0 then
if ((g>=1940) and (g<=2000)) then f:=true;
end;
PROCEDURE zapros
(VAR god: integer; VAR f: Boolean);
{Подпрограмма ввода запроса}
VAR god_zap: string;
BEGIN
writeln('Введите год рождения');
readln (god_zap);
proverka (god, god_zap, f);
end;
PROCEDURE obrab
(god: integer; VAR rez: mas; VAR n: integer);
{Подпрограмма выбора данных}
BEGIN
Assign(sved,'sved.dat');
reset (sved);
n:=0;
while not EOF (sved) do
begin
read(sved,x);
if (god<=x.god) then begin
n:=n+1;
rez[n]:=x;
end;
end;
close(sved);
END;
PROCEDURE SORT (VAR rez: mas; n: integer);
{Подпрограмма сортировки}
VAR
i,k:integer;
c:zap;
BEGIN
for i:=1 to n-1 do
for k:=i+1 to n do
if rez[i].fam<rez[k].fam then begin
c:=rez[i];
rez[i]:= rez[k];
rez[k]:=c;
end;
END;
FUNCTION MOLOD (rez: mas; n: integer): string;
{Подпрограмма определения фамилии самого молодого сотрудника}
Var maxgod: integer;
k,i: integer;
BEGIN
maxgod:=rez[1].god;
k:=1;
for i:=2 to n do
if rez[i].god>= maxgod then begin
maxgod:=rez[i].god;
k:=i;
end;
molod:=rez[k].fam;
END;
PROCEDURE VUVOD (rez: mas; n: integer; fammol: string);
{Подпрограмма вывода результата}
VAR
i: integer;
BEGIN
writeln;
writeln('Список сотрудников ');
writeln;
writeln('------------------------------------');
writeln('!N!Фамилия!Наимен-ние отдела!Оклад!');
writeln('------------------------------------');
for i:=1 to n do
writeln('!',i:2,'!',rez[i].fam:20,'!',
rez[i].otdel:30,'!', rez[i].oklad:10:2,'!');
writeln('------------------------------------');
writeln;
writeln ('Самый молодой сотрудник:', fammol:20);
END;
{ОСНОВНАЯ ПРОГРАММА}
BEGIN
zapros (god_z, f_z);
{Вызов процедуры ввода и проверки запроса}
if f_z=false then
writeln ('Вы ввели год меньше 1940,
или больше 2000, или текст')
Else
BEGIN
obrab (god_z,fam_rez, kol);
{Вызов процедуры выбора данных}
if kol=0 then writeln
(' Нет данных по введенному запросу')
Else
Begin
if kol>1 then SORT (fam_rez, kol);
{Вызов процедуры сортировки}
fam_mol:=molod (fam_rez, kol);
{Вызов функции определения фамилии}
{самого молодого сотрудника}
VUVOD(fam_rez, kol,fam_mol);
{Вызов процедуры вывода результатов}
end;
ЕND;
END.
Приложение 2
Текст тестового файла на магнитном диске
Алексеев | отдел кадров | ||
Иванов | технический | ||
Петрова | бухгалтерия | ||
Николаев | технический | ||
Смирнов | технический | ||
Сидоров | технический | ||
Кузнецов | технический | ||
Ильина | отдел кадров | ||
Сергеева | бухгалтерия | ||
… | … | … | … |
Приложение 3
Текст программ создания и печати тестового файла
program file_newtype;
USES CRT;
zap=record
fam: string[20];
otdel: string[30];
god: integer;
oklad: real;
end;
var
sved:file of zap;
X:zap;
k:integer;
begin
Assign(sved,'sved.dat');
rewrite (sved);
k:=0;
WRITELN ('Для ввода данных нажмите Enter');
WRITELN ('Для окончания работы нажмите *');
WHILE NOT (READKEY='*') DO
begin
writeln('Введите фамилию сотрудника');
readln(x.fam);
writeln('Введите название отдела');
readln(x.otdel);
writeln('Введите год рождения');
readln(x.god);
writeln('Введите оклад');
readln(x.oklad);
K:=k+1;
write(sved,x);
WRITELN ('Для ввода данных нажмите Enter');
WRITELN ('Для окончания работы нажмите *');
end;
writeln('Число записей в файле:',K:2); writeln;
reset(sved);
writeln('Данные файла'); writeln;
while not EOF (sved) do begin
read(sved,x);
writeln(x.fam:22,x.otdel:32,x.god:5,x.oklad:10:2);
end;
close(sved); end.
Приложение 4
Контрольные примеры исполнения программы
Пример 1. Запрос: 1975
Результат:
Список сотрудников
№ | Фамилия | Наименование отдела | Оклад |
Алексеев | отдел кадров | 19900.00 | |
Иванов | технический | 20000.00 | |
Ильина | отдел кадров | 14500.00 | |
Николаев | технический | 18000.00 |