Програмування в Delphi

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

МІНІСТЕРСТВО СІЛЬСЬКОГО ГОСПОДАРСТВА І ПРОДОВОЛЬСТВА УКРАЇНИ
Заклад освіти «Білоруський державний аграрний технічний університет»
Факультет: Підприємництва та управління
Кафедра: Економічної інформатики
Курсовий проект
Тема: «програмування в DELPHI»
Виконав студент II курсу
групи 52-ЗЕІ
Залікова книжка № 506020
Братулін Євген Петрович
Перевірив :_______________
Мінськ 2007

ЗМІСТ
1. Введення. 3
2. Постановка завдання. 4
3. Математичне формулювання задачі і вибір методу обробки інформації 7
4. Розробка алгоритму схеми алгоритму та його опис. 9
5. Форма представлення вихідних даних. 21
6. Розробка інтерфейсу. 22
7. Лістинг програми .. 25
8. Результати проведених розрахунків та їх аналіз. 32
Висновки .. 35
Список використаних джерел. 36
Програми. 37

1. Введення.
У цій роботі запропоновано створити Windows-додаток на алгоритмічній мові Object Pascal в середовищі візуального програмування Delphi, яке як планується, буде забезпечувати вирішення спеціалізованих завдань щодо формування, обробці на ЕОМ і висновку інформації.
Розробнику ставитися цілком певне завдання, при виконанні якої використовуються навички роботи з операційними системами, програмними оболонками, різноманітними службовими та сервісними засобами. А також навички з алгоритмізації, програмування і вирішення в інтегрованій візуальної середовищі програмування Delphi завдань з економіки і управління на підприємстві.

2. Постановка завдання.
У цій роботі потрібно створити Windows-додаток на алгоритмічній мові Object Pascal в середовищі візуального програмування Delphi, яка забезпечує формування, обробку на ЕОМ і виведення інформації. Передбачити зберігання інформації в типізованих файлах, які містять не менше 10 записів. Додаток має забезпечувати формування бази даних відомостей про виручку від реалізації продукції за плановий період, виконати математичні обчислення з розрахунку обсягу реалізації і вартості в оптових цінах всього обсягу реалізації. Також необхідно забезпечити сортування бази даних в алфавітному порядку за найменуванням продукції і організувати виведення в MEMO-полі найменування продукції, що має значення найбільшої вартості.
Ступінь раціональності створення даної програми оцінюється як низька. Виходячи з початкових умов, слід виконати тривіальну послідовність дій:
- Зберігання малого обсягу даних
- Твір простих математичних обчислень
- Забезпечення зберігання бази даних
При дослідженні існуючих програмних продуктів, був зроблений висновок, що використовуючи комплексне програмне забезпечення компанії Microsoft, на базі електронних таблиць Excel або бази даних Access можна було створити таке ж додаток, що виконує поставлене завдання. При цьому витрачається мінімум зусиль на опрацювання інтерфейсу і процедур сортування. Однак, великим мінусом даного рішення буде є необхідність обов'язкової попередньої установки програмного забезпечення Microsoft Office, ліцензійні версії якого не набули широкого поширення на території Республіки Білорусь.
Тому прийнято вважати, що вже виходячи з цього розробляється Windows-програма не є «марним», бо як має одну чітко сформувалася мету і місце застосування. Вірогідне використання даного продукту - фінансові термінали на базі операційних систем сімейства Windows будь-якого виробничого підприємства. Дана програма, використовуючи стандартні компоненти, з успіхом буде працювати в ОС-ах Windows'95, 98, 2000, ХР не вимагаючи при цьому додаткових інсталяцій програмного забезпечення.
Для створення подібної програми, яка буде задовольняти поставлену задачу, та забезпечення функціонування математичного апарату необхідно як мінімум:
1) Один компонент для візуального представлення даних в табличній формі,
2) MEMO-поле для виводу даних, зазначених у завданні
3) Набір компонентів для додавання / зміни / видалення записів в базу даних
4) Діалогові вікна, що забезпечують вибір файлів для відкриття / збереження бази даних з відповідними кнопками для їх виклику.
Також необхідно обов'язково створити додаткові підпрограми, що забезпечують безпосередньо математичний апарат основної програми і сортирование бази даних.
Таким чином, враховуючи вищесказане, розробником були прийняті наступні рішення, що стосуються майбутньої структури програми:
1) для візуального відображення даних в табличній формі вибрати компонент StringGrid, який в текстовій формі забезпечує введення, зміни, видалення або перегляд даних. Шапка таблиці буде повторювати таблицю, зазначену в початковому умови. Передустановлене максимальну кількість даних - 100 записів, що також задовольняє початковому умові
2) MEMO-поле насамперед призначений для виведення даних, зазначених в умові, додатково використовувати для візуального підтвердження виконуваних користувачем дій.
3) для додавання / зміни / видалення записів в базу даних використовувати 5 компонентів edit (для заповнення відповідних стовпців), і 2 button-а (для додавання і видалення запису відповідно). Так як для відображення інформації в StringGrid використовується текстова форма, передбачити неможливість введення текстових даних у чисельні поля з висновком відповідного повідомлення, а також неможливість внесення «порожнього» поля, так як всі поля бази даних, необхідні для математичного розрахунку за умовами задачі повинні бути заповнені .
4) використовувати стандартні діалоги OpenDialog і SaveDialog для надання користувачу можливості візуального вибору імені та шляхи типізованого файлу для відкриття або для збереження бази даних. Для виклику діалогів використовувати 2 компонента button з відповідними назвами
5) для «обнулення» даних, тобто створення нової бази використовувати компонент button з підписом «створити базу».
6) для дублювання функцій програми і створення додаткової зручності роботи з додатком застосувати компонент menu з відповідними підменю та підписами кнопок.
7) математичний апарат представити у вигляді окремої процедури, що складається з двох рівнянь, що задовольняють початкового умові, які є необхідною частиною програми. Розрахунок проводити в автоматизованому режимі, без участі користувача.
8) виконати сортування бази даних в автоматизованому режимі. Що виключить відволікає увагу користувача з періодичного натискання кнопки «сортування». Дія сортування виконати унікальним, спеціально розробленим методом при кожній зміні бази даних.

3. Математичне формулювання задачі і вибір методу обробки інформації
У поставленому завданню необхідно виконати найпростіші операції й обчислення. Математичний апарат представлений у вигляді обчислення двох невідомих з заздалегідь заданих формулах.
1) з бази даних виділити відомості на кожну запис про залишок на початок року, про залишок на кінець року, про план випуску, а також вартість в оптових цінах одиниці продукції.
2) виконати обчислення обсягу реалізації за формулою, зазначеною в завданні.
3) виконати обчислення вартості в оптових цінах всього обсягу реалізації за формулою, зазначеною в завданні.
Пошук найменування продукції, що володіє найбільшу вартість усього обсягу реалізації, відбувається методом прямого перебору бази даних, порівнюючи кожен наступний елемент з попереднім. При виявленні подальшого елемента більшим, ніж попередній, значення вартості записується в одну буферну змінну, а індекс рядка записується в другу. При закінченні перебору в поле MEMO виводиться найменування продукції з бази даних, відповідної записаному раніше індексом, а значення листується з буферної змінної.
Елемент автоматичного сортування вбудований в систему виведення інформації через компонент StringGrid. Для цього використовується типізований масив набору даних. При додаванні нового запису відбувається перенесення даних з StringGrid-а у типізований масив і потім відбувається прямий перебір бази даних з пошуком найбільш більшого в текстовому сенсі значення найменування продукції з використанням функції CompareText. При визначенні першого більшого елемента додається запис записується між рядків типізованого масиву, а потім все «не порожні» записи типізованого масиву переносяться у вже очищений StringGrid. Потім типізований масив очищається.
Таким чином виключається необхідність участі користувача в процесі сортування даних. Хід процесу перестроювання бази даних як би вмонтовано в операції по зміні даних. Тобто кінцевою метою розробника була створення уніфікованої процедури з перетворення масиву данних.Однако, даний метод (рівно як і метод «бульбашки») застосовується тільки для малих обсягів баз даних, так як перетворення великого масиву інформації вимагатиме значні ресурси. Тому набір даних навмисно був обмежений 100 записами, що повною мірою задовольняє поставленому умові (оперування з більш ніж десятьма записами).
Подальшим можливим розвитком програми може бути використання стандартизованих типів баз даних з вбудованою системою індексації і пошуку, з вбудованими функціями сортування. Також можливо інтегрування типізованих файлів з програмами Microsoft Office Excel або Access. Також, при необхідності, можливо доопрацювати програму до клієнт / серверного положення, яке буде мати загальну систему захищених баз даних, зручне управління, а також розподіл повноважень щодо додавання / зміни / видалення записів.

4. Розробка алгоритму, схема алгоритму і його опис.
На основі вищевикладеної математичного формулювання завдання, складаємо відповідні підпрограми:
Sg1.cells
2
Початок
1
1. процедура виконання дій при завантаженні форми: FormShow.

Пояснення до алгоритму 1:

Блок 2 - завдання імен фіксованим стовпцях у StringGrid.
3
memo1.Lines
Блок 3 - висновок в полі memo повідомлення про запуск.
4
Кінець


Початок
1
2. процедура очищення StringGrid: CleanSG.


n2 = 1, Sg1.Rowcount, 1
2
Пояснення до алгоритму 2:

Sg1.rows [n2]. Clear
Блок 2 - цикл переміщення по рядках StringGrid.
3
Блок 3 - очищення рядка StringGrid.
4
Кінець


3. процедура очищення edit-ів: clearedit.
1
Початок


2
Пояснення до алгоритму 3:

edit1.clear
Блоки 2-6 - очищення edi t-ів.
3
edit2.clear
А
B
5
edit4.clear
edit3.clear
4

7
Кінець
edit5.clear
6



4. процедура створення нової бази: button 4 click.
1
Початок
 

Пояснення до алгоритму 4:

Ні
Так
  2
messagedlg
Блок 2 - запит видалення незбережених даних.
Блок 3 - виклик процедури.
cleansg
3
Блок 4 - висновок в полі memo підтвердження створення бази.
memo1.lines.insert
4
7
Кінець


5. процедура додавання запису: button 1 click.

Пояснення до алгоритму 5:

Блок 2 - перевірка edit-ів на не порожні рядки.
Блок 3 - спроба привласнити рядку цілочисельні змінні.
повідомлення про необхідність полів 2 ... 5 бути числом.
Блок 4 - завдання початкової умови циклу.
Блоки 5,6 - цикл очищення типового масиву.
Блок 7 - завдання початкової умови циклу.
Блоки 8,9,10 - цикл перекладу рядка StringGrid в масив записів.
Блок 11 - завдання початкової умови циклу.
Блоки 12,13,14 - цикл знаходження кількості записів великих доданого значення.
Блок 13 - виконання умови порівняння текстових змінних.
Блоки 15,16 - поміжрядкове додавання запису у масив.
Блок 17 - виклик процедури.
Блок 18 - завдання початкової умови циклу.
Блоки 19,20,21,22,23 - цикл перекладу масиву в Strin п Grid.
Блок 24 - виклик процедури очищення edit-ів.
Блок 25 - виклик процедури авторозрахунок.
повідомлення про необхідність усіх полів до обов'язкового заповнення.
1
Початок

If edit1.text <>''and edit2.text <>''and edit3.text <>''and edit4.text <>''and edit5.text <>''
  2
Так
Ні
Try: n = strtoint (edit2 ... 5)
3
Так
Ні
А
messagedlg
B
n = 0
4
n = 0, 200, 1
5
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
6
n = 1, sg1.rowcount, 1
8
sg1.Cells [0, n ]<>''
  9
Так
Ні
Mzap [2 * n]. Prod: = sg1.Cells [0, n];
Mzap [2 * n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [2 * n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [2 * n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [2 * n]. Svocep: = strtofloat (sg1.cells [5, n]);
10
А
B
C
D
А
B
C
D
n = 1, n = 0
11
n = 1, 200, 1
(Mzap [2 * n]. Prod <>'') and (CompareText (edit1.Text, Mzap [2 * n]. Prod)> 0)
13
Так
Ні
L = L + 1
14
n = 1
7
12

k = 2L + 1
15
n = n + 1
23
26
Кінець
cleanedit
24
autorachet
25
messagedlg
А
B
n = 1, 200, 1
Mzap [n]. Prod <>''
20
Так
Ні
k = k +1
22
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
21
А
B
C
D
А
B
C
D
n = 1, k = 1
18
cleansg
17
Mzap [k]. Prod: = edit1.Text;
Mzap [k]. Onng: = strtoint (edit2.text);
Mzap [k]. Plan: = strtoint (edit3.text);
Mzap [k]. Onkg: = strtoint (edit4.text);
Mzap [k]. Svocep: = strtofloat (edit5.text);
16
19


6. процедура автоматичного розрахунку: autorachet.

Пояснення до алгоритму 6:

Блок 2 - формування циклу.
Блок 3 - умова математичного розрахунку (при не порожній клітинці - виконується).
Блок 4 - виконання математичних розрахунків.
Блоки 5,6,7 - пошук максимального елемента.
Блок 8 - висновок в полі memo найменування статті з найбільшим значенням.

1
Початок
n = 1, sg1.rowcount, 1
Sg1.cells [0, n ]<>''
3
Так
Ні
Sg1.cells [4, n]: = inttostr (strtoint (cells [1, n]) + strtoint (cells [2, n])-strtoint (cells [3, n]));
Sg1.cells [6, n]: = floattostr (strtoint (cells [4, n]) * strtofloat (cells [5, n]) / 1000);
4
Sg1.cells [6, n]> max
5
Так
Ні
L = n
6
max = Sg1.cells [6, n]
7
А
B
C
D
А
B
C
D
8
memo1.lines
Кінець
9
2


7. процедура збереження бази: button 6 click.

Пояснення до алгоритму 7:

Блоки 2,3 - відкриття для запису даних.
Блок 4 - завдання початкової умови циклу.
Блоки 5,6 - повторний цикл очищення масиву.
Блок 7 - завдання початкової умови циклу.
Блоки 8,9,10 - повторення циклу перекладу рядка StringGrid в масив записів.
Блоки 11,12 - запис у файл.
Блок 13 - закриття файлу.
Блок 14 - висновок в полі memo підтвердження.
1
Початок
assignfile (filezap, filenamezap);
2

n = 0
4
n = 1
7
Кінець
15
сlosefile (filezap);
13
14
memo1.lines
А
А
n = 1, 100, 1
11
12
filezap, mzap [n]
n = 1, sg1.rowcount, 1
8
sg1.Cells [0, n ]<>''
  9
Так
Ні
Mzap [2 * n]. Prod: = sg1.Cells [0, n];
Mzap [2 * n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [2 * n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [2 * n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [2 * n]. Svocep: = strtofloat (sg1.cells [5, n]);
10
n = 0, 200, 1
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
6
rewrite (filezap);
n: = 0;
3
5



8. процедура відкриття бази: button 5 click.

Пояснення до алгоритму 8:

Блоки 2,3 - відкриття для читання даних.
Блок 4 - завдання початкової умови циклу.
Блоки 5,6 - повторний цикл очищення масиву.
Блоки 7,8,9 - читання з типізованого файлу в типізований масив.
Блок 10 - виклик підтвердження очищення StringGrid.
Блок 11 - завдання початкової умови циклу.
Блоки 12,13,14,15,16 - повтор циклу перекладу масиву в StringGrid.
Блок 17 - виклик процедури розрахунку.
Блок 18 - висновок в полі memo підтвердження.
1
Початок
assignfile (filezap, filenamezap);
2
reset (filezap);
n: = 0;
3
n = 0
4
n = 0, 200, 1
5
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
6
А


18
memo1.lines
Кінець
19
А
А
while not eof (filezap)
7
8
filezap, mzap [n]
n = n + 1
9
cleansg
10
n = 1, k = 1
11
n = 1, 200, 1
12
Mzap [n]. Prod <>''
13
Так
Ні
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
14
k = k +1
15
n = n + 1
16
autorachet
17
А


9. процедура видалення бази: button 3 click.

Пояснення до алгоритму 9:

Блок 2 - очищення вибраного рядка.
Блок 3 - завдання початкової умови циклу.
Блоки 4,5 - повторний цикл очищення масиву.
Блок 6 - завдання початкової умови циклу.
Блоки 7,8,9 - повторення циклу перекладу рядка StrinGrid в масив записів.
Блок 10 - завдання початкової умови циклу.
Блоки 11,12,13,14,15 - повтор циклу перекладу масиву в StrinGrid.
Блок 16 - розрахунок.

1
Початок
n = 1, sg1.rowcount, 1
7
sg1.Cells [0, n ]<>''
8
Так
Ні
Mzap [2 * n]. Prod: = sg1.Cells [0, n];
Mzap [2 * n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [2 * n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [2 * n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [2 * n]. Svocep: = strtofloat (sg1.cells [5, n]);
9
А
B
C
А
B
C
n = 0
3
n = 0, 200, 1
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
n = 1
6
4
5
sg1.Rows [sg1.Row]. Clear;
2

n = 1, k = 1
10
n = 1, 200, 1
Mzap [n]. Prod <>''
Так
Ні
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
k = k +1
n = n + 1
autorachet
11
12
13
14
Кінець
17
15
16



10. клік StringGrid-а.

Пояснення до алгоритму 10:

Початок
1
Блок 2 - підтвердження вибору.
Кінець
memo1.lines
2
3


11. виклик друку.

Пояснення до алгоритму 11:

Початок
1
Блок 2 - виклик стандартного поштового клієнта.
Кінець
2
shellexecute
3


12. вихід.

Пояснення до алгоритму 12:

Початок
1
Блок 2 - вихід з програми.
Кінець
1
halt
3


5. Форма представлення вихідних даних
За умовою поставленого завдання необхідно передбачити зберігання інформації в типізованих файлах. Для вирішення даного питання, необхідно розробити типізований елемент зберігання даних - рядок набору бази даних, роль якої в цьому додатку буде виконувати змінна «zap», що має наступну структуру.
type zap = record
prod: string [80];
onng: longint;
plan: longint;
onkg: longint;
svocep: extended;
end;
Тобто дана змінна представляє собою лінійний масив змінних даних необхідного нам типу. Для організації двовимірного масиву, опишемо в розділі змінних масив «Mzap»:
var
Mzap: array [1 .. 200] of zap; / / оголошення типу масиву записів
Типізований файл являє собою набір типізованих елементів, структура та найменування якого описані у вищезгаданому розділі змінних:
filezap: file of zap;
filenamezap: string;

6. Розробка інтерфейсу
Беручи до уваги поставлену раніше завдання, створюємо на формі наступні візуальні компоненти:
- StringGrid - для візуального відображення даних в табличній формі. Шапка таблиці буде повторювати таблицю, зазначену в початковому умови, і заповнюється при відкритті форми. Передустановлене максимальну кількість рядків - 100, стовпців - 7. Ширини стовпців вибираємо відповідно до розмірністю даних.
- MEMO-поле для виводу даних, зазначених в умові.
- 5 компонентів edit для додавання / зміни / видалення записів до бази даних (компоненти мають ширину, відповідну ширинам стобцов, і розташовані напроти кожного стовпця знизу) (див. рис. 1).

Рис.1. Загальний вигляд програми.
2 button-а для додавання і видалення запису, названих відповідно виконуваної функції. Так як для відображення інформації в StringGrid використовується текстова форма, передбачено неможливість введення текстових даних у чисельні поля з висновком відповідного повідомлення, а також неможливість внесення «порожнього» поля, так як всі поля бази даних, необхідні для математичного розрахунку за умовами завдання, повинні бути обов'язковими для заповнення. Ці події реєструються спеціальними предвартельнимі умовами і при виявленні невідповідності виводиться вікно, яке відображає найменування помилки (див. рис.2 і рис.3).

Рис.2. Помилка при додаванні порожнього (пистих) полів.

Рис.3. Помилка при додаванні не чисельного значення.
- Використані стандартні діалоги OpenDialog і SaveDialog для надання користувачу можливості візуального вибору імені та шляхи типізованого файлу для відкриття або для збереження бази даних (Див. рис.4).

Рис.4. Стандартне діалогове вікно для відкриття бази даних.
Для виклику діалогів використано 2 компонента button з відповідними назвами. А для «обнулення» даних, тобто створення нової бази використовувати компонент button з підписом «створити базу».
Для дублювання функцій програми і створення додаткової зручності роботи з додатком застосований компонент menu з відповідними підменю та підписами кнопок.
Розташування кнопок і інших полів вибрано для гарантованого зручності роботи з додатком.

7. Лістинг програми
unit EconomInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Menus, StdCtrls, shellapi;
type
TForm1 = class (TForm)
sg1: TStringGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
N8: TMenuItem;
procedure FormShow (Sender: TObject);
procedure cleansg (Sender: TObject);
procedure cleanedit (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure autorachet (Sender: TObject);
procedure Button6Click (Sender: TObject);
procedure Button5Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure sg1Click (Sender: TObject);
procedure N8Click (Sender: TObject);
procedure N5Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
implementation
{$ R *. dfm}
type zap = record / / оголошення типу запису
prod: string [80];
onng: longint;
plan: longint;
onkg: longint;
svocep: extended;
end;
var
Mzap: array [1 .. 200] of zap; / / оголошення типу масиву записів
filezap: file of zap;
filenamezap: string;
/ / Процедура виконання дій при завантаженні форми
procedure TForm1.FormShow (Sender: TObject);
begin
with sg1 do begin
Cells [0,0]: = 'Назва продукції';
Cells [1,0]: = 'ОнНГ';
Cells [2,0]: = 'ПВ';
Cells [3,0]: = 'ОнКГ';
Cells [4,0]: = 'ОР, шт';
Cells [5,0]: = 'СвОЦЕП, руб';
Cells [6,0]: = 'СвОЦВОР, т.руб';
end;
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- Програма запущена!');
end;
/ / Процедура очищення стрінггріда
procedure Tform1.cleansg (Sender: TObject);
var n2: integer;
begin
with sg1 do begin
for n2: = 1 to RowCount do begin
Rows [n2]. Clear;
end;
end;
end;
/ / Процедура очищення Єдитів
procedure Tform1.cleanedit (Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
end;
/ / Створення нової бази
procedure TForm1.Button4Click (Sender: TObject);
begin
if messagedlg ('Всі незбережені дані текушего бази будуть стерті!', mtconfirmation, mbYesNoCancel, 0) = mrYes then begin
cleansg (Sender);
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- Нова база створена. Будь ласка збережіть, задавши нове ім'я. ");
end;
end;
/ / Додавання запису
procedure TForm1.Button1Click (Sender: TObject);
var n, k, l: integer; o: extended;
begin
/ / Перевірка на порожні поля edit-ів
if (edit1.Text <>'') and (edit2.Text <>'') and (edit3.Text <>'') and (edit4.Text <>'') and (edit5.Text <>'') then
begin
try
n: = strtoint (edit2.text);
n: = strtoint (edit3.text);
n: = strtoint (edit4.text);
o: = strtofloat (edit5.text);
except
on EConvertError do messagedlg ('Поля 2 .. 5 повинні бути числом!', mterror, mbOKCancel, 1);
end;
/ / Цикл очищення масиву записів
n: = 0;
repeat
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
n: = n +1;
until n> = 200;
/ / Цикл перекладу рядків stringgrid-a в масив записів
n: = 1;
repeat
if sg1.Cells [0, n ]<>'' then begin
Mzap [2 * n]. Prod: = sg1.Cells [0, n];
Mzap [2 * n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [2 * n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [2 * n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [2 * n]. Svocep: = strtofloat (sg1.cells [5, n]);
end;
n: = n +1;
until n> = sg1.RowCount;
/ / Цикл знаходження кількості записів великих додається значення
n: = 1; l: = 0;
repeat
if (Mzap [2 * n]. prod <>'') and (CompareText (edit1.Text, Mzap [2 * n]. prod)> 0) then l: = l +1;
n: = n +1;
until n> = 200;
/ / Міжрядковий запис у масив
k: = 2 * l +1;
Mzap [k]. Prod: = edit1.Text;
Mzap [k]. Onng: = strtoint (edit2.text);
Mzap [k]. Plan: = strtoint (edit3.text);
Mzap [k]. Onkg: = strtoint (edit4.text);
Mzap [k]. Svocep: = strtofloat (edit5.text);
cleansg (sender); / / виклик очищення стрінгріда
/ / Цикл перекладу масиву записів в стрінггрід
n: = 1; k: = 1;
repeat
if Mzap [n]. prod <>''then begin
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
k: = k +1;
end;
n: = n +1;
until n> = 200;
cleanedit (Sender); / / виклик очищення Єдитів
autorachet (sender);
end
else messagedlg ('Всі поля обов'язкове для заповнення!', mterror, mbOKCancel, 1); / / виклик попередження
end;
/ / Процедура автоматичного розрахунку
procedure Tform1.autorachet (Sender: TObject);
var n, l: longint; max: extended;
begin
n: = 1;
max: = 0;
repeat
with sg1 do begin
if cells [0, n ]<>'' then begin
cells [4, n]: = inttostr (strtoint (cells [1, n]) + strtoint (cells [2, n])-strtoint (cells [3, n]));
cells [6, n]: = floattostr (strtoint (cells [4, n]) * strtofloat (cells [5, n]) / 1000);
if strtofloat (cells [6, n])> max then begin l: = n; max: = strtofloat (cells [6, n]); end;
end;
end;
n: = n +1;
until n> = sg1.rowCount;
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- Розрахунок зроблений. Максимальний СвОЦВОР' + floattostr (max) + 'руб. у' + sg1.cells [0, l]);
end;
procedure TForm1.Button6Click (Sender: TObject);
var n: longint;
begin
with savedialog1 do begin
title: = "Збереження бази ';
if execute then
begin
filenamezap: = filename;
assignfile (filezap, filenamezap);
rewrite (filezap);
n: = 0;
repeat
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
n: = n +1;
until n> = 200;
n: = 1;
repeat
if sg1.Cells [0, n ]<>'' then begin
Mzap [n]. Prod: = sg1.Cells [0, n];
Mzap [n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [n]. Svocep: = strtofloat (sg1.cells [5, n]);
end;
n: = n +1;
until n> = sg1.RowCount;
for n: = 1 to 100 do write (filezap, mzap [n]);
closefile (filezap);
end;
end;
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- База збережена під ім'ям' + filenamezap);
end;
rocedure TForm1.Button5Click (Sender: TObject);
var n, k: longint;
begin
with opendialog1 do begin
title: = 'Відкриття бази';
if execute then
begin
filenamezap: = filename;
assignfile (filezap, filenamezap);
reset (filezap);
n: = 0;
repeat
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
n: = n +1;
until n> = 200;
n: = 1;
while not eof (filezap) do
begin
read (filezap, mzap [n]);
n: = n +1;
end;
cleansg (sender);
n: = 0; k: = 1;
repeat
if Mzap [n]. prod <>''then begin
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
k: = k +1;
end;
n: = n +1;
until n> = 200;
autorachet (sender);
end;
end;
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- База' + filenamezap + 'відкрита');
end;
/ / Процедура видалення запису
procedure TForm1.Button3Click (Sender: TObject);
var n, k: longint;
begin
sg1.Rows [sg1.Row]. Clear;
n: = 0;
repeat
Mzap [n]. Prod :='';
Mzap [n]. Onng: = 0;
Mzap [n]. Plan: = 0;
Mzap [n]. Onkg: = 0;
Mzap [n]. Svocep: = 0;
n: = n +1;
until n> = 200;
n: = 1;
repeat
if sg1.Cells [0, n ]<>'' then begin
Mzap [n]. Prod: = sg1.Cells [0, n];
Mzap [n]. Onng: = strtoint (sg1.cells [1, n]);
Mzap [n]. Plan: = strtoint (sg1.cells [2, n]);
Mzap [n]. Onkg: = strtoint (sg1.cells [3, n]);
Mzap [n]. Svocep: = strtofloat (sg1.cells [5, n]);
end;
n: = n +1;
until n> = sg1.RowCount;
cleansg (sender);
n: = 0; k: = 1;
repeat
if Mzap [n]. prod <>''then begin
sg1.Cells [0, k]: = Mzap [n]. prod;
sg1.Cells [1, k]: = inttostr (Mzap [n]. onng);
sg1.Cells [2, k]: = inttostr (Mzap [n]. plan);
sg1.Cells [3, k]: = inttostr (Mzap [n]. onkg);
sg1.Cells [5, k]: = floattostr (Mzap [n]. svocep);
k: = k +1;
cleanedit (Sender); / / виклик очищення Єдитів
end;
n: = n +1;
until n> = 200;
autorachet (sender);
end;
procedure TForm1.sg1Click (Sender: TObject);
begin
edit1.Text: = sg1.Cells [0, sg1.Row];
edit2.Text: = sg1.Cells [1, sg1.Row];
edit3.Text: = sg1.Cells [2, sg1.Row];
edit4.Text: = sg1.Cells [3, sg1.Row];
edit5.Text: = sg1.Cells [5, sg1.Row];
memo1.Lines.Insert (0, DateTimeToStr (Now) + '- Запис №' + inttostr (sg1.Row) + 'обрана');
end;
procedure TForm1.N8Click (Sender: TObject);
begin
ShellExecute (form1.Handle, nil, PChar ('mailto: ultrix@tut.by? Subject = EcoInfo'),'','', 0);
end;
procedure TForm1.N5Click (Sender: TObject);
begin
halt;
end;
end.

8. Результати проведених розрахунків та їх аналіз.
У цій роботі нам необхідно було розрахувати обсяг реалізації та вартість в оптових цінах всього обсягу реалізації продукції за плановий період. Для розрахунків нам було надано вихідні дані про виручку від реалізації продукції за плановий період (Табл. 1).
Таблиця1. Відомості про виручку від реалізації продукції за плановий період.
Найменування продукції
Залишки на початок року
План випуску
Залишки на кінець року
Обсяг реалізації, шт.
Вартість в оптових цінах одиниці продукції, грн.
Вартість в оптових цінах всього обсягу реалізації, тис. крб.
1
2
3
4
5
6
7
Яблуко
711
40000
500
200000
Апельсин
236
80000
100
500150
Ананас
348
60000
200
400000
Мандарин
117
90000
50
550000
Грейпфрут
284
50000
150
450000
Банан
173
70000
300
350000
Абрикос
513
95000
450
300000
Персик
286
65000
600
250000
Виноград
482
85000
300
600000
Груша
136
40000
150
650000
Розрахунки проводилися наступним чином:
· Розрахуємо обсяг реалізації продукції за плановий період. Обсяг реалізації, в нашому, випадку дорівнює сумі залишків на початок року до плану випуску за вирахуванням залишків на кінець року по кожному виду реалізованої продукції (Табл. 2).

Таблиця2. Відомості про виручку від реалізації продукції за плановий період.
Найменування продукції
Залишки на початок року
План випуску
Залишки на кінець року
Обсяг реалізації, шт.
Вартість в оптових цінах одиниці продукції, грн.
Вартість в оптових цінах всього обсягу реалізації, тис. крб.
1
2
3
4
5
6
7
Яблуко
711
40000
500
40211
200000
Апельсин
236
80000
100
80136
500150
Ананас
348
60000
200
60148
400000
Мандарин
117
90000
50
90067
550000
Грейпфрут
284
50000
150
50134
450000
Банан
173
70000
300
69873
350000
Абрикос
513
95000
450
95063
300000
Персик
286
65000
600
64686
250000
Виноград
482
85000
300
85182
600000
Груша
136
40000
150
39986
650000
· Знаючи вартість в оптових цінах одиниці продукції, ми можемо розрахувати вартість в оптових цінах всього обсягу реалізації твором обсягу реалізації і вартості в оптових цінах одиниці продукції (Табл. 3).
Табліца3. Відомості про виручку від реалізації продукції за плановий період.
Найменування продукції
Залишки на початок року
План випуску
Залишки на кінець року
Обсяг реалізації, шт.
Вартість в оптових цінах одиниці продукції, грн.
Вартість в оптових цінах всього обсягу реалізації, тис. крб.
1
2
3
4
5
6
7
Яблуко
711
40000
500
40211
200000
8042200
Апельсин
236
80000
100
80136
500150
40080020,4
Ананас
348
60000
200
60148
400000
24059200
Мандарин
117
90000
50
90067
550000
49536850
Грейпфрут
284
50000
150
50134
450000
22560300
Банан
173
70000
300
69873
350000
24455550
Абрикос
513
95000
450
95063
300000
28518900
Персик
286
65000
600
64686
250000
16171500
Виноград
482
85000
300
85182
600000
51109200
Груша
136
40000
150
39986
650000
25990900
Аналізуючи дані розрахунку ми можемо сказати, що найбільш вигідно для продавця виробляти і реалізовувати за ціною 600000 крб. виноград тому цей продукт найбільш затребуваний покупцем і виробник отримає за нього найбільший прибуток (51109200 тис. крб.). Також буде вигідно виробляти та реалізовувати за ціною 500150 і 550000 крб. апельсини та мандарини відповідно тому за реалізацію цих продуктів виробник отримає високий прибуток (40080020,4 і 49536850 відповідно). При виробництві таких продуктів як ананаси (400000 крб.), Грейпфрут (22560300 руб.), Банан (24455550 руб.), Абрикос (28518900 руб.), Персик (16171500 руб.), Груша (25990900 руб.), Виробник буде отримувати хороший прибуток, але при різних обсягах і ціні від реалізації, підлаштовуючись під потреби покупця. Ці продукти можна було робити під замовлення для реалізації стороннім покупцем в не основної діяльності. Не вигідним продуктом для виробництва і реалізації за ціною 200000 крб. і обсязі 40000 шт. є яблуко тому цей продукт не приносить гарного прибутку.
У результаті аналізу ми можемо зробити висновок, що найбільш вигідно для підприємства виробляти і реалізовувати виноград, апельсини та мандарини тому ці продукти найбільш затребувані споживачем і тягне великі прибутки для підприємства.
Всі розрахунки проводилися у створеній нами програмі на алгоритмічній мові ObjectPascal у візуальному середовищі Delphi. Для зручності розрахунку і проглядання результатів всі найменування товару автоматично розташовується в алфавітному порядку. Найбільший прибуток і результат розрахунку ми можемо бачити в полі memo куди ці дані також заносяться автоматично (рис. 5).

Рис.5. Загальний вигляд програми з розрахунком і результатами.

Висновки
У ході виконання курсової роботи отримано нові теоретичні відомості про сучасному технічному та програмному забезпеченні офісної діяльності; щеплені практичні навички роботи з операційними системами, програмними оболонками, різноманітними службовими та сервісними засобами; освоєно застосування офісного пакету Microsoft Office для автоматизації збору, зберігання, обробки і передачі інформації.
Також були поглиблені і закріплені знання з алгоритмізації, програмування і вирішення в інтегрованій візуальної середовищі програмування Delphi завдань з економіки і управління на підприємстві.

Список використаної літератури
1. Архангельський А.Я. Програмування в Delphi 6 - М.: ЗАТ «Видавництво БІНОМ», 2002р. - 1200 с.
2. Кандзюба С.П., Громов В.М. Delphi 6. Бази даних та програми. Лекції і вправи. - К.: Видавництво «ДінСофт», 2001. - 576 с.
3. Фаронов В.В. Delphi 6. Навчальний курс. Видавництво Молгачев С.В., 2001. - 672с.
4. Програмування в середовищі Delphi: Лабораторний практикум для студентів всіх спеціальностей. Під загальною редакцією Сініцина А.К. - Мн.; БДУІР, 1998. - 94 с.
5. Основи інформатики та обчислювальної техніки. Методичні вказівки до виконання курсової роботи для студентів факультету підприємництва та управління спеціальності Е 03. 02. 00 «Економічна інформатика». Фурунжіев Р.І. - Ротапринт БАТУ, Мн.: 2000. - 25 с.
6. Архангельський А.Я. Програмування в Delphi 6 - М.: ЗАТ «Видавництво БІНОМ», 2002р. - 1200 с.
7. Кандзюба С.П., Громов В.М. Delphi 6. Бази даних та програми. Лекції і вправи. - К.: Видавництво «ДінСофт», 2001. - 576 с.
8. Фаронов В.В. Delphi 6. Навчальний курс. Видавництво Молгачев С.В., 2001. - 672с.
9. Програмування в середовищі Delphi: Лабораторний практикум для студентів всіх спеціальностей. Під загальною редакцією Сініцина А.К. - Мн.; БДУІР, 1998. - 94 с.
10. Основи інформатики та обчислювальної техніки. Методичні вказівки до виконання курсової роботи для студентів факультету підприємництва та управління спеціальності Е 03. 02. 00 «Економічна інформатика». Фурунжіев Р.І. - Ротапринт БАТУ, Мн.: 2000. - 25 с.

Програми
До даного курсового проекту додається магнітний носій інформації (дискета 3,5'', 1,44 Mb) з електронною версією пояснювальної записки, отриманим Windows-додатком (файл EcoInfo.exe), вихідними текстами програми (файл EconomInfo.pas), а також іншими необхідними файлами для компіляції програми.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
218кб. | скачати


Схожі роботи:
Програмування Delphi
Середовище програмування DELPHI 2 0 2
Середовище програмування Delphi
Середовище програмування DELPHI 2 0
Середовище програмування DELPHI 20
Програмування для Word з Delphi
Середовище програмування Borland Delphi
Основи програмування в середовищі Delphi 70
© Усі права захищені
написати до нас