第八周作业
一、理论学习
1、学习慕课第十三、十四章,并附上每一章节练习题完成情况。





2、学习软件工程讲义“ 软件和 IT 业的创新”章节。
学习体会:
(1)就创新而言,不一定是领域专家才能创新,也不一定是基础比较好的公司就更容易创新,每个人都有创新的机会,很多人也都喜欢创新,有的从想法上创新,有的从技术上创新,但不是所有的好主意最终都能够存活下来,也不是所有的技术创新最终都能得到用户满意,创新要符合生活实际,有时候即使是一个复制品,说不定也能够在竞争中获得最终胜利。
(2)软件系统设计有多种风格,但都需保证代码的可读性、可重复使用性要强,要有较好的扩展性能,软件功能要能够容易修改,在软件交互设计过程中要遵循设计原则,使得交互界面的效率及易用性尽可能地强,从而提高用户体验,减小后续的维护成本。
二、实践学习(小组成员:曹宇轩、王天雨、刘斯杰、刘昕昕)
由于之前的仓库包含很多之前的试验性代码,对整个软件后续开发的用处不大,所以重新建立了仓库,邀请了相应的小组成员,上传了两组代码中对后续开发有用的代码,然后进行集成,见仓库:https://github.com/lxxlccly/scds。
1、对于首页,集成后增加了你说我猜环节,增加了背景图片,调整了按钮颜色,原有界面和新界面如下图所示:

2、对于出口成诗环节,原来的两组界面如下,第一组点击词后在下方回答提交,第二组点击词后可以查看答案,点击“换一批”按钮后可以换一组词。



由于返回首页后重新选择游戏模式进入该游戏环节会自动换一批词进行回答,所以去掉了“换一批”按钮。而且对于出口成诗环节,一个词原则上没有固定答案,所以不给出“查看答案”按钮,后续将该功能集成到了点字成诗环节上。此外,调整了界面按钮的大小、颜色,添加了背景,在顶上增加了进度条,回答正确之后进度条就会发生变化,增加了回答情况反馈,回答正确或错误时会弹出提示框,最终界面如下图所示:

3、对于点字成诗环节,原始界面和新界面如下,将出口成诗中的“查看答案”功能集成到了点字成诗环节上,点击“查看答案”按钮会显示本题答案(见下方第三个图),此外,增加了背景,改变了按钮布局,增加了“下一题”功能,如果此题不会,就可以点击直接进入下一题,本题视为回答错误,在顶上增加了回答问题的进度条,表示目前做题的进度,当回答正确或错误时,在“下一题”按钮的左方都会有回答情况反馈和得分提示:


4、对于“你说我猜”环节,之前的界面如下,点击词后会完整显示整个题目,点击“查看答案”按钮可以查看答案,也可以点击“换一批”按钮换一组题目。



同样,由于返回首页后重新选择游戏模式进入该游戏环节会自动换一批词进行回答,所以去掉了“换一批”按钮。由于在主界面上不能完整显示每一个题目,所以集成后界面如下,每一次只给出一个完整的题目,并增加了回答窗口和提交回答按钮,通过在下方输入框中进行回答和提交,此外,“查看答案”按钮集成后放在了最下方,增加了“下一题”按钮,在最上方增加了回答问题的进度条,同时也增加了背景和每一题的回答反馈、得分情况,回答完十二个题目后会跳到总结界面,可以返回首页继续选择游戏模式进行玩耍,也可直接退出游戏。

5、在之前第一组的代码中,点字成诗界面和出口成诗界面12个字或词的按钮及其点击时的响应代码如下:
1 question_button1 = tkinter.Button(self.say_poet_interface, 2 text=self.say_poet.questions[0], 3 bg=background_color[self.answering_state[0]], 4 font=('楷体', 18), 5 activeforeground='green', 6 command=self.button1_response) 7 question_button1.place(relwidth=0.3, relheight=0.1, relx=0, rely=0.02) 8 question_button2 = tkinter.Button(self.say_poet_interface, 9 text=self.say_poet.questions[1], 10 bg=background_color[self.answering_state[1]], 11 font=('楷体', 18), 12 activeforeground='green', 13 command=self.button2_response) 14 question_button2.place(relwidth=0.3, relheight=0.1, relx=0.35, rely=0.02) 15 question_button3 = tkinter.Button(self.say_poet_interface, 16 text=self.say_poet.questions[2], 17 bg=background_color[self.answering_state[2]], 18 font=('楷体', 18), 19 activeforeground='green', 20 command=self.button3_response) 21 question_button3.place(relwidth=0.3, relheight=0.1, relx=0.7, rely=0.02) 22 question_button4 = tkinter.Button(self.say_poet_interface, 23 text=self.say_poet.questions[3], 24 bg=background_color[self.answering_state[3]], 25 font=('楷体', 18), 26 activeforeground='green', 27 command=self.button4_response) 28 question_button4.place(relwidth=0.3, relheight=0.1, relx=0, rely=0.14) 29 question_button5 = tkinter.Button(self.say_poet_interface, 30 text=self.say_poet.questions[4], 31 bg=background_color[self.answering_state[4]], 32 font=('楷体', 18), 33 activeforeground='green', 34 command=self.button5_response) 35 question_button5.place(relwidth=0.3, relheight=0.1, relx=0.35, rely=0.14) 36 question_button6 = tkinter.Button(self.say_poet_interface, 37 text=self.say_poet.questions[5], 38 bg=background_color[self.answering_state[5]], 39 font=('楷体', 18), 40 activeforeground='green', 41 command=self.button6_response) 42 question_button6.place(relwidth=0.3, relheight=0.1, relx=0.7, rely=0.14) 43 question_button7 = tkinter.Button(self.say_poet_interface, 44 text=self.say_poet.questions[6], 45 bg=background_color[self.answering_state[6]], 46 font=('楷体', 18), 47 activeforeground='green', 48 command=self.button7_response) 49 question_button7.place(relwidth=0.3, relheight=0.1, relx=0, rely=0.26) 50 question_button8 = tkinter.Button(self.say_poet_interface, 51 text=self.say_poet.questions[7], 52 bg=background_color[self.answering_state[7]], 53 font=('楷体', 18), 54 activeforeground='green', 55 command=self.button8_response) 56 question_button8.place(relwidth=0.3, relheight=0.1, relx=0.35, rely=0.26) 57 question_button9 = tkinter.Button(self.say_poet_interface, 58 text=self.say_poet.questions[8], 59 bg=background_color[self.answering_state[8]], 60 font=('楷体', 18), 61 activeforeground='green', 62 command=self.button9_response) 63 question_button9.place(relwidth=0.3, relheight=0.1, relx=0.7, rely=0.26) 64 question_button10 = tkinter.Button(self.say_poet_interface, 65 text=self.say_poet.questions[9], 66 bg=background_color[self.answering_state[9]], 67 font=('楷体', 18), 68 activeforeground='green', 69 command=self.button10_response) 70 question_button10.place(relwidth=0.3, relheight=0.1, relx=0, rely=0.38) 71 question_button11 = tkinter.Button(self.say_poet_interface, 72 text=self.say_poet.questions[10], 73 bg=background_color[self.answering_state[10]], 74 font=('楷体', 18), 75 activeforeground='green', 76 command=self.button11_response) 77 question_button11.place(relwidth=0.3, relheight=0.1, relx=0.35, rely=0.38) 78 question_button12 = tkinter.Button(self.say_poet_interface, 79 text=self.say_poet.questions[11], 80 bg=background_color[self.answering_state[11]], 81 font=('楷体', 18), 82 activeforeground='green', 83 command=self.button12_response) 84 question_button12.place(relwidth=0.3, relheight=0.1, relx=0.7, rely=0.38) 85 86 def clear_select_state(self): 87 '''清除选中的状态''' 88 for i in range(self.say_poet.question_amount): 89 if self.answering_state[i] == 1: 90 self.answering_state[i] = 0 91 self.say_poet_interface.destroy() 92 93 def button1_response(self): 94 '''点击第一个单词的响应''' 95 if self.answering_state[0] == 0: 96 self.clear_select_state() 97 self.answering_state[0] = 1 98 99 def button2_response(self): 100 '''点击第二个单词的响应''' 101 if self.answering_state[1] == 0: 102 self.clear_select_state() 103 self.answering_state[1] = 1 104 105 def button3_response(self): 106 '''点击第三个单词的响应''' 107 if self.answering_state[2] == 0: 108 self.clear_select_state() 109 self.answering_state[2] = 1 110 111 def button4_response(self): 112 '''点击第四个单词的响应''' 113 if self.answering_state[3] == 0: 114 self.clear_select_state() 115 self.answering_state[3] = 1 116 117 def button5_response(self): 118 '''点击第五个单词的响应''' 119 if self.answering_state[4] == 0: 120 self.clear_select_state() 121 self.answering_state[4] = 1 122 123 def button6_response(self): 124 '''点击第六个单词的响应''' 125 if self.answering_state[5] == 0: 126 self.clear_select_state() 127 self.answering_state[5] = 1 128 129 def button7_response(self): 130 '''点击第七个单词的响应''' 131 if self.answering_state[6] == 0: 132 self.clear_select_state() 133 self.answering_state[6] = 1 134 135 def button8_response(self): 136 '''点击第八个单词的响应''' 137 if self.answering_state[7] == 0: 138 self.clear_select_state() 139 self.answering_state[7] = 1 140 141 def button9_response(self): 142 '''点击第九个单词的响应''' 143 if self.answering_state[8] == 0: 144 self.clear_select_state() 145 self.answering_state[8] = 1 146 147 def button10_response(self): 148 '''点击第十个单词的响应''' 149 if self.answering_state[9] == 0: 150 self.clear_select_state() 151 self.answering_state[9] = 1 152 153 def button11_response(self): 154 '''点击第十一个单词的响应''' 155 if self.answering_state[10] == 0: 156 self.clear_select_state() 157 self.answering_state[10] = 1 158 159 def button12_response(self): 160 '''点击第十二个单词的响应''' 161 if self.answering_state[11] == 0: 162 self.clear_select_state() 163 self.answering_state[11] = 1
上述代码重复率很高,在集成过程中,综合第二小组的代码对其进行了精简,结果如下,行数大大减小,同时也对点字成诗环节代码做了类似的修改:
1 for i in range(4): 2 for j in range(3): 3 index = i * 3 + j 4 question_button = tkinter.Button(self.say_poet_interface, 5 text=self.say_poet.questions[index], 6 bg=background_color[self.answering_state[index]], 7 font=('楷体', 18), 8 command=lambda index0=i, index1=j: self.word_response(index0, index1)) 9 question_button.place(relwidth=0.3, relheight=0.14, relx=0.025+0.325*j, rely=0.04+0.16*i) 10 11 def word_response(self, index0, index1): 12 '''点击单词的响应''' 13 index = index0 * 3 + index1 14 if self.answering_state[index] == 0: 15 for i in range(self.say_poet.question_amount): 16 if self.answering_state[i] == 1: 17 self.answering_state[i] = 0 18 self.say_poet_interface.destroy() 19 self.answering_state[index] = 1
6、原有代码如上所述,之前的第一小组的代码没有利用好代码重用性能,导致代码量大且不易修改,质量较差,集成时进行了部分修改,但对整个程序而已,仍有许多可重用的地方需要修改,后续会进一步改进。在集成过程中,第一组成员用到了第二组成员之前的爬虫程序、数据库导入和调用数据库程序,只有少部分地方进行了调整,代码重用性好、质量较高。
7、下一步计划:
(1)之前的计时器效果不是很好,后续重新完成计时器显示和超时时终止程序的功能;
(2)部分代码重用性不高,需要进行调整修改;
(3)程序还存在bug,需要调试并改进;
(4)重新爬取诗词,调整数据库,增加可以手动选择困难程度的功能;
三、学习记录
| 学习时间 | 学习内容 |
| 4.7 13:00-14:20 | 慕课第十三、十四章 |
| 4.7 14:20-15:10 | 软件工程讲义“软件和 IT 业的创新”章节 |
|
4.9 8:00-17:00 4.10 18:00-20:00 4.11 19:00-20:00 |
将两个小组的代码进行集成 |

浙公网安备 33010602011771号