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()) таблица пациентов будет обновлена с учетом измененных данных о пациенте.


 

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

16543. Вычисление геодезических координат точек по их плоским 219.29 KB
  Лабораторная работа № 7 Вычисление геодезических координат точек по их плоским Координатам ГауссаКрюгера Общий путь решения сводиться к определению по известной абсциссе x широты В0 основания изображения плоской ординаты на поверхности B где В – искомая ши...
16544. Религия и мифология 76.33 KB
  Мифология - это форма общественного сознания, способ понимания природной и социальной действительности на ранних ступенях общественного развития. Мифы - это архаические повествования о деяниях богов и героев...
16545. Проектирование и уравнивание геодезических сетей 621.5 KB
  Курсовая работа Проектирование и уравнивание геодезических сетей Вариант 16 Карта У3567В В данной курсовой работе мы осуществляем перевод геодезических координат с эллипсоида Вальбека на эллипсоид Красовского. Переводим последние из геодезических в прямоуголь
16546. Определение коэффициентов термического расширения 492.5 KB
  Лабораторная работа Определение коэффициентов термического расширения Цель работы: Освоить методы исследования термических изменений структуры исследуемых объектов В процессе выполнения работы необходимо: освоить методику рентгенографического исследовани...
16547. Изучение устройства источника генерированного рентгеновского излучения, рентгеновских трубок 1.51 MB
  Лабораторная работа № 1 Изучение устройства источника генерированного рентгеновского излучения рентгеновских трубок. Цель работы: изучение устройства и принципов работы установок рентгеноструктурного анализа устройства рентгеновской трубки. В процессе выполн
16548. Получение рентгенограмм порошковых материалов на дифрактометре 407.5 KB
  Лабораторная работа Получение рентгенограмм порошковых материалов на дифрактометре. Цель работы: освоение способов подготовки порошковых образцов и регистрации дифракционных спектров на дифрактометре; В процессе выполнения работы необходимо: изучить реком
16549. Качественный рентгенофазовый анализ 319 KB
  Лабораторная работа Качественный рентгенофазовый анализ Цель работы: освоение метода качественного рентгеновского фазового анализа однофазных и двухфазны проб; В процессе выполнения работы необходимо: ознакомиться с сущностью метода рентгеновского фазового...
16550. Индицирование порошковых рентгенограмм 379 KB
  Лабораторная работа Индицирование порошковых рентгенограмм Цель работы: Освоение приемов индицирования порошковых рентгенограмм определение параметров элементарной ячейки исследуемого вещества В процессе выполнения работы необходимо: ознакомиться мет
16551. Расчет теоретических структурных амплитуд 236 KB
  Лабораторная работа Расчет теоретических структурных амплитуд Цель работы: Научиться определять теоретические значения структурных амплитуд исследуемых объектов для дальнейшего использования при расшифровке структур. В процессе выполнения работы необходимо...