- •Методичні вказівки
- •1.2 Вимоги до програми
- •1.3 Вимоги до оформлення пояснювальної записки
- •Інструкція для роботи з програмою: системному програмісту, користувачу
- •Висновки
- •Список літератури
- •2 Варіанти завдань
- •2.1 Для студентів заочної форми навчання
- •Варіант 9
- •2.2 Для студентів денної форми навчання
- •3 Приклад програми
- •Основна програма
- •Список літератури
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.