База данных "Сотрудники"

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?отреть список” выводит список всех сотрудников в алфавитном порядке, после вывода каждого сотрудника нужно нажать клавишу “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(Стаж работы: );