文章目录
作业信息
这个作业属于哪个课程 | 2301-计算机学院-软件工程 |
---|---|
这个作业要求在哪里 | 软工实践第一次作业 |
这个作业的目标 | 实现一个具备基本功能的可视化计算器 |
其他参考文献 | 框架参考 |
提示:以下是本篇文章正文内容
解题思路描述
1.语言环境:python语言
2.界面设计:利用python的Tkinter库实现计算器界面设计
3.逻辑设计:主要通过eval功能计算数值,同时调用math库里的函数
4.功能完善:
按键颜色、大小等外观设计;
实现连续计算功能。
Gitcode项目地址
PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
• Estimate | • 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 60 | 100 |
• Analysis | • 需求分析 (包括学习新技术) | 120 | 150 |
• Design Spec | • 生成设计文档 | 10 | 10 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
• Design | • 具体设计 | 30 | 40 |
• Coding | • 具体编码 | 100 | 160 |
• Code Review | • 代码复审 | 20 | 100 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 150 | 250 |
• Test Repor | • 测试报告 | 20 | 20 |
• Size Measurement | • 计算工作量 | 10 | 10 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 610 | 970 |
设计与实现过程
1.按键button设计
运用tkinter.Button,其中利用command=lambda:引用 Add()函数,利用grid()布局
提示:(仅展示了一些按钮制作)
##数字键
button1 = tk.Button(root, text=' 1 ', bg=color1, command=lambda: Add(1), height=1, width=7)
button1.grid(row=2, column=0)
##运算键
add = tk.Button(root, text=' + ', bg=color1, command=lambda: Add("+"), height=1, width=7)
add.grid(row=2, column=3)
##清空键
clear = tk.Button(root, text='Clear', bg=color3, command=Clear, height=1, width=7)
clear.grid(row=2, column=6)
##结果键
equal = tk.Button(root, text=' = ', bg=color3, command=Result, height=1, width=7)
equal.grid(row=5, column=6)
2.创建输入框
entrys = tk.Entry(root, textvariable=result,width=28)
entrys.grid(columnspan=7, ipadx=104)
3.字符添加函数Add()
提示:定义两个全局变量t,t1,初始值为空
t为实际字符串;t1为显示字符串
可视化界面显示t1
def Add(num):
global t,t1
t1 = t1 + str(num)
if num=="^":
t=t+"**"
elif num=="lg":
t=t+"math.log10"
elif num=="ln":
t=t+"math.log"
elif num=="sin":
t=t+"math.sin"
elif num=="cos":
t=t+"math.cos"
elif num=="tan":
t=t+"math.tan"
elif num=="!":
t="math.factorial("+t+")"
elif num=="π":
t=t+"math.pi"
elif num=="e":
t=t+"math.e"
else:t=t+str(num)
print(t)
result.set(t1)
4.结果运算函数Result()
利用try ,except测试
total保留计算结果两位小数,并将结果再次保存到t,t1中,直到清空
小优化:
原本:计算1+2=3后需要Clear()清空,进行下次计算。修改后:可利用上次值继续运算
def Result():
try:
global t,t1
total= round(float(eval(t)),2)
print(total)
t=t1=str(total)
result.set(t)
except:
result.set(" error ")
t=t1=""
5.清除运算函数Clear()
清空t,t1,屏幕内容
def Clear():
global t,t1
t=t1=""
result.set("")
关键功能展示
程序性能改进
1.按键优化
*——>×
/——>÷
2.重复计算
可继续使用上次计算结果,上文已解释
单元测试展示
异常处理措施与改进
当连续输入多个运算符或缺少运算语法错误时自动报错
心路历程与收获
1.了解了项目开发过程, 进行计划,需求分析,开发时编写代码、满足需求、设计文档,单元测试、bug调试等。
2.学会了pythonTkinter库的许多使用方式,对math库有了更深了解
3.增强了我的代码撰写能力和修改代码的能力