java
Information Hiding(信息隱藏):指在設計和肯定模塊時,使得一個模塊內包含的特定信息(過程或數據),對於不須要這些信息的其餘模塊來講,是不可訪問的,是一種重要的軟件開發手段,它與對象的封裝(encapsulation)與模塊化(modularity)密切相關。git
咱們在實現的過程當中常常發生變量混亂的問題,致使常常會莫名的產生錯誤,致使咱們去查看前面編寫的代碼,後來就常常運用privite ,須要的話就經過訪問函數實現。算法
private String exe; private Object answer;
Interface Design(接口設計):面向接口編程是軟件工程領域經常使用的設計手段編程
Loose Coupling(鬆耦合):容許改變或者當問題發生在「電線的一端時」來避免影響到其餘的端點,目標是最小化依賴。小程序
Commandl類:GUI界面;less
Calculate類:運行結果以及表達式中符號的轉換;ide
Expression類:產生知足要求的「題目「;模塊化
Judge類:將輸入數字與正確結果進行比較並記錄總共正確的題數;函數
Change類:替換符號;佈局
Answer類:GUI答題界面的後續模塊;
算法的關鍵對我本身來講就是輸入結果和正確結果的各類處理,剛開始因爲沒處理好,致使realyAnswe傳的空值,程序沒法正常運行,搗鼓了很久才弄好。至於獨到之處,咱們本來是想將「*「與」/「換成小學生所熟悉的計算符號,可是沒成功,有點惋惜。
經過參數傳值,類間調用等實現模塊的對接(主要是Commandl類和Expression類)。參考Frofile教程,學習軟件用了約三小時,內存消耗如圖:分析可知相對穩定。
最初由項目的Commandl.java右鍵Profile As,進入性能分析,其次打開JVM虛擬機(能夠用教程的密碼破解Frofile軟件)。
而後進入Live memory,最初消耗變化如圖:
等待兩分鐘後,出現紅色綠色並存現象:
性能分析排查後,發現代碼還有不足,進行優化處理。花費了約一小時,代碼優化改進了,而且把佔用內存的四則運算GUI小程序關閉,IO輸入流關閉,性能如圖明顯提升。
public static boolean scope(int num){ if(num<=0||num>=10001) return false; else{ return true; } }
try { num = Integer.parseInt(args[++i]); } catch (NumberFormatException e) { e.printStackTrace(); return; }
咱們在設計的時候就想主要分紅三個界面
第一個界面是用來進行對題目數量的要求,包括題目數量,數值範圍,有無乘除法以及運算符的個數;
第二個界面是包括生成的題目,咱們須要輸入的答案,以及計時功能;
第三個界面則是提示咱們結果的正確,以及歷史全部的總正確數目;
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Command extends JFrame { private static final long serialVersionUID = 1L; // 定義登陸界面的組件 JButton jb1, jb2, jb3 = null; JPanel jp1, jp2, jp3, jp4,jp5,jp6= null; JTextField jtf = null; JTextField jpf = null; JTextField jpfM = null; JTextField jtf1 = null; JTextField jpf1= null; JLabel jlb1, jlb2,jlb3, jlb4= null; ButtonGroup bg = null; static int exepresionNum = 0; static int exepresionRangeNum; static int jtfNum = 0; static int jpfNum = 0; static int jpfMNum = 0; static int jtf1Num = 1; static int jpf1Num = 0; public static void main(String[] args) { new Command(); } // 構造函數 public Command() { // 建立組件 jb1 = new JButton("確認"); jb2 = new JButton("刷新"); jb3 = new JButton("退出"); // 設置監聽 jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { OK(); } }); jb2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { clear(); } }); jb3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp5 = new JPanel(); jp6 = new JPanel(); jlb1 = new JLabel("生成題目個數:"); jlb2 = new JLabel("題目數值範圍:"); jlb3 = new JLabel("操做符個數:"); jlb4 = new JLabel("乘除法 0無1有:"); jtf = new JTextField(10); jpf = new JTextField(4); jpfM = new JTextField(4); jtf1 = new JTextField(10); jpf1 = new JTextField(10); // 加入到JPanel中 jp1.add(jlb1); jp1.add(jtf); jp2.add(jlb2);//jpfM是最大值 jp2.add(jpf); jp2.add(jpfM); jp5.add(jlb3); jp5.add(jtf1); jp6.add(jlb4); jp6.add(jpf1); jp4.add(jb1); jp4.add(jb2); jp4.add(jb3); // 加入JFrame中 this.add(jp1); this.add(jp2); this.add(jp5); this.add(jp6); this.add(jp3); this.add(jp4); // 設置佈局管理器 jlb1.setFont(new java.awt.Font("Dialog", 0, 20)); jlb2.setFont(new java.awt.Font("Dialog", 0, 20)); jlb3.setFont(new java.awt.Font("Dialog", 0, 20)); jlb4.setFont(new java.awt.Font("Dialog", 0, 20)); jtf.setFont(new Font("宋體", Font.PLAIN, 20)); jpf.setFont(new Font("宋體", Font.PLAIN, 20)); jpfM.setFont(new Font("宋體", Font.PLAIN, 20)); jtf1.setFont(new Font("宋體", Font.PLAIN, 20)); jpf1.setFont(new Font("宋體", Font.PLAIN, 20)); Font f = new Font("華文行楷", Font.BOLD, 20); jb1.setFont(f); jb2.setFont(f); jb3.setFont(f); this.setLayout(new GridLayout(4, 1)); // 給窗口設置標題 this.setTitle("小學生四則運算界面"); // 設置窗體大小 this.setSize(600, 300); // 設置窗體初始位置 this.setLocation(700, 330); // 設置當關閉窗口時,保證JVM也退出 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 顯示窗體 this.setVisible(true); this.setResizable(true); } // 清空文本框 public void clear() { jtf.setText(""); jpf.setText(""); jpfM.setText(""); jtf1.setText(""); jpf1.setText(""); }
import javax.swing.*; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.HeadlessException; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Answer extends JFrame { private static final long serialVersionUID = 1L; private static final String INITIAL_LABEL_TEXT = "00:00:00 000"; // 線程 private CountingThread thread = new CountingThread(); // 開始時間 private long programStart = System.currentTimeMillis(); // 程序暫停 private JLabel label = new JLabel(INITIAL_LABEL_TEXT); JButton button, quit = null; JPanel yh, yh1, yh2 = null; JLabel question = null; static JTextField answer = null; Expression exp;
if (answer.getText().isEmpty()) { JOptionPane.showMessageDialog(null, "請輸入答案!", "提示消息", JOptionPane.WARNING_MESSAGE); } else if (jud.judge(this.exp.getAnswer(), answer.getText())) { JOptionPane .showMessageDialog( null, "正確答案爲" + this.exp.getAnswer() + ". " + "恭喜你答對了. 耗時" + (System.currentTimeMillis() - programStart) + "ms" + ". " + "本次答對" + Judge.rightnum + ",共答對" + (Integer.parseInt(WriteReader.reader() .trim()) + Judge.rightnum) + "道題"/*+(Integer.parseDouble(Judge.rightnum/Four.jtfNum))*/, "提示消息", JOptionPane.WARNING_MESSAGE); Command.create(); dispose(); } else { JOptionPane .showMessageDialog( null, "正確答案爲" + this.exp.getAnswer() + ". " + "很遺憾答錯了. 耗時" + (System.currentTimeMillis() - programStart) + "ms" + ". " + "本次答對" + Judge.rightnum + ",共答對" + (Integer.parseInt(WriteReader.reader() .trim()) + Judge.rightnum) + "道題", "提示消息", JOptionPane.WARNING_MESSAGE); Command.create(); dispose(); } }
經過依靠參數傳值實現模塊的對接(主要是Command類和Expression類)
界面具體介紹:
(1)第一個界面對題目要求的限制
(2)要求信息輸入完整(不完整)的界面
(3)題目界面
(4)答案正確(錯誤)的提示界面
(5)不輸答案直接提交的界面
咱們在結對的過程當中花了不少時間在代碼上,也在分析的階段肯定了各自的須要分工的範圍,好比單元測試和性能分析的學習。
遇到問題能夠更好更快的解決,並且對一些細節能夠進行分工,加快咱們的實現進程,可是咱們在結對的過程當中彼此的想法會產生分歧,這有時也會浪費許多時間來達成共識。
成員優缺點:
衛小瓊:代碼能力強,能鑽研,同窗關係好,解決不了的問題能找到人幫忙,可是有時會鑽牛角尖;
陳雙林:脾氣好,能堅持,有上進心,可是編碼能力弱。
SP2.1 |
Personal Software Process Stages |
Time : SeniorStudent(min) |
Time : SDE(min) |
Planning |
計劃 |
30 | 40 |
Estimate |
估計這個任務須要多少時間,規劃大體步驟 |
10 |
10 |
Development |
開發 |
1250 |
2375 |
Analysis |
需求分析 (包括學習新技術) |
300 |
400 |
Design Spec |
生成設計文檔 |
20 |
30 |
Design Review |
設計複審 |
10 |
20 |
Coding Standard |
代碼規範 |
15 |
20 |
Design |
具體設計 |
30 |
60 |
Coding |
具體編碼 |
600 |
1500 |
Code Review |
代碼複審 |
30 |
45 |
Test |
測試 |
200 |
300 |
Reporting |
報告 |
490 |
850 |
|
測試報告 |
420 |
780 |
|
計算工做量 |
40 |
40 |
|
過後總結 並提出過程改進計劃 |
30 | 30 |