一. 項目成員
馮鳴 201521123122 http://www.cnblogs.com/fenm/
羅駿 201521123121 http://www.cnblogs.com/toonaive/
項目開發的碼雲地址:https://gitee.com/fenm/jieduibianchenggit
二.需求分析
針對現有代碼的改進分析:
1.修改了一些程序功能上的bug。在重複點擊確認鍵是,計算的正確率有誤。
2.對界面進行了改進
新開發功能的分析:
1.增長了關於整數的乘方運算符編程
三.程序設計
關於整個程序的流程設計如圖:dom
單元測試
單元測試
代碼覆蓋率
測試
碼雲項目上傳
ui
四.代碼展現
經修改以後的代碼this
計時器設計
private class MyRunable implements Runnable{ private int hour = 0; private int min = 0; private int sec = 0; private NumberFormat format = NumberFormat.getInstance(); private String nextSecond(){ ++sec; if(sec == 60) { ++min; sec = 0; } if(min == 60) { ++hour; min = 0; } return currentTime(); } private String currentTime(){ return format.format(hour)+":"+format.format(min)+":"+format.format(sec); }
整數的四則運算+乘方運算3d
public main()//計算四則運算並輸出 { new Thread(myTimeRunable).start(); int n = 0; MainFrame ma= new MainFrame(); int m = (int)(Math.random()*n+1);//隨機整數題目和分數題目的題量 try{ //調用初始化方法 jbInit(); } catch(Exception exception){ exception.printStackTrace(); } try{ n= Integer.parseInt(ma.number); }catch(NumberFormatException e){ //利用消息對話框提示輸入失敗 JOptionPane.showMessageDialog(this,"輸入錯誤!請從新輸入"); } for(int j=0;j<(n-m);j++){//整數題目 String ans; int an; int op=(int)(Math.random()*5+1);//隨機選擇計算符 int num1=(int)(Math.random()*10+1);//隨機兩個整數 int num2=(int)(Math.random()*10+1); if(op==1){//加法 Question.add(num1+"+"+num2+"="); Answer.add(num1+num2+""); } if(op==2){//減法,防止出現負數 if(num1>num2){ Question.add(num1+"-"+num2+"="); Answer.add(num1-num2+""); } else{ Question.add(num2+"-"+num1+"="); Answer.add(num2-num1+""); } } if(op==3){//乘法 Question.add(num1+"*"+num2+"="); Answer.add(num1*num2+""); } if(op==4){//除法 Question.add(num1+"÷"+num2+"="); if(num1%num2==0){ Answer.add(num1/num2+""); }else{ int num3=GCD(num1,num2); num1=num1/num3; num2=num2/num3; String a = num1+"/"+num2; Answer.add(a+""); } } if(op==5) {//乘方 Question.add(num1+"^"+num2+"="); Answer.add(Math.pow(num1,num2)+""); } }
分數的運算code
for(int j=0;j<m;j++){//分數題目 Scanner in = new Scanner(System.in);//真分數的計算 int op=(int)(Math.random()*4+1); int[] f1 =createFraction(); int[] f2 =createFraction(); int j1=GCD(f1[0],f1[1]); f1[0]=f1[0]/j1;//化簡分數 f1[1]=f1[1]/j1; j1=GCD(f2[0],f2[1]); f2[0]=f2[0]/j1; f2[1]=f2[1]/j1; int gbs = LCM(f1[1],f2[1]); if(op==1){//加法 Question.add("("+f1[0]+"/"+f1[1]+")+("+f2[0]+"/"+f2[1]+")="); int num1=f1[0]*f2[1]+f2[0]*f1[1]; int num2=f1[1]*f2[1]; int num3=GCD(num1,num2); num1=num1/num3; num2=num2/num3; String a=new String(); if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } Answer.add(a+""); } if(op==2){//減法 int num1=f1[0]*f2[1]-f2[0]*f1[1]; if(num1>0){ //防止出現負數 Question.add("("+f1[0]+"/"+f1[1]+")-("+f2[0]+"/"+f2[1]+")="); int num2=f1[1]*f2[1]; String a=new String(); if(num1==0) { a="0"; } else { int num3=Math.abs(GCD(num1,num2)); num1=num1/num3; num2=num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } } Answer.add(a+""); }else{ Question.add("("+f2[0]+"/"+f2[1]+")-("+f1[0]+"/"+f1[1]+")="); int num11=f2[0]*f1[1]-f1[0]*f2[1]; int num2=f1[1]*f2[1]; String a=new String(); if(num11==0) { a="0"; } else { int num3=Math.abs(GCD(num11,num2)); num11=num11/num3; num2=num2/num3; if(num11==num2) { a="1"; } else { a=num11+"/"+num2; } } Answer.add(a+""); } } if(op==3){//乘法 Question.add("("+f1[0]+"/"+f1[1]+")*("+f2[0]+"/"+f2[1]+")="); int num1= f1[0]*f2[0]; int num2 = f1[1]*f2[1]; int num3=GCD(num1,num2); String a=new String(); num1= num1/num3; num2 = num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } Answer.add(a+""); } if(op==4){//除法 Question.add("("+f1[0]+"/"+f1[1]+")÷("+f2[0]+"/"+f2[1]+")="); int num1= f1[0]*f2[1]; int num2 = f1[1]*f2[0]; int num3=GCD(num1,num2); String a=new String(); num1= num1/num3; num2 = num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } Answer.add(a+""); } }
系統界面
public class Welcome extends JFrame implements ActionListener{ private static MainFrame dl; private static JButton b1,b2,b3,b4; static JFrame j1=new JFrame(); public Welcome(){ dl=new MainFrame(); JLabel l1=new JLabel("歡迎來到四則運算系統"); l1.setBounds(70, 40, 150, 40); b1=new JButton("進入系統"); b2=new JButton("退出"); b1.setBounds(30, 120, 100, 20); b2.setBounds(150, 120, 100, 20); j1.setLayout(null); b1.addActionListener(this); b2.addActionListener(this); j1.add(l1); j1.add(b1); j1.add(b2); j1.setTitle("歡迎界面"); j1.setSize(300, 200); j1.setLocationRelativeTo(null); j1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); j1.setVisible(true); } public static void main(String[] args) { Welcome h=new Welcome(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==b1) { j1.dispose(); dl.setVisible(true); } //點擊「系統」菜單下的「退出」菜單項 if(e.getSource()==b2) { System.exit(0); } }
五. 程序運行
六. psp
七. 心得體會
目前爲止這是第一次進行兩人一組的結對編程活動,無疑是給熟悉團隊配合提供了一個機會,相比於單人操做, 結對編程可以相互分擔任務,解決更多技術上的難題,達到雙倍效率的效果,可是同時也是給兩人帶來了一次配 合默契度的挑戰與訓練。雖然最終完成了任務,可是還有不少沒有完善的地方,在接下來的團隊活動中,更要總 結團隊配合的經驗,提升效率,下降配合上的誤差。