Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2K_programuvanna / m1267.doc
Скачиваний:
28
Добавлен:
19.04.2015
Размер:
166.91 Кб
Скачать

3 Приклад програми

Створити файл, що містить довідки про місячну заробітну плату робітників заводу. Кожен запис містить поля - прізвище робітника, назва цеху, розмір заробітної плати за місяць. Кількість записів довільна.

Обчислити загальну суму виплат за місяць по цеху X, а також середньомісячний заробіток робітника цього цеху. Надрукувати для бухгалтерії відомість для нарахування заробітної плати робітникам цього цеху.

Основна програма

program kursova;

Uses winCRT, mod_my; {підключення стандартного модуля winCRT та модуля користувача mod_my}

var c2:word; {опис змінної с2, яка відповідає за вибір пункту меню}

begin {початок виконуваної частини основної програми}

repeat {починається цикл}

menu; {виклик процедури menu, яка видає на екран можливі пункти меню}

readln(c2); {зчитування змінної с2 з клавіатури, номер обраного пункту меню}

case c2 of {обираємо дію}

1:Spisok_sotr;

2:zapis(C);

3:obrabotka_zaprosov;

4:exit;

else neverno;

end;

until c2=4; {кінець циклу}

end. {кінець основної програми}

Модуль

unit mod_my; {модуль mod_my}

interface {опис типів, змінних, процедур та функцій}

uses wincrt;

type my=record {опис типу данних „my”. Це запис з трьох полів:

ceh - номер цеху;

fio - прізвище працівника;

zarp - розмір заробітної плати}

ceh :byte;

fio:string[30];

zarp:real;

end;

{опис змінних}

var F:file of my; {опис файлової змінної типу my}

buf:my;

c:char;

{заголовки процедур, що входять до модуля}

procedure MENU;

procedure Spisok_Sotr;

procedure zapis(c:char);

procedure obrabotka_zaprosov;

procedure neverno;

implementation {розділ опису реалізації процедур та функцій}

procedure MENU;

begin

clrscr; {очищення екрана}

gotoxy(35,2); {переміщення курсора на позицію}

writeln('М Е Н Ю'); {виведення на екран слова МЕНЮ}

gotoxy(32,9);

writeln('1 – перегляд вмісту файлу');

gotoxy(32,10);

writeln('2 – запис ');

GOtoxy(32,11);

writeln('3 – друк відомості по цеху');

gotoxy(32,12);

writeln('4 - вихід');

end; {кінець реалізації процедури MENU }

procedure Spisok_Sotr; {реалізація процедури Spisok_Sotr. Ця процедура виводить список всіх співробітників, що занесені до файлу на екран }

begin

assign(f,'f.dan');{встановлюємо зв’язок файлової змінної F з фізичним файлом f.dan}

reset(f); {відкриття файлу для читання та запису}

clrscr; {очищення екрана}

gotoxy(35,2);{друкуємо заголовок таблиці}

writeln(' ПЕРЕГЛЯД);

writeln(' список співробітників ');

writeln(' ЦЕХ П.І.П/б ЗАРПЛАТА');

{організуємо цикл для зчитування інформації з файлу}

while not Eof(f) do {цикл працює доки не буде досягнуто кінця файлу}

begin

READ(f,buf); {зчитування запису з файлу}

with Buf do

begin

{виведення даних на екран у 3 колонки}

gotoxy(15,whereY);write(CEH);

gotoxy(22,whereY);write(FIO);

gotoxy(52,whereY);writeln(Zarp:4:2);

end;

end;

readln;

close(f); {закриття файлу}

End; {кінець процедури}

procedure zapis; {реалізація процедури zapis, ця процедура додає інформацію до бази даних}

Begin

ASSIGN(f,'f.dan');

{$i-} {відключити контроль помилок введення-виведення}

reset(f);{ відкриваємо файл для читання та запису }

{$i+} { включаємо контроль помилок введення-виведення }

if ioresult <> 0 then

{якщо файл не існує, то створюємо новий файл}

rewrite(f)

else

{інакше встановлюємо покажчик на кінець файлу}

seek(f,filesize(f));

repeat {входимо в цикл з додавання інформації у файл}

clrscr;

gotoxy(34,2);

writeln(' ЗАПИС');

gotoxy(2,4);

{заповнення полів буфера новою інформацією }

write(' ЦЕХ - ');

readln(buf.ceh);

gotoxy(2,6);

write(' П.І.П/б - ');

readln(buf.fio);

gotoxy(2,8);

write(' ЗAPПЛАТА - ');

readln(buf.zarp);

write(f,buf);{запис інформації у файл}

gotoxy(2,10);

{ставимомо питання, закінчувати чи ні?}

write('продовжити? (т/н) або (y/n)');

readln(c);

until (c='n')or(c='н'); {закінчення циклу}

close(f); {закриття файлу}

end; {кінець процедури}

procedure obrabotka_zaprosov;{реалізація процедури obrabotka_zaproov. Ця процедура виводить список робітників певного цеху, суму зарплати на цей цех та середню зарплату}

var C1:byte;

s,sc:real;

k:integer;

BEGIN

Repeat {входимо в цикл}

assign(f,'f.dan');

reset(f);

clrscr;

gotoxy(29,2);

writeln('ОБРОБКА ЗАППИТІВ');

gotoxy(3,4);

write('введіть № цеху - ');

readln(c1); {зчитуємо номер цеху}

s:=0; k:=0; {обнуляємо лічильники}

gotoxy(25,6);

writeln(' відомість для цеху № - ',c1);

writeln(' №п/п П.І.П/б ЗАРПЛАТА');

while not eof(f) do

begin

read(f,buf); {зчитуємо з файлу дані}

if buf.ceh=c1 then {якщо номер цеху збігається з введеним, то

begin

k:=k+1; {підраховується кількість працюючих у цеху}

S:=s+buf.zarp; { підраховується сумарна заробітна плата }

gotoxy(17,whereY);write(k);

gotoxy(25,whereY);write(buf.FIO);

gotoxy(55,whereY);writeln(buf.Zarp:4:2);

end

end;{кінець циклу із зчитування інформації з файлу}

writeln(' всього - ',s:4:2);

if k<>0 then {якщо є працівники в цеху, то}

begin

sc:=s/k; {обчислюється середня заробітна плата}

writeln(' середня зарплата - ',sc:4:2);

end

else {інакше виводиться повідомлення на екран}

begin

gotoxy(24,15);

writeln(' у цеху відсутні робітники');

end;

close(f);

write('продовжити ? (т/н) або (y/n) ');

readln(c);

until (c='n')or(c='н') {вихід з циклу}

end;

procedure neverno;{процедура, яка викликається у разі помилки: введено номер пункту меню, що не передбачений програмою}

var i:byte;

begin

clrscr;

gotoxy(34,12);

writeln(' NOT RIGHTE ');

gotoxy(34,14);

writeln('press enter ');

readln;

end;

end.

Соседние файлы в папке 2K_programuvanna