碼市位址: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、運作程式并輸入題目數量,在輸入答案後點選确定:

以上便是程式運作的效果展示,我們可以看到,程式能夠判斷答題者是否輸入了正确答案并計算出答題者的最終成績,顯示答題時間。
六、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吧~