База данных "Сотрудники"
Обновлено
В настоящее время появляется много новых маленьких и больших фирм и предприятий для регистрации и хранения данных о служащих фирмы или предприятия необходимо иметь специальную программу для того, чтобы упростить работу отдела кадров данного предприятия или фирмы.
Моя программа специально разработана для таких фирм и предприятий. Аналоговые программы стоят достаточно дорого. Моя же программа стоит намного дешевле и легко доступна для любого пользователя.
Моя программа хороша тем, что она легка в обращении небольших размеров и имеет все необходимое для регистрирования служащего. Этой программой может пользоваться даже человек, который не разу не седел за компьютером, достаточно только прочитать инструкцию(описание алгоритма задачи). Программист, который в дальнейшем будет обслуживать мою программу, для того чтобы разобраться в программе, нужно прочитать “описание алгоритма задачи”.
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');
end;
end;
end;
procedure punkt1; {Новый сотрудник}
var k,ch:char;
begin
clrscr;
gotoxy(12,wherey);writeln('*************************************');
gotoxy(12,wherey);writeln('Добавьте в базу информацию о новом сотруднике - "Enter"');
gotoxy(12,wherey);writeln('*************************************');
ch:=readkey;
if ch<>chr(27) then
begin
new(Cur);
writeln(' Введите информацию');
write('Регистрационный номер: ');
readln(Cur^.rnom);
write('Фамилия: ');
readln(Cur^.fam);
write('Имя: ');
readln(Cur^.name);
write('Отчество: ');
readln(Cur^.otch);
write('Год и Дата рождения: ');
readln(Cur^.date);
write('Пол: ');
readln(Cur^.pol);
write('Стаж работы: ');
readln(Cur^.stag);
write('Домашний адрес: ');
readln(Cur^.adress);
write('Телефон: ');
readln(Cur^.tel);
write('Должность: ');
readln(Cur^.dolg);
write('Оклад: ');
readln(Cur^.oklad);
Cur^.link:=Top;
Top:=Cur;
end;
end;
procedure Punkt2; {Уволить}
var
rnom1:integer;
fam1,name1, otch1:string[20];
pos,f:integer;
key:char;
begin
clrscr;
writeln(' *******************************************');
writeln(' Будите удалять сотрудика из базы - "Enter"');
writeln(' *******************************************');
ch:=readkey;
if ch=chr(13) then
begin
clrscr;
if top=nil then begin
writeln('База пуста');
readln;
end
else
BEGIN
writeln(' **********************');
writeln(' Увольнение сотрудника');
writeln(' **********************');
writeln('Пожалуйста введите');
Writeln('Регистрационный номер увольняемого ');readln(rnom1);
writeln('Фамилия увольняемого: ');readln(fam1);
writeln('Имя увольняемого: ');readln(name1);
writeln('Отчество увольняемого: ');readln(otch1);
Cur:=Top;
pos:=1;
repeat
f:=0;
If Cur^.rnom=rnom1 then
If Cur^.fam=fam1 then
If Cur^.Name=name1 then
if Cur^.otch=otch1 then
begin
writeln('Вы действительно хотите удалить данного сотрудника');
Writeln('Enter-ДА, Esc-НЕТ');
key:=readkey;
if key=chr(13) then
begin
if Cur^.link=nil then begin dispose(Cur); f:=1; end
else
If Cur=Top then begin
If Top^.link<>nil then
begin
Top:=Top^.link;
dispose(Cur);
f:=1;
end;
end
else
begin
Position(pos-1);
Prev:=Cur;
Cur:=Cur^.link;
Next:=Cur^.link;
Prev^.link:=Next;
Dispose(Cur);
f:=1;
end;
writeln('Сотрудник ' ,fam1,' ',name1,' ',otch1, ' уволен ');
readkey;
end;
end;
Cur:=Cur^.link;
pos:=pos+1;
if (cur=nil) and (f=0) then
begin
WriteLn('Искомый сотрудник не числется.');
writeln('Возможно имя или фамилия были введены с маленькой буквы');
Write('Для продолжения нажмите любую клавишу.');
readkey;
break;
end;
until f=1;
end;
END;
end;
procedure Punkt3; {Просмотр}
var ch:char;
begin
clrscr;
sortirovka;
writeln(' **********************');
writeln(' Список сотрудников');
writeln(' **********************');
Cur:=Top;
if top=nil then write('nichego netu')
else
Repeat
write('Регистрационный номер: ');writeln(Cur^.rnom);
write('Фамилия: ');write(Cur^.fam);
gotoxy(40,wherey); write('Год и Дата рождения: ');writeln(Cur^.date);
write('Имя: ');write(Cur^.name);
gotoxy(40,wherey);write('Домашний адрес: ');writeln(Cur^.adress);
write('Отчество: ');write(Cur^.otch);
gotoxy(40, wherey);write('Телефон: ');writeln(Cur^.tel);
write('Пол: ');write(Cur^.pol);
gotoxy(40,wherey);write('Должность: ');writeln(Cur^.dolg);
write('Стаж работы: ');write(Cur^.stag);
gotoxy(40,wherey);write('Оклад: ');writeln(Cur^.oklad);
writeLn('**********************************************');writeln;
Cur:=Cur^.link;
ch:=ReadKey;
if ch<>chr(13) then break;
if cur=nil then
begin
Write('список окончен');
readkey;
break;
end;
until (Cur=nil) or (ch<>chr(13));
end;
procedure Punkt4; {Упорядочить}
var ch:char;
begin
clrscr;
Uporyad;
writeln(' **********************');
writeln(' Список сотрудников');
writeln(' **********************');
Cur:=Top;
if top=nil then write('Файл пуст')
else
Repeat
write('Регистрационный номер: ');writeln(Cur^.rnom);
write('Фамилия: ');write(Cur^.fam);
gotoxy(40,wherey); write('Имя: ');writeln(Cur^.name);
write('Отчество: ');write(Cur^.otch);
gotoxy(40,wherey);write('Оклад: ');writeln(Cur^.oklad);
writeLn('**********************************************');writeln;
Cur:=Cur^.link;
ch:=ReadKey;
if ch<>chr(13) then break;
if cur=nil then
begin
Write('список окончен');
readkey;
break;
end;
until (Cur=nil) or (ch<>chr(13));
end;
Procedure Punkt5; {Поиск сотрудника}
var
dol:String[10];
sch,kol:integer;
search:boolean;
sotr:array[1..10] of base;
begin
clrscr;
gotoxy(33,wherey); writeln('****************');
gotoxy(33,wherey); writeln('Поиск сотрудника');
gotoxy(33,wherey); writeln('****************');
write('Введите должность сотрудника: ');readln(dol);
clrscr;
gotoxy(30,wherey); writeln('********************');
gotoxy(30,wherey); writeln('Найденные сотрудники');
gotoxy(30,wherey); writeln('********************');
Sch:=0;
I:=0;
Search:=false;
Cur:=Top;
While Cur<>nil do
begin
If Cur^.Dolg = dol then begin
i:=i+1;
sotr[i]:=Cur^;
Sch:=Sch+1;
search:=true;
end;
Cur:=Cur^.link;
if (search=false) and (Cur=nil) then
begin
Write('Искомых сотрудников нет в базе.');
writeln('Возможно должность введена с маленькой буквы');
end;
end;
If Search=true then
begin
WriteLn('Искомая должность: ',dol);
WriteLn('');
For i:=1 to Sch do
begin
write('Регистрационный номер: ');writeln(Sotr[i].rnom);
write('Фамилия: ');write(Sotr[i].fam);
gotoxy(40,wherey); write('Год и Дата рождения: ');writeln(Sotr[i].date);
write('Имя: ');write(Sotr[i].name);
gotoxy(40,wherey);write('Домашний адрес: ');writeln(Sotr[i].adress);
write('Отчество: ');write(Sotr[i].otch);
gotoxy(40, wherey);write('Телефон: ');writeln(Sotr[i].tel);
write('Пол: ');write(Sotr[i].pol);
gotoxy(40,wherey);write('Должность: ');writeln(Sotr[i].dolg);
write('Стаж работы: ');write(Sotr[i].stag);
gotoxy(40,wherey);write('Оклад: ');writeln(Sotr[i].oklad);
writeLn('***************************************************');
ch:=ReadKey;
if ch<>chr(13) then break;
end;
end;
readkey;
end;
Begin
clrscr;
gotoxy(28,wherey);writeln('**************************');
gotoxy(28,wherey);writeln('БАЗА ДАННЫХ ПО СОТРУДНИКАМ');
gotoxy(28,wherey);writeln('**************************');
Top:=nil;
menu[1]:='1. НОВЫЙ СОТРУДНИК';
menu[2]:='2. УВОЛИТЬ СОТРУДНИКА';
menu[3]:='3. ПРОСМОТРЕТЬ СПИСОК';
menu[4]:='4. УПОРЯДОЧИТЬ СПИСОК';
menu[5]:='5. НАЙТИ СОТРУДНИКА';
menu[6]:='6. ВЫХОД';
menu[8]:= '1. Очистить базу ';
menu[9]:= '2. Продолжить базу';
menu[10]:='3. ВЫХОД';
menu[11]:='';
punkt:=8; x:=30; y:=-2; textattr:=norm;
n:=10; p:=8;
Menus;
repeat
ch:=ReadKey;
if ch=chr(0) then
begin
ch:=ReadKey;
case ch of
chr(80) : { стрелка вниз }
if punkt<=n+1 then begin
if punkt=10 then begin
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
if punkt=10 then punkt:=7;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
punkt:=punkt+1;
textattr:=sel;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
chr(72) : { стрелка вверх }
if (punkt<=n) and not(punkt<p) then begin
if punkt=8 then begin
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
if punkt=8 then punkt:=11;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
punkt:=punkt-1;
textattr:=sel;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
end; {case : of }
end
else
if ch=chr(13) then {нажата клавиша <Enter>}
begin
case punkt of
8 : punkt0 ;
9 : ch:=chr(27) ;
10 : exit ; {выход}
end;
End;
until ch= chr(27) ; {27 - код <Esc>}
{clrscr;}
punkt:=1; x:=30; y:=5; textattr:=norm;
n:=6; p:=1;
Menus;
filetodin;
repeat
ch:=ReadKey;
if ch=chr(0) then
begin
ch:=ReadKey;
case ch of
chr(80) : { стрелка вниз }
if punkt<=n+1 then begin
if punkt=6 then begin
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
if punkt=6 then punkt:=0;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
punkt:=punkt+1;
textattr:=sel;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
chr(72) : { стрелка вверх }
if (punkt<=n) and not(punkt<1) then begin
if punkt=1 then begin
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
if punkt=1 then punkt:=7;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
punkt:=punkt-1;
textattr:=sel;
gotoxy(x,y+punkt-1);
write(menu[punkt]);
textattr:= norm;
end;
end; {case : of }
end
else
if ch=chr(13) then {нажата клавиша <Enter>}
begin
case punkt of
1 : punkt1 ;
2 : punkt2 ;
3 : punkt3 ;
4 : punkt4 ;
5 : punkt5 ;
6 : ch:=chr(27) ; {выход}
end;
Menus;
End;
until ch= chr(27) ; {27 - код <Esc>}
{clrscr;}
dintofile;
End.
Приложение 2
Распечатка структуры базы даны
**********************
Список сотрудников
**********************
Регистрационный номер: 2
Фамилия: Бояршина Год и Дата рождения: 2.06.85
Имя: Елена Домашний адрес: Гая
Отчество: Александровна Телефон: 28666
Пол: ж Должность: Уборщица
Стаж работы: 5 Оклад: 2000
*************************************************************
Регистрационный номер: 6
Фамилия: Герасимов Год и Дата рождения: 21.12.80
Имя: Евгений Домашний адрес: Ворошилова 34-34
Отчество: Алексеивич Телефон: -23077
Пол: м Должность: Секретарь
Стаж работы: 3 Оклад: 4000
*************************************************************
Регистрационный номер: 3
Фамилия: Григорьев Год и Дата рождения: 10.07.85
Имя: Александр Домашний адрес: Голосова 103-108
Отчество: Владимирович Телефон: 2632
Пол: м Должность: Директор
Стаж работы: 4 Оклад: 30000
*************************************************************
Регистрационный номер: 4
Фамилия: Матросов Год и Дата рождения: 16.07.85
Имя: Игорь Домашний адрес: Голосова 102-102
Отчество: Витальевич Телефон: 2027
Пол: м Должность: Бухгалтер
Стаж работы: 2 Оклад: 6000
*************************************************************
Регистрационный номер: 1
Фамилия: Прохоров Год и Дата рождения: 23.11.80
Имя: Виктор Домашний адрес: Баныкина
Отчество: Сергеевич Телефон: -856
Пол: м Должность: Охранник
Стаж работы: 3 Оклад: 5500
*************************************************************
Регистрационный номер: 5
Фамилия: Ромашенко Год и Дата рождения: 12.05.80
Имя: Владимир Домашний адрес: Баныкина
Отчество: Владимирович Телефон: -4124
Пол: м Должность: Мэнеджер
Стаж работы: 5 Оклад: 10000
*************************************************************
список окончен
Приложение 3
Распечатку результатов решения задачи по данным контрольного примера
Уволен служащий с ФИО - Матросов Игорь Витальевич
Принят на работу новый сотрудник с ФИО - Сурьянинова Алена
Структура база данных выглядит следующим образом:
**********************
Список сотрудников
**********************
Регистрационный номер: 2
Фамилия: Бояршина Год и Дата рождения: 2.06.85
Имя: Елена Домашний адрес: Гая
Отчество: Александровна Телефон: 28666
Пол: ж Должность: Уборщица
Стаж работы: 5 Оклад: 2000
*************************************************************
Регистрационный номер: 6
Фамилия: Герасимов Год и Дата рождения: 21.12.80
Имя: Евгений Домашний адрес: Ворошилова 34-34
Отчество: Алексеивич Телефон: -23077
Пол: м Должность: Секретарь
Стаж работы: 3 Оклад: 4000
*************************************************************
Регистрационный номер: 3
Фамилия: Григорьев Год и Дата рождения: 10.07.85
Имя: Александр Домашний адрес: Голосова 103-108
Отчество: Владимирович Телефон: 2632
Пол: м Должность: Директор
Стаж работы: 4 Оклад: 30000
*************************************************************
Регистрационный номер: 1
Фамилия: Прохоров Год и Дата рождения: 23.11.80
Имя: Виктор Домашний адрес: Баныкина
Отчество: Сергеевич Телефон: -856
Пол: м Должность: Охранник
Стаж работы: 3 Оклад: 5500
*************************************************************
Регистрационный номер: 5
Фамилия: Ромашенко Год и Дата рождения: 12.05.80
Имя: Владимир Домашний адрес: Баныкина
Отчество: Владимирович Телефон: -4124
Пол: м Должность: Мэнеджер
Стаж работы: 5 Оклад: 10000
*************************************************************
Регистрационный номер: 7
Фамилия: Сурьянинова Год и Дата рождения: 12.05.80
Имя: Алёна Домашний адрес: Революционная
Отчество: Александровна Телефон: 16676
Пол: ж Должность: Секретарь
Стаж работы: 10 Оклад: 5000
*************************************************************
список окончен
