Python課程設(shè)計(jì):學(xué)生成績(jī)管理系統(tǒng)(附源代碼)
版權(quán)聲明:本文為CSDN博主「大格子嘞」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。原文鏈接:
https://blog.csdn.net/qq_43971504/article/details/107048678
大家好,歡迎來(lái)到 Crossin的編程教室 !
今天給大家分享一個(gè)Python開(kāi)發(fā)教學(xué)實(shí)例,涉及GUI、數(shù)據(jù)庫(kù)、Excel導(dǎo)入導(dǎo)出等功能。
1、需求分析
通過(guò)類(lèi)的知識(shí)實(shí)現(xiàn)學(xué)生成績(jī)信息(學(xué)號(hào)、姓名、院系、三門(mén)課成績(jī)、考試平均成績(jī)、同學(xué)互評(píng)分、任課教師評(píng)分、綜合測(cè)評(píng)總分,其中綜合測(cè)評(píng)總分由:考試平均成績(jī)70%,同學(xué)互評(píng)分10%,任課教師評(píng)分20% );
能夠?qū)崿F(xiàn)學(xué)生成績(jī)信息的保存和讀取(使用數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存取);
實(shí)現(xiàn)所有相關(guān)信息的輸入、輸出、查找、刪除、修改等功能;
系統(tǒng)界面應(yīng)至少實(shí)現(xiàn)控制臺(tái)界面(使用桌面窗體界面進(jìn)行交互);
通過(guò)xlrd和xlwt模塊讀取和寫(xiě)入Excel文件;
2、功能設(shè)計(jì)與分析
1、使用數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存取
(1)使用PyMySQL模塊操作數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存取
先安裝PyMySQL模塊:pip install PyMySQL,再使用時(shí)直接導(dǎo)入即可:import pymysql;
(2)創(chuàng)建數(shù)據(jù)庫(kù)school,創(chuàng)建數(shù)據(jù)表student_sore、teacher_login
可以使用Navicat for MySQL創(chuàng)建,也可以使用預(yù)處理語(yǔ)句創(chuàng)建表,若不存在則創(chuàng)建,若存在則跳過(guò);
(3)使用xlrd模塊從Excel文件中讀取數(shù)據(jù)到數(shù)據(jù)庫(kù)
先安裝xlrd模塊:pip install xlrd,再使用時(shí)直接導(dǎo)入即可:import xlrd;
打開(kāi)一個(gè)Excel文件,通過(guò)sheet的索引獲取sheet表,循環(huán)獲取每個(gè)單元格的值,一行一行讀取到數(shù)據(jù)庫(kù)表中。

(4)定義一個(gè)PyMySQL增刪改查的工具類(lèi)PyMySQLUtils
1)
def __init__(self)?獲取連接:打開(kāi)數(shù)據(jù)庫(kù)的連接,使用cursor()方法獲取操作游標(biāo);
2)
def fetchall(self, sql)?查詢(xún)獲取多條數(shù)據(jù):使用execute()方法執(zhí)行SQL語(yǔ)句,使用fetchall()方法獲取多條數(shù)據(jù);
3)
def fetchone(self, sql)?查詢(xún)獲取單條數(shù)據(jù):使用execute()方法執(zhí)行SQL語(yǔ)句,使用fetchone()方法獲取單條數(shù)據(jù);
4)
def execute(self, sql)?添加刪除更新操作:使用execute()方法執(zhí)行SQL語(yǔ)句,提交到數(shù)據(jù)庫(kù)執(zhí)行,發(fā)生錯(cuò)誤時(shí)回滾;
5)
def close(self)?關(guān)閉連接:關(guān)閉游標(biāo),關(guān)閉數(shù)據(jù)庫(kù)連接;
2、使用桌面窗體界面進(jìn)行交互
(1)使用Tkinter模塊實(shí)現(xiàn)圖形化界面GUI設(shè)計(jì)
使用時(shí)直接導(dǎo)入即可:
from tkinter import *from tkinter import ttkimport tkinter.font as tkFontimport?tkinter.messagebox?as?messagebox
(2)開(kāi)始界面:教師注冊(cè)、教師登錄、退出系統(tǒng)
class StartMenu:(銷(xiāo)毀上一個(gè)窗口)初始化一個(gè)根窗口window;添加Label標(biāo)簽控件,用于單行文本顯示"學(xué)生成績(jī)管理系統(tǒng)";添加三個(gè)Button按鈕控件,將其分別與關(guān)聯(lián)函數(shù)lambda: TeacherRegister、lambda: TeacherLogin、window.destroy綁定;在主事件循環(huán)中等待用戶(hù)觸發(fā)事件響應(yīng)。
(3)教師注冊(cè)界面:輸入賬號(hào)、輸入密碼、確認(rèn)賬號(hào)、確定、返回
class TeacherRegister:(銷(xiāo)毀上一個(gè)窗口)初始化一個(gè)根窗口window;添加Label標(biāo)簽控件,用于單行文本顯示"教師注冊(cè)頁(yè)面",“輸入賬號(hào)”、“輸入密碼”、“確認(rèn)賬號(hào)”;添加三個(gè)Entry輸入控件,用于顯示用戶(hù)輸入文本,添加兩個(gè)Button按鈕控件,將其分別與關(guān)聯(lián)函數(shù)register、back綁定;在主事件循環(huán)中等待用戶(hù)觸發(fā)事件響應(yīng)。
(4)教師登錄界面:賬號(hào)、密碼、確定、返回
class TeacherLogin:(銷(xiāo)毀上一個(gè)窗口)初始化一個(gè)根窗口window;添加兩個(gè)Entry輸入控件,用于顯示用戶(hù)輸入文本,添加兩個(gè)Button按鈕控件,將其分別與關(guān)聯(lián)函數(shù)login、back綁定;在主事件循環(huán)中等待用戶(hù)觸發(fā)事件響應(yīng)。
(5)教師操作界面:添加、修改、查詢(xún)、刪除
class TeacherMenu:(銷(xiāo)毀上一個(gè)窗口)初始化一個(gè)根窗口window;添加三個(gè)Frame框架控件,用于框架分組self.frame_center、self.frame_left、frame_right;在中心區(qū)域添加ttk.Treeview樹(shù)視圖窗口控件,ttk.Scrollbar 滾動(dòng)條控件,設(shè)置列、表頭,定義儲(chǔ)存數(shù)據(jù)的列表,從數(shù)據(jù)庫(kù)獲取表格內(nèi)容,設(shè)置表格內(nèi)容,給表頭綁定函數(shù)tree_sort_column,點(diǎn)擊可排序,給表格綁定點(diǎn)擊事件tree_click,獲取被點(diǎn)擊的條目;在左方區(qū)域添加八個(gè)Label標(biāo)簽控件,用于單行文本顯示;添加八個(gè)Entry輸入控件,用于顯示用戶(hù)輸入文本,添加六個(gè)Button按鈕控件,將其分別與關(guān)聯(lián)函數(shù)綁定;在主事件循環(huán)中等待用戶(hù)觸發(fā)事件響應(yīng)。

3、實(shí)現(xiàn)所有相關(guān)信息的添加、修改、查詢(xún)、刪除等功能
(1)添加學(xué)生成績(jī)信息
insert:判斷輸入框中的學(xué)號(hào)在不在儲(chǔ)存學(xué)號(hào)的列表中,在則警告"該學(xué)生成績(jī)信息已存在!";不在則先添加輸入框中的數(shù)據(jù)到數(shù)據(jù)庫(kù)中,接著添加到儲(chǔ)存儲(chǔ)存數(shù)據(jù)的列表中,最后添加到表格內(nèi)容中。
(2)修改學(xué)生成績(jī)信息
update:判斷輸入框中的學(xué)號(hào)在不在儲(chǔ)存學(xué)號(hào)的列表中,不在則警告"該學(xué)生成績(jī)信息不存在!";在則先根據(jù)輸入框中的學(xué)號(hào)修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),接著根據(jù)輸入框中的學(xué)號(hào)在儲(chǔ)存學(xué)號(hào)列表的索引刪除儲(chǔ)存數(shù)據(jù)的列表中的數(shù)據(jù),最后刪除表格內(nèi)容中的數(shù)據(jù)。
(3)查詢(xún)學(xué)生成績(jī)信息
select:判斷輸入框中的學(xué)號(hào)在不在儲(chǔ)存學(xué)號(hào)的列表中,不在則警告"該學(xué)生成績(jī)信息不存在!";在則根據(jù)輸入框中的學(xué)號(hào)在儲(chǔ)存學(xué)號(hào)列表的索引直接查詢(xún)儲(chǔ)存數(shù)據(jù)的列表中的數(shù)據(jù),把數(shù)據(jù)設(shè)置到輸入框中。
(4)刪除學(xué)生成績(jī)信息
delete:判斷輸入框中的學(xué)號(hào)在不在儲(chǔ)存學(xué)號(hào)的列表中,不在則警告"該學(xué)生成績(jī)信息不存在!";在則先根據(jù)輸入框中的學(xué)號(hào)刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù),接著根據(jù)輸入框中的學(xué)號(hào)在儲(chǔ)存學(xué)號(hào)列表的索引刪除儲(chǔ)存數(shù)據(jù)的列表中的數(shù)據(jù),最后刪除表格內(nèi)容中的數(shù)據(jù)。
(5)清空輸入框的內(nèi)容
clear:通過(guò)StringVar.set()方法直接把輸入框的內(nèi)容設(shè)置為空。
(6)寫(xiě)入到Excel文件
先安裝xlwt模塊:pip install xlwt,再使用時(shí)直接導(dǎo)入即可:import xlwt;
新建一個(gè)Excel文件,添加一個(gè)名為sheet1的表,設(shè)置允許重寫(xiě)覆蓋,從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),循環(huán)向sheet寫(xiě)入數(shù)據(jù),最后保存文件中。

3、運(yùn)行結(jié)果
(1)開(kāi)始界面

(2)教師注冊(cè)界面


(3)教師登錄界面


(4)教師操作界面
1)添加學(xué)生成績(jī)信息


2)修改學(xué)生成績(jī)信息


3)查詢(xún)學(xué)生成績(jī)信息


4)刪除學(xué)生成績(jī)信息


5)學(xué)生成績(jī)信息排序


6)寫(xiě)入到Excel文件


獲取源代碼+Excel文件+報(bào)告,請(qǐng)在公眾號(hào) Crossin的編程教室?后臺(tái)回復(fù):成績(jī)
_往期文章推薦_
