71220

Проектирование приложения, работающего с Базой Данных в соответствии с шаблоном проектирования Model-View-Controller

Лабораторная работа

Информатика, кибернетика и программирование

Controller – класс, выступающий посредником при взаимодействии классов пакета View и пакета Model. Когда представление сообщает о каком-либо действии пользователя, управление передаётся соответствующему методу класса Controller, который в свою очередь вызывает нужный метод класса Model.

Русский

2014-11-03

285.37 KB

0 чел.

СПбГУПС, ИВС

2013 год

Пояснения к выполнению лабораторной работы №1 по дисциплине «Представление Знаний в Информационных Системах»

Проектирование приложения, работающего с Базой Данных в соответствии с шаблоном проектирования Model-View-Controller

Софьин Роман, Николаева Ольга


Предметная область - Больница

Model

Patient –пациенты больницы;

Doctor –доктора больницы;

Ward – палаты;

Department – отделения больницы;

Prescription – назначения для пациентов.

Controller

Controller – класс, выступающий посредником при взаимодействии классов пакета View и пакета Model. Когда представление сообщает о каком-либо действии пользователя, управление передаётся соответствующему методу класса Controller, который в свою очередь вызывает нужный метод класса Model.

View

MainFrame – класс главного фрейма приложения;

AddPatientFrame – класс фрейма добавления нового пациента;

ModifyPatientFrame – класс фрейма редактирования информации о пациенте;

AddPrescriptionFrame – класс фрейма добавления нового назначения;

Внешний вид фреймов представлен на рис. 1–4.

Рис. 1. Главное окно приложения (MainFrame)

Рис. 2. Окно добавления нового пациента (AddPatientFrame)

Рис. 3. Окно редактирования информации о пациентах (ModifyPatientFrame)

Рис.4. Окно добавления нового назначения (AddPrescriptionFrame)

Методы класса Model:

  1.  Patient getPatientForID(int id)
  2.  ArrayList<Patient> getPatientsForPrescriptions()
  3.  public ArrayList<Prescription> getAllPrescriptions()
  4.  ArrayList<Prescription> getPrescriptionsByResultSet(ResultSet rs) throws SQLException
  5.  boolean addNewPatient(Patient patient)
  6.  boolean addNewPrescription(Prescription prscr)
  7.  boolean modifyPatient(Patient newP)
  8.  boolean deletePrescriptions(ArrayList<Prescription> prList)
  9.  boolean deletePatients(ArrayList<Patient> pList)

public ArrayList<Patient> getAllPatients() {

ArrayList<Patient> pList = null;

try {

ResultSet rs = stmt.executeQuery("select * from patient");

pList = getPatientsByResultSet(rs);

} catch (SQLException e) {

e.printStackTrace();

}
return pList;

}

public boolean addNewPrescription(Prescription prscr) {

 try {

   addPrescription.setInt(1, prscr.getDoctorID());

   addPrescription.setInt(2, prscr.getPatientID());

   addPrescription.setString(3, prscr.getDop());

   addPrescription.executeQuery();

   return true;

 } catch (SQLException e) {

   e.printStackTrace();

   return false;

}

}

Методы класса Controller:

  1.  void searchAction(String firstName, String lastName)
  2.  boolean addPatientAction(String firstName, String lastName, String dateOfBirth, String entryDate, String descr, String doctor,
  3.  String ward)
  4.  boolean addPrescriptionAction(String doctor, String patient,
  5.   String descr)
  6.  boolean deletePatientsAction()
  7.  boolean deletePrescriptionAction()
  8.  void modifyPatientAction(String name, String lastName, MyDate dob, MyDate entryDate, int wardID, String doctor, String descr)

public boolean addPatientAction(String firstName, String lastName, String dateOfBirth, String entryDate, String descr, String doctor, String ward) {

if(firstName.isEmpty() || lastName.isEmpty() || dateOfBirth.isEmpty() ||  entryDate.isEmpty() || descr.isEmpty())

return false;

MyDate dob = new MyDate(dateOfBirth);

MyDate ed = new MyDate(entryDate);

wID = Integer.parseInt(ward.substring(0, 1));

int i = doctor.indexOf(", ");

String docName = doctor.substring(0, i);

String docLastName = doctor.substring(i+2);

int doctorID = (model.getDoctorsFor(docName,  docLastName)). get(0). getId();

Patient patient = new Patient(firstName,lastName,dob, wID, descr,    doctorID, ed);

if ( !model.addNewPatient(patient) ) {

return false;

}

ArrayList<Patient> pList = model.getAllPatients();

ArrayList<Doctor> dList = model.getDoctorsForPatients();

ArrayList<Ward> wList = model.getWardsForPatients();

mainFrame.updatePatientTable(pList, dList, wList, patientTable);

return true;

}

Методы классa MainFrame:

  1.  void updatePatientTable(ArrayList<Patient> pList, ArrayList<Doctor> dList, ArrayList<Ward> wList, JTable tbl)
  2.  void updatePrescriptionTable(ArrayList<Prescription> prscrList, ArrayList<Doctor> dList, ArrayList<Patient> pList, JTable tbl)

void updatePatientTable(ArrayList<Patient> pList, ArrayList<Doctor> dList, ArrayList<Ward> wList, JTable tbl) {

String[] strArr = {"Имя","Фамилия","Дата рождения","Дата поступления","Доктор","Описание","Палата"};

DefaultTableModel dtm1 = new DefaultTableModel(strArr, 0);

tbl.setModel(dtm1);

Patient p;

Doctor d;

Ward w;

int j = 0;

for(int i = 0; i < pList.size(); i++, j=0) {

dtm1.setRowCount(i + 1);

p = pList.get(i);

d = dList.get(i);
w = wList.get(i);

tbl.setValueAt(p.getLastName(), i, j++);

tbl.setValueAt(p.getFirstName(), i, j++);

tbl.setValueAt(p.getDateOfBirth().toString(), i, j++);

tbl.setValueAt(p.getEntryData().toString(), i, j++);

tbl.setValueAt(d.getFirstName() + ", " + d.getLastName(), i,   j++);

tbl.setValueAt(p.getDescription(), i, j++);

tbl.setValueAt(w.getId(), i, j);

}

}

private void jButton3_actionPerformed(ActionEvent e) {

if(modifyPatientFrame != null) {

modifyPatientFrame.setVisible(false);

modifyPatientFrame.setVisible(true);

return;

}

modifyPatientFrame = new ModifyPatientFrame(model, ctrl);

configFrame(modifyPatientFrame);

ctrl.setDoctorBoxMPF(modifyPatientFrame.getDoctorBox());

ctrl.setWardBoxMPF(modifyPatientFrame.getWardBox());

ctrl.setPatientListMPF(modifyPatientFrame.getPatientList());

ctrl.updateModifyPatientFrame();

}

Методы класса ModifyPatientFrame:

  1.  void updateDoctorComboBox(ArrayList<Doctor> dList, String   sepStr, JComboBox comboBox) throws SQLException
  2.  void updateWardComboBox(ArrayList<Ward> wList, ArrayList<Department> dptrList, String sepStr, JComboBox comboBox) throws SQLException
  3.  public void updatePatientList(ArrayList<Patient> pList, String sepStr, JList patientList) throws SQLException
  4.  boolean updateModifyPatientFrame()

void updateDoctorComboBox(ArrayList<Doctor> dList, String sepStr, JComboBox comboBox) throws SQLException {

Doctor house;

comboBox.removeAllItems();

for(int i = 0; i < dList.size(); i++) {

house = dList.get(i);

comboBox.addItem( house.getFirstName() + sepStr + house.getLastName());

}

}

public boolean updateModifyPatientFrame() {

try {

ArrayList<Doctor> dList = model.getAllDoctors();

updateDoctorComboBox( dList, ", ", doctorBoxMPF);

ArrayList<Ward> wList = model.getAllWards();

ArrayList<Department> dptrList = model.getDepartmentsForWards();

updateWardComboBox( wList, dptrList, " - ", wardBoxMPF);

ArrayList<Patient> pList = model.getAllPatients();

updatePatientList( pList, ", ", patientListMPF);

} catch (SQLException e) {

e.printStackTrace();

return false;

}

return true;

}

Порядок вызовов методов при добавлении пациента в базу данных

Для того чтобы внести нового пациента в базу данных, в главном окне приложения (MainFrame) необходимо нажать кнопку «Добавить пациента», после чего выполняется метод private void jButton1_actionPerformed(ActionEvent e), в теле которого создается экземпляр класса AddPatientFrame(), и окно добавления пациента появляется на экране. Пользователь должен ввести все необходимые данные о пациенте в поля для ввода или выбрать информацию из предложенных списков и нажать кнопку «Добавить».  В следствие  чего управление получит метод private void jButton1_actionPerformed(ActionEvent e). Если все данные введены корректно, то в теле этого метода отработает метод public boolean addClientAction(String firstName, String lastName, String phone_number) с соответствующими параметрами. В теле этого метода с помощью конструктора класса Patient создастся объект это класса со значениями полей, равными значениям который указал пользователель. Далее произойдет вызов метода public boolean addNewPatient(Patient patient) класса Model, с помощью которого  в базу данных будет добавлен вновь созданный пациент. Затем с помощью метода   public ArrayList<Patient> getAllPatients() класса Model будет получен список всех пациентов типа Patient. В завершении, путем вызова метода void updatePatientTable(cList, mainFrame.getPatientTable()) таблица пациентов будет обновлена с учетом вновь добавленного пациента.

Порядок вызовов методов при модификации данных о пациенте из базы данных

Если пользователь хочет внести изменения об уж имеющемся в базе пациенте, то в главном окне приложения (MainFrame) необходимо нажать кнопку «Модифицировать», после чего выполняется метод  private void jButton3_actionPerformed(ActionEvent e), в теле которого создается экземпляр класса ModifyPatientFrame(), и окно модификации появляется на экране. В этом окне в списке типа JList отображается набор всех пациентов, которые находятся в БД. При выборе одного из них, в поля ввода автоматически заносится соответствующие значения полей этого пациента. Пользователь должен внести все необходимые изменения о пациенте в поля для ввода или выбрать информацию из предложенных списков, а затем нажать кнопку «Изменить». После чего управление получит метод private void jButton1_actionPerformed(ActionEvent e). Если все данные введены корректно, то в теле этого метода отработает метод public void modifyPatinetAction(String name, String lastName, MyDate dob, MyDate entryDate, int wardID, String doctor, String descr) с соответствующими параметрами. В теле этого метода с помощью конструктора класса Patient создастся новый объект со значениями полей, которые были введены пользователем. Далее будет вызван метод public boolean modifyPatinet (Patinet newP) класса Model, с помощью которого  произойдет обновление всех полей пациента, id которого совпадает с newP.id. Затем с помощью метода public ArrayList<Patient> getAllPatients() класса Model будет получен список всех пациентов типа Patient. В завершение, путем вызова метода void updatePatientTable(cList, mainFrame.getPatientTable()) таблица пациентов будет обновлена с учетом измененных данных о пациенте.


 

А также другие работы, которые могут Вас заинтересовать

9698. Сущность, содержание и виды страхования рисков 27 KB
  Сущность, содержание и виды страхования рисков. В системе управления рисками страхование является распространенным методом защиты имущественных интересов и других материальных и моральных потерь. Страховые организации обладают значительным капитало...
9699. Организационная структура страхования хозяйственных рисков 39 KB
  Организационная структура страхования хозяйственных рисков В страховании рисков как способе борьбы с неблагоприятными событиями или складывающимися обстоятельствами реализуются определенные экономические отношения, включающие следующие элементы...
9700. Необходимость и основные задачи актуарных расчетов 38 KB
  Необходимость и основные задачи актуарных расчетов. При заключении договора страхования хозяйственных рисков стоимость услуг, оказываемых страховщиком страхователю, устанавливается на основе всесторонней оценки объективных и субъективных..
9701. Виды страхового покрытия риска 64.5 KB
  Виды страхового покрытия риска Страхование хозяйственных рисков является эффективным механизмом покрытия ущерба субъекта экономической деятельности только в том случае, когда покрытие, обеспеченное страховым договором, соответствует нуждам...
9702. Сдерживающие факторы при страховании хозяйственных рисков 32 KB
  Сдерживающие факторы при страховании хозяйственных рисков. Построенные на общности интересов участников договоры страхования рисков в хозяйственной практике не имеют широкого распространения, поскольку их заключение и выполнение сдерживается во мн...
9703. Удержание риска возможных потерь на предприятии 31 KB
  Удержание риска возможных потерь на предприятии Самострахование рисков субъектов хозяйствования осуществляется с целью поддержания уровня их деловой активности и эффективности, которые организационно-правовая структура планирует сохранить после проя...
9704. Способы резервирования средств для покрытия возможных убытков 36 KB
  Способы резервирования средств для покрытия возможных убытков Программа самострахования рисков предусматривает один или несколько из альтернативных методов покрытия возможных убытков. Стремление субъекта хозяйствования сократить риски практически вс...
9705. Оптимальные уровни удержания для самострахования риска 31.5 KB
  Оптимальные уровни удержания для самострахования риска Удержание для покрытия потерь при негативном проявлении рискованных ситуаций - это использование средств предприятия для финансирования случайных убытков. Уровень удержания формируется с уч...
9706. Передача риска без страхования через договорные соглашения 30 KB
  Передача риска без страхования через договорные соглашения Одним из методов преодоления риска является частичная или полная передача возможных потерь кому-то другому через включение в договоры, контракты, соглашения статей и оговорок о компенсации п...