「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」...

25
IUML 専専専専専 Java 専専専 「」 1 2 / 8 /2009 【】 1 <default package>専専専専 ”Application” 専 。、[refactor] 専 2 a. 専専専専専専専専専専専専(String)専 b. Change the name of the table from”jTable1” to “ticketTable”. 1

Transcript of 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」...

Page 1: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

「専門演習 I」

UML を利用した Java 応用プログラム 「発券予約システム」設計仕様書

1 2 / 8 /2009 【作業】

① <default package> の 名 前 を ” Application” に 変 更 す る 。 そ の 際 、

[refactor] を選択する。

② 表を修正する。

a. 桝目の値をすべて文字列型(String)にする。

b. Change the name of the table from”jTable1” to “ticketTable”.

1

Page 2: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

この変更は4つの「…JPanel.java」について全て行って下さい。

③ 「切符(催し物)表」から、「催し物」行を選択。

private void jButton2ActionPerformed()

int row = ticketTable.getSelectedRow(); if (row < 0 || row > ticketTable.getRowCount()) {

2

Page 3: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

return; }

④ 「催し物」の選択を確認する。

String sRow = Integer.toString(row + 1);System.out.println(sRow + "row OK?");String sAvailability = (String) ticketTable.getValueAt(row, 3);

String entertainment = (String) ticketTable.getValueAt(row, 1); System.out.println(sAvailability + " tickets. OK?");

okCancel = JOptionPane.showConfirmDialog(null, "ID " + sRow + ". " + '"' +

entertainment + '"' + ". OK?", "Entertainment Confirmation",

3

Page 4: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

JOptionPane.OK_CANCEL_OPTION);

⑤ [了解]を選択すると、次の「枚数」の選択対話箱に移行する。 [取り消し]の場合

は、もとに戻る。

⑥ 枚数」を入力する。「 [取り消し]の場合は元に戻る。

⑦ [取り消し]の場合は、次の箱を表示させる。

⑤⑥⑦ を実現するには、以下の命令を更に追加する。

if (okCancel == JOptionPane.YES_OPTION) { do {

4

Page 5: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

availability = JOptionPane.showInputDialog("Enter availability, please!"); } while (availability != null && availability.equals("")); if (availability == null) { System.out.println("もういちど催し物を選ぶか、戻って下さい。"); JOptionPane.showConfirmDialog(null, "もういちど催し物を選ぶか、戻って下さい。

"); } else { System.out.println("availability は " + availability + " です。"); }

⑧ 読み込んだ「枚数」を「現在の枚数」から差し引いて、「新しい枚数」を生成する:

public void refresh(int irow, String sPresentAvailability, String savailability) { int iavailability = Integer.parseInt(savailability); int iPresentAvailability = Integer.parseInt(sPresentAvailability); String sNewAvailability = Integer.toString(iPresentAvailability - iavailability); ticketTable.setValueAt(sNewAvailability, irow, 3); }

5

Page 6: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

1 2 / 10 /2009 【作業】

① 梱包(package)<javaticketapp>の削除。Refactor を指定する。

この変更に結果、今後は、企画の実行は、以下の操作メニューから[実行]→[企画

を実行] の操作で可能となりました。

6

Page 7: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

② 「発券表」の更新のための準備。

a. Ticket.java の追加更新。

public class Ticket {

public String id; public String eventName; public String price; public String availability;

public String getAvailability() { return availability; }

public void setAvailability(String val) { this.availability = val; }

7

Page 8: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

public String getId() { return id; }

public void setId(String val) { this.id = val; }

public String getEventName() { return eventName; }

public void setEventName(String val) { this.eventName = val; }

private String name;

private int initialCount;

private int currentCount;

public Ticket() { }

public int getCurrentCount() { return currentCount; }

public void setCurrentCount(int val) { this.currentCount = val; }

public int getInitialCount() {

8

Page 9: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

return initialCount; } public void setInitialCount(int val) { this.initialCount = val; }

  public String getName() { return name; }

public void setName(String val) { this.name = val; }

public String getPrice() { return price; }

public void setPrice(String val) { this.price = val; }}

b. TicketCatalogue.java の追加更新。

public class TicketCatalogue {

private ArrayList<Ticket> ticketList; private String String; private int count = 0;

public TicketCatalogue() { ticketList = new ArrayList<Ticket>(); }

9

Page 10: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

public ArrayList getTicketCatalogue() { return ticketList; }

public void setTicketCatalogue(ArrayList pList) { ticketList = pList; }

public Ticket newTicket() { Ticket t = new Ticket(); return t; }

public void addTicket(Ticket t) { ticketList.add(t); }

public void clearTicketCatalogue() { ticketList.clear(); }

public boolean empty(){ return ticketList.isEmpty();  }

public String flag(int c) { count += c; if (count > 0) { return "ReserveTicketJPanelCalled"; } else { return ""; }

}}

10

Page 11: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

1 2 / 15 /2009 【作業】今日の主題は、”ViewTicketInfoJPanel” と“ReserveTicketJPanel” をク

リックしたときに表示される「発券表」に発券予約状況を実時間で反映させることであ

る。

<<要点>>表示:表の表示は、JTable クラスである”ticketTable” を呼ぶことによって実現

される。

格納:表の各要素に表示されるデータの格納は、”TicketCatalogue”クラスのなか

で具体化されている ArrayList<Ticket> クラスの例示”ticketList”に、クラ

ス”Table”の例示 “ticket” をリスト構造として、次々に追加連結していくことによ

って格納される。

<<発券予約事例>>① “ReserveTicketJPanel”に関して

refresh() の機能 :JTable の更新表示をする

public ReserveTicketJPanel(JPanel rt, TicketCatalogue tc) { UserProcessContainerJPanel = rt; JFrame frame = null; ticketCatalogue = tc;

11

ticket ticket ticket ticket

ticketideventNamepriceavailability

Page 12: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

initComponents(); renew(); if (ticketCatalogue.empty()) { JOptionPane.showMessageDialog(frame, "最初に「発券情報」をご覧

ください!!"); } }public void addTicket() { // ticketCatalogue = new TicketCatalogue(); Ticket t; String val; int rowCount = ticketTable.getRowCount(); ticketCatalogue.clearTicketCatalogue(); for (int i = 0; i <= rowCount - 1; i++) { t = ticketCatalogue.newTicket(); ticketCatalogue.addTicket(t); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 0); t.setId(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 1); t.setEventName(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 2); t.setPrice(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 3); t.setAvailability(val); }

}

public void renew() { // ticketCatalogue = new TicketCatalogue(); int rowCount = ticketTable.getRowCount();

12

Page 13: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

int i; for (i = rowCount - 1; i >= 0; i--) { ((DefaultTableModel) ticketTable.getModel()).removeRow(i); }

ArrayList<Ticket> tickets = ticketCatalogue.getTicketCatalogue();

for (Ticket t : tickets) { Object[] ticket_row = new Object[4]; ticket_row[0] = t.getId(); ticket_row[1] = t.getEventName(); ticket_row[2] = t.getPrice(); ticket_row[3] = t.getAvailability(); ((DefaultTableModel) ticketTable.getModel()).addRow(ticket_row); }

}

public void refresh(int irow, String sPresentAvailability, String savailability) { int iavailability = Integer.parseInt(savailability); int iPresentAvailability = Integer.parseInt(sPresentAvailability); String sNewAvailability = Integer.toString(iPresentAvailability - iavailability); ticketTable.setValueAt(sNewAvailability, irow, 3);

}

② ”ViewTicketInfoJPanel”に関して

JPanel UserProcessContainerJPanel; public TicketCatalogue ticketCatalogue;

/** Creates new form CreateMenuJPanel */ public ViewTicketInforJPanel(JPanel ti, TicketCatalogue tc) { UserProcessContainerJPanel = ti;

13

Page 14: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

ticketCatalogue = tc;

initComponents(); if (ticketCatalogue.flag(0).equals("ReserveTicketJPanelCalled")) { renew(); ticketCatalogue.flag(1); }

}

public void renew() { // ticketCatalogue = new TicketCatalogue(); int rowCount = ticketTable.getRowCount(); int i; for (i = rowCount - 1; i >= 0; i--) { ((DefaultTableModel) ticketTable.getModel()).removeRow(i); }

ArrayList<Ticket> tickets = ticketCatalogue.getTicketCatalogue();

for (Ticket t : tickets) { Object[] ticket_row = new Object[4]; ticket_row[0] = t.getId(); ticket_row[1] = t.getEventName(); ticket_row[2] = t.getPrice(); ticket_row[3] = t.getAvailability(); ((DefaultTableModel) ticketTable.getModel()).addRow(ticket_row); }

}

public void addTicket() { //ticketCatalogue = new TicketCatalogue(); Ticket t;

14

Page 15: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

String val; ticketCatalogue.clearTicketCatalogue(); int rowCount = ticketTable.getRowCount(); for (int i = 0; i <= rowCount - 1; i++) { t = ticketCatalogue.newTicket(); ticketCatalogue.addTicket(t); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 0); t.setId(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 1); t.setEventName(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 2); t.setPrice(val); val = (String) ((DefaultTableModel) ticketTable.getModel()).getValueAt(i, 3); t.setAvailability(val); } }

1 2 / 17 /2009 【作業】今日の主題は、

1)予約状況を”ViewReservation”に表示させることと、

2)予約を取り消す場合の処理を”CancelReservation” で行うプログラムを作成するこ

とである。

そのためには、Application 梱包のうち、既存クラスの”Reservation” の詳細化と 

新規クラス ”ReserveCatalogue” の定義から始める。

念のために、クラス”TicketCatalogue” も確認しておこう。

15

Page 16: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

1 2 / 22 /2009 【主題】今日の主題は、

1)予約状況を”ViewReservation”に表示させることと、

2)予約を取り消す場合の処理を”CancelReservation” で行うプログラムを作成するこ

とである。

【作業】

1) ”ViewReservation”と”CancelReservation”に置かれている表の変更

現在の表を削除

新しい表を配置

名称「reserveTable」

<ViewReservation>

<CancelReservation>

16

Page 17: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

1)予約状況”ViewReservation”の表示

UMLTicketPrj の Class Diagram の「Reservation.java」に属性を付加す

UMLTicketPrj の Class Diagram の「Reservation.java」のコード生成を

行う。

17

Page 18: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

package Application の Reservation

public class Reservation {

private String id; private String eventName;

private String price; private String availability;

public Reservation() { }

private String no;

public String getNo() { return no; }

18

Page 19: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

public void setNo(String val) { this.no = val; }

public String getAvailability() { return availability; }

public void setAvailability(String val) { this.availability = val; }

public String getEventName() { return eventName; }

public void setEventName(String val) { this.eventName = val; }

public String getId() { return id; }

public void setId(String val) { this.id = val; }

public String getPrice() { return price; }

public void setPrice(String val) { this.price = val; }

19

Page 20: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

}

package Application の ReserveCatalogue を生成し、必要な属性と方法

とを追加する

public class ReserveCatalogue {

private ArrayList<Reservation> reservationList;

public ReserveCatalogue() { reservationList = new ArrayList<Reservation>(); }

public ArrayList getReserveCatalogue() { return reservationList; }

public void setReserveCatalogue(ArrayList pList) { reservationList = pList; }

public Reservation newReservation() { Reservation r = new Reservation(); return r; }

public void addReserve(Reservation r) { reservationList.add(r); }

public void clearReserveCatalogue() { reservationList.clear(); }}

20

Page 21: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

実行結果

[ViewReservation] ボタンを押下した場合

< ViewReservationJPanel >の変更箇所

構成子< ViewReservationJPanel >

public class ViewReservationJPanel extends javax.swing.JPanel {JPanel UserProcessContainerJPanel; private ReserveCatalogue reserveCatalogue; /** Creates new form ViewReservationJPanel */ public ViewReservationJPanel(JPanel vr, ReserveCatalogue rc) { initComponents(); UserProcessContainerJPanel = vr; reserveCatalogue = rc; renew(); }

新規方法< renew()>

public void renew() {

int rowCount = reserveTable.getRowCount(); int i;

21

Page 22: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

for (i = rowCount - 1; i >= 0; i--) { ((DefaultTableModel) reserveTable.getModel()).removeRow(i); } ArrayList<Reservation> reservations = reserveCatalogue.getReserveCatalogue(); for (Reservation r : reservations) { Object[] reservation_row = new Object[3]; reservation_row[0] = r.getNo(); reservation_row[1] = r.getEventName(); reservation_row[2] = r.getAvailability(); ((DefaultTableModel) reserveTable.getModel()).addRow(reservation_row); } }

2)”ReserveTicketJPanel” の変更箇所

<ReserveTicketJPanel>の構成子”ReserveTicketJPanel(引数に注意)”

public class ReserveTicketJPanel extends javax.swing.JPanel {

JPanel UserProcessContainerJPanel; public TicketCatalogue ticketCatalogue; public ReserveCatalogue reserveCatalogue; public int no;

/** Creates new form ReserveTicket */ public ReserveTicketJPanel(JPanel rt, TicketCatalogue tc, ReserveCatalogue rc) { UserProcessContainerJPanel = rt; JFrame frame = null; ticketCatalogue = tc; reserveCatalogue = rc;

initComponents(); renew();

22

Page 23: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

if (ticketCatalogue.empty()) { JOptionPane.showMessageDialog(frame, "最初に「発券情報」をご覧

ください!!"); } }

新規の方法< addReserve >

public void addReserve(ReserveCatalogue rc, String en, String av) { Reservation r; reserveCatalogue = rc;

ArrayList<Reservation>reservations = reserveCatalogue.getReserveCatalogue();

if (reservations.isEmpty()) { no = 1; } else { for (Reservation res : reservations) { no = Integer.parseInt(res.getNo()); } no++; } r = reserveCatalogue.newReservation(); reserveCatalogue.addReserve(r); r.setNo(Integer.toString(no)); r.setId(id); r.setEventName(en); r.setAvailability(av); }

方法< jButton2ActionPerformed >の追加箇所

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

23

Page 24: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

int okCancel; JFrame frame = null; String availability = ""; int row = ticketTable.getSelectedRow(); if (row < 0 || row > ticketTable.getRowCount()) { JOptionPane.showMessageDialog(frame, "「催し物」の行をクリック

して下さい!!"); return; } String sRow = Integer.toString(row + 1); System.out.println(sRow + " row OK?"); String sAvailability = (String) ticketTable.getValueAt(row, 3); String entertainment = (String) ticketTable.getValueAt(row, 1); System.out.println(sAvailability + " tickets. OK?"); okCancel = JOptionPane.showConfirmDialog(null, "ID " + sRow + ". " + '"' + entertainment + '"' + ". OK?", "Entertainment Confirmation", JOptionPane.OK_CANCEL_OPTION);

if (okCancel == JOptionPane.YES_OPTION) { do { availability = JOptionPane.showInputDialog("Enter availability, please!"); if (availability.equals("")) { JOptionPane.showMessageDialog(frame, "枚数を入力して下さ

い!!"); } } while (availability.equals("")); if (availability.equals("")) { System.out.println("もういちど催し物を選ぶか、戻って下さい。"); JOptionPane.showMessageDialog(frame, "もういちど催し物を選

ぶか、戻って下さい。"); } else { System.out.println("availability は " + availability + " です。

"); }

24

Page 25: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

refresh(row, sAvailability, availability); addReserve(reserveCatalogue, sRow, entertainment, availability); } addTicket(); ticketCatalogue.flag(1); }

3)予約取消し”CancelReservation”の処理

4)”MainFrame” の変更箇所

1)~3)までの変更に伴って、jButton 数字 mActionPerformed() を変更する必要

がある。

「専門演習Ⅰ」ゼミ論予告

提出期限 2010年1月末日

報告書仕様

A4 判 本文 20ページ以上

25

Page 26: 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」 UMLを利用したJava応用プログラム「発券予約システム」設計仕様書 12/8/2009

Word 、 PDF

1)「UML における実体指向」について、教材「UML における実体指向テキスト」を

要約しなさい。Java 上での UML(Unified Modeling Language)の設計作業を

参考にしながら、実体指向についての概念と用語について纏めます。

2)企画「JavaTicketAppUML」について、12/22/2009 までに提示された教材に基

づいて、「JavaTicketAppUML」と「UMLTicketPrj」について、報告書を書き

なさい。

3)企画「JavaTicketAppUML」において、[CancelReservation] ボタンを押した

ときに、[ViewReservation] ボタンを押下した場合と同じ画面遷移が実現される

ように、プログラムを追加しなさい。その部分に関する報告書も追加しなさい。

4)企画「JavaTicketAppUML」において、[CancelReservation] ボタンを押した

ときに、「取り消し」に伴う作業が実現されるようにプログラムを変更しなさい。

その部分に関する報告書を追加しなさい。

(以上です)

26