Разработка программного обеспечения модулей системы инвентаризации
Основные процессы учёта имущества и трудности, связанные с ними. Требования к модулям системы инвентаризации. Стандарт, алгоритм и программы распознавания 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
...Подобные документы
Основные функции автоматизированной системы "Решатель математических формул". Требования к техническим средствам, информационной и программной совместимости. Стратегии конструирования программного обеспечения. Проектирование, разработка программного кода.
курсовая работа [600,0 K], добавлен 25.02.2012Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных программных средств. Тестирование программного обеспечения. Оптимизация программного кода.
курсовая работа [974,0 K], добавлен 21.12.2016Создание электронного учебника, написанного на языке гипертекстовой разметки HTML. Характеристика программного обеспечения ЭВМ, необходимого для создания и эксплуатации информационной системы. Алгоритм функционирования системы, отладка программы.
курсовая работа [1,0 M], добавлен 22.12.2012Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.
дипломная работа [1008,9 K], добавлен 13.10.2013Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Изучение возможностей среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных средств. Способы работы с динамическими массивами. Оптимизация программного кода.
курсовая работа [1,0 M], добавлен 23.12.2016Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.
курсовая работа [1,1 M], добавлен 07.01.2014Порядок автоматизации расчетов себестоимости и длительности программного обеспечения производственного предприятия. Выбор языка программирования и системы управления базами данных. Разработка алгоритмов расчета себестоимости программного обеспечения.
дипломная работа [1,7 M], добавлен 13.06.2017Выбор системы программирования. Разработка программного обеспечения для ведения складского учета (инвентаризации) персональных компьютеров и комплектующих на предприятии. Обоснование даталогической модели данных. Рекомендации по применению программы.
курсовая работа [1,9 M], добавлен 14.01.2013Разработка системы бережливого производства на ООО "Нижегородские моторы", создание программного обеспечения для станка с ЧПУ FMS-3200. Технология решения задачи, функциональные возможности и структура программы. Язык программирования электроавтоматики.
отчет по практике [555,3 K], добавлен 27.05.2014Характеристика объектно-ориентированного, процедурного, функционального программирования. Выбор языка программирования для создания программного обеспечения для управления справочником "Спортсмены". Алгоритм работы приложения, пользовательский интерфейс.
курсовая работа [1,6 M], добавлен 23.02.2016Анализ технических средств и современных технологий разработки программного обеспечения. Разработка программы для упрощения поиска студентов. Создание учетных записей администратора и обычного пользователя. Изучение правил построения программного кода.
курсовая работа [1,9 M], добавлен 30.09.2016Основание и назначение программного кода для работы распределительной станции FESTO, требования к информационной и программной совместимости. Параметры технических средств, язык программирования AWL. Расчет затрат и экономической эффективности проекта.
дипломная работа [2,4 M], добавлен 11.03.2012Общие сведения об исследуемой организации, направления ее хозяйственной деятельности, характеристика используемой вычислительной техники и программного обеспечения. Разработка пользовательского интерфейса, шаблонов, отладка и тестирование программы.
отчет по практике [159,3 K], добавлен 11.04.2016Структурные подразделения и отделы организации, ее технические программные средства. Разработка приложений обработки данных на ассемблере, языке программирования высокого уровня. Тестирование и оптимизация программных модулей. Разработка документации.
отчет по практике [175,0 K], добавлен 30.09.2022Исследование объектно-ориентированного подхода к проектированию программного обеспечения будильника. Модель программного обеспечения. Взаимодействие между пользователями и системой. Диаграммы и генерация программного кода при помощи средств Rational Rose.
курсовая работа [355,8 K], добавлен 26.09.2014Современные инструменты разработки программного обеспечения для СУТП. Универсальные языки программирования и сравнение их со SCADA-системами. Разработка программного обеспечения с использованием многоканальных измерительных преобразователей Ш9327.
дипломная работа [2,3 M], добавлен 13.07.2011Автоматизация учёта поступления и обучения детей в "Доме детского творчества". Проектирование программного продукта ИС; выбор системы управления базы данных, языка программирования. Разработка концептуальной, логической и физической моделей данных.
дипломная работа [1,5 M], добавлен 10.10.2015Набор требований к программному продукту "Калькулятор". Тестовые сценарии для модульного тестирования. Использование системы визуального проектирования. Разработка программного кода. Вычисление цикломатического числа и построение графы каждого модуля.
контрольная работа [170,4 K], добавлен 04.11.2014