第七周作业
第七周作业
分组:李肖华,陆遥
一、理论学习
1、《软件工程》慕课学习

2、讲义《设计与开发》学习
设计与开发是将用户需求转换为产品、过程或体系的规定的特性或规范的一组过程。设计与开发简单来说就是要知道软件是怎么满足需求以及是否真的解决了这些需求。具体方法是先理解和抽象需求的本质,然后找到适合的模型,最后根据模型和解法解决问题。其中分析和设计的方法有许多,包括思维导图、实体关系图、用例图、形式化方法和文学化编程等。
3、UML行为建模
UNM建模是指绘制软件蓝图的标准化语言,是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。换句话说,就像建筑设计师需要为建筑公司设计蓝图一样,软件设计师也需要创建UML图帮助软件开发者开发软件。UML建模中总共有以下13种建模用图:用例图:从用户角度描述系统功能;类图:描述系统中类的静态结构;对象图:系统中的多个对象在某一时刻的状态;状态图:是描述状态到状态控制流,常用于动态特性建模;活动图:描述了业务实现用例的工作流程;顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互;协作图:描述对象之间的协助关系;构件图:一种特殊的UML图来描述系统的静态实现视图;部署图:定义系统中软硬件的物理体系结构;包图:对构成系统的模型元素进行分组整理的图;组合结构图:表示类或者构建内部结构的图;交互概览图:用活动图来表示多个交互之间的控制关系的图。
二、实践学习

1 # -*- coding: UTF-8 -*- 2 # Author: Lu Yao and Li Xiaohua 3 4 import json 5 import random 6 import time 7 import tkinter as tk 8 import tkinter.ttk as ttk 9 import tkinter.messagebox 10 from PIL import Image, ImageTk 11 12 13 def open_db(json_file): 14 text = open(json_file, "r", encoding="utf-8") 15 poetry_dict = json.load(text) 16 text.close() 17 return poetry_dict 18 19 20 def process_img(jpg_file): 21 source_img = Image.open(jpg_file) 22 real_img = ImageTk.PhotoImage(source_img) 23 return real_img 24 25 26 def countdown(seconds): 27 t = seconds * 100 + 100 28 time_lab = tk.Label(root, bg="white", fg="black", font=("微软雅黑", 14, "bold"), width=3, height=1, 29 relief="ridge", borderwidth=10) 30 time_lab.place(x=440, y=150) 31 for s in range(t, -1, -1): 32 try: 33 time_lab["text"] = s // 100 34 root.update() 35 time.sleep(0.01) 36 except tk.TclError: 37 break 38 if s == 0: 39 tk.messagebox.showinfo(message="时间到!游戏结束!") 40 41 42 def show_btns(): 43 btn_1.place(x=0, y=0, width=105, height=60) 44 btn_2.place(x=105, y=0, width=105, height=60) 45 btn_3.place(x=210, y=0, width=105, height=60) 46 btn_4.place(x=315, y=0, width=105, height=60) 47 btn_5.place(x=0, y=60, width=105, height=60) 48 btn_6.place(x=105, y=60, width=105, height=60) 49 btn_7.place(x=210, y=60, width=105, height=60) 50 btn_8.place(x=315, y=60, width=105, height=60) 51 btn_9.place(x=0, y=120, width=105, height=60) 52 btn_10.place(x=105, y=120, width=105, height=60) 53 btn_11.place(x=210, y=120, width=105, height=60) 54 btn_12.place(x=315, y=120, width=105, height=60) 55 56 57 def set_game(): 58 global set_bg 59 enter_btn.place_forget() 60 start_bg.pack_forget() 61 set_bg.pack() 62 set_time.place(x=175, y=50) 63 choose_db.place(x=175, y=110) 64 start_btn.place(x=190, y=220) 65 66 67 def identify_db(): 68 global db_file 69 if db.get() == "诗词库": 70 db_file = "poetry_database.json" 71 return db_file 72 73 74 def random_sel(): 75 global ans_1, ans_2, ans_3, ans_4, ans_5, ans_6, ans_7, ans_8, ans_9, ans_10, ans_11, ans_12 76 record = [] 77 seconds = eval(set_time.get()) 78 json_file = identify_db() 79 poetry_dict = open_db(json_file) 80 set_time.place_forget() 81 choose_db.place_forget() 82 start_btn.place_forget() 83 set_bg.pack_forget() 84 change_btn.place(x=200, y=200) 85 quit_btn.place(x=440, y=220) 86 time_left.place(x=50, y=200) 87 play_bg.pack() 88 show_btns() 89 for i in range(100): 90 loc = random.randint(1, 100) 91 if loc not in record: 92 record.append(loc) 93 line_count = poetry_dict[loc - 1]["line"] 94 line_num = random.randint(1, line_count) 95 if len(record) == 1: 96 kwd_1.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 97 ans_1 = poetry_dict[loc - 1]["text"][line_num - 1] 98 elif len(record) == 2: 99 kwd_2.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 100 ans_2 = poetry_dict[loc - 1]["text"][line_num - 1] 101 elif len(record) == 3: 102 kwd_3.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 103 ans_3 = poetry_dict[loc - 1]["text"][line_num - 1] 104 elif len(record) == 4: 105 kwd_4.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 106 ans_4 = poetry_dict[loc - 1]["text"][line_num - 1] 107 elif len(record) == 5: 108 kwd_5.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 109 ans_5 = poetry_dict[loc - 1]["text"][line_num - 1] 110 elif len(record) == 6: 111 kwd_6.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 112 ans_6 = poetry_dict[loc - 1]["text"][line_num - 1] 113 elif len(record) == 7: 114 kwd_7.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 115 ans_7 = poetry_dict[loc - 1]["text"][line_num - 1] 116 elif len(record) == 8: 117 kwd_8.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 118 ans_8 = poetry_dict[loc - 1]["text"][line_num - 1] 119 elif len(record) == 9: 120 kwd_9.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 121 ans_9 = poetry_dict[loc - 1]["text"][line_num - 1] 122 elif len(record) == 10: 123 kwd_10.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 124 ans_10 = poetry_dict[loc - 1]["text"][line_num - 1] 125 elif len(record) == 11: 126 kwd_11.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 127 ans_11 = poetry_dict[loc - 1]["text"][line_num - 1] 128 elif len(record) == 12: 129 kwd_12.set(poetry_dict[loc - 1]["keyword"][line_num - 1]) 130 ans_12 = poetry_dict[loc - 1]["text"][line_num - 1] 131 countdown(seconds) 132 break 133 if loc in record: 134 continue 135 136 137 def answer_qu(btn_x, ans_x): 138 global ans_entry 139 global ans_window 140 ans_window = tk.Toplevel() 141 window_width = root.winfo_screenwidth() 142 window_height = root.winfo_screenheight() 143 w = int((window_width - 300) / 2) 144 h = int((window_height - 100) / 2) 145 ans_window.geometry("300x100+%s+%s" % (w, h)) 146 ans_window.title("请输入答案") 147 ans_entry = tk.Entry(ans_window, font=("微软雅黑", 14)) 148 ans_entry.pack(pady=10) 149 confirm_btn = tk.Button(ans_window, text="确认", command=lambda: judge_ans(btn_x, ans_x), font=("微软雅黑", 12)) 150 confirm_btn.pack(anchor=tk.S, side=tk.LEFT, padx=40, pady=10) 151 clear_btn = tk.Button(ans_window, text="清除", command=clear_ans, font=("微软雅黑", 12)) 152 clear_btn.pack(anchor=tk.S, side=tk.RIGHT, padx=40, pady=10) 153 154 155 def judge_ans(btn_y, ans_y): 156 global right_count 157 if ans_entry.get() == ans_y: 158 tk.messagebox.showinfo(message="回答正确!") 159 ans_window.destroy() 160 btn_y.place_forget() 161 if right_count == 12: 162 change_btn["text"] = "重新开始" 163 tk.messagebox.showinfo(message="取得胜利!") 164 right_count = 0 165 else: 166 tk.messagebox.showerror(message="回答错误!") 167 168 169 def clear_ans(): 170 ans_entry.delete(0, tk.END) 171 172 173 def close_window(): 174 if tk.messagebox.askokcancel(message="您确定要退出吗?"): 175 root.destroy() 176 177 178 def quit_game(): 179 if tk.messagebox.askokcancel(message="您确定要退出吗?"): 180 root.destroy() 181 182 183 root = tk.Tk() 184 root.title("出口成诗游戏") 185 root.geometry("550x300") 186 187 right_count = 0 188 kwd_1 = tk.StringVar() 189 kwd_2 = tk.StringVar() 190 kwd_3 = tk.StringVar() 191 kwd_4 = tk.StringVar() 192 kwd_5 = tk.StringVar() 193 kwd_6 = tk.StringVar() 194 kwd_7 = tk.StringVar() 195 kwd_8 = tk.StringVar() 196 kwd_9 = tk.StringVar() 197 kwd_10 = tk.StringVar() 198 kwd_11 = tk.StringVar() 199 kwd_12 = tk.StringVar() 200 db = tk.StringVar() 201 202 start_img = process_img("start.jpg") 203 start_bg = tk.Canvas(root, width=550, height=300) 204 start_bg.create_image(275, 150, image=start_img) 205 start_bg.pack() 206 start_bg.create_text(260, 120, font=("微软雅黑", 50, "bold"), fill="Snow", text="出 口 成 诗") 207 set_img = process_img("start.jpg") 208 set_bg = tk.Canvas(root, width=550, height=300) 209 set_bg.create_image(275, 150, image=set_img) 210 play_img = process_img("play.jpg") 211 play_bg = tk.Canvas(root, width=550, height=300) 212 play_bg.create_image(275, 150, image=play_img) 213 214 choose_db = ttk.Combobox(root, font=("微软雅黑", 12), textvariable=db) 215 choose_db["value"] = ("请选择诗词库", "诗词库") 216 choose_db.current(0) 217 218 style_A = ttk.Style() 219 style_A.theme_use("clam") 220 style_A.configure("yellow.Horizontal.TProgressbar", background="yellow") 221 style_B = ttk.Style() 222 style_B.theme_use("clam") 223 style_B.configure("red.Horizontal.TProgressbar", background="red") 224 style_C = ttk.Style() 225 style_C.theme_use("clam") 226 style_C.configure("green.Horizontal.TProgressbar", background="green") 227 time_left = ttk.Progressbar(root, mode="determinate", style="green.Horizontal.TProgressbar") 228 time_left["value"] = 1000 229 230 set_time = tk.Spinbox(root, font=("微软雅黑", 12), from_=10, to=1000, increment=10) 231 232 enter_btn = tk.Button(root, text="进入游戏", font=('微软雅黑', 14, "bold"), width=10, height=1, command=set_game, 233 relief="raised", borderwidth=10) 234 enter_btn.place(x=190, y=220) 235 start_btn = tk.Button(root, text="开始游戏", font=('微软雅黑', 14, "bold"), width=10, height=1, 236 command=random_sel, relief="raised", borderwidth=10) 237 quit_btn = tk.Button(root, text="退出", font=('微软雅黑', 14, "bold"), width=5, height=1, command=quit_game, 238 relief="raised", borderwidth=10) 239 change_btn = tk.Button(root, text="换一组", font=('微软雅黑', 14, "bold"), width=8, height=1, 240 command=random_sel, relief="raised", borderwidth=10) 241 242 btn_1 = tk.Button(root, textvariable=kwd_1, bg="red", fg="white", font=("微软雅黑", 15, "bold"), relief="raised", 243 borderwidth=10, command=lambda: answer_qu(btn_1, ans_1)) 244 btn_2 = tk.Button(root, textvariable=kwd_2, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 245 borderwidth=10, command=lambda: answer_qu(btn_2, ans_2)) 246 btn_3 = tk.Button(root, textvariable=kwd_3, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 247 borderwidth=10, command=lambda: answer_qu(btn_3, ans_3)) 248 btn_4 = tk.Button(root, textvariable=kwd_4, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 249 borderwidth=10, command=lambda: answer_qu(btn_4, ans_4)) 250 btn_5 = tk.Button(root, textvariable=kwd_5, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 251 borderwidth=10, command=lambda: answer_qu(btn_5, ans_5)) 252 btn_6 = tk.Button(root, textvariable=kwd_6, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 253 borderwidth=10, command=lambda: answer_qu(btn_6, ans_6)) 254 btn_7 = tk.Button(root, textvariable=kwd_7, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 255 borderwidth=10, command=lambda: answer_qu(btn_7, ans_7)) 256 btn_8 = tk.Button(root, textvariable=kwd_8, bg="red", fg="white", font=("微软雅黑", 14, "bold"), 257 relief="raised", borderwidth=10, command=lambda: answer_qu(btn_8, ans_8)) 258 btn_9 = tk.Button(root, textvariable=kwd_9, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 259 borderwidth=10, command=lambda: answer_qu(btn_9, ans_9)) 260 btn_10 = tk.Button(root, textvariable=kwd_10, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 261 borderwidth=10, command=lambda: answer_qu(btn_10, ans_10)) 262 btn_11 = tk.Button(root, textvariable=kwd_11, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 263 borderwidth=10, command=lambda: answer_qu(btn_11, ans_11)) 264 btn_12 = tk.Button(root, textvariable=kwd_12, bg="red", fg="white", font=("微软雅黑", 14, "bold"), relief="raised", 265 borderwidth=10, command=lambda: answer_qu(btn_12, ans_12)) 266 267 root.protocol('WM_DELETE_WINDOW', close_window) 268 root.mainloop()
总结:
三、学习记录
| 学习阶段 | 学习内容 | 学习收获 |
| 2019.3.31 14:00-17:00 | 软件工程 |
对UML建模有了深入了解 |
| 2019.4.1 14:00-17:00 | UML软件莫学习 | 了解UML建模工具 |
| 2019.4.3 08:00-11:00 | 课堂讨论 | 练习使用UML图 |
| 2019.4.4 09:00-17:00 | 讲义学习 | 了解了软件设计与开发过程 |
| 2019.4.5 09:00-2100 | 实践学习 |
编写出口成诗程序 |










浙公网安备 33010602011771号