Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ НОУ СПО САЯНСКИЙ ТЕХНИКУМ ЭКОНОМИКИ МЕНЕДЖМЕНТА И ИНФОРМАТИКИ

КУРСОВАЯ РАБОТА

ДИСЦИПЛИНА: ТЕОРИЯ РАЗРАБОТКИ ПРОГРАММНОГО ПРОДУКТА

ТЕМА: АРМ «СКЛАД»

ВЫПОЛНИЛ: ЕВТУШЕНКО В. В.

ГРУППА: 207П1

РУКОВОДИТЕЛЬ:

ОЦЕНКА:

ДАТА:

АБАКАН, 2007

Содержание

Введение

Целью данной курсовой работы является написание программного продукта для АРМ «Склад».

Для достижения данной цели были поставлены следующие задачи:

    Поиск информации для написания курсовой в различных источниках; Изучить материал по поставленной задаче; Изучение языка программирования Object Pascal; ("1") Изучение информации по среде программирования Delphi; Написание программы; Тестирование программы;

Данная курсовая написана в среде Turbo Pascal v 7.0 (русифицированная версия). В структуре языка заложены возможности простой и чрезвычайно эффективной работы с базами данных, что позволяет на его основе создавать различного рода информационно - справочные системы. Структура языка Паскль соответствует структуре реляционных баз данных.

Глава 1. Теоретическая часть

 

1.  Основные функции и задачи склада

Перемещение материальных потоков невозможно без концентрации в определенных местах необходимых запасов, для хранения которых предназначены соответствующие склады. Движение через склад связано с затратами живого и овеществленного труда, что увеличивает стоимость товара. В связи с этим проблемы, связанные с функционированием складов, оказывают значительное влияние на рационализацию движения материальных потоков в цепи, использование транспортных средств и издержек обращения.

НЕ нашли? Не то? Что вы ищете?

Современный крупный склад – это сложное техническое сооружение, которое состоит из многочисленных взаимосвязанных элементов, имеет определенную структуру и выполняет ряд функций по преобразованию материальных потоков, а также накоплению, переработке и распределению грузов между потребителями. При этом в силу многообразия параметров, технологических решений, конструкций оборудования и характеристик разнообразной номенклатуры, перерабатываемых грузов склады относят к сложным системам. В то же время склад сам является всего лишь элементом системы более высокого уровня – логистической цепи, которая и формирует основные и технические требования к складской системе, устанавливает цели и критерии её оптимального функционирования, диктует условия переработки груза.

Поэтому склад должен рассматриваться не изолированно, а как интегрированная составная часть цепи. Только такой подход позволит обеспечить успешное выполнение основных функций склада и достижение высокого уровня рентабельности. При этом необходимо иметь в виду, что в каждом отдельно взятом случае, для конкретного склада, параметры складской системы значительно отличаются друг от друга, так же как ее элементы и сама структура, основанная на взаимосвязи этих элементов. При создании складской системы нужно руководствоваться следующим основным принципом: лишь индивидуальное решение с учетом всех влияющих факторов может сделать ее рентабельной. Предпосылкой этого является четкое определение функциональных задач и основательный анализ переработки груза как внутри, так и вне склада. Любые затраты должны быть экономически оправданными, т. е. внедрение любого технологического и технического решения, связанное с капиталовложениями, должно исходить из рациональной целесообразности, а не из модных тенденций и предлагаемых технических возможностей на рынке.

Основное назначение склада – концентрация запасов, их хранение и обеспечение бесперебойного и ритмичного выполнения заказов потребителей. К основным функциям склада можно отнести следующие:

Преобразование производственного ассортимента в потребительский в соответствии со спросом – создание необходимого ассортимента для выполнения заказов клиентов. Складирование и хранение позволяет выравнивать временную разницу между выпуском продукции и ее потреблением и дает возможность осуществлять непрерывное производство и снабжение на базе создаваемых товарных запасов. Хранение товаров в распределительной системе необходимо также и в связи с сезонным потреблением некоторых товаров. Унитизация и транспортировка грузов. Предоставление услуг. Очевидным аспектом этой функции является оказание клиентам различных услуг, обеспечивающих фирме высокий уровень обслуживания потребителей. Среди них: подготовка товаров для продажи (фасовка продукции, заполнение контейнеров, распаковка и т. д.); проверка функционирования приборов и оборудования, монтаж; придание продукции товарного вида, предварительная обработка (например, древесины); транспортно-экспедиционные услуги и т. д.  

2.  Задачи курсовой работы

Программа должна предоставлять пользователю возможность:

Вводить новый товар, указывая следующие параметры
    ("2") Наименование; Количество; Цену; Дату поступления.
Осуществлять поиск товара по наименованию и выдавать его параметры. Помечать выбывший товар, указывая дату выдачи. Выводить список имеющегося товара с возможностью сортировки по любому параметру. Выводить список выбывшего товара с возможностью сортировки по любому параметру. Выдавать общую статистическую характеристику:
    Общая стоимость имеющегося товара; Количество имеющегося товара; Количество выбывшего товара.
Сохранять и восстанавливать всю информацию АРМ с диска.  

3.  База данных и способы ее представления

База данных в простейшем случае - упорядоченная структура данных в виде таблицы, каждая запись которой может объединять разнотипные данные, причем все записи одной базы имеют одинаковую структуру. Существуют три модели представления баз данных: иерархическая, сетевая и реляционная. В силу особенностей языка Паскаль, с его помощью реализуется реляционная модель. Каждая строка в базе данных называется элементом отношения, каждая колонка - атрибутом отношения, количество колонок - арностью, а количество строк - мощностью. В языке программирования Паскаль атрибуту отношения соответствует аргумент предиката, арности количество аргументов в предикате, отношению - предикат, элементу - факт, и мощности - число фактов. Исходя из вышеперечисленных соответствий Паскаль является прекрасным средством для реализации реляционных баз данных.

Существует очень простое понятие базы данных как большого по объему хранилища, в которое организация помещает все используемые ею данные и из которого различные пользователи могут их получать, используя различные приложения. Такая единая база данных представляется идеальным вариантом, хотя на практике это решение по различным причинам трудно достижимо. Поэтому чаще всего под базой данных понимают любой набор хранящихся в компьютере данных.

В основу проектирования БД должны быть положены представления конечных пользователей организации – концептуальные требования к системе. Потому что, именно конечный пользователь в своей работе принимает решения с учетом получаемой в результате доступа к базе данных информации. Следовательно, от оперативности и качества этой информации будет зависеть эффективность работы организации. Данные, помещаемые в базу данных, также предоставляет конечный пользователь.

При рассмотрении требований конечных пользователей принято во внимание следующее:

База данных должна удовлетворять актуальным информационным потребностям организации. Получаемая информация должна по структуре и содержанию соответствовать решаемым задачам.

База данных должна обеспечивать получение требуемых данных за приемлемое время, то есть отвечать заданным требованиям производительности.

("3") База данных должна удовлетворять выявленным и вновь возникающим требованиям конечных пользователей.

Загруженные в базу данных корректные данные должны оставаться корректными.

Данные до включения в базу данных должны проверяться на достоверность.

Доступ к данным, размещаемым в базе данных, должны иметь только лица с соответствующими полномочиями.

На основании вышеизложенного рассмотрим этапы проектирования баз данных, которые должны обеспечить необходимую независимость данных и выполнение эксплуатационных требований (пожеланий пользователей).

 

4.  Описание программы

Описание переменных.

basskl – основная запись с необходимыми переменными это: naim – наименование товара; kol – количество товара; price – цена товара; kol_p – количество пришедшего товара; kol_r – количество товара, который ушел; date_p – дата прихода товара; date_r – дата расхода товара. f – file базы слада; list – массив данных базы; schet – cчетчик; curs – показатель позиции; stran – счетчик позиции курсора; ("4") i – переменная использования; mcurs – переменная начальной позиции меню; k –переменная определения клавиши; res –переменная выбора меню; da – переменная использования; er – переменная ошибки преобразования; tx – переменная текста при поиске; fil – переменная имени базы; key – флажок; seter – переменная использования.

Кроме переменных в программе используются процедуры, и функции, описание которых приведено ниже;

Функция probel;

Используется для дополнения текста требуемыми количествами пробелов.

Вход: Текст, требуемая длина.

Выход: Текст требуемой длины.

Функция Edtext;

Используется для вывода на экран в нужную позицию текста и его последующего редактирования

Функция работает следующим образом:

Зацикливается до тех пор пока не будет нажатия Enter или Esc. В это время выводит на экран текст в нужную позицию, обновляется, ожидает нажатия клавиш или delete.

Вход: Координаты, текст, длина текста, флажок.

("5") Выход: Вывод на экран текста, отредактированный текст.

Функция Cifri;

Подобна функции Edtext только ввод текста ограничен цифрами.

Работает также.

Процедура Prishlo;

Применяется для вывода на экран меню «Приход» и занесения данных в позицию базы.

Описание работы: Работает со строкой массива базы. Выводит на экран меню «Приход», преобразует текстовые переменные после ввода в строки меню.

Процедура Ushlo;

Аналогична процедуре Prishlo. Заменена только формула вычисления количества.

Процедура Vvodnov;

Процедура обеспечивающая вывод на экран меню «Новый товар», ввод новой строки в базу.

Работает: Ограничивается строкой, для работы с переменными записи, выводит на экран меню, пользователем редактируются строки меню, преобразуются, увеличивается счетчик числа строк базы на 1.

Процедура Edzapic;

Используется для редактирования записи в текущей позиции курсора листинга перечня товаров.

Вход: Позиция

Выход: отредактированный текст в данной позиции.

Процедура Ekran;

Отображает на экране заголовок таблицы базы и заполняет таблицу, рассчитывает и отображает на экране нижнюю строку состояния базы общую сумму, общий приход, общий расход, общее количество товаров.

Описание: Формирует окно для работы, отображает заголовок таблицы, цикл для вывода первых двадцати строк базы в окно, обнуление счетчиков сумм, цикл на все позиции базы, расчет сумм в этом цикле вывод результата на экран в виде строки состояния.

Функция Vivstr;

("6") Формирует строку по позиции в базе.

Обнуляется. Работает со строкой в массиве базы. Производит преобразование в стринговые переменные числовых значений базы (количества цены, приход, расход), сумма формируется путем вычисления. Добавление нужными пробелами функцией Probel.

Процедура Vivlist;

Обеспечивает формирование экрана с помощью процедуры Ekran, вывод поясняющей строки. Подкрашивание строки в позиции курсора, опрос клавиш курсора и служебных (для ввода новой, корректировки, удаления). Работает следующим образом: Выполняет процедуру Ekran, прорисовывает строку пояснения, цикл пока не нажата клавиша «влево», «вправо», «Enter», «Esc» – опрашивает клавиатуру с помощью функции «Readkey» если нажата «Вниз» или «Вверх» уменьшаетя или увеличивается соответственно текущий счетчик позиций меню

Функция Vstroca;

Функция организует главное меню в верхней строке экрана.

Устанавливает параметры цвета, выводит на экран массив с переменными меню т. е. названиями меню. Опрашивает клавиатуру на нажатие клавиши «Влево», «Вправо», «Enter» выполняет соответствующие этим клавишам команды. Затем если было нажато «Esc» функция принимает значение меньшее 1 и затем в головной программе происходит выход.

Процедура Sortirovka;

Сортирует данные по заданной колонке.

Организуется цикл на все позиции массива базы. База переносит данные в стороннюю базу. Выбирает столбец сортировки сравнивает со сторонней базой если больше то переносит в стороннюю базу запоминает позицию. В конце цикла переставляет позиции основной базы.

Глава 2. Практическая часть

 

1.  Общая схема алгоритма

Описание

 

2.  Описание алгоритма работы программы.

Очищается экран выводится меню для указания месторасположения и названия файла базы по умолчанию это «С:\base. dat» затем проверяется создан ли файл если нет то создается. Организуется цикл до конца файла переписываются данные в массив базы. Обнуляются переменные. организуется меню по данным функции Vstroka затем происходи выбор с помощью оператора Case по которому осуществляются переходы. В случае «1» прихода функции Vstroka выводится листинг данных базы и заголовков, организация движения курсора по строкам базы при помощи процедуры Vivlist. В случае результата «2» формируется окно с тенью «Пришло», заполняется окно с помощью процедуры Prishlo по текущей позиции курсора экрана и листинга. «3» формируется окно «Расход», заполняется с помощью процедуры Ushlo. «4» организуется окно «Найти наименование» вводится текст с помощью функции Edtext. сравнивается с наименованиями базы если находит устанавливает курсор на это место. Если не находит выводит сообщение и устанавливает на конечную позицию. «5» Окно сортировки. Выполняется процедура Sortirovka. При других значениях функции Vstroca происходит запись файла базы, закрытие файла.

 

3.  Спецификация программы

Таблица 2.2.2.

Спецификация программы

Название файла

Примечание

Обозначение файла

Склад. EXE

Исполняемый файл

Запускает программу

Склад. pas

Файлы модулей

Содержат основной код программы

*.db

Файл базы

Содержит вопросы и ответы

("7")  

4.  Требование к ресурсам компьютера

Программа не требовательна к аппаратным средствам, она не использует графических и других элементов требуемых более мощного компьютера, программа работает в среде DOS, поэтому ей необходимы минимальные требование и наличие среды DOS

Программный продукт «Склад», представляет собой файл с расширением *.exe, являющийся исполняемым кодом языка программирования Pascal.

Программа состоит из двух частей:

база данных, которая хранит различные данные ; приложение, которое позволяет работать с данными, получать отчеты и сводные таблицы на основе этих данных.

Таблица 2.4.1. Основные требования к техническим и программным средствам

Наименование технического средства или компонента

Техническая характеристика

Примечание

Технология изготовления

АТX

От этого зависит мощность и возможности оборудования

Центральный процессор

Pentium 166 MHz и выше

Лучше Pentium 233 MHz и выше

Оперативная память

Не менее 32Mb SIMM

Желательно 64 или 128 MB DIMM

Материнская плата

Видео карта

SVGA с 2MB

Можно более мощные с графическим акселератором

Звуковая плата, колонки

Не требуется

Не требуется

Носители информации

В зависимости от объема данных в базе

В зависимости от объема данных в базе

Дисководы

Для гибких магнитных дисков 3.5” на 1.44MB

CD-ROM

Не требуется

Не требуется

Монитор

15”

17”

Клавиатура

Стандартная 104 клавишная

Совместимая с операционной системой Windows 95

("8")  

5.  Описание реализации алгоритма

Программа начинает с вою работы с запуска файла Склад. EXE. появляется запрос на создание базы данных или прописание пути к существующей базе данных в противном случае она автоматически создает базу данных на диске C:\Base. dat.

Программа

Программа после запуска выглядит так

После

После выбора меню «Ввод» появится следующая строка в низу экрана. Можно сказать что это помощь в работе

Выбрав

Выбрав добавить нажатием клавиши Ins, появляется окно заполнения базы

Выбрав

Меню приход выводит следующее оно

Меню

Меню расход выводит следующее окно

При

При выборе поиска появляется окно поиска по наименованию

Меню

Меню сортировка выводит окно, в котором вводится номер столбца, по которому необходимо отсортировать данные в таблице

таким

таким образом мы ведем учет товара на складе его последний приход о расход по датам, наличие его на складе и его дефицит

таким

("9") Заключение

При написании данной курсовой работы были выполнены поставленные цели по написанию программного продукта для АРМ «Склад»:

    Поиск информации для написания курсовой в различных источниках; Изучить материал по поставленной задаче; Изучение языка программирования Object Pascal; Изучение информации по среде программирования Delphi; Написание программы; Тестирование программы;

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

Данная программа автоматизированного рабочего места разработана для работников складских помещений, естественно, если у них имеется компьютер классом не ниже Pentium. Сейчас на рынке программного обеспечения появляются все больше и больше различных программ для работы не только со складом, но и различные другие программные средства автоматизированного рабочего места, но стоимость их лицензионных копий доходит порой до нескольких десятков тысяч.

Каковы её плюсы: ну это естественно простота и понятность (для русского человека) интерфейса программы, что не требует дополнительного обучения или прохождения специальных курсов, особенно для женщин, работающих на складах и не посвященных в азы компьютеров и программного обеспечения; не требовательность к системным ресурсам машины; легкость ввода и отслеживания; простота резервирования базы данных (всего 1 файл), что не маловажно для такой программы. При написании и разработке курсового проекта закрепил знания по работе с Borland Pascal, Microsoft Windows, Microsoft Word которые использовались для работы над курсовым проектом, научился использовать справку и другие функции Borland Pascal при этом даже разобрался с английским языком и использованием электронных словарей переводчиков таких как Promt, Stylus, Magic Gooddy 98.

Список литературы

И. Братко "Программирование на языке Пролог для искусственного интеллекта" Дж. Доорс "Пролог - язык программирования будущего" Гаджинский : Учебник. – М.: Маркетинг, 1998. – 228 с. Залманова : Учеб. пособие. – Саратов: СГТУ, 1995. – 166 с. , Омельченко промышленной логистики: Учеб. пособие. – М.: МГТУ, 1998. – 116 с. , Смоляков . Ч. 1 – 2. – М.: Машиностроение, 1996. Логистика: Учеб. пособие/Под ред. . – М.: ИНФРА–М, 1997. – 327 с. ("10") Неруш логистика: Учебник. – М.: ЮНИТИ. – 271 с. , , Уваров : Учеб. пособие. – СПб.: СЭПИ, 1996. – 112 с. Основы логистики: Учеб. пособие/Под ред. и – М.: ИНФРА–М, 1999. Промышленная логистика. – СП б.: Политехника, 1994. – 165 с. Логистика: Учеб. пособие/Под редакцией . – М.: ИНФРА–М, 2000. – 352 с.

ПРИЛОЖЕНИЕ №1 ЛИСЛИНГ ПРОГРАММЫ

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;

("11") 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)<Len do Text:=Text+' ';

Probel:=copy(Text,1,len)

end;

function Edtext(x, y:Integer; Text:String;Len:Integer;var key:boolean):String;

var c:char;

("12") 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;

("13") 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

("14") 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(' Дата расхода ДД. ММ. ГГ->');

("15") 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;

("16") 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;

("17") 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

("18") #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<Schet) and (nstr>=0) then

With List[nstr] do

begin

str(kol, skol);

str(price:9:2,sprice);

("19") 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));

("20") 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(' Итого: ',

("21") 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;

("22") 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));

("23") 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<Schet) then

begin inc(stran); Ekran end;

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

or ((Schet<20) and (curs<Schet)) then inc(curs);

end;

#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);

("24") 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);

("25") 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);

("26") 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;

("27") 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;

("28") 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);

("29") 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);

("30") 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.

preview_end()