Python題目:學生信息管理系統
選用list、tuple、dictionary或map等數據結構,存儲X個學生的三門課的成績(機器學習、Python程序設計、研究生英語),並實現以下功能:
- 1.添加學生信息
- 2.修改學生信息
- 3.刪除學生
- 4.添加學生的成績
- 5.修改學生成績
- 6.按姓名或者學號查找學生,顯示學生信息及三門課的成績,以及排名
- 7.學生成績統計(每門課的平均分、最高分、最低分)
現在把另一個高級版也放出來了,擁有圖像界面顯示,MySQL數據庫操作:https://blog.csdn.net/kdongyi/article/details/103170876 -2019/11/20
stu_number = {
"182085211002":"張三",
"182085211003":"a",
"182085211004":"b",
"182085211005":"a",
"182085211006":"d",
"182085211007":"張三",
"182085211008":"f",
}
stu_info = [
["182085211002","張三","男","漢族","100","99","98"],
["182085211003","a","男","漢族","60","99","98"],
["182085211004","b","男","漢族","100","88","98"],
["182085211005","a","男","漢族","100","99","45"],
["182085211006","d","男","漢族","100","75","98"],
["182085211007","張三","男","漢族","100","75","98"],
["182085211008","f","男","漢族","50","60","60"],
]
rank = {}
# 添加學生信息
def add_stu(stu_id):
stu = []
if stu_id in stu_number.keys(): # 判斷'stu_num'是否存在於stu_number的鍵中
print('該學生已存在,請勿重複添加!')
else:
stu_name = input("請輸入學生姓名:")
stu_number[stu_id] = stu_name
stu.append(stu_id)
stu.append(stu_name)
stu.append(input("請輸入學生性別:"))
stu.append(input("請輸入學生民族:"))
stu.append("無")
stu.append("無")
stu.append("無")
stu_info.append(stu)
print_stu(stu_id)
# 修改學生信息
def modif_stu(stu):
if stu in stu_number.keys(): # 判斷'stu_num'是否存在於stu_number的鍵中
print_stu(stu)
print("該學生信息如上,請輸入要修改的項目:")
while True:
cmd = input("1、姓名 2、性別 3、民族 (輸入q返回上級菜單):")
if cmd == 'q':
break
elif cmd == '1':
index = find_stu(stu)
for i in index:
stu_info[i][1] = input("請輸入修改後的姓名:")
elif cmd == '2':
index = find_stu(stu)
for i in index:
stu_info[i][2] = input("請輸入修改後的性別:")
elif cmd == '3':
index = find_stu(stu)
for i in index:
stu_info[i][3] = input("請輸入修改後的民族:")
print("修改後的信息如下:")
print_stu(stu)
else:
print('該學生不存在,請添加或重新輸入!')
# 刪除學生
def delete_stu(stu):
if stu in stu_number.keys(): # 判斷'stu_num'是否存在於stu_number的鍵中
print_stu(stu)
cmd = input("該學生信息如上,確定是否刪除?(Y/N):")
if cmd == 'Y':
index = find_stu(stu)
for i in index:
del stu_info[i]
print("該學生已刪除!")
else:
print('該學生不存在,請添加或重新輸入!')
# 添加學生成績
def add_stu_val(stu_id):
if stu_id in stu_number.keys(): # 判斷'stu_num'是否存在於stu_number的鍵中
print_stu(stu_id)
print("該學生信息如上")
index = find_stu(stu_id)
for i in index:
stu_info[i][4] = input("請輸入機器學習成績:")
stu_info[i][5] = input("請輸入Python程序設計成績:")
stu_info[i][6] = input("請輸入研究生英語:")
print("添加成績結果如下:")
print_stu(stu)
else:
print('該學生不存在,請添加或重新輸入!')
# 修改學生成績
def modif_stu_val(stu):
if stu in stu_number.keys(): # 判斷'stu_num'是否存在於stu_number的鍵中
print_stu(stu)
print("該學生信息如上,請輸入要修改的課程:")
while True:
cmd = input("1、機器學習 2、Python程序設計 3、研究生英語 (輸入q返回上級菜單):")
if cmd == 'q':
break
elif cmd == '1':
index = find_stu(stu)
for i in index:
stu_info[i][4] = input("請輸入修改後的成績:")
elif cmd == '2':
index = find_stu(stu)
for i in index:
stu_info[i][5] = input("請輸入修改後的成績:")
elif cmd == '3':
index = find_stu(stu)
for i in index:
stu_info[i][6] = input("請輸入修改後的成績:")
print("修改後的信息如下:")
print_stu(stu)
else:
print('該學生不存在,請添加或重新輸入!')
# 排名
def ranking():
to_rank = {}
for stu in stu_info:
if stu[4]=='無' or stu[5]=='無' or stu[6]=='無':
to_rank[stu[0]] = 0
rank[stu[0]] = '無'
else:
to_rank[stu[0]] = (int(stu[4])+int(stu[5])+int(stu[6]))/3
ranked = sorted(to_rank.items(),key = lambda x:x[1],reverse = True)
num = 1
re_num = 0 #分一樣
for i in range(len(ranked)):
if i!=0:
if ranked[i][1]==ranked[i-1][1]: #考慮分數一樣的情況 排名相同
re_num+=1
rank[ranked[i][0]] = num
else:
num = num + 1 + re_num #分數不一樣 排名加一 如果有重複排名則加上
rank[ranked[i][0]] = (num + re_num)
re_num = 0
else: #存第一名
rank[ranked[i][0]] = num
# 按姓名或者學號查找學生,返回值爲列表 列表裏的值爲該學生數據位置
# 如果有重名學生,則返回在列表返回多個學生
def find_stu(stu):
stu_index = []
for i in stu_info:
try:
if i.index(stu) != None: #如果能查找到
stu_index.append(stu_info.index(i))
except:pass
return stu_index
# 根據姓名或者學號顯示學生信息及三門課的成績、排名
def print_stu(stu):
ranking() # 排名
stu_index = find_stu(stu)
if len(stu_index) == 0:
print("無此學生,請覈對後重新輸入!")
for i in stu_index:
the_stu = stu_info[i]
print("\t姓名:",the_stu[1])
print("\t學號:", the_stu[0])
print("\t性別:", the_stu[2])
print("\t民族:", the_stu[3])
print("\t機器學習成績:", the_stu[4])
print("\tPython程序設計成績:", the_stu[5])
print("\t研究生英語成績::", the_stu[6])
print("\t排名::", rank[the_stu[0]])
print("--------------------------")
def statistics():
machine_learning_max = 0
python_max = 0
english_max = 0
machine_learning_min = 100
python_min = 100
english_min = 100
machine_learning = 0
python = 0
english = 0
num = 0
for stu in stu_info:
if stu[4]!='無' and stu[5]!='無' and stu[6]!='無':
num += 1
machine_learning += float(stu[4])
python += float(stu[5])
english += float(stu[6])
if float(stu[4]) > machine_learning_max: machine_learning_max = float(stu[4])
if float(stu[4]) < machine_learning_min: machine_learning_min = float(stu[4])
if float(stu[5]) > python_max: python_max = float(stu[5])
if float(stu[5]) < python_min: python_min = float(stu[5])
if float(stu[6]) > english_max: english_max = float(stu[6])
if float(stu[6]) < english_min: english_min = float(stu[6])
machine_learning = machine_learning/num
python = python/num
english = english/num
print("學生成績統計如下:")
print("機器學習:")
print("\t平均分:%.2f,最高分:%.2f,最低分:%.2f" % (machine_learning,machine_learning_max,machine_learning_min))
print("Python程序設計:")
print("\t平均分:%.2f,最高分:%.2f,最低分:%.2f" % (python, python_max, python_min))
print("研究生英語:")
print("\t平均分:%.2f,最高分:%.2f,最低分:%.2f" % (english, english_max, english_min))
while True:
print("--------------------------")
print("請輸入以下命令進行操作:")
print("\t1 添加學生信息")
print("\t2 修改學生信息")
print("\t3 刪除學生")
print("\t4 添加學生的成績")
print("\t5 修改學生成績")
print("\t6 按姓名或者學號查找學生,顯示學生信息及三門課的成績,以及排名")
print("\t7 學生成績統計")
print("\texit 退出系統!")
cmd = input("請輸入命令:")
if cmd == 'exit': # 退出系統!
break
elif cmd == '1': # 添加學生信息
print("--------------------------")
while True:
stu_id = input("請輸入要添加學號(輸入q返回上級菜單):")
if stu_id == 'q':
break
add_stu(stu_id)
elif cmd == '2': # 修改學生信息
print("--------------------------")
while True:
stu = input("請輸入要修改的學生學號(輸入q返回上級菜單):")
if stu == 'q':
break
modif_stu(stu)
elif cmd == '3': # 刪除學生
print("--------------------------")
while True:
stu = input("請輸入要刪除的學生學號(輸入q返回上級菜單):")
if stu == 'q':
break
delete_stu(stu)
elif cmd == '4': # 添加學生的成績
print("--------------------------")
while True:
stu = input("請輸入要添加成績的學號(輸入q返回上級菜單):")
if stu == 'q':
break
add_stu_val(stu)
elif cmd == '5': # 修改學生成績
print("--------------------------")
while True:
stu = input("請輸入要修改成績的學號(輸入q返回上級菜單):")
if stu == 'q':
break
modif_stu_val(stu)
elif cmd == '6': # 按姓名或者學號查找學生,顯示學生信息及三門課的成績,以及排名
ranking() # 排名
print("--------------------------")
while True:
stu = input("請輸入要查詢的學生姓名或學號(輸入q返回上級菜單):")
if stu == 'q':
break
print_stu(stu)
elif cmd == '7': # 學生成績統計
print("--------------------------")
statistics()