ВСТУП.
Дана програма автоматизованого робочого місця розроблена для працівників складських приміщень, природно якщо у них є комп'ютер класом не нижче Pentium. Зараз на ринку програмного забезпечення з'являються все більше і більше різних програм для роботи не лише зі складом, але і різні інші програмні засоби автоматизованого робочого місця, а вартість їх ліцензійних копій доходить часом до кількох десятків тисяч, а моя програма може бути звичайно маленько ще « сирувата », але в процесі роботи з нею її можна« довести її до розуму »і все це лише за п'ятірку з програмування ціна не велика за твір програмного мистецтва. Які її плюси: ну це природно простота і зрозумілість (для російської людини) інтерфейсу програми, що не вимагає додаткового навчання або проходження спеціальних курсів, особливо для жінок, які працюють на складах і не посвячених у ази комп'ютерів і програмного забезпечення, не вимогливість до системних ресурсів машини; легкість введення і відстеження; простота резервування бази даних (всього 1 фото), що важливо для такої програми. При написанні і розробці курсового проекту я навчився працювати з Borland Pascal, Microsoft Windows 95OSR2, Microsoft Word 97 SR-2 які використовувалися для роботи над курсовим проектом, навчився використовувати довідку та інші функції Borland Pascal при цьому навіть розібрався з англійською мовою і використанням електронних словників перекладачів таких як Promt, Stylus, Magic Gooddy 98. Величезне спасибі Волкову О.І. - За відмінне викладання предметів, Billу Gaits - за те що він вміє заробляти гроші власним розумом, Мерзлякова Д.С. - За підтримку у важку хвилину, Баришева А.А. - За технічну підтримку, Російських А.І. - За програмну підтримку, Казакову В.С. - За дозвіл працювати на комп'ютері, Sting, Queen, і іншим за хорошу музику під час роботи над курсовим.
I.
ЗАВДАННЯ.
Скласти програму автоматичного робочого місця для роботи зі складом.
Програма повинна надавати користувачеві можливість:
1. Вводити новий товар, вказуючи наступні параметри
* Найменування;
* Кількість;
* Ціну;
* Дату надходження.
2. Здійснювати пошук товару за найменуванням і видавати його параметри.
3. Позначати вибулий товар, вказуючи дату видачі.
4. Виводити список наявного товару з можливістю сортування по будь-якому параметру.
5. Виводити список вибулого товару з можливістю сортування по будь-якому параметру.
6. Видавати загальну статистичну характеристику:
* Загальна вартість наявного товару;
* Кількість наявного товару;
* Кількість вибулого товару.
7. Зберігати і відновлювати всю інформацію АРМ з диска.
8.
II.
ОПИС ЗМІННИХ І алгоритм роботи програми.
Опис змінних.
* Basskl - основний запис з необхідними змінними це:
> Naim - найменування товару;
> Kol - кількість товару;
> Price - ціна товару;
> Kol_p - кількість прийшов товару;
> Kol_r - кількість товару який пішов;
> Date_p - дата приходу товару;
> Date_r - дата витрати товару.
* F - file бази сладу;
* List - масив даних бази;
* Schet - Cчетчики;
* Curs - показник позиції;
* Stran - лічильник позиції курсору;
* I - мінлива використання;
* Mcurs - мінлива початковій позиції меню;
* K-мінлива визначення клавіші;
* Res-мінлива вибору меню;
* Da - мінлива використання;
* Er - мінлива помилки перетворення;
* Tx - мінлива тексту при пошуку;
* Fil - змінна імені бази;
* Key - прапорець;
* Seter - мінлива використання.
Крім змінних в програмі використовуються процедури і функції опис яких наведено нижче;
Функція probel;
Використовується для доповнення тексту необхідними кількостями пробілів.
Вхід: Текст, необхідна довжина.
Вихід: Текст необхідної довжини.
Функція Edtext;
Використовується для виведення на екран в потрібну позицію тексту і його подальшого редагування
Функція працює наступним чином:
Зациклюється до тих пір, поки не буде натиснення Enter або Esc. У цей час виводить на екран текст в потрібну позицію, оновлюється, очікує натискання клавіш або delete.
Вхід: Координати, текст, довжина тексту, прапорець.
Вихід: Виведення на екран тексту, відредагований текст.
Функція Cifri;
Подібна функції Edtext тільки введення тексту обмежений цифрами.
Працює також.
Процедура Prishlo;
Застосовується для виведення на екран меню "Прихід" та занесення даних в позицію бази.
Опис роботи: Працює з рядком масиву бази. Виводить на екран меню "Прихід", перетворює текстові змінні після введення в рядки меню.
Процедура Ushlo;
Аналогічна процедурі Prishlo.Заменена тільки формула обчислення кількості.
Процедура Vvodnov;
Процедура забезпечує виведення на екран меню «Новий товар», введення нового рядка в базу.
Працює: Обмежується рядком, для роботи із змінними запису, виводить на екран меню, користувачем редагуються рядка меню, перетворюються, збільшується лічильник числа рядків бази на 1.
Процедура Edzapic;
Використовується для редагування запису в поточній позиції курсору лістингу переліку товарів.
Вхід: Позиція
Вихід: відредагований текст в даній позиції.
Процедура Ekran;
Відображає на екрані заголовок таблиці бази і заповнює таблицю, розраховує і відображає на екрані нижній рядок стану бази загальну суму, загальний прихід, загальна витрата, загальна кількість товарів.
Опис: Формує вікно для роботи, відображає заголовок таблиці, цикл для виведення першого двадцяти рядків бази у вікно, обнулення лічильників сум, цикл на всі позиції бази, розрахунок сум у цьому циклі виведення результату на екран у вигляді рядка стану.
Функція Vivstr;
Формує рядок по позиції в базі.
Обнуляється. Працює з рядком в масиві бази. Виробляє перетворення в стрінговие змінні числових значень бази (кількості ціни, прихід, витрата), сума формується шляхом обчислення. Додавання потрібними пробілами функцією Probel.
Процедура Vivlist;
Забезпечує формування екрана за допомогою процедури Ekran, висновок що пояснює рядка. Підфарбовування рядка в позиції курсору, опитування клавіш курсору та службових (для введення нової, коректування, видалення). Працює наступним чином: Виконує процедуру Ekran, промальовує рядок пояснення, цикл поки не натиснута клавіша «вліво», «праворуч», «Enter», «Esc» - питає клавіатуру за допомогою функції «Readkey» якщо натиснута «Вниз» чи «Вгору» уменьшаетя або збільшується відповідно поточний лічильник позицій меню
Функція Vstroca;
Функція організовує головне меню у верхній частині екрана.
Встановлює параметри кольору, виводить на екран масив з перемінними меню тобто назвами меню. Опитує клавіатуру на натискання клавіші «Ліворуч», «Вправо», «Enter» виконує відповідні цим клавішам команди. Потім якщо було натиснення «Esc» функція приймає значення менше 1, а потім у головній програмі відбувається вихід.
Процедура Sortirovka;
Сортує дані по заданій колонці.
Організовується цикл на всі позиції масиву бази. База переносить дані в сторонню базу. Вибирає стовпець сортування порівнює зі сторонньої базою якщо більше то переносить в сторонню базу запам'ятовує позицію. Наприкінці циклу переставляє позиції основної бази.
Опис алгоритму роботи програми.
Очищається екран виводиться меню для зазначення місця розташування і назви файлу бази за умовчанням це «С: base.dat» потім перевіряється створений чи файл якщо ні то створюється. Організовується цикл до кінця файлу переписуються дані в масив бази. Обнуляються змінні. організується меню за даними функції Vstroka потім происходи вибір за допомогою оператора Case за яким здійснюються переходи. У випадку «1» приходу функції Vstroka виводиться лістинг даних бази і заголовків, організація руху курсору по рядках бази за допомогою процедури Vivlist. В разі результату «2» формується вікно з тінню «Прийшов», заповнюється вікно за допомогою процедури Prishlo по поточній позиції курсору екрану і лістингу. «3» формується вікно «Витрати», заповнюється за допомогою процедури Ushlo. «4» організується вікно «Знайти найменування» вводиться текст за допомогою функції Edtext. порівнюється з найменуваннями бази в разі знаходження встановлює курсор на це місце. Якщо не знаходить підтвердить, що Ви і встановлює на кінцеву позицію. «5» Вікно сортування. Виконується процедура Sortirovka. При інших значеннях функції Vstroca відбувається запис файлу бази, закриття файлу.
III.
АЛГОРИТМ ПРОГРАМИ.
IV. ТЕКСТ ПРОГРАМИ.
Program kursovoi;
uses crt;
type basskl = record
naim: string [40];
kol: integer;
price: single;
kol_p: integer;
date_p: string [8];
kol_r: integer;
date_r: string [8];
end;
var f: file of basskl;
List: array [0 .. 255] of basskl;
Schet: Integer;
curs, stran, i, mcurs: integer;
k: char;
Res, da, er, seter: Integer;
Tx, files: String;
key: boolean;
const
mnu: array [1 .. 6] of string [13] = (
'Enter',
'Прихід',
'Витрати',
'Знайти',
'Сортування',
'Вихід');
function Probel (Text: String; Len: Integer): String;
begin
While length (Text)
Probel: = copy (Text, 1, len)
end;
function Edtext (x, y: Integer; Text: String; Len: Integer; var key: boolean): String;
var c: char;
begin
key: = true;
Edtext :='';< br />
repeat
gotoxy (x, y);
write (Text);
write (Probel ('', len));
gotoxy (x, y);
write (Text);
c: = Readkey;
if c = # 8 then delete (Text, length (Text), 1);
if c in [ 'A' .. 'z', '','.',' 0' .. '9 ',' А '..' я','-'] then Text: = Text + c;
Text: = copy (Text, 1, len);
until (c = # 27) or (c = # 13);
if c = # 13 then Edtext: = Text else key: = false;
end;
function Cifri (x, y: Integer; Text: String; Len: Integer; var key: boolean): String;
var c: char;
begin
key: = true;
Cifri :='';< br />
repeat
gotoxy (x, y);
write (Text);
write (Probel ('', len));
gotoxy (x, y);
write (Text);
c: = Readkey;
if c = # 8 then delete (Text, length (Text), 1);
if c in ['.',' 0 '.. '9','-'] then Text: = Text + c;
Text: = copy (Text, 1, len);
until (c = # 27) or (c = # 13);
if c = # 13 then Cifri: = Text else key: = false;
end;
procedure Prishlo (posiz: integer);
var Tx: String;
er: integer;
key: Boolean;
kl: integer;
begin
clrscr;
With List [Posiz] do begin
writeln ( 'Прихід');
writeln ( 'Кількість ->');< br />
writeln ( 'Дата приходу дд.мм.гг->');< br />
val (Cifri (25,2,'', 6, key), kl, er); if NOT key then exit;
kol_p: = kol_p + kl; kol: = kol + kl;
Date_p: = Cifri (25,3,'', 8, key); if NOT key then exit;
end;
end;
procedure Ushlo (posiz: integer);
var er: integer;
key: Boolean;
kl: integer;
begin
clrscr;
With List [Posiz] do begin
writeln ( 'Витрати');
writeln ( 'Кількість ->');< br />
writeln ( 'Дата витрати дд.мм.гг->');< br />
val (Cifri (25,2,'', 6, key), kl, er); if NOT key then exit;
kol_r: = kol_r + kl; kol: = kol-kl;
Date_r: = Cifri (25,3,'', 8, key); if NOT key then exit;
end;
end;
procedure Vvodnov;
var Tx: String;
er: integer;
key: Boolean;
begin
clrscr;
With List [Schet] do begin
writeln ( 'Новий товар');
writeln ( 'Назва товару :');< br />
writeln ( 'Кількість:');
writeln ( 'Ціна:');
writeln ( 'Дата приходу дд.мм.гг:'); (readln (date_p);)
Naim: = Edtext (25,2,'', 20, key); if NOT key then exit;
val (Cifri (25,3,'', 6, key), kol, er); if NOT key then exit;
kol_p: = kol;
val (Cifri (25,4,'', 10, key), price, er); if NOT key then exit;
Date_p: = Cifri (25,5,'', 8, key); if NOT key then exit;
inc (Schet);
end;
end;
procedure Edzapic (posiz: integer);
var Tx: String;
er: integer;
key: Boolean;
begin
clrscr;
With List [posiz] do begin
writeln ( 'Редактор товару');
writeln ( 'Назва товару :');< br />
writeln ( 'Ціна :');< br />
Tx: = Edtext (25,2, Naim, 20, key); if key then Naim: = tx;
str (price: 0:2, tx);
tx: = Cifri (25,3, tx, 10, key); if key then val (tx, price, er);
end;
end;
function vstroca (var curs: integer): integer;
var i: integer;
begin
Textbackground (15);
TextColor (0);
gotoxy (1,1); write (Probel ('', 80));
for i: = 0 to 5 do
begin
gotoxy (i * 13 +1,1); write (mnu [i +1]);
end;
Textbackground (0);
TextColor (14);
gotoxy ((curs-1) * 13 +1,1); write (mnu [curs]);
repeat
k: = readkey;
Textbackground (15);
TextColor (0);
gotoxy ((curs-1) * 13 +1,1); write (mnu [curs]);
if k = # 0 then k: = readkey;
case k of
# 75: if curs> 1 then dec (curs) else curs: = 6;
# 77: if curs
end;
Textbackground (0);
TextColor (14);
gotoxy ((curs-1) * 13 +1,1); write (mnu [curs]);
if k = # 13 then vstroca: = curs;
until (k = # 27) or (k = # 13);
if k = # 27 then vstroca: =- 1;
end;
function VIVSTR (nstr: integer): String;
var Skol, sprice, summ,
Pkol, Rkol: String [10];
begin
VIVSTR :='';< br />
if (nstr = 0) then
With List [nstr] do
begin
str (kol, skol);
str (price: 9:2, sprice);
str (price * kol: 9:2, summ);
str (kol_p, pkol);
str (kol_r, rkol);
VIVSTR: = Probel (naim, 20) + Probel (skol, 6) + Probel (sprice, 11) + Probel (summ, 11) +
Probel (Pkol, 6) + Probel (Date_p, 10) + Probel (Rkol, 6) + Probel (Date_r, 9);
end;
end;
procedure Ekran;
var i: integer;
Summ_, Sum_p, Sum_r: Double;
begin
Window (1,2,80,25);
Textbackground (5);
TextColor (10);
Clrscr;
gotoxy (1,1);
Textbackground (3);
write (Probel ( 'Назва', 20) + Probel ( 'Кількість', 9) + Probel ( 'Ціна', 10) +
Probel ( 'Сума', 7) + Probel ( 'Прихід', 7) + Probel ( 'Дата пост', 10) + Probel ( 'Витрати', 6)
+ Probel ( 'Дата выд', 9));
Textbackground (5);
TextColor (14);
for i: = 0 to 20 do
begin
gotoxy (1,2 + i); Write (Vivstr (i + stran));
end;
Textbackground (15);
TextColor (0);
gotoxy (1,1 + curs); write (VIVSTR (curs + stran-1));
Summ_: = 0; Sum_p: = 0; Sum_r: = 0;
for i: = 0 to Schet-1 do
begin
Summ_: = Summ_ + (List [i]. Price * List [i]. Kol);
Sum_p: = Sum_p + (List [i]. Price * List [i]. Kol_p);
Sum_r: = Sum_r + (List [i]. Price * List [i]. Kol_r);
end;
Textbackground (4);
TextColor (15);
gotoxy (1,23); write (Probel ('', 80));
gotoxy (1,23); write ( 'Разом:',
Summ_: 12:2, 'руб. Прихід: ', Sum_p: 0:2,' руб. Витрата: ', Sum_r: 0:2,' руб .');< br />
gotoxy (15,24); write ( 'Загальна кількість найменувань товару:', schet, 'шт');
end;
procedure Sortirovka (num: Integer);
var i, j, k: Integer;
Bas: Basskl;
begin
for i: = 0 to Schet-1 do
begin
Bas: = List [i];
for j: = i +1 to Schet-1 do
begin
case Num of
1: if Bas.Naim> List [j]. Naim then begin Bas: = List [j]; k: = j end;
2: if Bas.kol> List [j]. Kol then begin Bas: = List [j]; k: = j end;
3: if Bas.price> List [j]. Price then begin Bas: = List [j]; k: = j end;
5: if Bas.kol_p> List [j]. Kol_p then begin Bas: = List [j]; k: = j end;
6: if Bas.date_p> List [j]. Date_p then begin Bas: = List [j]; k: = j end;
7: if Bas.kol_r> List [j]. Kol_r then begin Bas: = List [j]; k: = j end;
8: if Bas.date_r> List [j]. Date_r then begin Bas: = List [j]; k: = j end;
end;
end;
List [k]: = List [i]; List [i]: = Bas;
end;
end;
procedure Vivlist (var seek, curs: integer);
var c, k: char;
i: integer;
begin
Ekran;
Textbackground (3);
gotoxy (1,24); write (Probel ( '- меню | Ins - Додати | Ctrl + F8 - Видалити | Ctrl + Enter - змінити', 79));
Textbackground (15);
TextColor (1);
gotoxy (1,1 + curs); write (VIVSTR (curs + stran-1));
repeat
c: = readkey;
Textbackground (5);
TextColor (14);
gotoxy (1,1 + curs); write (VIVSTR (curs + stran-1));
if c = # 0 then k: = readkey;
case k of
# 72: begin (На початок курсор)
if (curs = 1) and (stran> 0) then begin dec (stran); Ekran end;
if (curs> 1) then dec (curs);
end;
# 80: begin (Вниз курсор)
if (curs = 20) and (stran 20
begin inc (stran); Ekran end;
if ((curs = 20))
or ((Schet0 then
for i: = curs + stran-1 to Schet-1 do
begin
List [i]: = List [i +1];
end;
dec (Schet);
dec (curs);
Ekran;
end;
# 82: begin (Ins - новий запис)
Window (12,12,72,17);
Textbackground (0);
clrscr;
Window (10,11,70,16);
Textbackground (7);
clrscr;
(ново запис)
Vvodnov;
Sortirovka (1);
Window (1,1,80,25);
Ekran;
end;
end;
if c = # 10 then (Ctrl + Enter)
begin
Window (12,12,72,17);
Textbackground (0);
clrscr;
Window (10,11,70,16);
Textbackground (7);
clrscr;
(ново запис)
Edzapic (Curs + stran-1);
Sortirovka (1);
Window (1,1,80,25);
Ekran;
end;
Textbackground (15);
TextColor (1);
gotoxy (1,1 + curs); write (VIVSTR (curs + stran-1));
until (k = # 27) or (k = # 13) or (k = # 75) or (k = # 77);
Window (1,1,80,25);
end;
begin
clrscr;
Window (16,12,66,15);
Textbackground (9);
textcolor (3);
clrscr;
write ( 'Введіть ім'я і повний шлях бази');
gotoxy (3,3);
readln (files);
if files =''then files: = 'c: base.dat';
assign (f, files);
($ I-)
reset (f);
($ I +)
if IOResult0 then rewrite (f);
Schet: = 0;
While not eof (f) do
begin
inc (Schet);
read (f, List [Schet-1]);
end;
Textbackground (0);
clrscr;
curs: = 1; stran: = 0; mcurs: = 1; seter: = 15;
repeat
Ekran;
Window (1,1,80,25);
res: = vstroca (mcurs);
case res of
1: begin
Vivlist (stran, curs);
Window (1,1,80,25);
end;
2: begin
Window (16,12,66,15);
Textbackground (0);
clrscr;
Window (14,11,64,14);
Textbackground (7);
clrscr;
(Запуск нового запису)
Prishlo (Curs + stran-1);
Window (1,1,80,25);
end;
3: begin
Window (16,12,66,15);
Textbackground (0);
clrscr;
Window (14,11,64,14);
Textbackground (7);
clrscr;
(Запуск нового запису)
Ushlo (Curs + stran-1);
Window (1,1,80,25);
end;
4: begin (Пошук)
Window (16,12,66,14);
Textbackground (7);
clrscr;
Window (14,11,64,13);
Textbackground (8);
clrscr;
Gotoxy (2,2); Write ( 'Знайти найменування :');< br />
Tx: = Edtext (25,2,'', 20, key);
for i: = 0 to Schet-1 do
if List [i]. naim = tx then begin seter: = 1; break; end;
if i> 20 then begin curs: = 1; stran: = i end
else begin curs: = i +1; stran: = 0; end;
if seter1 then
begin
Window (16,12,66,14);
Textbackground (7);
clrscr;
Window (14,11,64,13);
Textbackground (8);
clrscr;
Gotoxy (2,2); Write ( 'Назва ненайдено'); readln; stran: = 1; curs: = 1;
end;
Vivlist (stran, curs);
Window (1,1,80,25);
end;
5: begin (Сортування)
Window (16,12,66,14);
Textbackground (0);
clrscr;
Window (14,11,64,13);
Textbackground (7);
clrscr;
Gotoxy (2,2); Write ( 'Введіть поле для сортування (1 .. 8 ):');< br />
val (Cifri (38,2,'', 1, key), da, er);
if da in [1 .. 8] then Sortirovka (da);
Window (1,1,80,25);
end;
end;
until (res
Rewrite (f);
Sortirovka (1);
for i: = 0 to Schet-1 do Write (f, List [i]);
close (f);
end.