Программа
Program DataBase;
{ База данных сотрудников }
Uses Crt; { Подключение модуля Crt }
Type
EducateType=(IncompletMiddle,Middle,MiddleSpecial,
IncompletSuperior,Superior); { Тип - образование }
Collaborator=record { Тип - сотрудник }
FamilyName:string[20]; { Фамилия }
DataOfBorn:record { Дата рождения }
day:1..31;
month:1..12;
year:integer;
end;
Educate:EducateType; { Образование }
Post:word; { Должность }
Salary:word; { Оклад }
RecordOfService:byte; { Стаж }
Number:word { Номер }
end;
Var Exit:boolean; { Флаг выхода из программы }
Base:file of Collaborator; { Файловая переменная записей типа сотрудник }
Procedure OutMenu; { Процедура вывода меню }
Begin
ClrScr; { Очистка экрана }
WriteLn('[ 1 ] - Создание файла сотрудников ');
WriteLn('[ 2 ] - Вывод файла на экран ');
WriteLn('[ 3 ] - Вывод файла на печать ');
WriteLn('[ 4 ] - Получение числа сотрудников с высшим образованием ',
'и стажем >10 лет ');
WriteLn('[ 5 ] - Вывод фамилии и оклада руководителя сектора',
' с окладом >300 рублей ');
WriteLn('[Esc] - Выход ');
WriteLn;
WriteLn('Для выбора пункта меню нажмите клавишу ')
End;
Procedure OutBase(OutName:string); { Поцедура вывода файла }
Var Buf:Collaborator; { Буферная переменная для вывода записи }
Out:text; { Файловая переменная типа текст }
procedure WriteCollaborator(Buf:Collaborator);
{ Прцедура вывода записи типа сотрудник }
begin
with Buf do { Писоединение заголовка записи Buf }
begin
while Length(FamilyName)<20 do FamilyName:=FamilyName+' ';
{ Выравнивание длины строки фамилии до полного поля }
Write(Out,'│ ',FamilyName,' │ '); { Вывод фамилии }
with DataOfBorn do Write(Out,day:2,'.',month:2,'.',year:2,' │ ');
{ Присоединение подзаголовка записи и вывод даты рождения }
case Educate of { Вывод поля образования }
IncompletMiddle :Write(Out,'неполное среднее │ ');
Middle :Write(Out,'среднее │ ');
MiddleSpecial :Write(Out,'среднее специальное │ ');
IncompletSuperior:Write(Out,'неполное высшее │ ');
Superior :Write(Out,'высшее │ ')
end;
WriteLn(Out,Post:5,' │ ',Salary:4,' │ ',RecordOfService:4,' │');
{ Вывод полей: должность, оклад, стаж }
end
end;
Begin {OutBase}
Reset(Base); { Открытие входного файла }
Assign(Out,OutName); { Связывание выходного файла с файловой переменной }
Rewrite(Out); { Открытие выходного файла }
ClrScr; { Очистка монитора }
{ Вывод шапки таблицы: }
WriteLn(Out,'┌──────────────────────┬──────────┬───────────────────',
'──┬───────┬──────┬──────┐');
WriteLn(Out,'│ фамилия │дата рожд.│ образование ',
' │ дожн. │оклад │ стаж │');
WriteLn(Out,'├──────────────────────┼──────────┼───────────────────',
'──┼───────┼──────┼──────┤');
while not EOF(Base) do { Цикл просмотра файла }
begin
Read(Base,Buf); { Чтение очередной записи }
WriteCollaborator(Buf) { Вывод прочитанной записи }
end;
WriteLn(Out,'└──────────────────────┴──────────┴────────────────────',
'─┴───────┴──────┴──────┘'); { Вывод конца таблицы }
Close(Base); { Закрытие входного файла }
Close(Out); { Закрытие выходного файла }
if OutName='Con' then { Если вывод производился на консоль, то}
begin { вывод приглашения нажать клавишу и ожидание нажатия }
WriteLn;
WriteLn('Для выхода в меню нажмите [Enter] ');
ReadLn
end
End; {OutBase}
Procedure Make; { Поцедура создания файла }
Var Buf:Collaborator; { Буферная переменная для ввода записи }
function InputFlag:boolean;{ Функция определения флага ввода записей файла }
var Ch:char; { Переменная для ввода ответа }
begin
ClrScr; { Очистка монитора }
WriteLn('Окончить ввод ? [Y,N] ');
{ Выдача запроса на окончание ввода файла }
repeat { Цикл получения корректного ответа }
Ch:=ReadKey { Чтение клавиатуры }
until Ch in ['Y','y','N','n'];
{ Выход из цикла при получении корректного ответа }
InputFlag:=Ch in ['N','n'] { Определение ответа }
end;
function GetEducate:EducateType; { Функция ввода значения поля образования }
var Ch:char; { Переменная для ввода ответа }
i:byte; { Счетчик }
begin { Вывод подсказки }
WriteLn('Образование: [1] - неполное среднее ');
WriteLn(' [2] - среднее ');
WriteLn(' [3] - среднее специальное ');
WriteLn(' [4] - неполное высшее ');
WriteLn(' [5] - высшее ');
repeat { Цикл ввода корректного ответа на подсказку }
Ch:=ReadKey { Чтение клавиатуры }
until Ch in ['1'..'5'];
{ Выход из цикла при получении правильного ответа }
case Ch of { Определение поля образования по ответу с клавиатуры }
'1':GetEducate:=IncompletMiddle;
'2':GetEducate:=Middle;
'3':GetEducate:=MiddleSpecial;
'4':GetEducate:=IncompletSuperior;
'5':GetEducate:=Superior
end;
GoToXY(14,WhereY-5); { Перевод курсора на первый символ подсказки }
for i:=1 to 5 do begin { Очистка экрана в области подсказки }
ClrEol;
{ Очистка строки от позиции курсора до конца строки }
GoToXY(14,WhereY+1);
{ Перевод курсора на первый символ следующей строки подсказки }
end;
GoToXY(14,WhereY-5);
{ Возврат курсора на позицию вывода значения образования }
case Ch of { Эхо ввода образования }
'1':WriteLn(' неполное среднее ');
'2':WriteLn(' среднее ');
'3':WriteLn(' среднее специальное ');
'4':WriteLn(' неполное высшее ');
'5':WriteLn(' высшее ')
end
end;
Begin {Make}
Rewrite(Base); { Открытие файла базы для записи }
while InputFlag do { Цикл, пока поднят флаг ввода }
begin
with Buf do { Присоединение заголовка записи }
begin
ClrScr; { Очистка экрана }
Write('Фамилия ');
ReadLn(FamilyName); { Ввод фамилии }
with DataOfBorn do { Присоединение подзаголовка записи }
begin { Ввод даты рождения }
Write('Дата рождения - число ');
ReadLn(day);
Write(' - месяц ');
ReadLn(month);
Write(' - год ');
ReadLn(year);
end;
Educate:=GetEducate; { Ввод поля образования }
Write('Код должности ');
ReadLn(Post); { Ввод должности }
Write('Оклад ');
ReadLn(Salary); { Ввод оклада }
Write('Стаж ');
ReadLn(RecordOfService); { Ввод стажа }
Write('Номер ');
ReadLn(Number) { Ввод номера }
end;
Write(Base,Buf) { Запись в файл базы очередной записи }
end;
Close(Base) { Закрытие файла базы }
End; {Make}
Procedure GetCollaboratorQuantity; { Процедура получения и вывода количества
сотрудников с высшим образованием и стажем >10 лет }
var Quantity:word; { Переменная для подсчета сотрудников }
Buf:Collaborator; { Буферная переменная для чтения записи }
Begin
Quantity:=0; { Обнуление переменной перед подсчетом числа сотрудников }
Reset(Base); { Открытие файла базы для чтения }
while not EOF(Base) do { Просмотр файла }
begin
Read(Base,Buf); { Чтение очередной записи }
with Buf do { Присоединение заголовка записи }
if (Educate=Superior)and(RecordOfService>10)
{ Если данный сотрудник имеет высшее образование и стаж >10 лет ,}
then Quantity:=Quantity+1 { то увеличение числа сотрудников на 1 }
end;
Close(Base); { Закрытие файла базы }
ClrScr; { Очистка экрана }
WriteLn('Количество сотрудников с высшим образованием и стажем >10 лет ',
Quantity); { Вывод подсчитанного количества сотрудников }
WriteLn; { Вывод приглашения нажать ВВОД }
WriteLn('Для выхода в меню нажмите [Enter] ');
ReadLn { Остановка программы до нажатия клавиши ВВОД }
End;
Procedure OutFamilyName; { Процедура вывода фамилии и оклада руководителей
сектора с окладом >300 рублей }
var Buf:Collaborator; { Буферная переменная для чтения записи }
Begin
Reset(Base); { Открытие файла базы для чтения }
ClrScr; { Очистка экрана и вывод шапки таблицы }
WriteLn('┌──────────────────────┬──────┐');
WriteLn('│ фамилия │ оклад│');
WriteLn('├──────────────────────┼──────┤');
while not EOF(Base) do { Цикл просмотра файла }
begin
Read(Base,Buf); { Чтение очередной записи из файла }
with Buf do { Присоединение заголовка записи }
if (Post div 1000 =14)and(Salary>300) then
{ Если элемент файла относится к руководителю
сектора с окладом >300 рублей, то }
begin
while Length(FamilyName)<20 do FamilyName:=FamilyName+' ';
{ выравнивание длины фамилии до 20 символов }
WriteLn('│ ',FamilyName,' │ ',Salary:4,' │')
{ вывод в таблицу полей фамилия и оклад }
end
end;
WriteLn('└──────────────────────┴──────┘'); { Вывод нижней части таблицы }
Close(Base); { Закрытие файла базы }
WriteLn;
WriteLn('Для выхода в меню нажмите [Enter] '); { Приглашение нажать ВВОД }
ReadLn { Остановка программы до нажатия ВВОДа }
End;
BEGIN
Exit:=false; { Сброс флага выхода }
Assign(Base,'DataBase'); { Связывание файловой переменной с именем файла }
repeat
OutMenu; { Вывод меню }
case ReadKey of { Выбор действия по ответу на меню }
'1':Begin
Make; { Создание базы }
OutBase('Con') { Вывод базы на монитор }
End;
'2':OutBase('Con'); { Вывод базы на монитор }
'3':OutBase('Prn'); { Вывод базы на принтер }
'4':GetCollaboratorQuantity;
{ Подсчет числа сотрудников с высшим образованием и стажем >10 лет }
'5':OutFamilyName;
{ Вывод фамилий и окладов руководителей секторов с окладом >300 рублей }
#27:Exit:=true { Подъем флага выхода }
end
until Exit
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию