第八周作业

一、理论学习

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

将两个小组的代码进行集成
posted @ 2020-04-12 10:27  阳光下的  阅读(210)  评论(0)    收藏  举报