Python題目:學生信息管理系統

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章