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

 

 总结:

  我做了窗口的设计,是本次作业中相对简单的环节。除了这个,在队友们编程的时候我在一旁帮忙核对、审查代码,当然,代码是我们轮流写的和轮流审查的。这个作业对我来说收货颇多,很有意义,我从中学会了如何与团队中的其他人合作。

posted on 2017-03-14 23:01  执笔写下,狂  阅读(394)  评论(12编辑  收藏  举报