• 结对编程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吧~

      

  • 相关阅读:
    GB2312 字符集
    Excel导入
    Excel导出
    解决文件下载在火狐浏览器出现中文文件名乱码的方法
    Struts2将图片输出到页面
    jsp页面中日期的格式化
    java正则表达式笔记
    利用git将项目上传到github
    Java中枚举的写法和用法
    自定义JQuery插件
  • 原文地址:https://www.cnblogs.com/myyd/p/6550386.html
Copyright © 2020-2023  润新知