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

Основные процессы учёта имущества и трудности, связанные с ними. Требования к модулям системы инвентаризации. Стандарт, алгоритм и программы распознавания QR-кода. Разработка программного обеспечения для генерации QR-кода на языке программирования Python.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 5,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

importImage, ImageDraw

img = Image.open(test.png')

print img.info

Конвертация изображения:

import Image, ImageDraw

img = Image.open('test.png')

img.save('test.gif')

WxPython -- это обёртка библиотеки кроссплатформенного графического интерфейса пользователя для Python, основой которого является кроссплатформенная API (интерфейс программирования приложений) wxWidgets, написанная на языке программирования C++. Одна из альтернатив Tkinter, которая поставляется вместе с Python. Реализована в виде модуля расширения Python (машинный код). Другие популярные альтернативы -- PyGTK и PyQt. Так же, как и WxWidgets, WxPython является свободным программным обеспечением.

WxPython используется для построения графического интерфейса пользователя (GUI).Она разработана не только для того, чтобы создавать GUI. Она также имеет набор классов для работы с графическими изображениями, HTML, XML документами, архивами, файловыми системами, процессами, подсистемами печати, мультимедиа, сетями, классы для организации многопоточности, отладки, отправки дампов и множество других инструментов.

Основные принципы:

1. Все элементы должны находиться в сайзере. Сайзер (wx.Sizer) - это некий невидимый элемент формы, который обозначает местоположение всех компонентов формы.

2. Иерархия элементов: Форма (wx.Frame) -- на ней расположен сайзер, в сайзер добавлен контейнер -- панель (wx.Panel), на панели добавлен еще один сайзер, и уже в данный сайзер добавляются все элементы формы.

3. Если компонент добавляется на панель, его необходимо добавить в сайзер.

4. Свойства всех контролов можно не прописывать полностью. Если параметры и свойства не будут указаны, они выставятся автоматически стандартными.

В wx есть формы нескольких типов:

wx.Dialog -- диалоговое окно.

wx.Frame -- обычная форма представляющая собой окошко со стандартным функционалом (свернуть (wx.ICONIZE), максимизировать (wx.MAXIMIZE), закрыть (wx.Close)).

Обычное представление wx.Frame в коде:

wx.Frame.__init__ ( self, parent=None, id = wx.ID_ANY, title = u"NameWindow", pos = wx.DefaultPosition, size = wx.Size( int,int ), style = wx.CAPTION )

Данная строчка кода инициализирует форму и рисует её, используя введенные свойства.

wx.Frame.__init__ (self, parent = None)

Тоже нарисует форму, а все свойства форму будут стандартными.

Self и parent два обязательных параметра любой формы.Разберем инициализацию формы:self обозначает принадлежность к классу, parent -- родитель этого окна. id -- каждый элемент, окно имеет собственный id, чтобы обращаться или присваивать элементу действие, событие. По умолчанию можно оставить -1 или wx.ID_ANY, что формализует собой любой id (каждый элемент должен иметь свой уникальный id, который можно использовать для обращения или для присваивания действий элементу; если это не требуется, то в качестве id можно задавать значение wx.ID_ANY, которое, фактически, равно -1.). title -- заголовок окна, pos -- расположение формы по координатам x и y на экране, size -- размер формы в пикселях, style -- стиль окна.

Существует большое количество стилей, перечислим несколько:

· wx.CAPTION -- отображает верхний бар с заголовком, но без системного меню;

· wx.STAY_ON_TOP -- оставаться поверх окон других приложений (в случае если несколько окон будут иметь данный стиль, выше всех останется то окно, которое будет выше в родительской иерархии в приложении);

· wx.SYSTEM_MENU -- на верхнем баре появляется кнопка «закрыть», но при этом она не активна.

Отличия Dialog от Frame следующие:

1. Dialog модальное окно, т.е. до тех пор, пока не выполнишь действия в этом окне, пользователь не сможет перейти в какое либо еще окно открытое этим приложением.

2. Dialog окно содержит в себе уже панель, поэтому для диалогового окна необходим только сайзер и все элементы уже располагать на этом сайзере.

3. Диалоговое окно может обойтись без дополнительных событий на кнопки (об этом позже).

Python-qrcodeи pyqrnativeнеобходимы для генерации QR-кода.

3.3 Структура ПО

Код программы находится в приложении А. Вначале необходимо подключить необходимые библиотеки и модули, описанные выше.

Классы class QRPanel(wx.Panel)и class QRFrame(wx.Frame) нужны для создания GUI. С помощью них создается окно интерфейса, поля для ввода:

· текст для перевода в qr-код;

· имя файла с qr-кодом;

кнопки:

· изменить место для сохранения;

· создать qr при помощи qrcode;

· создать qr при помощи pyqrnative.

На рис. 3.1 и рис. 3.2 показана получившаяся форма и результат генерации.

Рис. 3.1 - Результат генерирования QR-кода при помощи qrcode

Рис. 3.2 - Результат генерирования QR-кода при помощи PyQRNative

Два метода onUseQrcode и onUsePyQR необходимы для создания QR-кода при помощи python-qrcode и pyqrnative.

Рассмотрим метод on Use Qrcode.

Параметр version представляет собой целое число от 1 до 40, который контролирует размер QR-код. Наименьшему (version=1) соответствует матрица 21х21. Если значение не будет установлено, то оно определиться автоматически.

Box_size параметр устанавливающий размерность QR-кода в пикселях.

Параметр border устанавливает толщину тихой зоны (по умолчанию равен 4, что является минимальным согласно спецификации).

Теперь рассмотрим метод on Use Py QR.

Он подразумевает выбор параметра Py QR Native. QR Error Correct Level. L, который контролирует коррекции ошибок QR-кода. Следовательно, этот параметр может быть 4 видов:

1. Py QR Native. QR Error Correct Level. L (по умолчанию): около 7% или меньше ошибок могут быть исправлены.

2. Py QR Native. QR Error Correct Level. M: около 15% или менее ошибки могут быть исправлены.

3. Py QR Native. QR Error Correct Level. Q: около 25% или менее ошибки могут быть исправлены.

4. Py QR Native. QR ErrorCorrect Level. H: около 30% или меньше ошибок могут быть исправлены.

Заключение

В данной бакалаврской работе было разработано программное обеспечение для модулей системы инвентаризации, а именно по генерации QR-кода.

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

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

В третьей части данной бакалаврской работы описывается разработанное программное обеспечение. Данный программный продукт написан на языке программирования Python. Были рассмотрены его достоинства, недостатки и особенности.

Разработанный в результате бакалаврской работы программный продукт можно использовать в процессе инвентаризации и учета имущества в любой организации

Список использованных источников

1. О бухгалтерском учёте: ФЗ от 06 декабря 2011г. № 402-ФЗ [Текст] - Рос.газ. - 2011. - 09 декабря. - С. 29

2. Построение IDEF0 диаграммы / 2016.

3. О внесении изменений в Положение по бухгалтерскому учёту "Учёт основных средств" ПБУ 6/01: Приказ Минфина РФ от 12 декабря 2005г. № 147 [Текст] - Рос.газ. - 2006. - 27 января. - С. 10

4. Об особенностях списания федерального имущества: Постановление Правительства Российской Федерации от 14 октября 2010 г. N 834 г. [Текст] -Рос.газ. - 2010. - 20 октября. - С. 24

5. Об утверждении Единого плана счетов бухгалтерского учёта для гос.орагнов, органов местного самоуправления, органов управления государственными внебюджетными фондами, государственных академий наук, государственных (муниципальных) учреждений и Инструкции по его применению: Приказ Минфина РФ от 1 декабря 2010 г. N 157 [Текст] - Рос.газ. - 2011. - 19 января. - С.18

6. 1С:Предприятие 8. Инвентаризация и управление имуществом. / 2016.

7. Программно-аппаратный комплекс «KEEP COUNT Основные средства». /2016.

8. Программный комплекс управления имуществом icControl. / 2016.

9. Управление имуществом 1.0. /2017.

10. Историяqr-кода /2017.

11. Интернет-портал содержащий информацию о том, что в себе может содержать qr-код /2017.

12. Интернет-портал, содержащий стандарт ISO/IEC 18004:200 на английском языке /2017.

13. Касперски, К. Коды Рида-Соломона в практических реализациях или Информация, воскресшая из пепла III [Текст] / К.Касперски // Системный администратор. - 2003.

14. Программы сканеры QR кода /2017.

15. Топ лучших QR декодеров для Android /2016.

16. Краткий обзор языка Python /2017.

17. Бадд, Т. Объектно-ориентированное программирование [Текст] / Т. Бадд - СПб.:Питер, 1997.

18. Электронная библиотека Python для визуализации (пил) /2017.

19. Электронная библиотекаC ++ и классов языка программирования Python / 2016

20. Python-qrcode /2017.

21. Pyqrnative / 2017.

22. PythonImagingLibrary -- начало / 2013.

Приложение А

Исходный код

importos

import wx

try:

import qrcode

exceptImportError:

qrcode = None

try:

import PyQRNative

exceptImportError:

PyQRNative = None

############################################################

class QRPanel(wx.Panel):

""""""

#----------------------------------------------------------------------

def__init__(self, parent):

"""Constructor"""

wx.Panel.__init__(self, parent=parent)

self.photo_max_size = 240

sp = wx.StandardPaths.Get()

self.defaultLocation = sp.GetDocumentsDir()

img = wx.EmptyImage(240,240)

self.imageCtrl = wx.StaticBitmap(self, wx.ID_ANY,

wx.BitmapFromImage(img))

qrDataLbl = wx.StaticText(self, label="Текстдляпереводав QR код:")

self.qrDataTxt = wx.TextCtrl(self, value="Инвентарныйномер,наименование,материально ответственное лицо ", size=(200,-1))

instructions = "Имя файлас QR кодом"

instructLbl = wx.StaticText(self, label=instructions)

self.qrPhotoTxt = wx.TextCtrl(self, size=(200,-1))

browseBtn = wx.Button(self, label='Изменить место для сохранения')

browseBtn.Bind(wx.EVT_BUTTON, self.onBrowse)

defLbl = "Сохраняется по умолчанию в: " + self.defaultLocation

self.defaultLocationLbl = wx.StaticText(self, label=defLbl)

qrcodeBtn = wx.Button(self, label="Создать QR при помощи qrcode")

qrcodeBtn.Bind(wx.EVT_BUTTON, self.onUseQrcode)

pyQRNativeBtn = wx.Button(self, label="Создать QR при помощи PyQRNative")

pyQRNativeBtn.Bind(wx.EVT_BUTTON, self.onUsePyQR)

# Определениеразмерности

self.mainSizer = wx.BoxSizer(wx.VERTICAL)

qrDataSizer = wx.BoxSizer(wx.HORIZONTAL)

locationSizer = wx.BoxSizer(wx.HORIZONTAL)

qrBtnSizer = wx.BoxSizer(wx.VERTICAL)

qrDataSizer.Add(qrDataLbl, 0, wx.ALL, 5)

qrDataSizer.Add(self.qrDataTxt, 1, wx.ALL|wx.EXPAND, 5)

self.mainSizer.Add(wx.StaticLine(self, wx.ID_ANY),

0, wx.ALL|wx.EXPAND, 5)

self.mainSizer.Add(qrDataSizer, 0, wx.EXPAND)

self.mainSizer.Add(self.imageCtrl, 0, wx.ALL, 5)

locationSizer.Add(instructLbl, 0, wx.ALL, 5)

locationSizer.Add(self.qrPhotoTxt, 0, wx.ALL, 5)

locationSizer.Add(browseBtn, 0, wx.ALL, 5)

self.mainSizer.Add(locationSizer, 0, wx.ALL, 5)

self.mainSizer.Add(self.defaultLocationLbl, 0, wx.ALL, 5)

qrBtnSizer.Add(qrcodeBtn, 0, wx.ALL, 5)

qrBtnSizer.Add(pyQRNativeBtn, 0, wx.ALL, 5)

self.mainSizer.Add(qrBtnSizer, 0, wx.ALL|wx.CENTER, 10)

self.SetSizer(self.mainSizer)

self.Layout()

#----------------------------------------------------------------------

def onBrowse(self, event):

""""""

dlg = wx.DirDialog(self, "Выберитепапку:",

style=wx.DD_DEFAULT_STYLE)

if dlg.ShowModal() == wx.ID_OK:

path = dlg.GetPath()

self.defaultLocation = path

self.defaultLocationLbl.SetLabel("Сохраняемв: %s"% path)

dlg.Destroy()

#----------------------------------------------------------------------

def onUseQrcode(self, event):

qr = qrcode.QRCode(version=1, box_size=10, border=4)

qr.add_data(self.qrDataTxt.GetValue())

qr.make(fit=True)

x = qr.make_image()

qr_file = os.path.join(self.defaultLocation, self.qrPhotoTxt.GetValue() + ".jpg")

img_file = open(qr_file, 'wb')

x.save(img_file, 'JPEG')

img_file.close()

self.showQRCode(qr_file)

#----------------------------------------------------------------------

def onUsePyQR(self, event):

qr = PyQRNative.QRCode(20, PyQRNative.QRErrorCorrectLevel.L)

qr.addData(self.qrDataTxt.GetValue())

qr.make()

im = qr.makeImage()

qr_file = os.path.join(self.defaultLocation, self.qrPhotoTxt.GetValue() + ".jpg")

img_file = open(qr_file, 'wb')

im.save(img_file, 'JPEG')

img_file.close()

self.showQRCode(qr_file)

#----------------------------------------------------------------------

def showQRCode(self, filepath):

""""""

img = wx.Image(filepath, wx.BITMAP_TYPE_ANY)

# масштабируем изображение

W = img.GetWidth()

H = img.GetHeight()

if W > H:

NewW = self.photo_max_size

NewH = self.photo_max_size* H / W

else:

NewH = self.photo_max_size

NewW = self.photo_max_size* W / H

img = img.Scale(NewW,NewH)

self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))

self.Refresh()

#############################################################

class QRFrame(wx.Frame):

""""""

#----------------------------------------------------------------------

def__init__(self):

"""Constructor"""

wx.Frame.__init__(self, None, title="QR Code Viewer", size=(550,500))

panel = QRPanel(self)

if __name__ == "__main__":

app = wx.App(False)

frame = QRFrame()

frame.Show()

app.MainLoop()

Приложение Б

Презентационный материал

Основные задачи БР

описать процессы, протекающие при инвентаризации и учете имущества;

провести обзор существующих решений по учету и инвентаризации имущества;

изучить технологию QR-кода;

провести анализ ПО для считывания QR-кода;

выбрать средства разработки ПО;

разработать ПО для генерации QR-кода;

описать разработанное ПО.

Поступление имущества

Инвентаризация

Списание имущества

Обзор существующих решений по учету и инвентаризации

Технология QR-кода

Алгоритм извлечения данных

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

Средство разработки программного обеспечения

Создание ПО для генерации QR-кода

Описание разработанного ПО

Выводы и результаты

Были описаны процессы, протекающие при инвентаризации и учете имущества, с помощью диаграмм IDEF0.

Был проведен обзор существующих решений по учету и инвентаризации имущества таких как «1С: Предприятие 8. Инвентаризация и управление имуществом», «KEEP COUNT Основные средства», «icControl 5.0», «Управление имуществом 1.0».

Была разработана система инвентаризации, где каждый объект учета маркировался QR-кодом, хранящий в себе сведения о идентификационном номере, названии и материально ответственным лице объекта.

Разработано ПО для генерации QR-кода.

Языком программирования был выбран Python.

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.