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