Разработка распределённой системы учёта медицинских препаратов на складе. Требования к программному обеспечению, анализ концептуальной модели. Архитектурное проектирование программы в среде NetBeans 6.7.1 и СУБД JavaDB. Проверка ее работоспособности.
Аннотация к работе
Основным объектом манипулирования системы служат товары и записи о поставках, которые содержат информацию о доставленном товаре, объеме партии и ответственном лице-работнике склада. Система должна позволять просматривать состояние склада, то есть точный объем каждого вида продукции, хранящейся на складе. Система должна позволять регистрировать новые виды продукции на складе. Система должна позволять регистрировать операции ввоз партий продукции на склад и их вывоз. Система должна позволять регистрировать новый товар на складе.Многопользовательские системы, основанные на классической технологии клиент/сервер, называются двухзвенными системами или системами с «толстым клиентом». На клиентскую часть возлагается обеспечение интерфейса пользователя, посылка запросов серверу БД (серверной части системы), получение результатов и сообщений от сервера, управление бизнес - правилами, проверку корректности, допустимости и обработку данных согласно содержащихся в них алгоритмах. На рисунке 6.1 представлена схема классической архитектуры клиент/сервер. Многозвенными системами клиент/сервер называют более новые системы с так называемым ”тонким” клиентом. На рисунке 6.2 представлена схема архитектуры клиент/сервер с “тонким” клиентом.На рисунке 5.1 представлен экран текущего состояния склада На рисунке 5.2 представлено окно регистрации нового товара На рисунке 5.3 представлен экран состояния склада после регистрации нового товара. На рисунке 5.4 представлен экран журнала поставок. На рисунке 5.6 представлен экран журнала поставок после регистрации новой поставкиВ ходе выполнения работы была разработана распределенная информационно-справочная система для учета медицинских препаратов на складе. Была разработана диаграмма классов, а также разработан проект архитектуры системы.
Вывод
В ходе выполнения работы была разработана распределенная информационно-справочная система для учета медицинских препаратов на складе.
Для успешной работы приложения вначале была разработана логическая, физическая модель БД. Была разработана диаграмма классов, а также разработан проект архитектуры системы.
В данной работе была использована классическая двухслойная архитектура «клиент - сервер». Выбор архитектуры обоснован следующими преимуществами: простота создания, быстрота работы, отсутствие высоких нагрузок на систему.
При разработке использовалась среда NETBEANS 6.7.1 и СУБД JAVADB.
Для реализации подключения к БД использовался драйвер org.apache.derby.jdbc.CLIENTDRIVER и библиотека hibernate.
В ходе проверки корректности работы системы, ошибок выявлено не было.
Список литературы
1 Кей С. Хорстманн, Гари Корнелл Библиотека профессионала Java 1,2 том - М:Издательский дом «Вильямс»,2010, 1120стр.
2 Swing руководство для начинающих - М:Издательский дом «Вильямс»,2009, 697стр.
3 С. Орлик Многоуровневые модели в архитектуре клиент-сервер http://ods.com.ua/win/rus/db/kbd97/22.htm
ПРИЛОЖЕНИЯ
Приложение А Листинг исходного кода SQL-спринтов для создания базы данных create table ADMIN.Employee
(
Id int Primary Key NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), Name varchar(100) not null CHECK(LENGTH(Name) > 0), CONSTRAINT UK_Employee_Name UNIQUE (Name)
);
create table ADMIN.Product
(
Id int Primary Key NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), Name varchar(100) not null CHECK(LENGTH(Name) > 0), Manufacturer varchar(100), QUANTITYINSTOCK int not null default 0, CONSTRAINT UK_Product_Name UNIQUE (Name)
);
create table ADMIN.Shipment
(
Id int Primary Key NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), PRODUCTID int not null, Quantity int not null, DATETIME Timestamp, RESPONSIBLEPERSONID int not null, CONSTRAINT FK_Shiment_Product Foreign Key (PRODUCTID) References Product(Id), CONSTRAINT FK_Shiment_Employee Foreign Key (RESPONSIBLEPERSONID) References Employee(Id)
);
insert into ADMIN.EMPLOYEE (Name) values ("James Winkles");
insert into ADMIN.EMPLOYEE (Name) values ("John Snipes");
insert into ADMIN.EMPLOYEE (Name) values ("Gregory House");
insert into ADMIN.EMPLOYEE (Name) values ("Jessica Gamilton");
insert into ADMIN.EMPLOYEE (Name) values ("Sarah Daniels");
Листинги исходных кодов классов клиентской части ПО
Классы-сущности package Entities;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CASCADETYPE;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GENERATEDVALUE;
import javax.persistence.GENERATIONTYPE;
import javax.persistence.Id;
import javax.persistence.NAMEDQUERIES;
import javax.persistence.NAMEDQUERY;
import javax.persistence.ONETOMANY;
import javax.persistence.Table;
/**
*
* @author Humanity
*/
@Entity
@Table(name = "EMPLOYEE")
@NAMEDQUERIES({@NAMEDQUERY(name = "Employee.FINDALL", query = "SELECT e FROM Employee e"), @NAMEDQUERY(name = "Employee.FINDBYID", query = "SELECT e FROM Employee e WHERE e.id = :id"), @NAMEDQUERY(name = "Employee.FINDBYNAME", query = "SELECT e FROM Employee e WHERE e.name = :name")}) public class Employee implements Serializable { private static final long SERIALVERSIONUID = 1L;
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/ package Entities;
import java.io.Serializable;
import java.util.ARRAYLIST;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CASCADETYPE;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GENERATEDVALUE;
import javax.persistence.GENERATIONTYPE;
import javax.persistence.Id;
import javax.persistence.NAMEDQUERIES;
import javax.persistence.NAMEDQUERY;
import javax.persistence.ONETOMANY;
import javax.persistence.Table;
/**
*
* @author Humanity
*/
@Entity
@Table(name = "PRODUCT")
@NAMEDQUERIES({@NAMEDQUERY(name = "Product.FINDALL", query = "SELECT p FROM Product p"), @NAMEDQUERY(name = "Product.FINDBYID", query = "SELECT p FROM Product p WHERE p.id = :id"), @NAMEDQUERY(name = "Product.FINDBYNAME", query = "SELECT p FROM Product p WHERE p.name = :name"), @NAMEDQUERY(name = "Product.FINDBYMANUFACTURER", query = "SELECT p FROM Product p WHERE p.manufacturer = :manufacturer"), @NAMEDQUERY(name = "Product.FINDBYQUANTITYINSTOCK", query = "SELECT p FROM Product p WHERE p.quantityinstock = :quantityinstock")}) public class Product implements Serializable { private static final long SERIALVERSIONUID = 1L;
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/ package Entities;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GENERATEDVALUE;
import javax.persistence.GENERATIONTYPE;
import javax.persistence.Id;
import javax.persistence.JOINCOLUMN;
import javax.persistence.MANYTOONE;
import javax.persistence.NAMEDQUERIES;
import javax.persistence.NAMEDQUERY;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TEMPORALTYPE;
/**
*
* @author Humanity
*/
@Entity
@Table(name = "SHIPMENT")
@NAMEDQUERIES({@NAMEDQUERY(name = "Shipment.FINDALL", query = "SELECT s FROM Shipment s"), @NAMEDQUERY(name = "Shipment.FINDBYID", query = "SELECT s FROM Shipment s WHERE s.id = :id"), @NAMEDQUERY(name = "Shipment.FINDBYQUANTITY", query = "SELECT s FROM Shipment s WHERE s.quantity = :quantity"), @NAMEDQUERY(name = "Shipment.FINDBYDATETIME", query = "SELECT s FROM Shipment s WHERE s.datetime = :datetime")}) public class Shipment implements Serializable { private static final long SERIALVERSIONUID = 1L;