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


 

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

14963. Тұран жазығының физикалық-географиялық орыны, қалыптасуы 158 KB
  Тұран ойпатының құрылықтың ішкі аймағында орналасуы Шығыс Европаның өзі орналасқан ендіктеріне қарағанда қысы суық, жазы ыстық болып климаты шұғыл континентілігін; келуімен ерекшеленетін климатының...
14965. Химияны оқытуда халықтық педагогиканың элементтерін пайдалану 77.5 KB
  ӘОК ХИМИЯНЫ ОҚЫТУДА ХАЛЫҚТЫҚ ПЕДАГОГИКАНЫҢ ЭЛЕМЕНТТЕРІН ПАЙДАЛАНУ Д. Шардарбеков АОМКДИ Алматы қ. Тәуелсіздік алғаннан кейінгі елдің тәуелсіз әрі тегеурінді терең мазмұнды үздіксіз білім жүйесі болуы керек. Ол мемлететтің экономикалық қорғаныс қабілет
14966. Шығыс Қазақстан табиғаты және оны қорғау 224 KB
  Қазақстан білім және ғылым министрілігі 9 сыныпта өткізілген Шығыс Қазақстан табиғаты және оны қорғау тақырыбы бойынша ашық сабақ. Өткізген: Батырханова А. К. Ахмер орта мектебі 2007 жыл. Сабақ тақырыбы: Шығ
14968. Астана - әсем қала 49 KB
  Әсем қала мерейтойы ерлігі де, өрлігі де ұрпаққа өнеге болып жалғасқан қасиетті қазақ жерінің шежіресін паш етер, көңілі дархан,жаны жомарт қазақ елінің ұлылығын ұлықтайтын асқақта, айбынды ажарлы Астананың қазақ елі монументы....
14969. Астана - Қазақстанның саяси ерік-жігерінің нышаны 74.5 KB
  АСТАНА ҚАЗАҚСТАННЫҢ САЯСИ ЕРІКЖІГЕРІНІҢ НЫШАНЫ Астана бұл кең даладағы жай қала ғана емес саяси ерікжігер көрінісінің нышаны . Бұл саяси батыл қадам. Астана шаңырағы әлі де болса биіктей түспек. Жаңа...
14970. Астана қаласының көшелері 809 KB
  Астана қаласы Тілдерді дамыту басқармасының тапсырысы бойынша Руханият орталығы дайындаған Астана қаласы ономастика комиссиясы мақұлдаған Редакция алқасы Рахымжанов Әмірхан Асанғазы Оразкүл Әбжанов Хангелді Жолдасбеков Мырзатай Кекілбаев Әбіш Нұр
14971. Балқаш көлі 52.5 KB
  Балқаш көлі Балқаш өңірі әрі жылы әрі күн сәулесі көп түсетін табиғаты жағынан Қазақстандағы тартымды жерлердің бірі. Шөлді болып келетін қуаң дала Балқаш көлінен нәр алады. Бұл аймақ өзінің әсем көрінісімен ерекше өсімдіктер және жануарлар дүниесімен белгілі....