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


 

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

75368. Розвиток підприємства: зміст, сучасні концепції та передумови 831 KB
  Розвиток підприємства: зміст сучасні концепції та передумови Поняття економічного розвитку підприємства Підприємницька діяльність передбачає динамічність розвиток і зростання. Його джерелами для підприємства виступають вміння максимально задіяти внутрішні ресурси наявність добре розвинених видів діяльності та ринків збуту постійний процес розробки та впровадження інновацій здатність швидко реагувати на зміни на ринку і використовувати надані можливості. Економічне зростання підприємства розглядають насамперед як необхідну умову...
75370. ПАССИВНЫЕ ЭЛЕМЕНТЫ ВОЛОКОННО-ОПТИЧЕСКИХ УСТРОЙСТВ 700.5 KB
  Широкополосный разветвитель или же разветвитель нечувствительный к длине волны устройство работающее в двух окнах прозрачности: 1310 и 1550 нм. Другими словами вносимые потери должны быть одинаковы для любой длины волны в одном из окон. Мультиплексоры-демультиплексоры с разделением по длине волны устройства ветвления формально ничем не отличающиеся от разветвителей.
75371. Обзор нелинейных оптических эффектов в стеклянном волокне 408.5 KB
  Четырехволновое смешение Для тех кто пришел из радиосвязи или беспроводной радиосвязи четырехволновое смешение ЧВС напоминает нам продукты третьего порядка. ЧВС заявляет о себе появлением побочных сигналов некоторые из которых могут соответствовать частотам рабочих каналов.5 ЧВС может возникать даже в одноканальных системах между рабочим сигналом и составляющими SE ОУ а также между основной и боковыми модами. Две оптических волны распространяющиеся вдоль волокна генерируют ЧВС с высокой степенью эффективности если согласуются...
75372. Интерферометр Майкельсона 476.5 KB
  Время измерения определяется только пропускной способностью электронного тракта и может составлять сотые доли микросекунды скорость счета полос 100 МГц что соответствует скорости приращения L 16 м с. Минимальную погрешность измерения расстояния определяет дискрета счета. Частота частотной модуляции аналогично частоте фазовой модуляции ограничивает время измерения. Тогда время однократного измерения фазы определяется временем задержки фазоизмерительного устройства и составляет для современных ЛИС около 10 мкс.
75373. ЭФФЕКТ САНЬЯКА 371 KB
  Эффект Саньяка является следствием релятивистского закона сложения скоростей: линейной скорости вращения интерферометра и фазовых скоростей встречных волн. В случае использования встречных электромагнитных волн с длиной волны  различие времен распространения Т приводит к появлению разности фаз : . 2 Если все элементы интерферометра расположены на вращающейся платформе разность фаз встречных волн не зависит от показателя преломления и дисперсии среды в которой они распространяются....
75374. .КОЛЬЦЕВЫЕ ЛАЗЕРНЫЕ ГИРОСКОПЫ 3.27 MB
  Чтобы измерять малые угловые скорости, используют частотную подставку. С помощью виброподвеса 10 возбуждаются угловые колебания кольцевого лазера относительно корпуса ЛГ.
75375. ЛАЗЕРНЫЕ ДОПЛЕРОВСКИЕ ИЗМЕРИТЕЛИ СКОРОСТИ 58.5 KB
  В соответствии с 2 относительная методическая погрешность измерения путевой скорости по разности частот. Принципиальная схема лазерного доплеровского измерителя скорости ЛДИС с опорным лучом Расщепитель пучка Лазерный пучок Рассеянное излучение частота Требования к лазеру: Минимальное поглощение и рассеяние излучения лазера в атмосфере включая...
75376. ЛАЗЕРНЫЕ ДАЛЬНОМЕРЫ 94.5 KB
  Импульсный метод – измерение времени распространения короткого импульса лазерного излучения до объекта и обратно. Фазовый метод – измерение разности фаз у колебаний мощности модулированного лазерного излучения на выходе из источника и возвратившегося после отражения