На головну

 Автоматичне робоче місце для працівника складу - Інформатика

 Кафедра суспільно освітніх предметів

 Виконала: студентка гр. ВМ1-99 Н.В. Позднякова

 Перевірив:

 старший викладач А.І. Волков

 м Чайковський, 2000

ВВедение.

Дана програма автоматизованого робочого місця розроблена для працівників складських приміщень, природно якщо у них є комп'ютер класом не нижче 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. Вводити новий товар, вказуючи наступні параметри

u Найменування;

u Кількість;

u Ціну;

u Дату надходження.

2. Здійснювати пошук товару по найменуванню і видавати його параметри.

3. Позначати вибулий товар, вказуючи дату видачі.

4. Виводити список наявного товару з можливістю сортування по будь-якому параметру.

5. Виводити список вибулого товару з можливістю сортування по будь-якому параметру.

6. Видавати загальну статистичну характеристику:

u Загальна вартість наявного товару;

u Кількість наявного товару;

u Кількість вибулого товару.

7. Зберігати і відновлювати всю інформацію АРМ з диска.

II. опис змінних і алгоритму роботи програми.

Опис змінних.

u basskl - основна запис з необхідними змінними це:

O naim - найменування товару;

O kol - кількість товару;

O price - ціна товару;

O kol_p - кількість прийшов товару;

O kol_r - кількість товару який пішов;

O date_p - дата приходу товару;

O date_r - дата витрати товару.

u f - file бази слад;

u list - масив даних бази;

u schet - лічильник;

u curs - показник позиції;

u stran - лічильник позиції курсору;

u i - мінлива використання;

u mcurs - мінлива початковій позиції меню;

u k -змінного визначення клавіші;

u res -змінного вибору меню;

u da - мінлива використання;

u er - мінлива помилки перетворення;

u tx - мінлива тексту при пошуку;

u fil - змінна імені бази;

u key - прапорець;

u 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] = (

'Введення',

'Прихід',

'Витрата',

'Знайти',

'Сортування',

'Вихід');

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: = '';

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: = '';

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 ('Кількість ->');

writeln ('Дата приходу ДД.ММ.ГГ->');

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 ('Кількість ->');

writeln ('Дата витрати ДД.ММ.ГГ->');

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 ('Найменування товару:');

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 ('Найменування товару:');

writeln ('Ціна:');

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 <6 then inc (curs) else curs: = 1;

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: = '';

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,' руб. ');

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 + 20begin inc (stran); Ekran end;

if ((curs <20) and (Schet> = 20))

or ((Schet <20) and (cursend;

# 101: begin {Видалити} {Ctrl + F8}

if Schet> 0 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 IOResult 0 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 ('Знайти найменування:');

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 seter 1 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):');

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 <1) or (res = 6);

Rewrite (f);

Sortirovka (1);

for i: = 0 to Schet-1 do Write (f, List [i]);

close (f);

end.

© 8ref.com - українські реферати
8ref.com