第一次软工作业

目录

作业基本信息 

Gitcode项目地址  

运行方式

PSP表格

解题思路描述

问题1

问题2

接口设计和实现过程

关键代码展示  

性能改进

单元测试 

        运行结果​

心得体会   



作业基本信息
 
 

【课程】福州大学2021级软件工程Ahttps://bbs.csdn.net/forums/ssynkqtd-05
这个作业要求在哪里https://bbs.csdn.net/forums/ssynkqtd-05
这个作业的目标实现一个简易计算器,要求具有图形化界面。功能:具有基本功能的计算器实现加、减、乘、除、归零基本操作。附加功能:具有科学计算的算器实现次方、幂、三角函数等操作。
其他参考文献

Python初学者项目-制作一个简单的计算器应用程序_哔哩哔哩_bilibili

python 制作简易计算器~用户界面设计_python 计算器窗体布局_闫海南的博客-CSDN博客

 
 Gitcode项目地址
 
 

运行方式

1695918049843

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划00
Estimate估计这个任务需要多少时间
Development开发
Analysis需求分析 (包括学习新技术)90135
Design Spec生成设计文档00
Design Review设计复审00
Coding Standard代码规范 (为目前的开发制定合适的规范)00
Design具体设计4060
Coding具体编码6040
Code Review代码复审1015
Test测试(自我测试,修改代码,提交修改)3050
Reporting报告2030
Test Repor测试报告1020
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划2010
Size Measurement测试报告280360

 
 
解题思路描述

查询相关资料时发现使用python语言及使用tkinter库能较轻松地进行可视化界面的创建,学习相关内容后便较轻松的完成简易计算器的设计


问题1

如何使计算器有可视化界面?

用tkinter库的.Tk()函数创建界面.Frame()函数设置按键区,最后用循环创建按钮


问题2


如何将按钮与操作联系起来?

将按钮的文本和事件绑定到函数上。在函数中根据按钮的文本执行相应的操作


接口设计和实现过程

root = tk.Tk()及之后代码创建一个300x400大小的窗口, display = tk.StringVar()及之后代码创建一个文本输入框用于显示计算结果或用户输入的表达式。 然后使用循环创建了按钮, 并将按钮的文本和事件绑定到button_click函数上。 在button_click函数中,根据按钮的文本执行相应的操作,更新显示的表达式或计算结果

关键代码展示  

import tkinter as tk

def button_click(event):
    current = display.get()
    text = event.widget.cget("text")

    if text == "=":
        try:
            result = eval(current)
            display.set(result)
        except Exception as e:
            display.set("Error")

    elif text == "C":
        display.set("")

    elif text == "←":
        display.set(current[:-1])

    else:
        display.set(current + text)


root = tk.Tk()
root.geometry("300x400")
root.title("简易计算器")
root.attributes("-alpha", 0.9)
root.configure(bg="#f0f0f0")

display = tk.StringVar()
entry_field = tk.Entry(root, textvariable=display, font=("Helvetica", 20), justify='right',  bd=5)  # 设置输入框样式
entry_field.pack(fill=tk.X, ipadx=10, pady=10)

button_frame = tk.Frame(root, bg="#f0f0f0")  # 设置按钮区域背景色
button_frame.pack()

buttons = [
    ["(", ")", "C", "←"],
    ["7", "8", "9", "+"],
    ["4", "5", "6", "-"],
    ["1", "2", "3", "*"],
    [".", "0", "=", "/"]
]

for row in buttons:
    for button_text in row:
        button = tk.Button(button_frame, text=button_text, font=("楷体", 15, "bold"),height=2,width=3, relief=tk.RAISED, padx=3,pady=2)  # 设置按钮样式
        button.grid(row=buttons.index(row), column=row.index(button_text), padx=5, pady=5)
        button.bind("<Button-1>", button_click)

root.mainloop()

 
 
性能改进
 

能力有限加时间较短未能实现开方,n次方及三角函数等功能。
界面未打磨,较为简陋
 

单元测试
 

import unittest
from tkinter import Tk, Button, Entry, StringVar

class TestCalculator(unittest.TestCase):
    def setUp(self):
        self.root = Tk()
        self.display = StringVar()
        self.entry_field = Entry(self.root, textvariable=self.display)
        self.button = Button(self.root, text="=", font=("Helvetica", 15, "bold"))

    def test_button_click_equals(self):
        self.display.set("2+2")
        self.button_click_function()
        self.assertEqual(self.display.get(), "4")

    def test_button_click_clear(self):
        self.display.set("2+2")
        self.button["text"] = "C"
        self.button_click_function()
        self.assertEqual(self.display.get(), "")

    # 添加更多的测试用例...

    def button_click_function(self):
        current = self.display.get()
        text = self.button.cget("text")

        if text == "=":
            try:
                result = eval(current)
                self.display.set(result)
            except Exception as e:
                self.display.set("Error")

        elif text == "C":
            self.display.set("")

        elif text == "←":
            self.display.set(current[:-1])

        else:
            self.display.set(current + text)

    def tearDown(self):
        self.root.destroy()

if __name__ == "__main__":
    unittest.main()

运行结果



 
心得体会

本次简易计算器较为简单,但是受益匪浅,学会界面可视化以及如何使得按钮与函数相联系的方法
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值