python編寫學(xué)生成績管理系統(tǒng)的邏輯結(jié)構(gòu)及功能實現(xiàn)
學(xué)生信息系統(tǒng)
提示:python編寫的學(xué)生成績管理系統(tǒng),包括8個功能和打包教程
一、功能界面
def menum():
print('==================student_manger=================')
print('---------------------功能界面---------------------')
print('\t\t1.錄入學(xué)生信息')
print('\t\t2.查找學(xué)生信息')
print('\t\t3.刪除學(xué)生信息')
print('\t\t4.修改學(xué)生成績')
print('\t\t5.排序')
print('\t\t6.統(tǒng)計學(xué)生總?cè)藬?shù)')
print('\t\t7.顯示所有學(xué)生信息')
print('\t\t8.顯示功能介紹按鈕')
print('\t\t0.退出')
print('================================================')二 、主函數(shù)
def main():
menum()
while True:
try:
choice = int(input('請選擇你想進行的操作: '))
except ValueError:
print('輸入的數(shù)據(jù)存在錯誤,只能輸入0到7的整數(shù)!')
try:
choice = int(input('請重新輸入: '))
except ValueError:
print('重復(fù)輸入錯誤,退出系統(tǒng)!')
break
if choice in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
if choice == 0:
answer = input('你確定要退出系統(tǒng)嗎?(Y/N): ')
if answer == 'Y' or answer == 'y':
print('謝謝使用!')
break
elif answer == 'N' or answer == 'n':
print('即將返回上一步操作!')
continue
else:
input('輸入錯誤,即將返回主界面!')
continue
elif choice == 1:
insert()
elif choice == 2:
search()
elif choice == 3:
delete()
elif choice == 4:
modify()
elif choice == 5:
sort()
elif choice == 6:
total()
elif choice == 7:
show()
else:
menum()
else:
print('你選擇的操作無效,請重新輸入!:')
三 、學(xué)生信息錄入功能
邏輯結(jié)構(gòu)圖

def insert():
student_list = []
id_list = []
while True:
id = input('請輸入ID: ')
if not id:
break
name = input('請輸入姓名:')
if not name:
break
try:
english = float(input('請輸入英語成績:'))
math = float(input('請輸入數(shù)學(xué)成績:'))
python = float(input('請輸入Python成績:'))
except ValueError:
print('數(shù)據(jù)輸入錯誤!')
continue
# 將錄入的學(xué)生信息存放到字典中
student = {'id': id, 'name': name, 'english': english, 'math': math, 'Python': python}
# 將每個學(xué)生的信息存放在列表中
if student['id'] in id_list: # student['id'] = value(id)
print('已存在相同ID:')
for i in range(len(student_list)):
if student_list[i][id] == student[id]: # 輸出重復(fù)id元素
print(student_list[i].items())
break
print('請重新錄入!')
else:
id_list.append(str(student['id']))
student_list.append(student)
# 是否繼續(xù)添加學(xué)生信息
answer = input('是否繼續(xù)添加學(xué)生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
# 存儲學(xué)生信息
save(student_list, filename)
print('學(xué)生信息錄入完畢!')
break
else:
print('輸入錯誤,即將返回主界面!')
break
四 、學(xué)生信息查找功能
邏輯結(jié)構(gòu)圖

代碼
def search():
while True:
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as s_file:
student_qurey = s_file.readlines() # 將學(xué)生信息全部取出
id_list = []
name_list = []
for i in student_qurey:
d = dict(eval(i))
id_list.append(d['id']) # 將所有學(xué)生的id存放在id_list中
name_list.append(d['name']) # 將所有學(xué)生的name存放在id_list中
try:
mode = int(input('請選擇查詢模式: 1.按照ID查詢 / 2.按照姓名查詢 '))
except ValueError:
print('數(shù)據(jù)類型輸入錯誤!請重新輸入!')
else:
if mode == 1: # 按照ID查詢
id = input('請輸入學(xué)生id: ')
if id in id_list:
print('已經(jīng)查找到該名學(xué)生:')
print('ID\t\t\t姓名:\t\t英語成績:\t\t數(shù)學(xué)成績:\t\tPython成績:\t\t總成績:')
for item in student_qurey:
if dict(eval(item))['id'] == id:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english'])+float(p['math'])+float(p['Python'])))
else:
print('查無此人!')
elif mode == 2: # 按照姓名查詢
name = input('請輸入學(xué)生姓名: ')
if name in name_list:
print('已經(jīng)查找到該名學(xué)生:')
print('ID\t\t\t姓名:\t\t英語成績:\t\t數(shù)學(xué)成績:\t\tPython成績:\t\t總成績:')
for item in student_qurey:
if dict(eval(item))['name'] == name:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english']) + float(p['math']) + float(p['Python'])))
else:
print('查無此人!')
else:
print('輸入錯誤,只能選擇1/2兩種模式!')
answer = input('是否繼續(xù)查詢? (Y/N)')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
print('正在退出查詢..')
break
else:
print('輸入錯誤,即將返回主界面!')
break
else:
print('無學(xué)生信息文件!')
return
五 、刪除學(xué)生信息
邏輯結(jié)構(gòu)圖

代碼
def delete():
while True:
student_id = input('請輸入想要刪除的學(xué)生的ID: ')
if student_id != '':
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as file:
student_old = file.readlines()
else:
student_old = []
flag = False # 標記是否刪除
if student_old:
with open(filename, 'w', encoding = 'utf-8') as wfile:
for item in student_old:
d = dict(eval(item)) # 轉(zhuǎn)化為字典類型
if d['id'] != student_id:
wfile.write(str(d)+'\n')
else:
flag = True
if flag:
print(f'id為{student_id}的學(xué)生信息已被刪除!')
else:
print(f'沒有找到id為{student_id}的學(xué)生信息!')
else:
print('無學(xué)生信息')
break
show() # 顯示更新后的文件信息
answer = input('是否繼續(xù)刪除學(xué)生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
break
else:
print('輸入錯誤,即將返回主界面!')
break
六 、學(xué)生信息修改功能
邏輯結(jié)構(gòu)圖

代碼
def modify():
show()
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as rfile:
student_old = rfile.readlines() # 直接將文本文件的內(nèi)容整行讀取到列表中
else:
print('學(xué)生文件信息不存在!')
student_id = input('請輸入想要修改的學(xué)生的ID: ')
with open(filename, 'w', encoding = 'utf-8') as just_file: # 判斷學(xué)生是否在該系統(tǒng)中
id_list = []
for i in student_old:
d = dict(eval(i))
id_list.append(d['id']) # 將所有學(xué)生的id存放在id_list中
if student_id in id_list: # 要修改的學(xué)生存在時
for item in student_old:
e = dict(eval(item))
if e['id'] == student_id:
print('已找到該名學(xué)生!')
while True:
try:
e['name'] = input('請輸入姓名: ')
e['english'] = input('請輸入英語成績: ')
e['math'] = input('請輸入數(shù)學(xué)成績: ')
e['Python'] = input('請輸入Python成績: ')
except ValueError:
print('數(shù)據(jù)類型輸入錯誤!請重新輸入!')
else:
break # try...except..else: 輸入為出錯時,執(zhí)行else語句
just_file.write(str(e) + '\n')
print('修改成功!')
else:
just_file.write(str(e) + '\n')
else:
answer1 = input('查無此人!,是否執(zhí)行插入操作? (Y/N)')
if answer1 == 'Y' or answer1 == 'y':
insert()
else:
print('結(jié)束當前操作')
answer = input('是否繼續(xù)修改其余學(xué)生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
modify()
elif answer == 'N' or answer == 'n':
print('結(jié)束修改,即將返回主界面..')
else:
print('輸入錯誤,即將返回主界面!')
七 、學(xué)生成績排序
邏輯結(jié)構(gòu)圖

代碼
def sort():
student_new = []
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as sort_file:
student_list = sort_file.readlines() # 無序的學(xué)生信息列表
for item in student_list:
d = dict(eval(item))
student_new.append(d) # 列表元素轉(zhuǎn)化為字典
while True:
try:
sort_choice = int(input('請選擇排序方式: 0:升序 / 1:降序\t'))
except ValueError:
print('輸入的數(shù)據(jù)類型錯誤,請重新輸入')
else:
if sort_choice == 0:
Flag = False
break
elif sort_choice == 1:
Flag = True
break
else:
print('輸入錯誤,只能在0/1中選擇!')
continue
while True:
try:
asc_choice = int(input('請選擇按照哪一門成績進行排序: 英語:0 / 數(shù)學(xué):1 / python:2\t\t'))
except ValueError:
print('輸入的數(shù)據(jù)類型錯誤,請重新輸入')
else:
if asc_choice == 0:
student_new.sort(key = lambda x: int(x['english']), reverse = Flag) # 根據(jù)列表中的元素進行排序
show()
break
elif asc_choice == 1:
student_new.sort(key = lambda x: int(x['math']), reverse = Flag)
show()
break
elif asc_choice == 2:
student_new.sort(key = lambda x: int(x['Python']), reverse = Flag)
show()
break
elif asc_choice == 3:
student_new.sort(key = lambda x: int(x['Python'])+int(x['english'])+int(x['math']), reverse = Flag)
show()
break
else:
print('輸入錯誤,只能在0/1/2中選擇!')
continue
else:
print('學(xué)生信息文件不存在!')
八 、 學(xué)生人數(shù)統(tǒng)計
邏輯結(jié)構(gòu)圖

代碼
def total():
nums = 0
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as t_file:
len_list = t_file.readlines()
for i in range(len(len_list)):
if len_list[i] != '':
nums += 1
print('當前學(xué)生總?cè)藬?shù)為: ', nums)
print('請選擇你想進行的下一步操作: ')
else:
print('暫無學(xué)生信息文件')
九 、顯示所有學(xué)生信息
邏輯結(jié)構(gòu)圖

代碼
def show():
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as show_file:
student_list = show_file.readlines()
if student_list:
print('----全部學(xué)生信息如下----')
print('ID\t\t\t姓名:\t\t英語成績:\t\t數(shù)學(xué)成績:\t\tPython成績:\t\t總成績:')
for item in student_list:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english']) + float(p['math']) + float(p['Python'])))
else:
print('暫無學(xué)生信息!')
else:
print('暫無學(xué)生信息!')
程序打包
在 pycharm 終端 或者 python命令界面, 使用:
pip install PyInstaller
下載python打包程序,下載完成后, 執(zhí)行以下操作:
pyinstaller —F F:\xxxx\xxx\xx\x.py
其中:
- -F 代表將程序打包為單個exe文件,
- F:\xxx\xxx\xx.py 為你的學(xué)生成績管理系統(tǒng)文件的絕對地址
打包完成后,提示信息倒數(shù)第二行:Appending語句后面即為exe文件位置,若無特殊顯示,則在當前目錄父文件下
以上就是python編寫學(xué)生成績管理系統(tǒng)實現(xiàn)八個功能示例的詳細內(nèi)容,更多關(guān)于python編寫學(xué)生成績管理系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pytest使用@pytest.mark.parametrize()實現(xiàn)參數(shù)化的示例代碼
這篇文章主要介紹了pytest使用@pytest.mark.parametrize()實現(xiàn)參數(shù)化,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Python-jenkins 獲取job構(gòu)建信息方式
這篇文章主要介紹了Python-jenkins 獲取job構(gòu)建信息方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python中使用mysql數(shù)據(jù)庫詳細介紹
這篇文章主要介紹了python中使用mysql數(shù)據(jù)庫詳細介紹,本文起講解了安裝mysql、安裝MySQL-python、mysql 的基本操作、python 操作mysql數(shù)據(jù)庫基礎(chǔ)等內(nèi)容,需要的朋友可以參考下2015-03-03
python GUI庫圖形界面開發(fā)之PyQt5窗口類QMainWindow詳細使用方法
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5窗口類QMainWindow詳細使用方法,需要的朋友可以參考下2020-02-02
pytorch快速搭建神經(jīng)網(wǎng)絡(luò)_Sequential操作
這篇文章主要介紹了pytorch快速搭建神經(jīng)網(wǎng)絡(luò)_Sequential操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
把MySQL表結(jié)構(gòu)映射為Python中的對象的教程
這篇文章主要介紹了簡單地把MySQL表結(jié)構(gòu)映射為Python中的對象的方法,用到了Python中的SQLAlchemy庫,需要的朋友可以參考下2015-04-04

