团队作业4——第一次项目冲刺(Alpha版本)第一天+第二天+第三天+第四天+第五天+第六天+第七天
冲刺第一天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
GUI、计时功能、题目生成
2.工作中遇到的困难
刚开始在计时功能模块只能做到秒位,经过查询资料后可以精确到毫秒。
三、发布项目燃尽图
1.解释说明横纵坐标代表的含义
软件功能个数。
2.解释说明实线虚线代表的含义
平均每日应完成量。
3.理解燃尽图的作用
燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。
四、代码签入
1.生成题目的界面设计
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:background="#ffa726" > 7 <LinearLayout 8 android:layout_width="match_parent" 9 android:layout_height="100dp" 10 > 11 <TextView 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:layout_gravity="center" 15 android:text="00:00.0" 16 android:gravity="center" 17 android:id="@+id/timer" 18 android:textSize="50sp" 19 android:textColor="#03a9f4" 20 android:textStyle="bold"/> 21 </LinearLayout> 22 <LinearLayout 23 android:layout_width="match_parent" 24 android:layout_height="400dp" 25 android:orientation="vertical" 26 android:focusable="true" 27 android:focusableInTouchMode="true"> 28 29 <LinearLayout 30 android:layout_width="match_parent" 31 android:layout_height="0dp" 32 android:layout_weight="1" 33 android:background="#b06d15"> 34 35 <TextView 36 android:id="@+id/question_1" 37 android:layout_width="180dp" 38 android:layout_height="match_parent" 39 android:layout_marginLeft="60dp" 40 android:gravity="center_vertical" 41 android:text="12/13-23/14=" 42 android:textColor="#000000" 43 android:textSize="23sp" 44 android:textStyle="bold" /> 45 46 <EditText 47 android:id="@+id/answer_1" 48 android:layout_width="80dp" 49 android:layout_height="35dp" 50 android:layout_gravity="center" 51 android:background="@drawable/editsharp2" 52 android:gravity="center" 53 android:text="" 54 android:textColor="#000000" 55 android:textStyle="bold" /> 56 57 <ImageView 58 android:id="@+id/RW1" 59 android:layout_width="match_parent" 60 android:layout_height="wrap_content" 61 android:layout_gravity="center" /> 62 63 </LinearLayout> 64 65 <LinearLayout 66 android:layout_width="match_parent" 67 android:layout_height="0dp" 68 android:layout_weight="1"> 69 <TextView 70 android:id="@+id/question_2" 71 android:layout_width="180dp" 72 android:layout_height="match_parent" 73 android:layout_marginLeft="60dp" 74 android:gravity="center_vertical" 75 android:text="12/13-23/14=" 76 android:textColor="#000000" 77 android:textStyle="bold" 78 android:textSize="23sp"/> 79 <EditText 80 android:id="@+id/answer_2" 81 android:background="@drawable/editsharp2" 82 android:layout_width="80dp" 83 android:layout_height="35dp" 84 android:layout_gravity="center" 85 android:gravity="center" 86 android:textColor="#000000" 87 android:textStyle="bold" 88 android:text=""/> 89 <ImageView 90 android:id="@+id/RW2" 91 android:layout_width="match_parent" 92 android:layout_height="wrap_content" 93 android:layout_gravity="center"/> 94 95 </LinearLayout> 96 <LinearLayout 97 android:layout_width="match_parent" 98 android:layout_height="0dp" 99 android:layout_weight="1" 100 android:background="#b06d15"> 101 <TextView 102 android:id="@+id/question_3" 103 android:layout_width="180dp" 104 android:layout_height="match_parent" 105 android:layout_marginLeft="60dp" 106 android:gravity="center_vertical" 107 android:text="12/13-23/14=" 108 android:textColor="#000000" 109 android:textStyle="bold" 110 android:textSize="23sp"/> 111 <EditText 112 android:id="@+id/answer_3" 113 android:background="@drawable/editsharp2" 114 android:layout_width="80dp" 115 android:layout_height="35dp" 116 android:layout_gravity="center" 117 android:gravity="center" 118 android:textColor="#000000" 119 android:textStyle="bold" 120 android:text=""/> 121 <ImageView 122 android:id="@+id/RW3" 123 android:layout_width="match_parent" 124 android:layout_height="wrap_content" 125 android:layout_gravity="center"/> 126 127 </LinearLayout> 128 129 <LinearLayout 130 android:layout_width="match_parent" 131 android:layout_height="0dp" 132 android:layout_weight="1"> 133 134 <TextView 135 android:id="@+id/question_4" 136 android:layout_width="180dp" 137 android:layout_height="match_parent" 138 android:layout_marginLeft="60dp" 139 android:gravity="center_vertical" 140 android:text="12/13-23/14=" 141 android:textColor="#000000" 142 android:textSize="23sp" 143 android:textStyle="bold" /> 144 145 <EditText 146 android:id="@+id/answer_4" 147 android:layout_width="80dp" 148 android:layout_height="35dp" 149 android:layout_gravity="center" 150 android:background="@drawable/editsharp2" 151 android:gravity="center" 152 android:text="" 153 android:textColor="#000000" 154 android:textStyle="bold" /> 155 156 <ImageView 157 android:id="@+id/RW4" 158 android:layout_width="match_parent" 159 android:layout_height="wrap_content" 160 android:layout_gravity="center" /> 161 162 </LinearLayout> 163 164 <LinearLayout 165 android:layout_width="match_parent" 166 android:layout_height="0dp" 167 android:layout_weight="1" 168 android:background="#b06d15"> 169 <TextView 170 android:id="@+id/question_5" 171 android:layout_width="180dp" 172 android:layout_height="match_parent" 173 android:layout_marginLeft="60dp" 174 android:gravity="center_vertical" 175 android:text="12/13-23/14=" 176 android:textColor="#000000" 177 android:textStyle="bold" 178 android:textSize="23sp"/> 179 <EditText 180 android:id="@+id/answer_5" 181 android:background="@drawable/editsharp2" 182 android:layout_width="80dp" 183 android:layout_height="35dp" 184 android:layout_gravity="center" 185 android:gravity="center" 186 android:textColor="#000000" 187 android:textStyle="bold" 188 android:text=""/> 189 <ImageView 190 android:id="@+id/RW5" 191 android:layout_width="match_parent" 192 android:layout_height="wrap_content" 193 android:layout_gravity="center"/> 194 195 </LinearLayout> 196 <LinearLayout 197 android:layout_width="match_parent" 198 android:layout_height="0dp" 199 android:layout_weight="1"> 200 <TextView 201 android:id="@+id/question_6" 202 android:layout_width="180dp" 203 android:layout_height="match_parent" 204 android:layout_marginLeft="60dp" 205 android:gravity="center_vertical" 206 android:text="12/13-23/14=" 207 android:textColor="#000000" 208 android:textStyle="bold" 209 android:textSize="23sp"/> 210 <EditText 211 android:id="@+id/answer_6" 212 android:background="@drawable/editsharp2" 213 android:layout_width="80dp" 214 android:layout_height="35dp" 215 android:layout_gravity="center" 216 android:gravity="center" 217 android:textColor="#000000" 218 android:textStyle="bold" 219 android:text=""/> 220 <ImageView 221 android:id="@+id/RW6" 222 android:layout_width="match_parent" 223 android:layout_height="wrap_content" 224 android:layout_gravity="center"/> 225 226 </LinearLayout> 227 <LinearLayout 228 android:layout_width="match_parent" 229 android:layout_height="0dp" 230 android:layout_weight="1" 231 android:background="#b06d15"> 232 <TextView 233 android:id="@+id/question_7" 234 android:layout_width="180dp" 235 android:layout_height="match_parent" 236 android:layout_marginLeft="60dp" 237 android:gravity="center_vertical" 238 android:text="12/13-23/14=" 239 android:textColor="#000000" 240 android:textStyle="bold" 241 android:textSize="23sp"/> 242 <EditText 243 android:id="@+id/answer_7" 244 android:background="@drawable/editsharp2" 245 android:layout_width="80dp" 246 android:layout_height="35dp" 247 android:layout_gravity="center" 248 android:gravity="center" 249 android:textColor="#000000" 250 android:textStyle="bold" 251 android:text=""/> 252 <ImageView 253 android:id="@+id/RW7" 254 android:layout_width="match_parent" 255 android:layout_height="wrap_content" 256 android:layout_gravity="center"/> 257 258 </LinearLayout> 259 <LinearLayout 260 android:layout_width="match_parent" 261 android:layout_height="0dp" 262 android:layout_weight="1"> 263 <TextView 264 android:id="@+id/question_8" 265 android:layout_width="180dp" 266 android:layout_height="match_parent" 267 android:layout_marginLeft="60dp" 268 android:gravity="center_vertical" 269 android:text="12/13-23/14=" 270 android:textColor="#000000" 271 android:textStyle="bold" 272 android:textSize="23sp"/> 273 <EditText 274 android:id="@+id/answer_8" 275 android:background="@drawable/editsharp2" 276 android:layout_width="80dp" 277 android:layout_height="35dp" 278 android:layout_gravity="center" 279 android:gravity="center" 280 android:textColor="#000000" 281 android:textStyle="bold" 282 android:text=""/> 283 <ImageView 284 android:id="@+id/RW8" 285 android:layout_width="match_parent" 286 android:layout_height="wrap_content" 287 android:layout_gravity="center"/> 288 289 </LinearLayout> 290 <LinearLayout 291 android:layout_width="match_parent" 292 android:layout_height="0dp" 293 android:layout_weight="1" 294 android:background="#b06d15"> 295 <TextView 296 android:id="@+id/question_9" 297 android:layout_width="180dp" 298 android:layout_height="match_parent" 299 android:layout_marginLeft="60dp" 300 android:gravity="center_vertical" 301 android:text="12/13-23/14=" 302 android:textColor="#000000" 303 android:textStyle="bold" 304 android:textSize="23sp"/> 305 306 <EditText 307 android:id="@+id/answer_9" 308 android:layout_width="80dp" 309 android:layout_height="35dp" 310 android:layout_gravity="center" 311 android:background="@drawable/editsharp2" 312 android:gravity="center" 313 android:text="" 314 android:textColor="#000000" 315 android:textStyle="bold" /> 316 <ImageView 317 android:id="@+id/RW9" 318 android:layout_width="match_parent" 319 android:layout_height="wrap_content" 320 android:layout_gravity="center"/> 321 322 </LinearLayout> 323 <LinearLayout 324 android:layout_width="match_parent" 325 android:layout_height="0dp" 326 android:layout_weight="1"> 327 328 <TextView 329 android:id="@+id/question_10" 330 android:layout_width="180dp" 331 android:layout_height="match_parent" 332 android:layout_marginLeft="60dp" 333 android:gravity="center_vertical" 334 android:text="12/13-23/14=" 335 android:textColor="#000000" 336 android:textSize="23sp" 337 android:textStyle="bold" /> 338 339 <EditText 340 android:id="@+id/answer_10" 341 android:layout_width="80dp" 342 android:layout_height="35dp" 343 android:layout_gravity="center" 344 android:background="@drawable/editsharp2" 345 android:gravity="center" 346 android:text="" 347 android:textColor="#000000" 348 android:textStyle="bold" /> 349 350 <ImageView 351 android:id="@+id/RW10" 352 android:layout_width="match_parent" 353 android:layout_height="wrap_content" 354 android:layout_gravity="center"/> 355 356 </LinearLayout> 357 <LinearLayout 358 android:layout_width="match_parent" 359 android:layout_height="10dp" 360 android:background="#b06d15"> 361 362 </LinearLayout> 363 </LinearLayout> 364 365 <LinearLayout 366 android:layout_width="match_parent" 367 android:layout_height="match_parent"> 368 <TextView 369 android:id="@+id/right_percent" 370 android:layout_width="wrap_content" 371 android:layout_height="match_parent" 372 android:layout_marginLeft="30dp" 373 android:layout_gravity="center" 374 android:gravity="center" 375 android:text=" " 376 android:textStyle="bold" 377 android:textSize="20sp" 378 android:textColor="#000000"/> 379 <Button 380 android:id="@+id/finish" 381 android:layout_width="100dp" 382 android:layout_height="50dp" 383 android:layout_gravity="center" 384 android:layout_marginLeft="70dp" 385 android:background="@drawable/buttonsharp" 386 android:gravity="center" 387 android:text="答完了" 388 android:textColor="#FFFFFF" 389 android:textStyle="bold" /> 390 391 </LinearLayout> 392 </LinearLayout>
2.生成题目的功能实现以及正误判断的功能实现
1 package com.example.hh.myapplication; 2 3 import android.content.SharedPreferences; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widget.EditText; 9 import android.widget.ImageView; 10 import android.widget.TextView; 11 import android.os.Handler; 12 13 14 public class QuestionAcitvity extends AppCompatActivity { 15 private TextView tvRight_percent; 16 private TextView Tquestion_1; 17 private TextView Tquestion_2; 18 private TextView Tquestion_3; 19 private TextView Tquestion_4; 20 private TextView Tquestion_5; 21 private TextView Tquestion_6; 22 private TextView Tquestion_7; 23 private TextView Tquestion_8; 24 private TextView Tquestion_9; 25 private TextView Tquestion_10; 26 private EditText Eanswer_1; 27 private EditText Eanswer_2; 28 private EditText Eanswer_3; 29 private EditText Eanswer_4; 30 private EditText Eanswer_5; 31 private EditText Eanswer_6; 32 private EditText Eanswer_7; 33 private EditText Eanswer_8; 34 private EditText Eanswer_9; 35 private EditText Eanswer_10; 36 private Button Bfinish; 37 private ImageView IRW_1=null; 38 private ImageView IRW_2=null; 39 private ImageView IRW_3=null; 40 private ImageView IRW_4=null; 41 private ImageView IRW_5=null; 42 private ImageView IRW_6=null; 43 private ImageView IRW_7=null; 44 private ImageView IRW_8=null; 45 private ImageView IRW_9=null; 46 private ImageView IRW_10=null; 47 48 int[] image={ 49 R.drawable.error_symbol, 50 R.drawable.right_symbol 51 }; 52 public double rightNum; 53 public static TextView tvTimer; 54 private double Time=0; 55 private int Time_minute=0; 56 private final Handler handler=new Handler(); 57 58 private final Runnable update_thread = new Runnable() { 59 @Override 60 public void run() { 61 Time++; 62 if(Time_minute==0){ 63 if(Time<100){ 64 tvTimer.setText("00:0"+Time/10); 65 } 66 else 67 tvTimer.setText("00:"+Time/10); 68 if(Time==600){ 69 Time_minute++; 70 Time=0; 71 } 72 } 73 if(Time_minute>0&&Time_minute<10){ 74 if(Time<100){ 75 tvTimer.setText("0"+Time_minute+":0"+Time/10); 76 } 77 else 78 tvTimer.setText("0"+Time_minute+":"+Time/10); 79 if(Time==600){ 80 Time_minute++; 81 Time=0; 82 } 83 } 84 if(Time_minute<60&&Time_minute>=10){ 85 if(Time<100){ 86 tvTimer.setText(Time_minute+":0"+Time/10); 87 } 88 else 89 tvTimer.setText(Time_minute+":"+Time/10); 90 if(Time==600){ 91 Time_minute++; 92 Time=0; 93 } 94 } 95 if(Time_minute==60){ 96 tvTimer.setText("别做了,洗洗睡吧"); 97 } 98 99 handler.postDelayed(update_thread, 100); 100 } 101 }; 102 103 104 105 106 @Override 107 protected void onCreate(Bundle savedInstanceState) { 108 super.onCreate(savedInstanceState); 109 setContentView(R.layout.question_print); 110 final QA_List List=new QA_List(1); 111 tvTimer=(TextView)findViewById(R.id.timer); 112 tvRight_percent=(TextView)findViewById(R.id.right_percent); 113 Tquestion_1=(TextView)findViewById(R.id.question_1); 114 Tquestion_2=(TextView)findViewById(R.id.question_2); 115 Tquestion_3=(TextView)findViewById(R.id.question_3); 116 Tquestion_4=(TextView)findViewById(R.id.question_4); 117 Tquestion_5=(TextView)findViewById(R.id.question_5); 118 Tquestion_6=(TextView)findViewById(R.id.question_6); 119 Tquestion_7=(TextView)findViewById(R.id.question_7); 120 Tquestion_8=(TextView)findViewById(R.id.question_8); 121 Tquestion_9=(TextView)findViewById(R.id.question_9); 122 Tquestion_10=(TextView)findViewById(R.id.question_10); 123 Eanswer_1=(EditText)findViewById(R.id.answer_1); 124 Eanswer_2=(EditText)findViewById(R.id.answer_2); 125 Eanswer_3=(EditText)findViewById(R.id.answer_3); 126 Eanswer_4=(EditText)findViewById(R.id.answer_4); 127 Eanswer_5=(EditText)findViewById(R.id.answer_5); 128 Eanswer_6=(EditText)findViewById(R.id.answer_6); 129 Eanswer_7=(EditText)findViewById(R.id.answer_7); 130 Eanswer_8=(EditText)findViewById(R.id.answer_8); 131 Eanswer_9=(EditText)findViewById(R.id.answer_9); 132 Eanswer_10=(EditText)findViewById(R.id.answer_10); 133 IRW_1=(ImageView)findViewById(R.id.RW1); 134 IRW_2=(ImageView)findViewById(R.id.RW2); 135 IRW_3=(ImageView)findViewById(R.id.RW3); 136 IRW_4=(ImageView)findViewById(R.id.RW4); 137 IRW_5=(ImageView)findViewById(R.id.RW5); 138 IRW_6=(ImageView)findViewById(R.id.RW6); 139 IRW_7=(ImageView)findViewById(R.id.RW7); 140 IRW_8=(ImageView)findViewById(R.id.RW8); 141 IRW_9=(ImageView)findViewById(R.id.RW9); 142 IRW_10=(ImageView)findViewById(R.id.RW10); 143 Bfinish=(Button)findViewById(R.id.finish); 144 Tquestion_1.setText(List.Qusetion.get(0)); 145 Tquestion_2.setText(List.Qusetion.get(1)); 146 Tquestion_3.setText(List.Qusetion.get(2)); 147 Tquestion_4.setText(List.Qusetion.get(3)); 148 Tquestion_5.setText(List.Qusetion.get(4)); 149 Tquestion_6.setText(List.Qusetion.get(5)); 150 Tquestion_7.setText(List.Qusetion.get(6)); 151 Tquestion_8.setText(List.Qusetion.get(7)); 152 Tquestion_9.setText(List.Qusetion.get(8)); 153 Tquestion_10.setText(List.Qusetion.get(9)); 154 155 Eanswer_1.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 156 public void onFocusChange (View v, boolean hasFocus) { 157 if(hasFocus) { 158 } 159 else { 160 if(Eanswer_1.getText().toString().equals(List.Answer.get(0))) 161 { 162 IRW_1.setImageDrawable(getResources().getDrawable(image[1])); 163 rightNum++; 164 } 165 166 else 167 IRW_1.setImageDrawable(getResources().getDrawable(image[0])); 168 Eanswer_1.setOnFocusChangeListener(null); 169 Eanswer_1.setKeyListener(null); 170 } 171 } 172 }); 173 Eanswer_2.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 174 public void onFocusChange (View v, boolean hasFocus) { 175 if(hasFocus) { 176 } 177 else { 178 if(Eanswer_2.getText().toString().equals(List.Answer.get(1))) 179 { 180 IRW_2.setImageDrawable(getResources().getDrawable(image[1])); 181 rightNum++; 182 } 183 else 184 IRW_2.setImageDrawable(getResources().getDrawable(image[0])); 185 Eanswer_2.setOnFocusChangeListener(null); 186 Eanswer_2.setKeyListener(null); 187 } 188 } 189 }); 190 Eanswer_3.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 191 public void onFocusChange (View v, boolean hasFocus) { 192 if(hasFocus) { 193 } 194 else { 195 if(Eanswer_3.getText().toString().equals(List.Answer.get(2))) 196 { 197 IRW_3.setImageDrawable(getResources().getDrawable(image[1])); 198 rightNum++; 199 } 200 else 201 IRW_3.setImageDrawable(getResources().getDrawable(image[0])); 202 Eanswer_3.setOnFocusChangeListener(null); 203 Eanswer_3.setKeyListener(null); 204 } 205 } 206 }); 207 Eanswer_4.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 208 public void onFocusChange (View v, boolean hasFocus) { 209 if(hasFocus) { 210 } 211 else { 212 if(Eanswer_4.getText().toString().equals(List.Answer.get(3))) 213 { 214 IRW_4.setImageDrawable(getResources().getDrawable(image[1])); 215 rightNum++; 216 } 217 else 218 IRW_4.setImageDrawable(getResources().getDrawable(image[0])); 219 Eanswer_4.setOnFocusChangeListener(null); 220 Eanswer_4.setKeyListener(null); 221 } 222 } 223 }); 224 Eanswer_5.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 225 public void onFocusChange (View v, boolean hasFocus) { 226 if(hasFocus) { 227 } 228 else { 229 if(Eanswer_5.getText().toString().equals(List.Answer.get(4))) 230 { 231 IRW_5.setImageDrawable(getResources().getDrawable(image[1])); 232 rightNum++; 233 } 234 else 235 IRW_5.setImageDrawable(getResources().getDrawable(image[0])); 236 Eanswer_5.setOnFocusChangeListener(null); 237 Eanswer_5.setKeyListener(null); 238 } 239 } 240 }); 241 Eanswer_6.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 242 public void onFocusChange (View v, boolean hasFocus) { 243 if(hasFocus) { 244 } 245 else { 246 if(Eanswer_6.getText().toString().equals(List.Answer.get(5))) 247 { 248 IRW_6.setImageDrawable(getResources().getDrawable(image[1])); 249 rightNum++; 250 } 251 else 252 IRW_6.setImageDrawable(getResources().getDrawable(image[0])); 253 Eanswer_6.setOnFocusChangeListener(null); 254 Eanswer_6.setKeyListener(null); 255 } 256 } 257 }); 258 Eanswer_7.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 259 public void onFocusChange (View v, boolean hasFocus) { 260 if(hasFocus) { 261 } 262 else { 263 if(Eanswer_7.getText().toString().equals(List.Answer.get(6))) 264 { 265 IRW_7.setImageDrawable(getResources().getDrawable(image[1])); 266 rightNum++; 267 } 268 else 269 IRW_7.setImageDrawable(getResources().getDrawable(image[0])); 270 Eanswer_7.setOnFocusChangeListener(null); 271 Eanswer_7.setKeyListener(null); 272 } 273 } 274 }); 275 Eanswer_8.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 276 public void onFocusChange (View v, boolean hasFocus) { 277 if(hasFocus) { 278 } 279 else { 280 if(Eanswer_8.getText().toString().equals(List.Answer.get(7))) 281 { 282 IRW_8.setImageDrawable(getResources().getDrawable(image[1])); 283 rightNum++; 284 } 285 else 286 IRW_8.setImageDrawable(getResources().getDrawable(image[0])); 287 Eanswer_8.setOnFocusChangeListener(null); 288 Eanswer_8.setKeyListener(null); 289 } 290 } 291 }); 292 Eanswer_9.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 293 public void onFocusChange (View v, boolean hasFocus) { 294 if(hasFocus) { 295 } 296 else { 297 if(Eanswer_9.getText().toString().equals(List.Answer.get(8))) 298 { 299 IRW_9.setImageDrawable(getResources().getDrawable(image[1])); 300 rightNum++; 301 } 302 else 303 IRW_9.setImageDrawable(getResources().getDrawable(image[0])); 304 Eanswer_9.setOnFocusChangeListener(null); 305 Eanswer_9.setKeyListener(null); 306 } 307 } 308 }); 309 Eanswer_10.setOnFocusChangeListener(new View.OnFocusChangeListener(){ 310 public void onFocusChange (View v, boolean hasFocus) { 311 if(hasFocus) { 312 //if() 313 } 314 else { 315 if(Eanswer_10.getText().toString().equals(List.Answer.get(9))) 316 { 317 IRW_10.setImageDrawable(getResources().getDrawable(image[1])); 318 rightNum++; 319 } 320 else 321 IRW_10.setImageDrawable(getResources().getDrawable(image[0])); 322 Eanswer_10.setOnFocusChangeListener(null); 323 Eanswer_10.setKeyListener(null); 324 } 325 } 326 }); 327 handler.post(update_thread); 328 Bfinish.setOnClickListener(new View.OnClickListener(){ 329 public void onClick(View v){ 330 handler.removeCallbacks(update_thread); 331 tvRight_percent.setText("正确率:"+rightNum/10*100+"%"); 332 SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); 333 editor.putString("one",List.Qusetion.get(0)); 334 editor.apply(); 335 336 } 337 }); 338 339 340 341 342 } 343 }
五、软件的最新进展和运行截图
今日我们的团队完成了基本的GUI界面、计时功能以及题目的生成功能。
六、今日小结
- 团队作业和前面个人作业不同的是需要全体成员共同努力完成目标,由于前期的不适应,所以第一天冲刺效果不怎么理想。
- 虽然此次任务时间较为紧迫,但每个组员都认真对待,相信冲刺结束以后会给出满意的答卷。
- 今天主要任务是手机客户端的GUI实现和题目的生成,由于组员在此前没有相关的经验,所以花了较多的时间在手机客户端的实现上。
- 团队协作需要每一个成员都用心对待,齐心协力一定能完成我们的目标!
冲刺第二天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
判断对错功能, 计算正确率功能。
2.工作中遇到的困难
在显示对错方面不知用什么方式表达较好,经测试和调试以后决定使用“√”“×”图片。
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、今日小结
- 经过了第一天的磨合,我们以及慢慢适应团队冲刺的节奏
- 今天主要任务是判断对错以及计算正确率,由于我们之前有过相关的程序作业,今天并没有在这个上面纠结太久。
- 在分配任务中应该考虑每个成员所擅长的领域,以及协调好大家的时间,做到效率最大化。
冲刺第三天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
a.对程序进行改进,使其实现用户输入生成题目的功能
b.对程序界面进行重新设计.
c.设置APP的内置数据库,用来保存错题.
2.工作中遇到的困难
a.由于刚开始没有用户输入需求题目数的功能,所以,对以后的题目生成功能要有改变,可能需要分页显示,所以要对界面进行重新设计.
b.因为我们不太了解如何设置APP的内置数据库,所以需要查找一些参考资料在进行实验,困难比较大.
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、今日小结
-
今天,在我们小组成员讨论过程中发现了一个问题,就是我们设计的软件忘记了用户输入出题数的功能,所以我们今天不仅对程序进行了改进,还对界面进行了重新设计,来满足程序的需求。
-
今天主要任务是改进程序,实现用户输入需求题目数的功能以及APP的内置数据库,由于我们之前有过相关的程序作业,对用户输入功能并没有太大困难,主要是设置APP内置数据库用来保存错题花费我们较长时间。
-
每天团队成员之间进行讨论还是很有必要的,通过多人的讨论,能够及时发现我们自己在编程时忽略的问题,及时改正,而不是到最后的时候才发现,如果我们到最后才发现的话,那时我们重新设计需求的工作量就会很多。
冲刺第四天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
a.本来我们的四则运算自动生成器输入生成的题目数量是1~10,我们觉得太少,想扩展到1~100题;
b.昨天的时候已经把数据库搭建起来了,但是还没有把数据库和保存错题的机制联系起来,今天希望能够把错的题目保存到我们搭建的这个数据库里面;
c.能够初步完成“错题吧”模块,即点击“错题吧”中的复习功能,所有生成的题目就都是之前做过但是做错的题目。
2.小组内的分工
a.余洋(031)和潘志坚(044)两位组员继续进行需求调研,把我们昨天完善的安卓apk安装包推荐给家里有弟弟妹妹在上小学的同学或者小学数学老师使用,让他们给我们提建议,看看还有哪些功能需要调整和完善;
b.邱文鑫(043)和念其锋(045)两位组员对昨日的调研结果进行调整,即把自动生成1~10题的功能扩展到自动生成1~100题,然后将保存错题的文档导入到我们搭建的数据库当中;
c.林青(047)和黄子敬(052)两位组员负责研究如何在点击复习之后,生成题目的时候能够定位到数据库里我们存储错题的那个文档当中,即生成的题目都是之前做错的题目。
2.工作中遇到的困难
a.在生成题目的过程中,如果用户需要生成的题目数量较大时,偶尔会出现生成重复题目的情况。这个情况不在我们的意料之中,所以比较懵逼。百度上也没有找到类似问题的解决方法,最后我们FQ在谷歌上面进行搜索,终于在YouTube上面找到解决类似问题的视频;
b.在生成题目数量比较多的时候,需要滚动屏幕才能看到下面的题目,但我们在测试的时候发现我们把最前面的几题的答案输入到方框之后,它先会判断正误,但是当我们往下滚动几页之后,上面的那些结果会消失,目前我们还没找到问题出在哪里,所以还没解决。而且这个问题不在我们的预料之内,因此打乱了我们今天的工作安排,导致大家都一起在讨论解决这个问题而落下了原本需要完成的工作。
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、今日小结
1.今天我们是在昨天调研的基础上继续完善我们的功能,用户提出说最多只能生成十道题是远远不够的,所以我们考虑到了要提高这项功能,我们想把这个生成题目的上限提高到100道。但是改善这个功能并没有我们想的那么简答,并不像之前写C语言的时候只需要把n的值置为100即可,这次的修改可以说是牵一发而动全身,需要改的东西特别多,界面也要做相应的修改。刚开始的时候我们也没有什么思路,在百度上查找资料也没有找到类似的,最后FQ之后在YouTube上面才发现一个类似的指导视频,我们也不断摸石头过河,费了很大的劲才解决这个问题;
2.在我们调整了题目数量之后,又出现了新的问题。就是当生成的题目数量比较多的时候,例如需要生成手机屏幕5页的四则运算题目,而当我们输入第一页的答案之后,继续做后几页的题目的时候,返回第一页时就发现刚刚在第一页输入的答案已经不见了,第一页的答案框又变成了空白的。这个问题给我们小组造成了很大的困扰,不仅到现在还没有解决,还打乱了今天原本的计划,导致今天的计划只完成了一半,所以后面需要再加把劲,把今天落下的半天补充回来。
冲刺第五天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
a.继续对数据库进行改进,使得能够链接到错题库。
b.解决填答案时,滑动和到一定时间会使得答案消失的问题
c.解决提交完答案的时候,答案消失的问题
2.工作中遇到的困难
a.因为我们不太了解如何设置APP的内置数据库,所以需要查找一些参考资料在进行实验,困难比较大.即使内部数据库已经创建成功,但是无法连接到错题库,所以数据库方面卡了很久都没办法解决。
b.对于app的开发,毕竟大家都没有基础,都是重新学起的,所以,在软件的开发过程中,很多问题需要花很多时间去解决,严重拖慢了进度。
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、 今日小结
- 今天有一个主要内容就是对于数据库的改进,这方面基础薄弱,所以原定昨天就解决的连接数据库问题一直没能解决,毕竟原本设想的太过于简单,原以为只需要创建起数据库然后存储做错的题目即可,但是后面发现并没有那么轻松,毕竟把数据库和app结合在一起是一个大的难点。
- 今天解决的第二个问题就是,对于出题做题界面的改进,原本会出现滑动和时间导致原本输入和存储的数据丢失的bug,也是团队查阅了很多资料,才得以解决。
- 经过实践,发现团队的配合确实是很关键的,一个人的力量终究有限,但是当一群人聚在一起互相探讨解决问题的时候,会发现其实很多问题都能迎刃而解,这就是团队的力量。
冲刺第六天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
a. 实现错题储存功能
b.修复出现的BUG
2.工作中遇到的困难
a.用数据库存错题是开始只能实现一行存入,经查阅资料后可实现多行存入。
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、 今日小结
1.今日主要任务在于修复以前出现的BUG,使程序能更稳定的运行。每次修复都是一个学习的过程,在修复过程中可以让我们积累更多的经验。
2.在数据库的使用上还不够熟练,这方面技能需要提高。
冲刺第七天
一、Daily Scrum Meeting照片
二、每个人的工作
1.今天计划完成的任务
a.我们在前几天从0~10题扩展到0~100题之后,我们还是不满足,我们希望可以把这款APP改成可以生成任意数目题量的APP,不论用户输入的数目是多少,系统都能生成相应数量的题目;
b.昨天的时候已经把数据库和保存错题的机制联系起来了,点击“错题吧”模块就可以复习错题,今天希望能够把这个存储过程和调用数据库的过程再完善一下,尝试着优化代码,让生成错题的速度更快;
c.逐步完善“错题吧”模块,我们希望生成错题的数量也可以是任意的,只要需要生成的题目数量小于或等于数据库内保存的错题数量,就可以生成任意数量的题目。
d.我们希望制作一个弹窗,即当用户点击完成练习的时候,会弹出一个提示窗口,报告本次练习用户的成绩单,提醒用户本次练习过程的耗时、正确的题目数以及正确率。
2.小组内的分工
a.余洋(031)和潘志坚(044)两位组员继续进行需求调研,把我们昨天完善的安卓apk安装包推荐给家里有弟弟妹妹在上小学的同学或者小学数学老师使用,让他们给我们提建议,看看还有哪些功能需要调整和完善;
b.邱文鑫(043)把自动生成1~100题的功能再次扩展到可以生成任意数目的题量,然后对这个功能进行测试,看看到达多少题的时候系统是无法支持的;
c.念其锋(045)负责制作用户答题结束时的弹窗,在用户点击“完成”按钮的时候,要立即弹出一个窗口,提醒用户本次训练的耗时、正确的题数以及正确率;
d.林青(047)和黄子敬(052)两位组员负责继续优化“错题吧”模块,使得生成的错题数量也可以时任意的,同时对这个功能进行测试,看看达到多少题目时系统会崩掉。
2.工作中遇到的困难
a.我们在进行测试这个软件的时候发现了一个不大不小的问题,我们发现当我们多次进行训练的时候,即完成每次训练之后没有退出APP而是继续进行下一轮训练时,计时器不会跟着重新启动,而是接着上一轮的时间接着往下走,这个问题可大可小,如果用户每次训练完都退出APP的话就不会有这个问题,但用户一旦连续使用时计时器就会故障。但是我们并不知道问题出在哪里,猜测可能是计时的结束语句存在问题,但是我们还不知道怎么去验证怎么去修改;
b.在生成错题的时候,我们的设想是希望生成的错题数量可以是任意的,只要小于或等于数据库里的错题数目即可。例如,如果我的错题文档里有1000道的错题,那生成错题的数量就可以是1~1000,但是我们在操作的过程出现了一个很诡异的问题,就是它可以自动生成的错题数量是随机的,比如我们在测试的时候先是查询了文档里的错题数量,是912道,但是自动生成是输入912系统会报错,输入500也会报错,最后我们发现200多一点点就是它的上限,给人一种是按比例生成的感觉,但是我们仍然还不清楚问题出在哪里,这一点可能还要下一步的完善。
三、发布项目燃尽图
四、代码签入
代码git链接: https://git.coding.net/NianQiFeng/szys.git
五、软件的最新进展和运行截图
六、今日小结
1.今天是我们第一阶段冲刺的最后一天,所以我们希望在最后一天能够多完成一些任务,多实现一些功能,所以我们在前一天的会议上就给自己提出了比之前几天都要大的任务量,希望能有个完美的结尾。大家也都做得比往常更卖力,但我们还是遇到了很棘手的问题,导致这七天计划完成的小卡片还有一个没有完成,大家还是有点失落的,雄心壮志想做好每一个环节但往往会有意想不到的bug出现打断我们的进度;
2.虽然我们没有还剩一个卡片没有完成,但相对于我们在第一次冲刺开始前的计划来说,我们还是超额完成任务的。因为我们在每天完善功能之后,都会继续把完善好的APP发给一些朋友使用,让他们继续帮我们测试、提建议,所以我们的APP实际上是每一天都在进步的,而且很多完善的功能点是我们最开始没有想到的然后在做的过程中又慢慢摸索到的,这是我们本次冲刺最大的收获;
3.本次冲刺我们团队已经基本上完成了最开始时设想的功能,出题、复习、计时功能都已经实现,同时还把原来限定的1~10以内的题目扩展到任意数量的题目。错题复习方面,即使还不能做到生成任意数目,但已经可以实现在200道题目以下的任意数目,这个对于实际使用中其实已经是够用的,但我们还是会继续完善。我们在用户调研的过程中还新增了弹窗提醒的功能,这可以帮助用户对自己的水平有更准确地定位。总而言之,我对我们团队第一次冲刺的成果非常满意,我们会继续努力的。