по дисциплине : “Алгоритмизация и языки программирования”
Тема: База данных “Сотрудники”
Выполнил: студент гр. ИС-104
Григорьев А. В.
Преподаватель: Матвеева Н.В.
Оглавление
1. Задание, на основе которого выполняется курсовая работа
2. Описание предметной области
3. Описание алгоритма задачи
Приложение 1 (листинг программы)
Приложение 2 (распечатка структуры базы данных)
Приложение 3 (распечатка результатов решения задачи по данным контрольного примера.)
1. Задание, на основе которого выполняется курсовая работа
Сотрудники
ОПИСАНИЕ
Программа должна использовать массив данных о сотрудниках небольшой фирмы (до 10 сотрудников). По каждому сотруднику вводится следующая информация:
¨ Фамилия, имя, отчество;
¨ Год и дата рождения;
¨ Пол;
¨ Стаж работы по специальности;
¨ Домашний адрес;
¨ Телефон;
¨ Должность;
¨ Оклад.
Информация о сотрудниках фирмы хранится в файле workers.dat.
Программа содержит следующие процедуры и функции:
• Новый сотрудник (предназначена для ввода данных о новом сотруднике и сохранении её в файле workers.dat);
• Уволить (удаляет информацию об уволенном сотруднике из массива данных);
• Просмотреть (позволяет просмотреть информацию о сотрудниках в алфавитном порядке);
• Упорядочить (упорядочивает список сотрудников в порядке убывания величины оклада);
• Найти (выводит на экран список сотрудников, работающих в указанной должности, например инженером).
В программе разрешается использовать дополнительные файлы, облегчающие просмотр и поиск требуемой информации о сотруднике.
Имя вызываемой процедуры должно вызываться из списка пунктов меню по номеру пункта.
Информация о новом сотруднике вводится в диалоге типа "Введите фамилию сотрудника:" и т.д.
Процедура Уволить запрашивает ввод фамилии И.О. увольняемого сотрудника.
Процедура Просмотреть должна ожидать нажатия "горячей" клавиши перехода к информации об очередном сотруднике в списке.
Процедура Найти запрашивает ввод должности по выбору пользователя.
Процедура Просмотреть по каждому нажатию "горячей" клавиши выводит полную информацию об очередном сотруднике из алфавитного списка.
Процедура Упорядочить выводит на экран список из фамилии И.О. и окладов сотрудников в порядке убывания величины оклада.
Процедура Найти выводит на экран список сотрудников, работающих в указанной должности.
Ошибочный ввод информации, правильность которой компьютер в состоянии проверить, должен приводить к отказу от неправильного ввода с выходом на повторный ввод этой же информации.
2. Описание предметной области
В настоящее время появляется много новых маленьких и больших фирм и предприятий для регистрации и хранения данных о служащих фирмы или предприятия необходимо иметь специальную программу для того, чтобы упростить работу отдела кадров данного предприятия или фирмы.
Моя программа специально разработана для таких фирм и предприятий. Аналоговые программы стоят достаточно дорого. Моя же программа стоит намного дешевле и легко доступна для любого пользователя.
Моя программа хороша тем, что она легка в обращении небольших размеров и имеет все необходимое для регистрирования служащего. Этой программой может пользоваться даже человек, который не разу не седел за компьютером, достаточно только прочитать инструкцию(описание алгоритма задачи). Программист, который в дальнейшем будет обслуживать мою программу, для того чтобы разобраться в программе, нужно прочитать “описание алгоритма задачи”.
3. Описание алгоритма задачи
Для пользователя данной программы:
Чтобы запустить программу, нужно войти в файл 1-kyrs.exe, либо войти в файл 1-kyrs.pasи нажать в ней клавиши “Ctrl+F9”.
Программа выглядит как меню, состоящее из множества пунктов. По меню можно передвигаться с помощью клавиш “стрелка вниз” и “стрелка вверх”, выйти из меню можно с помощью нажатия клавиши “Esc” либо нажать пункт меню “Выход”. Вход в пункты меню происходит при нажатии клавиши “Enter”. При входе в какой либо пункт меню, по программе вызывается соответствующая процедура.
При входе в программу данные, хранящиеся в файле, автоматически открываются. Для того, чтобы уволить какого ни будь служащего, необходимо войти в пункт меню «Уволить сотрудника». При выходе из программы, данные автоматически сохраняются.
Для того чтобы ввести информацию о новом служащем необходимо войти в пункт меню “Новый сотрудник” и ввести информацию о новом сотруднике.
ФИО – может состоять не более чем из 60 символов.
Дата рождения – не более 15 символов.
Пол – пол писать полностью
Стаж работы – в годах.
Адрес – 30 символов.
Телефон – писать без тире.
Должность – 20 символов.
Размер оклада – неограниченное число.
В случае если что-либо было введено неправильно произойдёт выход из программы, с потерей всех несохранённых данных.
“Просмотреть список” – выводит список всех сотрудников в алфавитном порядке, после вывода каждого сотрудника нужно нажать клавишу “Enter”.
“Найти сотрудника” – Ищет служащего по введенной должности
“Уволить сотрудника” – стирает служащего по введенному регистрационному номеру и Ф.И.О.
“Очистить базу”- удаляет всех сотрудников
Примечание:
В программе имеются подсказки с правой стороны экрана.
Для программиста:
Программа состоит из множества процедур, которые вызываются из пунктов меню.
Пользовательские типы:
worker – тип динамической памяти типа base;
base – тип – запись(информация о сотрудниках);
sotrud – для работы с файлами типа base.
Используемые процедуры:
Punct1 – по этой процедуре осуществляется занесение служащего в файл.
Punkt3 - вывод списка в алфавитном порядке. Сортировка происходит по полю “fam”;
Punkt4 – по этой процедуре производится сортировка списка по величине оклада.
Punkt5 – выводит служащего с указанной должностью . Вводится нужная должность и при обходе списка происходит сравнение по полю “dolg” и вывод этой записи;
Punkt2 - удаление записи из списка (удаление происходит по введённому пользователем регистрационному номеру и Ф.И.О.);
Punkt0 - в этой процедуре происходит перезапись файла и обнуление односвязного списка.
Приложение 1
Листинг программы
program kursovaia;
uses crt;
const norm=$74; {цветневыделенногопункта}
norm1=$8;
sel=$31; {цвет выделенного пункта}
sel1=$15;
type
{-------------------описаниезаписи----------------}
Worker = ^base;
base=record
rnom:integer; {РЕГИСТРАЦИОННЫЙНОМЕР}
fam:string[20]; {ФАМИЛИЯ}
name:string[20]; {ИМЯ}
otch:string[20]; {ОТЧЕСТВО}
date:string[20]; {ДАТАРОЖДЕНИЯ}
pol:string[20]; {ПОЛ}
stag:integer; {СТАЖРАБОТЫ}
adress:string[30]; {ДОМАШНИЙАДРЕС}
tel:integer; {ТЕЛЕФОН}
dolg:string[20]; {ДОЛЖНОСТЬ}
oklad:integer; {ОКЛАД}
link:worker;
{--------------------------------------------------}
end;
var
Top,Cur,Next,Prev:Worker;
menu:array[1 .. 11] of string[50]; {Меню}
punkt:integer; {}
ch,cc:char; {Введенныйсимвол}
sotrud:file of base;
buf,buf1:base; {Двабуферобмена}
k,m:char;
p,n,x,y,i:integer; {}
Procedure FileToDin; {Изфайлавдинам. память}
begin
top:=nil;
Assign(sotrud,'sotrudn.dat');
{$I-}
Reset(sotrud);
If IOResult<>0 then
begin
rewrite(sotrud);
end
{$I+}
else
if filesize(sotrud)<>0 then
repeat
New(Cur);
Read(sotrud,Cur^);
Cur^.link:=Top;
Top:=Cur;
until eof(sotrud);
close(sotrud);
end;
Procedure DinToFile; {Издин. памятивфайл}
begin
If Top<>nil then
begin
Assign(sotrud,'sotrudn.dat');
Rewrite(sotrud);
Cur:=Top;
repeat
Write(sotrud,Cur^);
Cur:=Cur^.link;
until Cur=nil;
close(sotrud);
end;
end;
Procedure Menus; {выводменюнаэкран}
var
i:integer;
begin
clrscr;
gotoxy(28,wherey); writeln('**************************');
gotoxy(28,wherey); writeln('БАЗА ДАННЫХ ПО СОТРУДНИКАМ');
gotoxy(28,wherey); writeln('**************************');
for i:=p to n do begin
gotoxy(x,y+i-1);
write ( menu[i] );
end;
{textattr - предопределенная переменная, отвечающая за цвет фона и символов}
textattr:=sel;
gotoxy(x,y+punkt-1);
write( menu[punkt] ); {выделимстрокуменю}
textattr:=norm;
end;
procedure forsort; {указменяютсяместами}
var
rnom1:integer;
fam1:string[20];
name1:string[20];
otch1:string[20];
date1:string[20];
pol1:string[20];
stag1:integer;
adress1:string[30];
tel1:integer;
dolg1:string[20];
oklad1:integer;
begin
With Next^ do begin
rnom1:=rnom;
fam1:=fam;
name1:=name;
otch1:=otch;
pol1:=pol;
stag1:=stag;
adress1:=Adress;
tel1:=tel;
dolg1:=dolg;
oklad1:=oklad;
end;
With Next^ do begin
rnom:=Cur^.rnom;
fam:=Cur^.fam;
name:=Cur^.name;
otch:=Cur^.otch;
pol:=Cur^.pol;
stag:=Cur^.stag;
adress:=Cur^.Adress;
tel:=Cur^.tel;
dolg:=Cur^.dolg;
oklad:=Cur^.oklad;
end;
With Cur^ do begin
rnom:=rnom1;
fam:=fam1;
name:=name1;
otch:=otch1;
pol:=pol1;
stag:=stag1;
adress:=Adress1;
tel:=tel1;
dolg:=dolg1;
oklad:=oklad1;
end;
end;
procedure Sortirovka; {Сортировкапоалфавиту}
begin
Cur:=Top;
While Cur<>nil do
begin
Next:=Cur^.link;
while next<>nil do
begin
if ord(Next^.fam[1]) < ord(Cur^.fam[1]) then
ForSort;
Next:=Next^.link;
end;
cur:=cur^.link;
end;
end;
procedure Uporyad; {Сортровка по окладу}
begin
Cur:=Top;
While Cur<>nil do
begin
Next:=Cur^.link;
while next<>nil do
begin
if ord(Next^.Oklad) > ord(Cur^.Oklad) then
ForSort;
Next:=Next^.link;
end;
cur:=cur^.link;
end;
end;
procedure Position(pos:integer);
var i:integer;
begin
Cur:=Top;
For i:=1 to pos do
if i<>pos then Cur:=Cur^.link;
end;
procedure punkt0; {Очисткабазы}
var cc,k,ch:char; i:integer;
key:char;
begin
assign(sotrud,'sotrudn.dat');
cc:=chr(13);
{cc:=readkey;}
if cc=chr(13) then
begin
gotoxy(25,10);
writeln('Вы уверены,что хотите удалить базу????');
gotoxy(25,11);
Writeln('Enter-ДА, Esc-НЕТ');
key:=readkey;
if key=chr(13) then
begin
gotoxy(11,4);
write('0%');
gotoxy(63,4);
write('100%');
gotoxy(13,4);
for i:=1 to 20 do
begin
write('=');
delay(500);
end;
for i:=21 to 34 do
begin
write('=');
delay(1300);
end;
for i:=35 to 50 do
begin
write('=');
delay(200);
end;
rewrite(sotrud);
gotoxy(32,18);
write('Базаочищена');
gotoxy(32,19);
write('Нажмитеклавишу Esc');