Главная страница
Навигация по странице:

  • Листинг кода Окно авторизации Form1.cs

  • Окно Директора Form2.cs

  • Окно заведующего отделом Form3.cs

  • Окно бухгалтера Form4.cs

  • Название проекта ТОРГОВЛЯ Рабочая версия

  • Листинг кода модульных тестов

  • Игра. УП 02-01 Отчет. Задачами практики являются следующие этапы работы Проектирование системы Создание базы данных


    Скачать 0.88 Mb.
    НазваниеЗадачами практики являются следующие этапы работы Проектирование системы Создание базы данных
    АнкорИгра
    Дата10.03.2023
    Размер0.88 Mb.
    Формат файлаdocx
    Имя файлаУП 02-01 Отчет.docx
    ТипЗадача
    #979099

    СОДЕРЖАНИЕ



    ВВЕДЕНИЕ


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

    Задачами практики являются следующие этапы работы:

    • Проектирование системы;

    • Создание базы данных;

    • Разработка клиентского приложения;

    • Тестирование приложения;

    • Оформление результатов.



    1. Общая часть

      1. Описание предметной области


    Название предметной области: Торговля.

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

    Необходимо спроектировать базу данных ТОРГОВЛЯ, информация которой будет использоваться для анализа выполнения плана реализации продукции в отделах; определения товаров, пользующихся наибольшим спросом и др.

    В БД должна храниться информация:

    – об ОТДЕЛАХ: код отдела, наименование отдела, Ф.И.О. заведующего отделом, телефон, объем реализации в день (руб.);

    – ТОВАРАХ: артикул товара, наименование товара, единица измерения, розничная цена товара (руб.);

    – ПРОДАЖАХ: артикул товара, дата продажи, количество проданного товара.

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

    – отдел ежедневно осуществляет несколько продаж. Каждая продажа имеет отношение только к одному отделу;

    – товар участвует в нескольких продажах. Каждая продажа соотносится только с одним товаром.

    Кроме того, следует учесть:

    – каждый отдел обязательно осуществляет продажу. Каждая продажа обязательно осуществляется отделом;

    – товар не обязательно может участвовать в продаже (может быть не востребован). В продаже обязательно участвует товар.
      1. Проектирование системы

        1. Диаграмма вариантов использования


    На рисунке 1 изображена диаграмма вариантов использования системы ТОРГОВЛЯ.



    Рисунок 1 — Диаграмма вариантов использования
        1. Диаграмма последовательности


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



    Рисунок 2 — Диаграмма последовательности
        1. Диаграмма активности


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



    Рисунок 3 — Диаграмма активности
      1. Создание БД

        1. ER модель


    На рисунке 4 изображена ER—модель базы данных ИНТЕРНЕТ-ПРОДАЖИ.



    Рисунок 4 — ER-модель
        1. Словарь данных


    В таблицах 1-5 описаны сущности базы данных.

    Таблица 1 – сущность «Продажи»

    KEY

    FIELD NAME

    DATA TYPE / FIELD SIZE

    REQUIRED?

    NOTES

    PK

    id

    int

    Y

    Первичный ключ, идентификатор продажи

    FK

    артикул товара

    int

    N

    Внешний ключ, ссылка на таблицу Товары




    дата продажи

    date

    N

    дата продажи товара




    код отдела

    int

    N

    Внешний ключ, ссылка на таблицу Отделы




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

    int

    N

    выручка

    Таблица 2 – сущность «Отделы»

    KEY

    FIELD NAME

    DATA TYPE / FIELD SIZE

    REQUIRED?

    NOTES

    PK

    код

    int

    Y

    Первичный ключ, идентификатор отдела

    FK

    Наименование отдела

    nvarchar(50)

    N

    Внешний ключ, ссылка на таблицу Товары




    ФИО заведующего отделением

    nvarchar(50)

    N

    Фамилии заведующих отделениями




    телефон

    nvarchar(50)

    N

    Телефон отдела




    объем реализации в день

    money

    N

    Объем продаж за день

    Таблица 3 – Сущность «Сотрудники»

    KEY

    FIELD NAME

    DATA TYPE / FIELD SIZE

    REQUIRED?

    NOTES

    PK

    id

    int

    Y

    Первичный ключ, идентификатор сотрудников




    ФИО

    nvarchar(50)

    N

    ФИО сотрудников




    Должность

    nvarchar(50)

    N

    Должность сотрудника

    FK

    Код отдела

    int

    N

    Внешний ключ, ссылка на таблицу Отделы

    Таблица 4 – Сущность «Роли»

    KEY

    FIELD NAME

    DATA TYPE / FIELD SIZE

    REQUIRED?

    NOTES

    PK

    id

    int

    Y

    Первичный ключ, идентификатор роли




    роль

    nvarchar(50)

    N

    Роль в системе




    логин

    nvarchar(50)

    N

    Логин сотрудника




    пароль

    nvarchar(50)

    N

    Пароль сотрудника

    FK

    Id сотрудника

    int

    N

    Внешний ключ, ссылка на таблицу Сотрудники

    Таблица 5 – Сущность «Товары»

    KEY

    FIELD NAME

    DATA TYPE / FIELD SIZE

    REQUIRED?

    NOTES

    PK

    артикул

    int

    Y

    Первичный ключ, идентификатор товара
    Внешний ключ, ссылка на таблицу Продажи




    наименование товара

    nvarchar(50)

    N

    Название товара




    единица измерения

    nvarchar(50)

    N

    Единица, в которой измеряется продаваемый товар (шт., например)

    FK

    код отдела

    int

    N

    Внешний ключ, ссылка на таблицу Отделы




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

    int

    N

    Кол-во проданного товара по категориям
      1. Формы


    Код разработанных форм представлен в Приложении А.
        1. Форма авторизации


    На рисунке 5 изображена форма авторизации.



    Рисунок 5 — Форма авторизации
        1. Форма Директора


    На рисунке 6-10 изображена форма Директора.





    Рисунок 6 — Форма Директора - Продажи



    Рисунок 7 — Форма Директора - Отделы



    Рисунок 8 — Форма Директора - Сотрудники



    Рисунок 9 — Форма Директора - Роли



    Рисунок 10 — Форма Директора - Товары
        1. Форма заведующего отделом


    На рисунке 10-13 изображена форма заведующего отделом.



    Рисунок 10 — Форма заведующего отделом - Продажи



    Рисунок 11 — Форма заведующего отделом - Отделы



    Рисунок 12 — Форма заведующего отделом – Сотрудники



    Рисунок 13 — Форма заведующего отделом – Товары
        1. Форма бухгалтера


    На рисунке 14- изображена форма бухгалтера.



    Рисунок 14 — Форма бухгалтера – Продажи

    Р исунок 14 — Форма бухгалтера – Отделы



    Рисунок 14 — Форма бухгалтера – Товары

      1. Тестирование приложения

        1. Тест-кейсы


    Тест-кейсы представлены в Приложении B.
        1. Модульные тесты


    Код модульных тестов предложен в Приложении С.

    Было разработано 8 тестов, тестирующих приложение на Windows Form.

    Был протестирован следующий функционал:

    • Добавление новой роли в базу данных;

    • Добавление нового пользователя в базу данных;

    • Авторизация существующего пользователя по логину и паролю;

    • Удаление роли;

    • Удаление пользователя;

    • Выход пользователя из учетной записи;

    • Обновление пользователя в базе данных;

    • Обновление роли в базе данных.
      1. Оценка результатов индивидуального задания


    Индивидуальное задание оценено на 7.3 балла.

    Пояснение в Exel файле.


    ЗАКЛЮЧЕНИЕ


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

    СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


    1. ГОСТ 19.105-78 ЕСПД. Общие требования к программным документам.

    2. ГОСТ 19.102-77 ЕСПД. Стадии разработки

    3. ГОСТ 19.106-78 ЕСПД. Требования к программным документам, выполненным печатным способом.

    4. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.


    ПРИЛОЖЕНИЕ А


    (обязательное)
    Листинг кода

      1. Окно авторизации

        1. 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;

    }

    }

    }


      1. Окно Директора

        1. 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);

    }


    }

    }

    }


      1. Окно заведующего отделом

        1. 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.Отделы);
    }

    }

    }


      1. Окно бухгалтера

        1. 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 Аннотация теста

    Название проекта

    ТОРГОВЛЯ

    Рабочая версия

    v.1

    Имя тестирующего

    Дойникова Елизавета Александровна

    Дата(ы) теста

    04.02.2023


    Таблица В.2 — Протокол испытаний (тест-кейс)

    Поле

    Описание

    Название проекта

    Название тестируемого проекта из аннотации

    Рабочая версия

    Рабочая версия из аннотации

    Дата(ы) теста

    Дата(ы) из аннотации

    Тестовый пример

    TC_ФА_1

    Приоритет тестирования

    Высокий

    Заголовок/Название теста

    Произвести авторизацию пользователя по существующему в базе данных логину и паролю

    Этапы теста

          1. Ввести логин и пароль в форму авторизации;

          2. Нажать на кнопку «Войти».

    Тестовые данные

    Логин=admin

    Пароль=1234

    Ожидаемый результат

    Форма авторизации скроется; откроется форма Директора.

    Продолжение таблицы В.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);

    }

    }

    }




    написать администратору сайта