Програма обліку комунальних платежів на мові Pascal

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Зміст

Вступ

Постановка задачі

Алгоритм роботи програми

Тестування та від лагодження програмного коду

Висновок

Список використаної літератури

Програмний код

Додатки

Вступ

Ми живемо в епоху бурхливого розвитку комп’ютерних технологій. Комп’ютери займають чільне місце у всіх обчислювальних процесах, що проводить людина, оскільки дозволяють значно зменшити витрати часу на складні обчислення.

Програми пишуться на мовах програмування, які є зрозумілими як для людини, так і для машин. Серед таких мов виділяється Pascal — мова програмування, яка створена на початку 70-х років професором Н. Віртом в Швейцарії. Затверджена вона в якості стандартної в 1979 році являється найбільш вдосконаленою в порівнянні з такими універсальними мовами програмування як, АЛГОЛ, ФОРТ — РАН, БЕЙСІК, ПЛ/М та інші. Завдяки своїй ефективності, простоті і логічності вона скоро отримала розповсюдження по всьому світі. В даний час майже всі ЕОМ і особливо мікро-ЕОМ можуть працювати на цій мові. Тексти програми легко провіряється на правильність, так як їх зміст простий і очевидний. І накінець, мова Pascal підходить для начання програмістів — початківців хорошому стилю програмування.

Мова Pascal позволяє на рівні з невеликими складностями програми створювати структурні програми складноб'ємних і складних обчислень, щоб користувач при створені програми не допускав помилок або легко міг віднайти і виправити їх.

Отже, мова програмування Pascal, що була створена для навчання програмування швидко переросла своє призначення, ставши засобом розробки серйозного програмного забезпечення, що й продемонстровано у даній роботі.

1. Постановка задачі

1. 1 Технічне завдання

Технічне завдання даної роботи полягає у написанні програми для обліку і підрахунку коштів, які необхідно сплатити за спожиті комунальні послуги.

1. 2 Вимоги до виконання

Користувач програми повинен мати можливість:

— створювати записи в файл бази;

— переглядати вміст файла бази даних;

— редагувати дані в файлі бази даних;

— видаляти записи з бази даних.

1. 3 Основні функції програми

Програма дозволяє виконувати наступні операції:

Записати даних у файл.

Виести дані, які знаходяться у файлі.

Знайти дані у файлі.

Редагувати даних в файлі.

Стерти файл бази даних.

Зробити відмітку про оплату в базі даних.

1. 4 Інструкція для роботи з програмою

Запустити програму.

Вибрати в меню потрібну дію.

Заповнити базу даних.

Продивитись інформацію про абонентів.

При потребі редагувати записи.

Для виходу і з програми слід натиснути 0.

2. Алгоритм роботи програми

Програмна система зроблена з основнго коду і процедур.

В програмі містяться наступні процедури:

— MainMenu;

— ShowAll;

— Show;

— EditAbon;

— Delete;

— Add;

— RewriteDB;

— Pay;

— EditCount;

А також функції:

Open

Oplata.

Функція Open типу Boolean відкриває файл бази даних і повертає значення true, якщо вдалось його відкрити, і false, якщо не вдалося. Критерієм успіху цієї операції є значення IORezult при відкритті файлу. Якщо його значення рівне 0, то дана функція приймає значення true. Функція використавуєть як параментр існинності подальших інструкцій у всіх подальших процедурах, які працюють файлом бази даних:

Function Open: Boolean;

begin

clrscr;

{$I-}

Reset (f);

{$I+}

if IOResult< >0 then

begin

clrscr;

Open: =false;

writeln ('Невдається відкрити файл бази даних!');

writeln;

writeln;

writeln;

writeln ('Для повернення в Головне меню натисніть будь-яку кнопку… ');

readkey;

clrscr;

end

else Open: =true;

end;

Функція Oplata повертає значення типу string і має параметром змінну булевого типу. Залежно від параметра і, вона приймає значення `оплачено' або `не оплачено'.

Function oplata (i: boolean):string;

begin

if i=true then oplata: ='оплачено'

else oplata: ='не оплачено';

end;

Процедура ShowAll виводить список всіх абонентів, що є у БД. Після перевірки успішності відкриття бази даних вона просто зчитує дані з файлу і деякі з них, а саме: прізвище, ім'я та адресу абонента, виводить у вікно програми:

Procedure ShowAll;

begin

if Open=true then

begin

with abon do

while not EOF (f) do

begin

Read (f, abon);

write (fam, ' ', name,' ', fath);

writeln (' Адреса: ', misto,' ', vul,' ', bud,' кв. ', kvar);

end;

writeln;

writeln;

writeln ('Кінець бази даних');

writeln;

writeln;

writeln ('Натисніть будь-яку клавішу');

readkey;

close (f);

clrscr

end

end;

Процедура Show використовується для виведення повної інформації про абонента, його рахунок та борги, а також завдяки виклику процедури Pay дозволяє внести запис про оплату послуг.

Насамперед у даній процедурі перевіряється чи успішно відкрито файл бази даних за допомогою функції Open. Якщо успішно, то пропонується з клавіатури ввести прізвище, а потім ім'я абонента, дані якого необхідно продивитись. Після введення даних процедура за допомогою циклу while, умовою завершення якого є кінець файлу f, один за одним зчитує записи у базі даних і шукає збіг. У разі, якщо збігів не знайдено, на екран виводиться `Абонент не знайдений!!!'. Якщо знайдено збіг, то процедура виводить на екран всі дані, що є у запису, тарифи, і обраховує плату за послуги, показує, чи оплачено їх. Також виводиться загальна сума, яку необхідно сплатити.

Опісля користувачу пропонується вибрати, що потрібно оплатити, або натиснути 0, якщо даний крок треба пропустити. Далі викликається процедура Pay, детальний опис якої буде нижче. Далі закривається файл f.

Див. додаток 2.

Процедура EditAbon використовується для редагування даних про абонента, а саме прізвища, імені, по батькові, адреси та телефону. При цьому використовується файл тимчасового зберігання даних.

Див. додаток 3

Процедура EditCount дозволяє змінити покази лічильників абонента як кожен окремо, так і всі підряд. Вона також використовує файл тимчасового зберігання даних для зміни інформації в у файлі бази даних.

При введенні нових показів, попереднім присвоюється значення поточних.

Див додаток 4

Процедура Add дозволяє додати запис про абонента до бази даних. Вона переписує усі дані в файл тимчасового зберігання, дописує записи, а потім перезаписує дані з тимчасового файлу у файл бази даних.

Procedure Add;

begin

clrscr;

Rewrite (tf);

if Open=true then

begin

with abon do

begin

while not EOF (f) do

begin

Read (f, abon);

write (tf, abon)

end;

a: =1;

while a < > 0 do

begin

write ('Прізвище: ');

readln (fam);

write ('Ім''я: ');

readln (name);

write ('По батькові: ');

readln (fath);

write ('Місто: ');

readln (misto);

write ('Вулиця: ');

readln (vul);

write ('Будинок: ');

readln (bud);

write ('Квартира: ');

readln (kvar);

write ('Телефон: ');

readln (tel);

write ('Відсоток сплати (якщо немає пільг, то 100): ');

readln (percent);

writeln ('Покази лічильників (попередні та теперішні, вводити через пробіл): ');

write ('Вода: ');

readln (vod_p, vod_t);

write ('Газ: ');

readln (gas_p, gas_t);

write ('Електроенергія: ');

readln (elect_p, elect_t);

write ('Переговори: ');

read (tel_p);

write (tf, abon);

opl: =false;

writeln;

write ('Додати ще один запис? 1 — так / 0 — ні ');

readln (a);

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon)

end

end;

close (f);

close (tf);

writeln ('Збережено!');

writeln;

writeln ('Натисніть будь-яку клавішу. ');

readkey;

clrscr

end

end;

Процедура Delete слугує для видалення запису про абонента з бази даних. Спочатку вводиться прізвище та ім'я, потім всі записи, у яких не виявлено збігів, записуються у файл тимчасового зберігання даних. Якщо виявлено збіг і прізвища, і імені, то такий запис пропускається. Після цього вміст файлу тимчасового зберігання переписується у файл бази даних.

Procedure Delete;

begin

clrscr;

Rewrite (tf);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище абонента: ');

readln (str);

write ('Введіть ім''я абонента: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon)

end

end;

close (f);

close (tf);

writeln ('Видалено!');

writeln;

writeln ('Натисніть будь-яку клавішу. ');

readkey;

clrscr

end

end;

Процедура Pay дозволяє внести до запису позначку про оплату. Взагалі, у записі існує масив значень типу Boolean, кожен елемент якого означає наявність або відсутність оплати за послугу (воду, газ, електроенергію, телефон). Дана процедура змінює значення елементів цього масиву, що дозволяє при використанні процедури Show та функції Oplata виводити напис `оплачено' або `не оплачено'.

Процедура має три параметри fa, n типу string, та s типу integer. Перші два набувають значень прізвища та імені поточного у процедурі Show запису і слугують для знаходження збігів у записах. Останній вказує процедурі, в якому елементі масиву виконувати зміни. Оператор case слугує для вибору дій зміни елементів масиву opl. При змінній s, що має значення 5, усі елементи масиву набувають значення false.

Змінені записи записуються у файл тимчасового зберігання даних, а потім його вміст записується у файл бази даних. Після виконання всіх дій файл бази даних відкривається для читання процедурою Reset для коректної роботи і процедурі Show, у якій дана і викостовується.

Procedure Pay (fa: string; n: string; s: integer);

begin

if Open=true then

rewrite (tf);

begin

while not EOF (f) do

with abon do

begin

Read (f, abon);

if (fa< >str) or (n< >str2) then

write (tf, abon)

else

begin

if (s< >5) and (s< >0) then

opl[s]: =true

else

if s=5 then

for s: =1 to 4 do

opl[s]: =true;

if s< >0 then

writeln ('Борг оплачено');

end;

write (tf, abon);

end;

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

reset (f);

writeln ('Натисніть будь-яку клавішу для продовження… ');

readln;

end;

Процедура RewriteDB знищує всі дані у базі даних. За допомогою процедури Rewrite стираються усі дані у файлі бази даних.

Procedure RewriteDB;

begin

writeln ('Увага! Зараз Базу Даних буде знищено!!!');

writeln;

writeln ('Ви впевнені? 1.- ТАК 0.- НІ');

readln (a);

if a=1 then

begin

clrscr;

Rewrite (f);

writeln ('Базу даних знищено!!! Натисніть будь-яку клавішу. ');

close (f);

readln;

clrscr;

end

end;

Процедура MainMenu виводить на екран варіанти дій користувача.

Procedure MainMenu;

begin

clrscr;

writeln ('1.- Показати список всіх абонентів');

writeln ('2.- Додати абонента');

writeln ('3.- Пошук абонента');

writeln ('4.- Змінити покази лічильників');

writeln ('5.- Редагувати дані про абонента');

writeln ('6.- Видалити абонента зі списку');

writeln ('7.- Стерти базу даних');

writeln;

writeln ('0.- Вихід')

end;

Основний програмний код

У основному програмному коді спочатку користувачеві представляється титульна сторінка програми з інформацією про автора мету курсової роботи і тому подiбне:

begin

writeln (' Міністерство освіти і науки України');

writeln (' Тернопільський національний технічний університет ім. І. Пулюя');

writeln;

writeln;

writeln;

writeln;

writeln (' КУРСОВА РОБОТА');

writeln (' на тему: ');

writeln (' ОПЛАТА КОМУНАЛЬНИХ ПОСЛУГ');

writeln;

writeln;

writeln;

writeln (' Група СІ-12');

writeln (' Сівіцький Олександр');

writeln;

writeln;

writeln;

writeln (' Тернопіль');

writeln (' 2010 рік');

readkey;

clrscr;

Далі виконуються асоціації імен файлів:

Assign (f, 'data. dat');

Assign (tf, 'data_temp. dat');

Потім у циклі виконуються процедури, вибрані користувачем, при виборі 0, відбувається вихід із програми.

int: =1;

while int < > 0 do

begin

MainMenu;

readln (int);

case int of

1: ShowAll;

2: Add;

3: Show;

4: EditCount;

5: EditAbon;

6: Delete;

7: RewriteDB;

end;

end;

clrscr;

write ('Тепер можна закрити вікно програми');

end.

3. Тестування та від лагодження програмного коду

Всього програмна система виконує 10 вище описаних функцій.

При запуску програми на екран виведеться:

комунальний програма функціонал абонент

Головне меню програми:

Додавання нового запису про абонента:

Вивід всієї списку абонентів:

Вікно програми при виведенні повної інформації:

Вікно програми при редагування даних про абонента

Вікно програми при редагування показів лічильника:

Висновок

Програмування дозволяє значно простіше обходитися із записами, але найголовніше — дуже легко знайти необхідний запис у базі даних за будь-яким із запропонованих параметрів.

Завдяки мові програмування Pascal дуже легко зрозуміти суть і сутність програмування і роботи з файлами. Комп’ютер допомагають нам у всьому Комп’ютери навіть встановлюють в автомобілі, сучасні мобільні телефони теж по суті є комп’ютерами як і багато інших сучасних приладів. Але до кожного комп’ютера потрібне своє програмне забезпечення, яке створюється в середовищі різних мов програмування і тому зараз найбільша увага приділяється максимальному наближенню мови програмування або мови комп’ютера до людської. Це в свою чергу веде до створення не просто досконалої мови програмування, а до самої людської мови, яку б розумів комп’ютер, що гарно продемонстровано на прикладі Pascal і створеної мної програми.

Список використаної літератури

Ставровський А.Б., Коваль Ю. В. Вступний курс програмування.- К., 1998

Грызлов В.И., Грызлова Т. П. Турбо Паскаль 7.0. М.: «ДМК», 2000. — 416 с.

Семотюк В. Програмування в середовищі Турбо Паскаль. — Львів: СП «БаК», 2000. — 123 с.

Турбо Паскаль 7.0. — Киев: Издательская группа BHV, 1999. — 257 с.

Додаток 1.

Program komun_posl;

uses wincrt;

type

Abonent=record

fam: string;

name: string;

fath: string;

misto: string;

vul: string;

bud: integer;

kvar: integer;

tel: longint;

percent: byte;

vod_p: integer;

vod_t: integer;

gas_p: integer;

gas_t: integer;

elect_p: integer;

elect_t: integer;

tel_p: real;

opl: array[1. 4] of boolean;

end;

DB=file of Abonent;

const

vod_tar=0. 65;

gas_tar=0. 87;

tel_a=18. 5;

elect_tar=0. 225;

var f: DB;

tf: DB;

abon: Abonent;

a: integer;

i: integer;

str: string;

str2: string;

int: integer;

sum: real;

borg: real;

Function oplata (i: boolean):string;

begin

if i=true then oplata: ='оплачено'

else oplata: ='не оплачено';

end;

Function Open: Boolean;

begin

clrscr;

{$I-}

Reset (f);

{$I+}

if IOResult< >0 then

begin

clrscr;

Open: =false;

writeln ('Невдається відкрити файл бази даних!');

writeln;

writeln;

writeln;

writeln ('Для повернення в Головне меню натисніть будь-яку кнопку… ');

readkey;

clrscr;

end

else Open: =true;

end;

Procedure ShowAll;

begin

if Open=true then

begin

with abon do

while not EOF (f) do

begin

Read (f, abon);

write (fam, ' ', name,' ', fath);

writeln (' Адреса: ', misto,' ', vul,' ', bud,' кв. ', kvar);

end;

writeln;

writeln;

writeln ('Кінець бази даних');

writeln;

writeln;

writeln ('Натисніть будь-яку клавішу');

readkey;

close (f);

clrscr

end

end;

Procedure Pay (fa: string; n: string; s: integer);

begin

if Open=true then

rewrite (tf);

begin

while not EOF (f) do

with abon do

begin

Read (f, abon);

if (fa< >str) or (n< >str2) then

write (tf, abon)

else

begin

if (s< >5) and (s< >0) then

opl[s]: =true

else

if s=5 then

for s: =1 to 4 do

opl[s]: =true;

if s< >0 then

writeln ('Борг оплачено');

end;

write (tf, abon);

end;

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

reset (f);

writeln ('Натисніть будь-яку клавішу для продовження… ');

readln;

end;

Procedure Show;

begin

if Open=true then

begin

write ('Введіть прізвище абонента: ');

readln (str);

write ('Введіть ім''я абонента: ');

readln (str2);

i: =0;

with abon do

while not EOF (f) do

begin

Read (f, abon);

if (fam=str) and (name=str2) then

begin

writeln (fam,' ', name, ' ', fath);

writeln ('Адреса: ', misto,' ', vul,' ', bud,' ', kvar,' тел. ', tel);

writeln;

write (' Попереднi',' Теперішні');

writeln (' Спожито ',' Тариф ',' До оплати');

write ('Вода: ', vod_p,' ', vod_t,' ', vod_t-vod_p,' ');

sum: =(vod_t-vod_p)*vod_tar*percent/100;

borg: =0;

writeln (vod_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[1]));

if opl[1]=false then

borg: =borg+sum;

write ('Газ: ', gas_p,' ', gas_t,' ', gas_t-gas_p,' ');

sum: =(gas_t-gas_p)*gas_tar*percent/100;

writeln (gas_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[2]));

if opl[2]=false then

borg: =borg+sum;

write ('Ел-енергія: ', elect_p,' ', elect_t,' ', elect_t-elect_p,' ');

sum: =(elect_t-elect_p)*elect_tar*percent/100;

writeln (elect_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[3]));

if opl[3]=false then

borg: =borg+sum;

writeln ('Телефон: ');

writeln (' Абонплата: ', tel_a: 5:2,' Переговори: ', tel_p: 5:2,' ', oplata (opl[4]));

writeln;

writeln ('Загальна сума до оплати: ', borg: 5:2,' грн. ');

writeln;

writeln ('Виберіть борг для погашення: ');

writeln ('1.- Вода');

writeln ('2.- Газ');

writeln ('3.- Електроенергія');

writeln ('4.- Телефон');

writeln ('5.- Увесь борг');

writeln;

writeln ('0.- Пропустити');

readln (a);

Pay (fam, name, a);

break;

i: =-1;

end;

end;

close (f);

clrscr;

end

end;

Procedure Add;

begin

clrscr;

Rewrite (tf);

if Open=true then

begin

with abon do

begin

while not EOF (f) do

begin

Read (f, abon);

write (tf, abon)

end;

a: =1;

while a < > 0 do

begin

write ('Прізвище: ');

readln (fam);

write ('Ім''я: ');

readln (name);

write ('По батькові: ');

readln (fath);

write ('Місто: ');

readln (misto);

write ('Вулиця: ');

readln (vul);

write ('Будинок: ');

readln (bud);

write ('Квартира: ');

readln (kvar);

write ('Телефон: ');

readln (tel);

write ('Відсоток сплати (якщо немає пільг, то 100): ');

readln (percent);

writeln ('Покази лічильників: ');

writeln ('Вода: ');

write ('Попередні: ');

readln (vod_p);

write ('Теперішні: ');

readln (vod_t);

writeln ('Газ: ');

write ('Попередні: ');

readln (gas_p);

write ('Теперішні: ');

readln (gas_t);

writeln ('Електроенергія: ');

write ('Попередні: ');

readln (elect_p);

write ('Теперішні: ');

readln (elect_t);

write ('За телефонні переговори: ');

read (tel_p);

for i: =1 to 4 do

opl[i]: =false;

write (tf, abon);

writeln;

write ('Додати ще один запис? 1 — так / 0 — ні ');

readln (a);

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon)

end

end;

close (f);

close (tf);

writeln ('Збережено!');

writeln;

writeln ('Натисніть будь-яку клавішу. ');

readkey;

clrscr

end

end;

Procedure EditCount;

begin

clrscr;

Rewrite (tf);

reset (f);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище: ');

readln (str);

write ('Введіть ім''я: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

else

begin

writeln ('Ввиберіть лічильник: ');

writeln ('1.- Вода');

writeln ('2.- Газ');

writeln ('3.- Електроенергія');

writeln ('4.- Телефон');

writeln ('5.- Всі покази');

writeln;

writeln ('0.- Пропустити');

readln (a);

case a of

1: begin

vod_p: =vod_t;

write ('Нові покази лічильника: ');

readln (vod_t);

opl[1]: =false;

end;

2: begin

gas_p: =gas_t;

write ('Нові покази лічильника: ');

readln (gas_t);

opl[2]: =false;

end;

3: begin

elect_p: =elect_t;

write ('Нові покази лічильника: ');

readln (elect_t);

opl[3]: =false;

end;

4: begin

write ('Рахунок за переговори: ');

readln (tel_p);

opl[4]: =false;

end;

5: begin

vod_p: =vod_t;

writeln ('Введіть нові покази лічильників: ');

vod_p: =vod_t;

write ('Вода: ');

readln (vod_t);

gas_p: =gas_t;

write ('Газ: ');

readln (gas_t);

elect_p: =elect_t;

write ('Електроенргія: ');

readln (elect_t);

write ('Рахунок за телефонні переговори: ');

readln (tel_p);

for i: =1 to 4 do

opl[i]: =false;

end;

end;

write (tf, abon);

end;

end

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

end;

writeln ('Зміни збережено!');

writeln ('Натисніть будь-яку клавішу для продовження… ');

readkey;

end;

Procedure EditAbon;

begin

clrscr;

Rewrite (tf);

reset (f);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище: ');

readln (str);

write ('Введіть ім''я: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

else

begin

writeln ('Ввиберіть поле редагування: ');

writeln ('1.- Прізвище, ім''я та по-батькові');

writeln ('2.- Адресу і телефон');

writeln;

writeln ('0.- Пропустити');

readln (a);

case a of

1: begin

clrscr;

writeln ('Нові дані: ');

write ('Прізвище: ');

readln (fam);

write ('Ім''я: ');

readln (name);

write ('По батькові: ');

readln (fath);

end;

2: begin

clrscr;

writeln ('Нові дані: ');

write ('Місто: ');

readln (misto);

write ('Вулиця: ');

readln (vul);

write ('Будинок: ');

readln (bud);

write ('Квартира: ');

readln (kvar);

write ('Телефон: ');

readln (tel);

end;

end;

write (tf, abon);

end;

end

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

end;

writeln ('Зміни збережено!');

writeln ('Натисніть будь-яку клавішу для продовження… ');

readkey;

end;

Procedure Delete;

begin

clrscr;

Rewrite (tf);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище абонента: ');

readln (str);

write ('Введіть ім''я абонента: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon)

end

end;

close (f);

close (tf);

writeln ('Видалено!');

writeln;

writeln ('Натисніть будь-яку клавішу. ');

readkey;

clrscr

end

end

Procedure RewriteDB;

begin

writeln ('Увага! Зараз Базу Даних буде знищено!!!');

writeln;

writeln ('Ви впевнені? 1.- ТАК 0.- НІ');

readln (a);

if a=1 then

begin

clrscr;

Rewrite (f);

writeln ('Базу даних знищено!!! Натисніть будь-яку клавішу. ');

close (f);

readln;

clrscr;

end

end;

Procedure MainMenu;

begin

clrscr;

writeln ('1.- Показати список всіх абонентів');

writeln ('2.- Додати абонента');

writeln ('3.- Пошук абонента');

writeln ('4.- Змінити покази лічильників');

writeln ('5.- Редагувати дані про абонента');

writeln ('6.- Видалити абонента зі списку');

writeln ('7.- Стерти базу даних');

writeln;

writeln ('0.- Вихід')

end;

begin

writeln (' Міністерство освіти та науки України');

writeln (' Тернопільський національний технічний університет ім. І. Пулюя');

writeln;

writeln;

writeln;

writeln (' КУРСОВА РОБОТА');

writeln (' на тему: ');

writeln (' ОПЛАТА КОМУНАЛЬНИХ ПОСЛУГ');

writeln;

writeln;

writeln;

writeln (' Група СІ-12');

writeln (' Сівіцький Олександр');

writeln;

writeln;

writeln;

writeln (' Тернопіль');

writeln (' 2010 рік');

readkey;

clrscr;

Assign (f, 'data. dat');

Assign (tf, 'data_temp. dat');

int: =1;

while int < > 0 do

begin

MainMenu;

readln (int);

case int of

1: ShowAll;

2: Add;

3: Show;

4: EditCount;

5: EditAbon;

6: Delete;

7: RewriteDB;

end;

end;

clrscr;

write ('Тепер можна закрити вікно програми');

end.

Додаток 2

Procedure Show;

begin

if Open=true then

begin

write ('Введіть прізвище абонента: ');

readln (str);

write ('Введіть ім''я абонента: ');

readln (str2);

i: =0;

with abon do

while not EOF (f) do

begin

Read (f, abon);

if (fam=str) and (name=str2) then

begin

writeln (fam,' ', name, ' ', fath);

writeln ('Адреса: ', misto,' ', vul,' ', bud,' ', kvar,' тел. ', tel);

writeln;

write (' Попереднi',' Теперішні');

writeln (' Спожито ',' Тариф ',' До оплати');

write ('Вода: ', vod_p,' ', vod_t,' ', vod_t-vod_p,' ');

sum: =(vod_t-vod_p)*vod_tar*percent/100;

borg: =0;

writeln (vod_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[1]));

if opl[1]=false then

borg: =borg+sum;

write ('Газ: ', gas_p,' ', gas_t,' ', gas_t-gas_p,' ');

sum: =(gas_t-gas_p)*gas_tar*percent/100;

writeln (gas_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[2]));

if opl[2]=false then

borg: =borg+sum;

write ('Ел-енергія: ', elect_p,' ', elect_t,' ', elect_t-elect_p,' ');

sum: =(elect_t-elect_p)*elect_tar*percent/100;

writeln (elect_tar: 5:2,' ', sum: 5:2,' ', oplata (opl[3]));

if opl[3]=false then

borg: =borg+sum;

writeln ('Телефон: ');

writeln (' Абонплата: ', tel_a: 5:2,' Переговори: ', tel_p: 5:2,' ', oplata (opl[4]));

writeln;

writeln ('Загальна сума до оплати: ', borg: 5:2,' грн. ');

writeln;

writeln ('Виберіть борг для погашення: ');

writeln ('1.- Вода');

writeln ('2.- Газ');

writeln ('3.- Електроенергія');

writeln ('4.- Телефон');

writeln ('5.- Увесь борг');

writeln;

writeln ('0.- Пропустити');

readln (a);

Pay (fam, name, a);

break;

i: =-1;

end;

if i< >-1 then writeln ('Абонента не знайдено!!!');

writeln;

readln;

end;

close (f);

clrscr;

end

end;

Додаток 3

Procedure EditAbon;

begin

clrscr;

Rewrite (tf);

reset (f);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище: ');

readln (str);

write ('Введіть ім''я: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

else

begin

writeln ('Ввиберіть поле редагування: ');

writeln ('1.- Прізвище, ім''я та по-батькові');

writeln ('2.- Адресу і телефон');

writeln;

writeln ('0.- Пропустити');

readln (a);

case a of

1: begin

clrscr;

writeln ('Нові дані: ');

write ('Прізвище: ');

readln (fam);

write ('Ім''я: ');

readln (name);

write ('По батькові: ');

readln (fath);

end;

2: begin

clrscr;

writeln ('Нові дані: ');

write ('Місто: ');

readln (misto);

write ('Вулиця: ');

readln (vul);

write ('Будинок: ');

readln (bud);

write ('Квартира: ');

readln (kvar);

write ('Телефон: ');

readln (tel);

end;

end;

write (tf, abon);

end;

end

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

end;

writeln ('Зміни збережено!');

writeln ('Натисніть будь-яку клавішу для продовження… ');

readkey;

end;

Додаток 4

Procedure EditCount;

begin

clrscr;

Rewrite (tf);

reset (f);

if Open=true then

begin

with abon do

begin

write ('Введіть прізвище: ');

readln (str);

write ('Введіть ім''я: ');

readln (str2);

while not EOF (f) do

begin

Read (f, abon);

if (fam< >str) or (name< >str2) then

write (tf, abon)

else

begin

writeln ('Ввиберіть лічильник: ');

writeln ('1.- Вода');

writeln ('2.- Газ');

writeln ('3.- Електроенргія');

writeln ('4.- Телефон');

writeln ('5.- Всі покази');

writeln;

writeln ('0.- Пропустити');

readln (a);

case a of

1: begin

vod_p: =vod_t;

write ('Нові покази лічильника: ');

readln (vod_t);

opl[1]: =false;

end;

2: begin

gas_p: =gas_t;

write (' Нові покази лічильника: ');

readln (gas_t);

opl[2]: =false;

end;

3: begin

elect_p: =elect_t;

write (' Нові покази лічильника: ');

readln (elect_t);

opl[3]: =false;

end;

4: begin

write ('Рахунок за переговори: ');

readln (tel_p);

opl[1]: =false;

end;

5: begin

vod_p: =vod_t;

writeln ('Введіть нові покази лічильників: ');

vod_p: =vod_t;

write ('Вода: ');

readln (vod_t);

gas_p: =gas_t;

write ('Газ: ');

readln (gas_t);

elect_p: =elect_t;

write ('Електроенргія: ');

readln (elect_t);

write ('Рахунок за телефонні переговори: ');

readln (tel_p);

for i: =1 to 4 do

opl[i]: =false;

end;

end;

write (tf, abon);

end;

end

end;

close (f);

close (tf);

Rewrite (f);

Reset (tf);

while not EOF (tf) do

begin

Read (tf, abon);

write (f, abon);

end;

close (f);

close (tf);

end;

writeln ('Зміни збережено!');

writeln ('Натисніть будь-яку клавішу для продовження… ');

readkey;

end;

ПоказатьСвернуть
Заполнить форму текущей работой