码市地址: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

七、小结

通过这次结对编程,我明白了如何进行团队合作,明白了1+1>2的道理,尽管在这次编程中遇到了许多意想不到的困难,但却在这次结对编程中学习到许多以往没有掌握到的知识

结对编程四则运算gui的更多相关文章

  1. 结对编程-四则运算-GUI

     201421123022 王若凡        201421123026  欧阳勇 https://git.coding.net/ttoyy/sizeyunsuan-GUI.git a.需求分析: ...

  2. 结对编程-四则运算GUI的实现

    一.项目成员以及coding地址: 洪灏捷(本人)201321122020  coding地址:https://git.coding.net/hoje/The-GUI-operation.git 白至 ...

  3. 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)

    结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...

  4. 20175305张天钰Java结对编程四则运算(二)

    Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

  5. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  6. 结对编程--四则运算(Java)萧英杰 夏浚杰

    结对编程--四则运算(Java)萧英杰 夏浚杰 Github项目地址 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目 ...

  7. 结对编程--四则运算(Java)梅进鹏 欧思良

    结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...

  8. 王译潇20162314 实验报告三plus结对编程四则运算第一阶段

    北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162314 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年5月12号 实验密级: 非 ...

  9. Java结对编程四则运算一周小结

    Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...

随机推荐

  1. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换

    总架构理解Middleware 通过scrapy官网最新的架构图来理解: 这个图较之前的图顺序更加清晰,从图中我们可以看出,在spiders和ENGINE提及ENGINE和DOWNLOADER之间都可 ...

  2. Linux Command Line(II): Intermediate

    Prerequisite: Linux Command Line(I): Beginner ================================ File I/O $ cat > a ...

  3. web项目中图标的前端处理方案

    工程中用到图标是常事,那这些图标我们前端一般是怎么解决的呢?这几种方案有什么优缺点呢? 第一种: SVG Sprite SVG sprite其实就是svg的集合.SVG即可缩放矢量图形 (Scalab ...

  4. NYOJ 57 6174问题

    6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...

  5. SQLPlus命令

    对于Oracle数据库操作主要使用的是命令行方式,而所有的命令都使用sqlplus完成,对于sqlplus有两种形式. 一种是dos风格的sqlplus:sqlplus.exe; 另一种是window ...

  6. CSS基础学习笔记

    一. CSS介绍 1. CSS概述:CSS(Cascading Style Sheets)指层叠样式表,极大提高了工作效率. 2. 基础语法: 属性大于1个之后,属性之间用分号隔开 如果大于1个单词, ...

  7. MATLAB中多行注释以及取消的快捷键

    多行注释:Ctrl+R 取消注释:Ctrl +T

  8. 使用EasyWechat快速开发微信支付

    前期准备: 申请微信支付后, 会收到2个参数, 商户id,和商户key.注意,这2个参数,不要和微信的参数混淆.微信参数: appid, appkey, token支付参数: merchant_id( ...

  9. jsp基础与提高(EL、JSTL)

    EL表达式 1.1 为什么需要EL表达式和JSP标签 JSP的产生在一定程度上将Servlet中负责表现的功能抽取了出来,但JSP页内嵌入的Java代码也破坏了页面中负责表现的页面结构,特别是当运算逻 ...

  10. 三菱Ethernet工业以太网

    1.什么是Ethernet? 1)网络组成信息网和控制网 2)IP地址的概念 3)端口号的概念 4)通信方式,通信协议 5)开放关闭处理 6)要点总结 2.Ethernet模块 1)CUP能够安装的E ...