Курсач. курсач. Проектирование ас учета обмена валют
Скачать 0.63 Mb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ МОСКОВСКОЙ ОБЛАСТИ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ МОСКОВСКОЙ ОБЛАСТИ «ОДИНЦОВСКИЙ ТЕХНИКУМ» КУРСОВОЙ ПРОЕКТ СПЕЦИАЛЬНОСТЬ 09.02.07 «Информационные системы и программирование» ПО ДИСЦИПЛИНЕ МДК 05.01 Проектирование и дизайн информационных систем на тему: «Проектирование АС учета обмена валют» КП 09.02.07.02.001 ПЗ
Одинцово 2022 ЗАДАНИЕ на курсовой проект студенту 3 курса группы ИС-19 по специальности 09.02.07 «Информационные системы и программирование» Артемьеву Никите Антоновичу ТЕМА ЗАДАНИЯ: «Проектирование АС учета обмена валют» Курсовой проект выполняется студентом в следующем объеме: Техническое задание I Пояснительная записка Введение Анализ технического задания 1. Исследование предметной области 1.1 Основные понятия и принципы создания web-сайта 1.2 Анализ интернет-магазинов по продаже паркетных материалов 2. Проектирование интернет-магазина по продаже паркетных материалов 2.1 Выбор системы управления базами данных(СУБД), применяемых в web-конструировании 2.2 Выбор среды реализации системы 2.3 Логическая структура web-сайта 3. Разработка интернет-магазина по продаже паркетных материалов 3.1 Алгоритмы и методы работы интернет-магазина 3.2 Разработка и подключение плагина на платформе WordPress Заключение Список использованных источников СОДЕРЖАНИЕ Для установки приложение должно соответствовать Требования к аппаратным, программным и коммуникационным интерфейсам 27 ВВЕДЕНИЕ В данной работе будет реализовано приложение, которое позволит автоматизировать обмен валют в таких заведениях, как пункты обмена валют и банки, а также в любых организациях, которые имеют дело с валютой. В настоящее время существует большое количество государств, большинство из них имеет собственную денежную единицу (денежные единицы других стран имеют название «валюта»), что порождает при путешествиях использовать пункты обмена валют. В данной работе будет реализовано приложение, которое можно использовать в пунктах обмена валют. Приложение будет производить автоматизированный поиск актуальных курсов валют и рассчитывать количество необходимых денежных средств для произведения операции обмена валют. Также, приложение будет хранить в себе данные о других отделах предприятия, на котором используется, данные о сотрудниках и данные о тех пользователях, которые использовали пункт обмена валют данной организации. 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 1.1 Состояние вопроса На сегодняшний день существует множество приложений, которые могут использоваться в пунктах обмена валют для произведения учета операций обмена валют. Рассмотрим некоторые из них: Рисунок 1.1 — Приложение «Обменники» Характеристика приложения: Название:Обменники Издатель/разработчик: LLCCreativeMindBureau Цена:Бесплатно Встроенные покупки:Нет Совместимость:Для iPhone, iPad и iPodtouch. Ссылка:https://itunes.apple.com/ru/app/obmenniki/id953416412?mt=8 Приложение находит актуальные курсы в разных обменных пунктах по регионам. Рисунок 1.2 — приложение «BestMonitor» Приложение аналогичное первому приложению. При поиске программ, которые способны использоваться в пунках обмена валют было обнаружено, что все они скрыты. 1.2 Моделирование существующих бизнес-процессов Произведём оценку системы в терминах бизнес-процессов организации с использованием методологий IDEF0. Первый шаг в построении модели – это определение цели модели, то есть вопросов, на которые призвана ответить модель. Вопросы следуют из формулировки задачи и анализа требований. Построим контекстную диаграмму (самое общее описание системы и её взаимодействия с внешней средой) и проведём функциональную декомпозицию (разбиение системы на крупные фрагменты) для построения диаграмм декомпозиции. Контекстная диаграмма, описывающая функционирование пункта обмена валют, приведена на рисунке 1.3. Рисунок 1.3 – Контекстная диаграмма Диаграмма декомпозици приведена на рисунке 1.4. Рисунок 1.4 – Диаграмма декомпозиции 1.3 Актуальность и цель работы Цель работы – разработка приложения, для автоматического расчета сумм в операциях обмена валют, логирования данных услуг, хранения данных пользователей и поиска актуальных курсов валют. Актуальность: отсутствие бесплатных программ этой области; вся необходимая информация хранится в приложении; автоматизированный расчет денежных средств. 2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ 2.1 Описание области применения и исходных данных приложения Данное приложение предназначено для использования сотрудниками банков и пунктов обмена валют в целях уменьшения временных затрат на заполнение платёжных документов, поиск курсов валют и расчетов необходимых сумм денежных единиц. Исходными данными для приложения являются: курсы валют; данные о пользователях; данные о сотрудниках. данные об отделах. данные о размерах денежных средств. 2.2 Требования к пользовательским интерфейсам Эргономические рекомендации по выбору цветовых решений при формировании пользовательского интерфейса: 1) учитывайте потребности, возможности и опыт пользователей системы, для чего старайтесь сделать ее гибкой, а для выбора цветового кода предлагайте пользователю не только возможность самому подбирать цвета, но и представляйте ему несколько наборов цветов, обозначающих те или иные структуры страниц экрана компьютера; пользовательского интерфейса на разных уровнях. 2) при выборе цветов помните, что пользовательский интерфейс должен способствовать уменьшению рабочей нагрузки пользователя, которому легче узнавать, чем запоминать — набор цветов должен настраивать пользователя на восприятие тех или иных команд, опций, операндов и т.д. 3) используемый цветовой код должен отличаться постоянством в плане обозначения соответствующих структур, команд, объектов и т.д. 4) используйте цветовой код для привлечения внимания к представляемой информации, для сокращения времени ее поиска, улучшения ее размещения и запоминания; 5) используйте цветовой код для надлежащего кодирования разнообразных функций пользовательского интерфейса, таких как: управленческая, коммуникативная, объяснительная, обучающая, иллюстративная, когнитивная, креативная, информационно-поисковая, эстетическая и др. Составной частью пользовательского интерфейса являются языки взаимодействия/общения человека с ЭВМ. Общие требования к ним следующие: 1) соответствовать когнитивным, мотивоционным, психомоторным, эмоциональным, профессиональным характеристикам пользователей; 2) отвечать потребностям и задачам пользователей; 3) соответствовать назначению и особенностям программного продукта; 4) должны быть легки и удобны в освоении и использовании, эффективны в деятельности, приятны в общении; 5) основываться не только на естественном языке, но и на других присущих человеку языках; 6) отвечать нормам той или иной предметной или проблемной области знания с максимальным учетом профессионального языка пользователя проектируемого лингвистического процессора; Основные требования к пользовательскому интерфейсу: функциональность (соответствие задачам пользователя); соответствие технологии; понятность и логичность; обеспечение высокой скорости работы пользователя; обеспечение защиты от человеческих ошибок; быстрое обучение пользователя; субъективное удовлетворение пользователя. Требования к оформлению чекбоксов и радиокнопок: не следует нарушать сложившуюся традицию: чекбоксы выглядят как квадраты, а радиокнопки - как кружки. и чекбоксы, и радиокнопки желательно расставлять по вертикали, поскольку это значительно ускоряет поиск нужного элемента; радиокнопки всегда должны находиться в рамке группировки, а для чекбоксов это необязательно; в группе радиокнопок как минимум одна радиокнопка должна быть проставлена по умолчанию; каждая подпись чекбокса и радиокнопки должна однозначно показывать эффектот выбора соответствующего элемента; поскольку радиокнопки и чекбоксы не вызывают немедленного действия, формулировать подписи к ним лучше всего в форме существительных, хотя возможно использование глаголов; подписи к стоящим параллельно кнопкам лучше стараться делать примерно одинаковой длины; все подписи лучше делать позитивными (т.е. не содержащими отрицания); не следует повторятьв подписях одни и те же слова, меняя только окончания подписей (например, «Показывать пробелы» и «Показывать табуляции») - лучше перенести повторяющееся слово в рамку группировки; если подпись не помещается в одну строку, то индикатор кнопки (кружок или квадрат) следует выравнивать по первой строке подписи; подписи к чекбоксам и радиокнопкам должны быть нажимабельными (это связано с тем, что для быстроты и точности работы пользователю нужны большие кнопки); при необходимости заблокировать элемент чекбокса или радиокнопки, желательно визуально ослаблятьне только индикатор кнопки (квадрат или круг), но и подпись к нему. 2.3 Требования к аппаратным, программным и коммуникационным интерфейсам Для установки и работы программы необходимо иметь вычислительную систему следующей базовой конфигурации: процессор: 1.60 ГГц; оперативная память: 512 мб; Необходимое программное обеспечение: операционная система Windows не ниже версии XP SP3; .NET FrameWork не ниже версии 4.0; Операционная система должна быть 32-х разрядная. 2.4 Требования к пользователям продукта Для использования приложения каждый пользователь должен удовлетворять таким требованиям, как: иметь базовые навыки работы с операционной системой Windows; иметь базовые знания работы в интернет-сети; иметь базовые навыки работы с устройствами ввода-вывода. 2.5 Сценарии При запуске приложения должна запускаться главная форма, на которой должны быть такие элементы: поле вывода актуальных курсов, кнопки: «добавить пользователя», «добавить сотрудника», «Информация об отделах», «произвести операцию», «история курсов». По нажатию на кнопку «добавить пользователя» должна открываться форма добавления пользователя. По нажатию на кнопку «добавить сотрудника» должна открываться форма добавления сотрудника. При нажатии на кнопку «Информация об отделах» должна открываться форма вывода списка отделов. По нажатию на кнопку «произвести операцию» должна открываться форма операции. По нажатию на кнопку «история курсов» должна открываться форма вывода курсов. Форма добавления пользователя: При запуске формы добавления пользователя должны появиться элементы ввода: фамилии, имени, отчества и номера паспорта пользователя, а также кнопка «добавить». При нажатии на кнопку «добавить» — данные введенные в поля для ввода должны сохраниться в базу данных, в таблицу пользователей, форма должна закрываться, а основная форма должна открываться. Форма добавления сотрудника: При запуске формы добавления пользователя должны появиться элементы ввода: выпадающий список с информацией про каждого пользователя (айди-фамилия) и поле для ввода зарплаты. При нажатии на кнопку «добавить» — данные введенные в поля для ввода должны сохраниться в базу данных, в таблицу сотрудников, форма должна закрываться, а основная форма должна открываться. Форма вывода информации об отделах: При запуске формы вывода информации об отделах должна появиться таблица с информацией обо всех отделах. Форма вывода информации о курсах: При запуске формы вывода информации о курсах должна появиться таблица с информацией обо всех курсах за все время. Форма обмена: При запуске формы обмена должны появиться элементы ввода: выпадающий список с информацией про каждого пользователя (айди-фамилия), сотрудников(айди-фамилия), отделов(айди), элементы выбора действия, поля для ввода валюты, поле для ввода суммы которую дает пользователь и кнопки: «назад» и «добавить». При нажатии на кнопку «добавить» — данные введенные в поля для ввода должны сохраниться в базу данных, в таблицу операций, вывести количество денег, которые требуется отдать пользователю, форма должна закрываться, а основная форма должна открываться. При нажатии на кнопку «назад» — форма должна закрываться, а основная форма должна открываться. 2.6 Функции продукта Приложение должно уметь работать с таблицами базы данных с информацией о пользователях, сотрудниках, отделах, курсах, операциях. Функции продукта: расчет необходимой суммы для проведения операции. отображение информации об отделах. отображение истории операций. нахождение актуальных курсов. добавление данных о пользователях обменного пункта. добвление данных о сотруниках организации. 2.7 Ограничения приложение должно использоваться бесплатно. использование программного продукта в целях продажи запрещено. приложение должно хранить все системные данные в базе данных. 3 ОБОСНОВАНИЕ ВЫБОРА ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ Язык программирования С#. Высокоуровневый язык программирования поддерживается и используется многими компаниями. Удобен для большого количества задач большим количеством полезных функций. Достоинства си-шарпа: C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности - как FCL, так и CLR; C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами; C# является мощным объектным языком с возможностями наследования и универсализации; C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#; Сохранив основные черты своего великого родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика; Благодаря каркасу Framework .Net, ставшему надстройкой над операционной системой, программисты C# получают те же преимущества работы с виртуальной машиной, что и программисты Java. Эффективность кода даже повышается, поскольку исполнительная среда CLR представляет собой компилятор промежуточного языка, в то время как виртуальная Java-машина является интерпретатором байт-кода; Мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных; Реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху C#. Выделение и объединение лучших идей современных языков программирования делает язык C# не просто суммой их достоинств, а языком программирования нового поколения. Microsoft VisualStudio2015 Microsoft VisualStudio2015 — среда для разработки приложений от компании Microsoft, которая в свою очередь и создала такой язык программирования как С#. Из достоинств VisualStudio2015: Visual Studio 2015 поддерживает кроссплатформенную разработку для мобильных устройств; кроссплатформенные игры для мобильных устройств на языке C# с Unity; благодаря универсальной платформе Windows и единому ядру Windows одно и то же приложение можно запускать на любом устройстве Windows 10; ASP.NET 5 представляет собой главное обновление для MVC, WebAPI и SignalR, и выполняется на платформах Windows, Mac и Linux; .NET Framework 4.6 Майкрософт предлагает около 150 новых API и 50 обновленных API для использования дополнительных сценариев; Visual Studio 2015 обеспечивает крайне простой способ подключения вашего приложения к службам; новый компилятор Roslyn для C# и Visual Basic не только быстрее компилирует, но также позволяет использовать полностью новые сценарии, такие как динамический анализ кода, который предоставляет подробный и настраиваемый отзыв и предложения непосредственно в редакторе кода по мере ввода данных; установленные расширения Visual Studio теперь обновляются автоматически при появлении новой версии в коллекции Visual Studio. SQLite — компактная встраиваемая реляционная база данных. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards. 4 РАЗРАБОТКА БАЗЫ ДАННЫХ 4.1 Разработка базы данных приложения 4.1.1 Концептуальное проектирование базы данных. Концептуальное проектирование – построение семантической модели предметной области (информационной модели самого высокого уровня абстракции). Концептуальная модель базы данных включает в себя: В ходе изучения предметной областьи выделены следующие сущности, представляющие информационное значение для задачи: пользователь – информация о пользователях; сотрудник – информация о сотрудниках; операция – информация о проведенной операции; курс – курс валют; отдел – отделы одного предприятия. Концептуальное представление базы данных приведено на рисунке 4.1. Рисунок 4.1 – Концептуальная модель базы данных 4.1.2 Логическое проектирование базы данных. Логическое проектирование – создание схемы базы данных на основе конкретной модели данных, например, реляционной модели данных. Логическое представление базы данных приведено на рисунке 4.2. Рисунок 4.2 – Логическая модель базы данных 4.1.3 Физическое проектирование базы данных Физическое проектирование – создание схемы базы данных для конкретной СУБД. Физическое представление таблиц базы данных приведено на рисунках 4.3, 4.4, 4.5, 4.6, 4.7. Рисунок 4.3 – Физическое представление таблицы «kurs» Рисунок 4.4 – Физическое представление таблицы «operat» Рисунок 4.5 – Физическое представление таблицы «otdel» Рисунок 4.6 – Физическое представление таблицы «user» Рисунок 4.7 – Физическое представление таблицы «worker» 4.2 Проектирование структуры приложения Проект состоит из файлов исходного кода: Form1.cs – главная форма приложения; FormKurs.cs – вывод истории курсов; FormOper.cs – добавление новой операции и расчеты; FormOtdel.cs – просмотр информации об отделах; FormUser.cs – добавление пользователя; FormWorker – добавление работника. Связь файлов показана на рисунке 4.8. Рисунок 4.8 – Связь файлов приложения 4.3 Описание SQL-запросов к базе данных системы Выводит актуальные курсы. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM kurs", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { if (today(Convert.ToDateTime(record["date"].ToString()))) { string lola = ""; lola = record["namevalV"].ToString() + ":" + record["kursV"].ToString() + " — " + record["namevalIZ"].ToString() + ":" + record["kursIZ"].ToString(); listView1.Items.Add(lola); } } connection.Close(); Выводить историю курсов. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM kurs", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { dataGridView1.Rows.Add(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[0].Value = record["namevalV"].ToString() + "-" + record["namevalIZ"].ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[1].Value = record["kursIZ"].ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[2].Value = record["kursV"].ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[3].Value = record["date"].ToString(); } connection.Close(); Данные для формы операций string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM user;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) comboBox1.Items.Add(record["idd"].ToString() + "-" + record["fam"].ToString()); command = new SQLiteCommand("SELECT * FROM worker;", connection); reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { string ttt=""; string kkk = record["iduser"].ToString(); SQLiteCommand command1 = new SQLiteCommand("SELECT * FROM user WHERE idd='"+kkk+"';", connection); SQLiteDataReader reader1 = command1.ExecuteReader(); foreach (DbDataRecord recrd in reader1) ttt = recrd["fam"].ToString(); comboBox2.Items.Add(record["idd"].ToString()+"-"+ttt); } SQLiteCommand command2 = new SQLiteCommand("SELECT * FROM otdel;", connection); SQLiteDataReader reader2 = command2.ExecuteReader(); foreach (DbDataRecord record in reader2) comboBox3.Items.Add(record["idd"].ToString()); connection.Close(); Поиск нужного курса. string databaseName = "den.db"; SQLiteConnection connectio = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connectio.Open(); SQLiteCommand com = new SQLiteCommand("SELECT * FROM kurs;", connectio); SQLiteDataReader rea = com.ExecuteReader(); foreach (DbDataRecord record in rea) { if (today(Convert.ToDateTime(record["date"].ToString()))) { string lol1 = record["namevalV"].ToString(); string lol2 = record["namevalIZ"].ToString(); string kek1 = textBox1.Text; string kek2 = textBox2.Text; if (((lol1==kek1) & (lol2==kek2)) || ((lol2==kek1) & (lol2==kek2))) { iddd = record["idd"].ToString(); nameV = record["namevalV"].ToString(); nameIZ = record["namevalIZ"].ToString(); prV = record["kursV"].ToString(); prIZ = record["kursIZ"].ToString(); } } } connectio.Close(); Внесение в базу новой операции. SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT MAX(idd) AS mx FROM operat;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) mx = Convert.ToInt32(record["mx"].ToString())+1; SQLiteCommand command1 = new SQLiteCommand("INSERT INTO operat ('idd', 'iduser', 'date', 'sunntake', 'sungive', 'idkurs','idworker','idotdel') values ('" + mx + "','" + comboBox1.Text.Split('-')[0] + "','" + DateTime.Now.ToString() + "', '" + textBox3.Text + "', '" + klolucheniu + "','"+idkuku+"','"+comboBox2.Text.Split('-')[0]+"','"+comboBox3.Text+"')", connection); command1.ExecuteNonQuery(); connection.Close(); MessageBox.Show("К получению: "+klolucheniu+textBox2.Text); ff.Show(); Close(); Вывод всех отделов. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM otdel", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { dataGridView1.Rows.Add(); string[] kok = record["adress"].ToString().Split(' '); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[2].Value = kok[kok.Length - 1]; Array.Resize(ref kok, kok.Length - 1); string ll = ""; foreach (string ij in kok) ll += ij; dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[0].Value = ll; dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[1].Value = record["massworkers"].ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[3].Value = record["idd"].ToString(); } connection.Close(); Добавление нового пользователя. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT MAX(idd) AS mx FROM user;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) mx = Convert.ToInt32(record["mx"].ToString()); SQLiteCommand command1 = new SQLiteCommand("INSERT INTO user ('nomerpas', 'fam', 'name', 'otch', 'idd') values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "', '"+textBox4.Text+"', '"+(mx+1)+"')", connection); command1.ExecuteNonQuery(); connection.Close(); ff.Show(); Close(); Получение списка пользователей. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM user;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) comboBox1.Items.Add(record["idd"].ToString()+"-"+ record["fam"].ToString()); connection.Close() Внесение в базу нового сотрудника. string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT MAX(idd) AS mx FROM worker;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) mx = Convert.ToInt32(record["mx"].ToString()); SQLiteCommand command1 = new SQLiteCommand("INSERT INTO worker ('iduser', 'masoper', 'zarpalta', 'idd') values ('" + comboBox1.Text.Split('-')[0] + "','" + "" + "','" + textBox1.Text + "', '" + (mx + 1) + "')", connection); command1.ExecuteNonQuery(); connection.Close(); ff.Show(); Close(); 5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА 5.1 Аппаратные и программные средства создания и эксплуатации приложения Для работы приложения требуется следующеее аппаратное обеспечение: процессор с тактовой частотой не менее 1.9 ГГц; оперативная память объёмом не менее 512 Мб; Программные требования к приложению. На компьютере должны быть установлено следующее программное обеспечение: операционная система –Windows 7, Windows 8, Windows 10; разрядность операционной системы 32. 5.2 Руководство пользователя Программа даёт возможность легкой переносимости на другие устройства, что гарантируется тем, что для использования данного программного обеспечения не требуется установка. Для того, чтобы запустить данное приложение - проверьте наличие всего необходимого ПО. Для установки приложение должно соответствовать Требования к аппаратным, программным и коммуникационным интерфейсамЕсли на устройстве .NET Framework не установлен или ниже версии 4.0 — необходимо его установить . 5.3 Описание контрольных примеров Для тестирования приложения воспользовались пунктом «Сценарии». На рисунке 5.1 показано открытие главной формы, которая отображает курс валют. Рисунок 5.1 — запустили программу. На рис 5.2 протестировал запуск формы курса валют, а также функции добавления и удаления. Рисунок 5.2 — просмотрели форму истории курсов. На рис. 5.3 проверил добавление пользователей в таблицу, а также их удаление и редактирование. Рисунок 5.3 — открыли форму пользователей На рис. 5.4 проверил возможность добавления сотрудника из списка пользователей и добавление его в таблицу. Рисунок 5.4 — открыли форму добавления сотрудников. Протестировал добавление пользователя. Рисунок 5.5 — открыли форму добавления пользователей На рис 5.6 Протестировал возможность выбора пользователя и сотрудника из добавленных и возможность совершить обмен валют. Рисунок 5.6 — открыли форму обмена ЗАКЛЮЧЕНИЕ В результате решения задачи спроектирована база данных и система, позволяющая автоматизировать действия сотрудника пункта обмена валют. Приложение позволяет производить поиск актуальных курсов, рассчитывать все необходимые данные, а также производить логирование всех операций и курсов за разное время. Приложение протестировано и полностью готово к использованию в промышленных целях. Приложение автоматизирует все действия сотрудника пункта обмена валют. Приложение может использоваться в банках, пунктах обмена валют и организациях, работающих с валютой. Использовать данное приложение могут все пользователи, удовлетворяющие критериям «Требования к пользователям продукта» раздела «Техническое задание». СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ Агальцов, В.П. Базы данных. В 2-х т.Т. 1. Локальные базы данных: Учебник / В.П. Агальцов. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. - 352 c. Пример URL: http://vladdelphisite.narod.ru/bazi/bazi_dannih.htm (дата обращения 15.10.2017). Голицына, О.Л. Базы данных / О.Л. Голицына, Н.В. Максимов, И.И. Попов. - М.: Форум, 2004. - 352 c. Пример URL: http://vladdelphisite.narod.ru/bazi/bazi_dannih.htm (дата обращения 15.10.2017). Голицына, О.Л. Базы данных: Учебное пособие / О.Л. Голицына, Н.В. Максимов, И.И. Попов. - М.: Форум, 2012. - 400 c. Пример URL: http://vladdelphisite.narod.ru/bazi/bazi_dannih.htm (дата обращения 23.10.2017). Анонимный пользователь Добавление данных dataGridView в Си Шарп C# пример // life - prog URL: http://life-prog.ru/view_zam.php?cat=8&id=192&page=3 (дата обращения 15.04.2017). Анонимный пользователь Динамическая таблица dataGridView в Си Шарп C# пример // ci-sharp.ru URL: http://ci-sharp.ru/ProgramsProf/Dinamicheskaja_tablica_dataGridView_s_sharp.html (дата обращения 15.04.2017). Агальцов, В.П. Базы данных. В 2-х т. Т. 2. Распределенные и удаленные базы данных: Учебник / В.П. Агальцов. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. – 272 c. URL:http://vladdelphisite.narod.ru/bazi/bazi_dannih.htm (дата обращения 15.10.2017). ПРИЛОЖЕНИЕ А Экранные формы Рисунок А1 — основна форма. Рисунок А2 — форма истории курсов. Рисунок А3 — форма вывода отделений. Рисунок А4 — форма добавления сотрудников. Рисунок А5 — форма добавления пользователей Рисунок А6 — форма обмена ПРИЛОЖЕНИЕ Б Фрагменты листинга Листинг Б1 – Файл «Form1.cs» using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.Common; using System.Data.SQLite; namespace obmenniypunkt { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public bool today(DateTime f) { DateTime g = DateTime.Now; if (g.Date == f.Date) return true; return false; } private void Form1_Load(object sender, EventArgs e) { //вывести курсы валют string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM kurs", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { if (today(Convert.ToDateTime(record["date"].ToString()))) { string lola = ""; lola = record["namevalV"].ToString() + ":" + record["kursV"].ToString() + " — " + record["namevalIZ"].ToString() + ":" + record["kursIZ"].ToString(); listView1.Items.Add(lola); } } connection.Close(); } private void button1_Click(object sender, EventArgs e) { FormUser lol = new FormUser(this); lol.Show(); Hide(); } private void button2_Click(object sender, EventArgs e) { FormWorker lol = new FormWorker(this); lol.Show(); Hide(); } private void button3_Click(object sender, EventArgs e) { FormOtdel lol = new FormOtdel(this); lol.Show(); Hide(); } private void button4_Click(object sender, EventArgs e) { FormKurs lol = new FormKurs(this); lol.Show(); } private void button5_Click(object sender, EventArgs e) { FormOper lol = new FormOper(this); lol.Show(); Hide(); } } } Листинг Б2 – Файл «FormOper.cs» using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.Common; using System.Data.SQLite; namespace obmenniypunkt { public partial class FormOper : Form { public FormOper(Form1 gg) { InitializeComponent(); ff = gg; } Form1 ff; private void FormOper_Load(object sender, EventArgs e) { string databaseName = "den.db"; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM user;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) comboBox1.Items.Add(record["idd"].ToString() + "-" + record["fam"].ToString()); command = new SQLiteCommand("SELECT * FROM worker;", connection); reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) { string ttt=""; string kkk = record["iduser"].ToString(); SQLiteCommand command1 = new SQLiteCommand("SELECT * FROM user WHERE idd='"+kkk+"';", connection); SQLiteDataReader reader1 = command1.ExecuteReader(); foreach (DbDataRecord recrd in reader1) ttt = recrd["fam"].ToString(); comboBox2.Items.Add(record["idd"].ToString()+"-"+ttt); } SQLiteCommand command2 = new SQLiteCommand("SELECT * FROM otdel;", connection); SQLiteDataReader reader2 = command2.ExecuteReader(); foreach (DbDataRecord record in reader2) comboBox3.Items.Add(record["idd"].ToString()); connection.Close(); } private void button2_Click(object sender, EventArgs e) { ff.Show(); Close(); } public bool today(DateTime f) { DateTime g = DateTime.Now; if (g.Date == f.Date) return true; return false; } private void button1_Click(object sender, EventArgs e) { string iddd = "", nameV = "", nameIZ = "", prV="", prIZ=""; double klolucheniu = 0; //почитать сумму к выдаче string idkuku = "";//////////////////////// string databaseName = "den.db"; SQLiteConnection connectio = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connectio.Open(); SQLiteCommand com = new SQLiteCommand("SELECT * FROM kurs;", connectio); SQLiteDataReader rea = com.ExecuteReader(); foreach (DbDataRecord record in rea) { if (today(Convert.ToDateTime(record["date"].ToString()))) { string lol1 = record["namevalV"].ToString(); string lol2 = record["namevalIZ"].ToString(); string kek1 = textBox1.Text; string kek2 = textBox2.Text; if (((lol1==kek1) & (lol2==kek2)) || ((lol2==kek1) & (lol2==kek2))) { iddd = record["idd"].ToString(); nameV = record["namevalV"].ToString(); nameIZ = record["namevalIZ"].ToString(); prV = record["kursV"].ToString(); prIZ = record["kursIZ"].ToString(); } } } connectio.Close(); if (nameV == textBox1.Text) { if (radioButton1.Checked) klolucheniu = Convert.ToDouble(textBox3.Text) / Convert.ToDouble(prIZ); else klolucheniu = Convert.ToDouble(textBox3.Text) * Convert.ToDouble(prIZ); } else { if (radioButton2.Checked) klolucheniu = Convert.ToDouble(textBox3.Text) * Convert.ToDouble(prIZ); else klolucheniu = Convert.ToDouble(textBox3.Text) / Convert.ToDouble(prIZ); } int mx = 1; SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName)); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT MAX(idd) AS mx FROM operat;", connection); SQLiteDataReader reader = command.ExecuteReader(); foreach (DbDataRecord record in reader) mx = Convert.ToInt32(record["mx"].ToString())+1; SQLiteCommand command1 = new SQLiteCommand("INSERT INTO operat ('idd', 'iduser', 'date', 'sunntake', 'sungive', 'idkurs','idworker','idotdel') values ('" + mx + "','" + comboBox1.Text.Split('-')[0] + "','" + DateTime.Now.ToString() + "', '" + textBox3.Text + "', '" + klolucheniu + "','"+idkuku+"','"+comboBox2.Text.Split('-')[0]+"','"+comboBox3.Text+"')", connection); command1.ExecuteNonQuery(); connection.Close(); MessageBox.Show("К получению: "+klolucheniu+textBox2.Text); ff.Show(); Close(); } private void textBox2_TextChanged(object sender, EventArgs e) { } } } |