结对编程1-四则运算(基于GUI)

码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git

林 钊 -- 201421123105

吴世荣 -- 201421123119

王坤彬 -- 201421123108

一、题目描述:

  我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI,成为一个有基本功能、一定价值的程序。

二、需求分析:

  1、记录用户的对错题数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

  2、有计时功能,能显示用户开始答题后的消耗时间。

三、程序设计:

  1、将程序模块化,即将不同功能保存在不同模块中,最后在主模块上调用不同模块以实现相关功能。

  2、实现GUI界面。

四、代码展示:

-----------------------------------------------------------------------------------------------------------------

Menu:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(206, 252)

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.pushButton = QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(70, 180, 41, 23))

self.pushButton.setObjectName("pushButton")

self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)

self.pushButton_2.setGeometry(QtCore.QRect(130, 180, 41, 23))

self.pushButton_2.setObjectName("pushButton_2")

self.textEdit = QtWidgets.QTextEdit(self.centralwidget)

self.textEdit.setGeometry(QtCore.QRect(10, 70, 161, 31))

self.textEdit.setObjectName("textEdit")

self.label = QtWidgets.QLabel(self.centralwidget)

self.label.setGeometry(QtCore.QRect(10, 50, 54, 12))

self.label.setObjectName("label")

self.label_2 = QtWidgets.QLabel(self.centralwidget)

self.label_2.setGeometry(QtCore.QRect(10, 110, 54, 12))

self.label_2.setObjectName("label_2")

self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)

self.textEdit_2.setGeometry(QtCore.QRect(10, 130, 161, 31))

self.textEdit_2.setObjectName("textEdit_2")

self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)

self.textEdit_3.setGeometry(QtCore.QRect(70, 10, 41, 31))

self.textEdit_3.setObjectName("textEdit_3")

self.label_3 = QtWidgets.QLabel(self.centralwidget)

self.label_3.setGeometry(QtCore.QRect(10, 20, 54, 12))

self.label_3.setObjectName("label_3")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 206, 23))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "确定"))

self.pushButton_2.setText(_translate("MainWindow", "退出"))

self.label.setText(_translate("MainWindow", "题目"))

self.label_2.setText(_translate("MainWindow", "答案"))

self.label_3.setText(_translate("MainWindow", "题目数量"))

if __name__=="__main__":

import sys

app=QtWidgets.QApplication(sys.argv)

widget=QtWidgets.QWidget()

ui=Ui_MainWindow()

ui.setupUi(widget)

widget.show()

sys.exit(app.exec_())

# -----------------------------------------------------------------------------------------------------------------

Result:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(237, 127)

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.pushButton = QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(140, 50, 75, 23))

self.pushButton.setObjectName("pushButton")

self.textEdit = QtWidgets.QTextEdit(self.centralwidget)

self.textEdit.setGeometry(QtCore.QRect(20, 10, 191, 31))

self.textEdit.setObjectName("textEdit")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 237, 23))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "下一题"))

-----------------------------------------------------------------------------------------------------------------

End:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(205, 158)

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.textEdit = QtWidgets.QTextEdit(self.centralwidget)

self.textEdit.setGeometry(QtCore.QRect(20, 30, 161, 41))

self.textEdit.setObjectName("textEdit")

self.pushButton = QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(100, 90, 75, 23))

self.pushButton.setObjectName("pushButton")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 205, 23))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "退出"))

-----------------------------------------------------------------------------------------------------------------

main:

import sys

from PyQt5.QtWidgets import QApplication , QMainWindow

from menu import *

from End import *

from Result import *

if __name__ == ‘__main__‘:

app = QApplication(sys.argv)

mainWindow = QMainWindow()

ui = Ui_MainWindow()

ui.setupUi(mainWindow)

mainWindow.show()

sys.exit(app.exec_())

-----------------------------------------------------------------------------------------------------------------

代码说明:

menu 是菜单界面,提示用户输入题目数量并与用户完成交互式操作;

Result 是结果界面,显示用户输入正确与否;

End 是结束界面,统计用户最终成绩和答题计时;

main 是主函数,在main函数中调用以上三个模块以实现相关功能。

五、程序运行:

  1、运行程序并输入题目数量,在输入答案后点击确定:

  

  我们可以看到,如果答案正确就会提示回答正确!

  

  点击下一题继续往下运行:

  

  回答正确!

  

  下一题:

  

  回答正确!

  

  下一题:

  

  提示回答错误并给出正确答案!

  

  下一题:

  

  回答正确!

  

  当完成答题时,点击下一题就会显示最终结果:

  

  以上便是程序运行的效果展示,我们可以看到,程序能够判断答题者是否输入了正确答案并计算出答题者的最终成绩,显示答题时间。

六、PSP表格:


PSP2.1


Personal Software Process Stages


Time (%) Senior Student


Time (%)


Planning


计划


1.5h


2.5h


· Estimate


估计这个任务需要多少时间


45h


62h


· Analysis


需求分析 (包括学习新技术)


4h


4.5h


· Coding Standard


代码规范


1h


1h


· Design


具体设计


3h


3h


· Coding


具体编码


45h


50h


· Test


测试(自我测试,修改代码,提交修改)


1.5h


1h


Reporting


报告


1.5h


1.5h

七、小结:

  这个题目对我目前的水平来说还是有一些难。虽然说在大二有用Java编写过GUI界面的程序,但是毕竟用得比较少,加上对Java不感冒,现在用的是Python,PyQt的用法和NetBeans还是有蛮多不同的,所以一开始想要做得很华丽的界面只能做到这么简陋的程度,但是我们已经很努力了。在这上面花费了很多时间,希望以后会越来越好。

  虽说艰难,但是还是有收获的,明白了团队的重要性以及个人的局限性。也许真的是1+1>2吧~

  

时间: 2024-08-27 06:32:20

结对编程1-四则运算(基于GUI)的相关文章

结对编程项目——四则运算

1. 结对编程项目---四则运算 (10分) 基本功能要求: 1) 实现一个带有用户界面的四则运算.2) 生成的题目不能重复.3) 支持负数,例如-1,-1/2,-3‘4/5等.(达成) 需要支持的基本设定参数 1) 题目的数量  2) 数值的范围  3) 题目中最多几个运算符(目前没有达成)  4) 题目中或运算过程中有无有分数(比如进行整数除法的时候不能除尽) 5) 题目中是否有乘除法  6) 题目中是否有括号 (目前没有达成) 7) 题目中或运算过程中有无负数         学习感受:

补结对编程(四则运算)

结对编程(四则运算)结对伙伴:刘芳芳.于淼主要用java实现编码内容:给小学生出题的四则运算四种运算1-加法2-减法3-乘法4-除法0-退出 四则运算PSP 类别 开始时间 结束时间 间隔时间 累计净时间 四则运算分析 7:30 8:00 0 30分 编码 8:00 10:43 0 2小时43分 总结 10:43 10:50 0 7分 补充代码函数进度 代码如下:循环遍历运算字符串: 1 private static String interceptOperation(String operat

20165223 结对编程之四则运算

目录 一.结对对象 二.需求分析 三.设计思路 四.UML类图 五.功能截图 六.结对感受 一.结对对象 担任角色 驾驶员(Driver):20165223 蔡霓(是控制键盘输入的人) 领航员(Navigator):20165218 赵冰雨(起到领航.提醒的作用) 搭档本次结对博客: 本次结对码云链接: 二.需求分析 取自<结对编程项目-四则运算> 题目内容(week1) 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符

20165206 结对编程项目-四则运算 阶段一总结

20165206 结对编程项目-四则运算 阶段一总结 一.需求分析 通过命令行输入生成题目的数量,随机生成题目. 生成的题目不重复. 生成的四则运算题目支持整数.支持多运算符. 能够根据作答情况统计正确的个数. 二.设计思路 设计一个类来实现整数的四则运算. 用一个循环结构来生成随机数,生成题目. 设计一个类来比较输入的答案与正确答案是否一致. 判断做的题是否正确,并返回正确的个数. 设计单元测试,对代码进行测试及修改 UML图: 三.核心代码 生成随机数: while(true){ a=new

20165227 结对编程项目-四则运算 第一周

20165227 结对编程项目-四则运算 第一周 需求分析 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计题目完成数并计算正确率 设计思路 设计一个计算器能够实现简单的+.-.*./运算 通过编程实现多运算符计算.整数运算.真分数运算.判断结果等 进行junit检测 设计一个程序主类,达到生成随机数.题目.并判断正误 测试 UML类图 功能截图 结对感受 因为同为室友,所以结对起来更轻松方便,讨论的时间也更加地充足,对于队

20165318 结对编程项目-四则运算 阶段总结

20165318 结对编程项目-四则运算 阶段总结 一.需求分析 能随机生成n道四则运算题目,n由使用者输入 支持整数和分数 支持多运算符 能够判断正误,错误时能提醒并输出正确答案 能计算出正确率 能多次生成题目,直到使用者选择退出 后续拓展的可能 题目去重 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 多语言支持:简体中文, 繁體中文, English 二.设计思路(同时输出UML类图) 首先考虑生成题目. 随机生成题目,用到Random函数,生成题目应该是同时随机生成数字和四

20165230 结对编程项目-四则运算 整体总结

20165230 结对编程项目-四则运算 整体总结 一.需求分析 随机生成题目 生成的题目个数从命令行输入 用户可选择生成不同难度的题目,比如通过参数指定: (1) 运算符个数范围 (2) 运算符限定(小学一年级题目只生成 + - 题目) 能多次生成题目 题目运算(判题) 支持多运算符 支持整数 支持真分数 题目合法性判断 可独立使用 可用于测试生成题目的正确性 扩展需求 题目去重 支持多语言 处理生成题目并输出到文件 完成题目后从文件读入并判题 二.设计思路 设计一个IntNumber类,用来

20165202 结对编程项目-四则运算 第二周

一.码云链接 二.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 三.设计思路(同时输出UML类图) 这周的总体设计要在上周的基础上深化,上周我们的代码没有用到中缀表达式转后缀表达式,没有用到栈,所以这周不仅要对上一周的代码进行修改,而且还要在此基础上完成更深层的对真分数的要求. 实现四则运算中后缀转换类 实现四则运算后缀表达式计算类 实现四则运算真分数计算类 实现四则运算生成题

20165330 结对编程项目-四则运算 第二周

需求分析 实现一个命令行程序,要求:自动生成小学四则运算题目(加.减.乘.除) 可实现多个运算符一起运算 可以真分数形式输出结果 测试结果的正确性 统计题目完成数并计算正确率 设计思路 实验首先是完成一个计算器的功能,可以实现简单的+.-.*./运算,在这里设计一个主类生成随机数,生成题目,并判断正确率 实现多运算符,编入四个类分别实现整数运算.真分数运算.判断结果正确并计算正确率 利用JUnit检测非法输入 设计测试类,利用JUnit测试整数类与分数类的四则运算 UML类图 功能截图 Juni

20165235 结对编程项目-四则运算 整体总结

20165235 结对编程项目-四则运算 整体总结 一.需求分析 本次实验需要产生随机数然后对其进行相应的计算.产生随机数可以直接在主类中进行,四则运算可以通过堆栈实现,可能会出现分母为零的bug,也要对其进行相应的修复.可以将字符序列装换成字符数组,在对字符数组中"/"符号之后的数字进行判断,如果是0就返回-1. 二.设计思路 本次实验总共分为两个思路:(1)是通过类Operate中的calculate方法进行计算,计算的数值由主类Main给出.并对其修复了分母为零的bug(在Mai