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


 

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

15010. Ахмет Байтұрсынұлының Аққу, шортан, һәм шаян мысалы 69.54 KB
  Ахмет Байтұрсынұлы Аққу шортан һәм шаян мысалы. Ашық сабақ жоспары. Сабақтың тақырыбы: Ахмеn Байтұрсынұлы Аққу шортан Һәм шаян мысалы. Сабақтың мақсаты: а білімділік: Қазақ халқының бір тума ұлы Ахмет Байтұрсынұлының қазақ әдебиетін
15011. Алғашқы қазақ газеттерінің тарихы 39.5 KB
  Алғашқы шығарылған қазақ газеттерінің тарихы. Кез келген әдебиет бір күннің төңірегінде өрбитін немесе белгілі бір тарихи кезеңнің оқиғасын баяндайтын тар ұғымды дүние емес. Мәдениеті бай елдердің әдебиеті де қаз тұрып қалыптасқанша қоғамның дамуы секілді т
15012. Алпамыс батыр дастанының зерттелуі 560 KB
  УДК 398.22 574 А 61 АЛПАМЫС БАТЫР ЖЫРЫНЫЊ ЗЕРТТЕЛУІ А. Аманбаева А. Мќашева Тараз мемлекеттік педагогикалыќ институты Тараз қ. Батырлар жыры ќазақ ауыз әдебиетінің өте ертеден келе жатқан күрделі саласының бірі. Батырлар жыры бір ғасырдың ғана жемісі емес.Ол...
15013. Алпамыс батыр жырын оқыту және тәрбие жұмыстары 42.5 KB
  ӘОЖ 373.371.83 АЛПАМЫС БАТЫР ЖЫРЫН ОҚЫТУ АРҚЫЛЫ ТӘРБИЕ ЖҰМЫСТАРЫНЫҢ ҚҰЗЫРЕТТІЛІГІН АРТТЫРУ З.Д. Көшімбетова Қ.А. Яссауи атындағы Халықаралық қазақтүрік университеті Тараз институты Тараз қ. Алпамыс батыр жыры қазақ халқының ауыз әдебиетіне жатады және жыр...
15014. Арқалық батыр жырының нұсқалары 230.5 KB
  Тақырыптың өзектілігі. Қазақ халқының кез келген халықтың эпикалық қазынасынан кем түспейтін телегей-теңіз мол, әрі көркемдігі кемел, танымдық-тағылымдық мәні зор жырларының басым көпшілігі, әлі де болса
15015. Асан Қайғы туралы аңыздар 176.5 KB
  Ұлттың рухы бейнеленген мұра халықтың асыл қазыналарының бірі екендігін тәуелсіздік мұраты жолында жаңа экономикалық және саяси-әлеуметтік реформаларды қарқынды...
15016. Ахмет Байтұрсынұлының Әдебиет танытқыш еңбегі ХХ ғасыр басындағы әдебиеттану ғылымының контексінде 190.5 KB
  ЖҰМЫСТЫҢ ЖАЛПЫ СИПАТТАМАСЫ Диссертациялық жұмыста ірі энциклопедист ғалым қазақ әдебиеттану ғылымындағы әдебиет теориясының негізін салушы Ахмет Байтұрсынұлының сөз өнерінің теориялық сипаты жөніндегі тұжырымдары талқыланып отыр. Ол тұжырымдар ғалымның 1926 жыл
15017. БАУЫРЖАН МОМЫШҰЛЫ ШЫҒАРМАЛАРЫНДАҒЫ АБАЙ ДӘСТҮРІ 72 KB
  БАУЫРЖАН МОМЫШҰЛЫ ШЫҒАРМАЛАРЫНДАҒЫ АБАЙ ДӘСТҮРІ Даурбекова Ширинкуль Седазымқызы Б. Момышұлы атындағы №44 орта мектеп. Шымкент қаласы Туады ерлер ел үшін Өлмейді ісі мәңгілік Өшпейді абзал есімдер. Ұрпаққа жетіп м