Игра. УП 02-01 Отчет. Задачами практики являются следующие этапы работы Проектирование системы Создание базы данных
Скачать 0.88 Mb.
|
СОДЕРЖАНИЕВВЕДЕНИЕЦелью учебной практики является проектирование, разработка и тестирование автоматизированной информационной системы по указанной предметной области. Задачами практики являются следующие этапы работы: Проектирование системы; Создание базы данных; Разработка клиентского приложения; Тестирование приложения; Оформление результатов. Общая частьОписание предметной областиНазвание предметной области: Торговля. Отделы крупного торгового дома ежедневно продают различные виды товаров и ведут учет сведений о проданных товарах. Необходимо спроектировать базу данных ТОРГОВЛЯ, информация которой будет использоваться для анализа выполнения плана реализации продукции в отделах; определения товаров, пользующихся наибольшим спросом и др. В БД должна храниться информация: – об ОТДЕЛАХ: код отдела, наименование отдела, Ф.И.О. заведующего отделом, телефон, объем реализации в день (руб.); – ТОВАРАХ: артикул товара, наименование товара, единица измерения, розничная цена товара (руб.); – ПРОДАЖАХ: артикул товара, дата продажи, количество проданного товара. При проектировании БД необходимо учитывать следующее: – отдел ежедневно осуществляет несколько продаж. Каждая продажа имеет отношение только к одному отделу; – товар участвует в нескольких продажах. Каждая продажа соотносится только с одним товаром. Кроме того, следует учесть: – каждый отдел обязательно осуществляет продажу. Каждая продажа обязательно осуществляется отделом; – товар не обязательно может участвовать в продаже (может быть не востребован). В продаже обязательно участвует товар. Проектирование системыДиаграмма вариантов использованияНа рисунке 1 изображена диаграмма вариантов использования системы ТОРГОВЛЯ. Рисунок 1 — Диаграмма вариантов использования На рисунке 2 изображена диаграмма последовательности, описывающая процесс авторизации пользователя в системе. Рисунок 2 — Диаграмма последовательности Диаграмма активностиНа рисунке 3 изображена диаграмма активности, описывающая процесс авторизации пользователя в системе. Рисунок 3 — Диаграмма активности Создание БДER модельНа рисунке 4 изображена ER—модель базы данных ИНТЕРНЕТ-ПРОДАЖИ. Рисунок 4 — ER-модель Словарь данныхВ таблицах 1-5 описаны сущности базы данных. Таблица 1 – сущность «Продажи»
Таблица 2 – сущность «Отделы»
Таблица 3 – Сущность «Сотрудники»
Таблица 4 – Сущность «Роли»
Таблица 5 – Сущность «Товары»
ФормыКод разработанных форм представлен в Приложении А. На рисунке 5 изображена форма авторизации. Рисунок 5 — Форма авторизации Форма ДиректораНа рисунке 6-10 изображена форма Директора. Рисунок 6 — Форма Директора - Продажи Рисунок 7 — Форма Директора - Отделы Рисунок 8 — Форма Директора - Сотрудники Рисунок 9 — Форма Директора - Роли Рисунок 10 — Форма Директора - Товары Форма заведующего отделомНа рисунке 10-13 изображена форма заведующего отделом. Рисунок 10 — Форма заведующего отделом - Продажи Рисунок 11 — Форма заведующего отделом - Отделы Рисунок 12 — Форма заведующего отделом – Сотрудники Рисунок 13 — Форма заведующего отделом – Товары Форма бухгалтераНа рисунке 14- изображена форма бухгалтера. Рисунок 14 — Форма бухгалтера – Продажи Р исунок 14 — Форма бухгалтера – Отделы Рисунок 14 — Форма бухгалтера – Товары Тестирование приложенияТест-кейсыТест-кейсы представлены в Приложении B. Модульные тестыКод модульных тестов предложен в Приложении С. Было разработано 8 тестов, тестирующих приложение на Windows Form. Был протестирован следующий функционал: Добавление новой роли в базу данных; Добавление нового пользователя в базу данных; Авторизация существующего пользователя по логину и паролю; Удаление роли; Удаление пользователя; Выход пользователя из учетной записи; Обновление пользователя в базе данных; Обновление роли в базе данных. Оценка результатов индивидуального заданияИндивидуальное задание оценено на 7.3 балла. Пояснение в Exel файле. ЗАКЛЮЧЕНИЕЦели и задачи практики успешно достигнуты, осуществлены все предложенные во введении этапы жизненного цикла программного обеспечения. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВГОСТ 19.105-78 ЕСПД. Общие требования к программным документам. ГОСТ 19.102-77 ЕСПД. Стадии разработки ГОСТ 19.106-78 ЕСПД. Требования к программным документам, выполненным печатным способом. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. ПРИЛОЖЕНИЕ А(обязательное) Листинг кода Окно авторизации Form1.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.SqlClient; namespace trading { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Роли". При необходимости она может быть перемещена или удалена. this.ролиTableAdapter.Fill(this.тОРГОВЛЯDataSet.Роли); textBox2.UseSystemPasswordChar = true; } private void button1_Click(object sender, EventArgs e) { String loginUser = textBox1.Text; String passUser = textBox2.Text; Connect c1 = new Connect(); DataTable table = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(); string zapros = $"SELECT id, логин, пароль from Роли where логин= '{loginUser}' and пароль = '{passUser}'"; SqlCommand com1 = new SqlCommand(zapros, c1.getCon()); adapter.SelectCommand = com1; adapter.Fill(table); if (textBox1.Text == "admin" & textBox2.Text == "1234") { Form3 f3 = new Form3(); f3.Show(); Hide(); MessageBox.Show("Добро пожаловать, " + textBox1.Text); } //if (table.Rows.Count == 1) //{ // Form2 f2 = new Form2(); // f2.Show(); // Hide(); // MessageBox.Show("Добро пожаловать, " + textBox1.Text); //} if (textBox1.Text == "iv" & textBox2.Text == "111") { Form3 f3 = new Form3(); f3.Show(); Hide(); MessageBox.Show("Добро пожаловать, " + textBox1.Text); } if (textBox1.Text == "bux" & textBox2.Text == "111") { Form4 f4 = new Form4(); f4.Show(); Hide(); MessageBox.Show("Добро пожаловать, " + textBox1.Text); } else { MessageBox.Show("Данный пользователь не зарегистрирован"); } } private void pictureBox2_Click(object sender, EventArgs e) { textBox2.UseSystemPasswordChar = false; pictureBox2.Visible = false; pictureBox1.Visible = true; } private void pictureBox1_Click(object sender, EventArgs e) { textBox2.UseSystemPasswordChar = true; pictureBox2.Visible = true; pictureBox1.Visible = false; } } } Окно Директора Form2.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; namespace trading { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form1 f1 = new Form1(); this.Hide(); f1.ShowDialog(); } private void продажиBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.продажиBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.тОРГОВЛЯDataSet); } private void Form2_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Товары". При необходимости она может быть перемещена или удалена. this.товарыTableAdapter.Fill(this.тОРГОВЛЯDataSet.Товары); // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Роли". При необходимости она может быть перемещена или удалена. this.ролиTableAdapter.Fill(this.тОРГОВЛЯDataSet.Роли); // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Сотрудники". При необходимости она может быть перемещена или удалена. this.сотрудникиTableAdapter.Fill(this.тОРГОВЛЯDataSet.Сотрудники); // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Отделы". При необходимости она может быть перемещена или удалена. this.отделыTableAdapter.Fill(this.тОРГОВЛЯDataSet.Отделы); // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Продажи". При необходимости она может быть перемещена или удалена. this.продажиTableAdapter.Fill(this.тОРГОВЛЯDataSet.Продажи); } private void button2_Click(object sender, EventArgs e) { try { // Запускаем нужный файл System.Diagnostics.Process.Start("C:\\1\\Отчет.docx"); } catch (Exception exp) { MessageBox.Show(exp.Message); } } } } Окно заведующего отделом Form3.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; namespace trading { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void отделыBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.отделыBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.тОРГОВЛЯDataSet); } private void Form3_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Продажи". При необходимости она может быть перемещена или удалена. this.продажиTableAdapter.Fill(this.тОРГОВЛЯDataSet.Продажи); // TODO: данная строка кода позволяет загрузить данные в таблицу "тОРГОВЛЯDataSet.Отделы". При необходимости она может быть перемещена или удалена. this.отделыTableAdapter.Fill(this.тОРГОВЛЯDataSet.Отделы); } } } Окно бухгалтера Form4.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; namespace trading { public partial class Form4 : Form { public Form4() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { try { // Запускаем нужный файл System.Diagnostics.Process.Start("C:\\1\\Отчет.docx"); } catch (Exception exp) { MessageBox.Show(exp.Message); } } private void button1_Click(object sender, EventArgs e) { Form1 f1 = new Form1(); this.Hide(); f1.ShowDialog(); } } } ПРИЛОЖЕНИЕ В(обязательное) Протокол испытаний Таблица В.1 Аннотация теста
Таблица В.2 — Протокол испытаний (тест-кейс)
Продолжение таблицы В.2
ПРИЛОЖЕНИЕ С(обязательное) Листинг кода модульных тестов using Microsoft.VisualStudio.TestTools.UnitTesting; using trading.classes; using trading.entities; using trading.windows; using System.Linq; using System.Windows; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { EntityController EntityController; ApplicationContext db; public UnitTest1() { db = ApplicationContext.GetInstance(@"Data Source=LIZAD\SQLEXPRESS;Initial Catalog=ТОРГОВЛЯ;Integrated Security=True"); EntityController = new EntityController(); } [TestMethod] public void AuthUser() { CurrantUser user = CurrantUser.AuthUser( new User { Login = "admin", Password = "1234" } ); Assert.IsTrue(user.IsLogged()); } [TestMethod] public void LogOutUser() { AuthUser(); CurrantUser user = CurrantUser.GetInstance(); Assert.IsTrue(user.IsLogged()); user.IsLogged(true); Assert.IsFalse(user.IsLogged()); } [TestMethod] public void DeleteUser() { User user = EntityController.Users.BindingList.FirstOrDefault(x => x.Login == "tested—user"); if (user == null) { AddUser(); user = EntityController.Users.BindingList.FirstOrDefault(x => x.Login == "tested—user"); } EntityController.Users.BindingList.Remove(user); db.SaveChanges(); User deleted = EntityController.Users.BindingList.FirstOrDefault(x => user.Id == x.Id); Assert.IsNull(deleted); } [TestMethod] public void AddRole() { Role role = new Role { Name = "TEST" }; EntityController.Roles.BindingList.Add(role); db.SaveChanges(); EntityController.Roles.Load(); Role actual = EntityController.Roles.BindingList.First( x => x.Name == role.Name ); Assert.IsNotNull(actual); } } [TestMethod] public void DeleteRole() { Role role = EntityController.Roles.BindingList.FirstOrDefault(x => x.Name == "TEST"); if (role == null) { AddRole(); role = EntityController.Roles.BindingList.FirstOrDefault(x => x.Name == "TEST"); } EntityController.Roles.BindingList.Remove(role); db.SaveChanges(); User deleted = EntityController.Users.BindingList.FirstOrDefault(x => x.Id == role.Id); Assert.IsNull(deleted); } } } |