天天看點

結對程式設計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:

        MainWindow.resize(237, 127)

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

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

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

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

End:

        MainWindow.resize(205, 158)

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

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

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

        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()

代碼說明:

menu 是菜單界面,提示使用者輸入題目數量并與使用者完成互動式操作;

Result 是結果界面,顯示使用者輸入正确與否;

End 是結束界面,統計使用者最終成績和答題計時;

main 是主函數,在main函數中調用以上三個子產品以實作相關功能。

五、程式運作:

  1、運作程式并輸入題目數量,在輸入答案後點選确定:

  

結對程式設計1-四則運算(基于GUI)
  我們可以看到,如果答案正确就會提示回答正确!
結對程式設計1-四則運算(基于GUI)
  點選下一題繼續往下運作:
結對程式設計1-四則運算(基于GUI)
  回答正确!
結對程式設計1-四則運算(基于GUI)
  下一題:
結對程式設計1-四則運算(基于GUI)
結對程式設計1-四則運算(基于GUI)
結對程式設計1-四則運算(基于GUI)
  提示回答錯誤并給出正确答案!
結對程式設計1-四則運算(基于GUI)
結對程式設計1-四則運算(基于GUI)
結對程式設計1-四則運算(基于GUI)
  當完成答題時,點選下一題就會顯示最終結果:
結對程式設計1-四則運算(基于GUI)

  以上便是程式運作的效果展示,我們可以看到,程式能夠判斷答題者是否輸入了正确答案并計算出答題者的最終成績,顯示答題時間。

六、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
· Design 具體設計 3h
· Coding 具體編碼 50h
· Test 測試(自我測試,修改代碼,送出修改)
Reporting 報告

七、小結:

   這個題目對我目前的水準來說還是有一些難。雖然說在大二有用Java編寫過GUI界面的程式,但是畢竟用得比較少,加上對Java不感冒,現在用的是Python,PyQt的用法和NetBeans還是有蠻多不同的,是以一開始想要做得很華麗的界面隻能做到這麼簡陋的程度,但是我們已經很努力了。在這上面花費了很多時間,希望以後會越來越好。

  雖說艱難,但是還是有收獲的,明白了團隊的重要性以及個人的局限性。也許真的是1+1>2吧~

結對程式設計1-四則運算(基于GUI)
下一篇: 堆的概念