建築・デザイン学科授業計画...インテリアデザイン演習 専門科目 森岡 陽介 555 画像設計演習A 専門科目 鶴野 幸子 558 視覚表現演習A 専門科目
「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」...
Transcript of 「専門演習I」z00102/SeminarI/2009/Lectur… · Web view「専門演習I」...
「専門演習 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
この変更は4つの「…JPanel.java」について全て行って下さい。
③ 「切符(催し物)表」から、「催し物」行を選択。
private void jButton2ActionPerformed()
int row = ticketTable.getSelectedRow(); if (row < 0 || row > ticketTable.getRowCount()) {
2
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
JOptionPane.OK_CANCEL_OPTION);
⑤ [了解]を選択すると、次の「枚数」の選択対話箱に移行する。 [取り消し]の場合
は、もとに戻る。
⑥ 枚数」を入力する。「 [取り消し]の場合は元に戻る。
⑦ [取り消し]の場合は、次の箱を表示させる。
⑤⑥⑦ を実現するには、以下の命令を更に追加する。
if (okCancel == JOptionPane.YES_OPTION) { do {
4
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
1 2 / 10 /2009 【作業】
① 梱包(package)<javaticketapp>の削除。Refactor を指定する。
この変更に結果、今後は、企画の実行は、以下の操作メニューから[実行]→[企画
を実行] の操作で可能となりました。
6
② 「発券表」の更新のための準備。
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
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
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
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
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
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
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
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
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
1 2 / 22 /2009 【主題】今日の主題は、
1)予約状況を”ViewReservation”に表示させることと、
2)予約を取り消す場合の処理を”CancelReservation” で行うプログラムを作成するこ
とである。
【作業】
1) ”ViewReservation”と”CancelReservation”に置かれている表の変更
現在の表を削除
新しい表を配置
名称「reserveTable」
例
<ViewReservation>
<CancelReservation>
16
1)予約状況”ViewReservation”の表示
UMLTicketPrj の Class Diagram の「Reservation.java」に属性を付加す
る
UMLTicketPrj の Class Diagram の「Reservation.java」のコード生成を
行う。
17
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
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
}
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
実行結果
[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
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
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
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
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
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