網(wǎng)站首頁 編程語言 正文
本文將利用Python中的字典和列表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
文件的存放格式采用的是python自帶的pickle模塊,需要新建course.txt和student.txt供程序讀寫。
下面是示例代碼
import pickle
# 從文件中讀取學(xué)生信息并返回
def readStudent():
with open("student.txt",'rb') as f:
try:
return pickle.load(f)
#讀取失敗,說明讀取的文件為空,返回空列表即可
except EOFError:
return []
# 保存學(xué)生信息student_list到文件student.txt中
def saveStudent(student_list):
with open("student.txt",'wb') as f:
pickle.dump(student_list, f)
# 增加學(xué)生信息
def addStudent(student_list):
id = input("請(qǐng)輸入要增加的學(xué)生學(xué)號(hào):")
name = input("請(qǐng)輸入要增加的學(xué)生姓名:")
sex = input("請(qǐng)輸入要增加的學(xué)生性別:")
specialty = input("請(qǐng)輸入要增加的學(xué)生專業(yè)班級(jí):")
# 把這4個(gè)數(shù)據(jù)裝入字典student中
student = {"學(xué)號(hào)":id, "姓名":name, "性別":sex, "專業(yè)班級(jí)":specialty}
# 把字典student添加到列表student_list中
student_list.append(student)
# 刪除學(xué)生信息
def deleteStudent(student_list):
id = input("請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):")
for i in range(0, len(student_list)):
# student_list[i]是一個(gè)字典
if student_list[i]["學(xué)號(hào)"] == id:
# 刪除student_list中的第i個(gè)字典
student_list.pop(i)
print("刪除成功!")
return # 結(jié)束函數(shù)
print("刪除失敗,未查詢到該學(xué)生。")
# 修改學(xué)生信息
def modifyStudent(student_list):
id = input("請(qǐng)輸入要修改的學(xué)生學(xué)號(hào):")
for i in range(0, len(student_list)):
if student_list[i]["學(xué)號(hào)"] == id:
id = input("請(qǐng)輸入修改后的學(xué)生學(xué)號(hào):")
name = input("請(qǐng)輸入修改后的姓名:")
sex = input("請(qǐng)輸入修改后的性別:")
specialty = input("請(qǐng)輸入修改后的專業(yè)班級(jí):")
# 把這4個(gè)數(shù)據(jù)裝入字典student中
student = {"學(xué)號(hào)":id, "姓名":name, "性別":sex, "專業(yè)班級(jí)":specialty}
# 用student替換student_list中的第i個(gè)字典
student_list[i] = student
print("修改成功!")
return # 結(jié)束函數(shù)
print("修改失敗,未查詢到該學(xué)生。")
# 顯示所有學(xué)生信息
def showStudent(student_list):
print("學(xué)號(hào)\t\t姓名\t\t性別\t\t專業(yè)班級(jí)")
for student in student_list:
print("%s\t\t%s\t\t%s\t\t%s" %(student["學(xué)號(hào)"], student["姓名"], student["性別"], student["專業(yè)班級(jí)"]))
# 從文件中讀取學(xué)生成績(jī)信息
def readCourse():
with open("course.txt",'rb') as f:
try:
return pickle.load(f)
#讀取失敗,說明讀取的文件為空,返回空列表即可
except EOFError:
return []
# 保存學(xué)生成績(jī)信息course_list到文件course.txt中
def saveCourse(course_list):
with open("course.txt",'wb') as f:
pickle.dump(course_list, f)
# 增加學(xué)生成績(jī)信息
def addCourse(course_list):
id = input("請(qǐng)輸入要增加的學(xué)生學(xué)號(hào):")
english = int(input("請(qǐng)輸入該學(xué)生的英語成績(jī):"))
math = int(input("請(qǐng)輸入該學(xué)生的數(shù)學(xué)成績(jī):"))
computer = int(input("請(qǐng)輸入該學(xué)生的計(jì)算機(jī)成績(jī):"))
chemistry = int(input("請(qǐng)輸入該學(xué)生的化學(xué)成績(jī):"))
PE = int(input("請(qǐng)輸入該學(xué)生的體育成績(jī):"))
# 把這6個(gè)數(shù)據(jù)裝入字典course中
course = {"學(xué)號(hào)":id, "英語":english, "數(shù)學(xué)":math, "計(jì)算機(jī)":computer, "化學(xué)":chemistry, "體育":PE}
# 把字典course添加到列表course_list中
course_list.append(course)
# 刪除學(xué)生成績(jī)信息
def deleteCourse(course_list):
id = input("請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):")
for i in range(0, len(course_list)):
# course_list[i]是一個(gè)字典
if course_list[i]["學(xué)號(hào)"] == id:
# 刪除列表中的第i個(gè)字典
course_list.pop(i)
print("刪除成功!")
return #結(jié)束函數(shù)
print("刪除失敗,未查詢到該學(xué)生成績(jī)。")
# 修改學(xué)生成績(jī)信息
def modifyCourse(course_list):
id = input("請(qǐng)輸入要修改的學(xué)生學(xué)號(hào):")
for i in range(0, len(course_list)):
if course_list[i]["學(xué)號(hào)"] == id:
id = input("請(qǐng)輸入修改后的學(xué)生學(xué)號(hào):")
english = int(input("請(qǐng)輸入修改后的英語成績(jī):"))
math = int(input("請(qǐng)輸入修改后的數(shù)學(xué)成績(jī):"))
computer = int(input("請(qǐng)輸入修改后的計(jì)算機(jī)成績(jī):"))
chemistry = int(input("請(qǐng)輸入修改后的化學(xué)成績(jī):"))
PE = int(input("請(qǐng)輸入修改后的體育成績(jī):"))
# 把這6個(gè)數(shù)據(jù)裝入字典course中
course = {"學(xué)號(hào)":id, "英語":english, "數(shù)學(xué)":math, "計(jì)算機(jī)":computer, "化學(xué)":chemistry, "體育":PE}
# 用dict替換舊的數(shù)據(jù)
course_list[i] = course
print("修改成功!")
return #結(jié)束函數(shù)
print("修改失敗,未查詢到該學(xué)生成績(jī)。")
# 顯示學(xué)生成績(jī)信息
def showCourse(course_list):
print("學(xué)號(hào)\t\t英語\t\t數(shù)學(xué)\t\t計(jì)算機(jī)\t\t化學(xué)\t\t體育")
for course in course_list:
print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["學(xué)號(hào)"], course["英語"], course["數(shù)學(xué)"],
course["計(jì)算機(jī)"], course["化學(xué)"], course["體育"]))
# 通過姓名查詢?cè)撋某煽?jī)信息
def searchScoreByName(student_list, course_list):
name = input("請(qǐng)輸入學(xué)生姓名:")
id = "未查詢到"
for stu in student_list:
if stu["姓名"] == name:
id = stu["學(xué)號(hào)"]
break
if id == "未查詢到":
print("未查詢到該學(xué)生信息。")
return #結(jié)束函數(shù)
for course in course_list:
if course["學(xué)號(hào)"] == id:
print("查詢成功!該學(xué)生信息如下:")
print("學(xué)號(hào)\t\t英語\t\t數(shù)學(xué)\t\t計(jì)算機(jī)\t\t化學(xué)\t\t體育")
print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["學(xué)號(hào)"], course["英語"], course["數(shù)學(xué)"],
course["計(jì)算機(jī)"], course["化學(xué)"], course["體育"]))
return #結(jié)束程序
print("未查詢到該學(xué)生成績(jī)信息。")
# 查詢某門課程得分最高的學(xué)生信息
def searchStudentByHighScore(student_list, course_list):
courseName = input("請(qǐng)輸入課程名稱:")
# 按這門課程冒泡排序
for i in range(0, len(course_list)-1):
for j in range(0, len(course_list)-1-i):
if course_list[j][courseName] < course_list[j+1][courseName]:
course_list[j], course_list[j+1] = course_list[j+1], course_list[j]
id = course_list[0]["學(xué)號(hào)"]
for student in student_list:
if student["學(xué)號(hào)"] == id:
print("查找成功!")
print("學(xué)號(hào)\t\t姓名\t\t性別\t\t專業(yè)班級(jí)")
print("%s\t\t%s\t\t%s\t\t%s" %(student["學(xué)號(hào)"], student["姓名"], student["性別"], student["專業(yè)班級(jí)"]))
return
print("未查找到該學(xué)生信息。")
# 輸出某門課的平均成績(jī)
def outputAverageScore(course_list):
courseName = input("請(qǐng)輸入課程名稱:")
sum = 0
for course in course_list:
sum += course[courseName]
print("%s平均成績(jī)?yōu)?.2f" %(courseName, sum/len(course_list)))
# 主菜單
def menu():
print("1.增加學(xué)生信息 2.增加成績(jī)信息")
print("3.修改學(xué)生信息 4.修改成績(jī)信息")
print("5.刪除學(xué)生信息 6.刪除成績(jī)信息")
print("7.顯示學(xué)生信息 8.顯示成績(jī)信息")
print("9.通過姓名查詢?cè)撋某煽?jī)信息")
print("10.查詢某門課程得分最高的學(xué)生信息")
print("11.輸出某門課的平均成績(jī)")
print("0.保存并退出")
# 主函數(shù)
def main():
student_list = readStudent()
course_list = readCourse()
flag = True
while flag:
menu()
choose = input("請(qǐng)輸入選項(xiàng):")
while True:
# 增加學(xué)生信息
if choose == '1':
addStudent(student_list)
break
# 增加成績(jī)信息
elif choose == '2':
addCourse(course_list)
break
# 修改學(xué)生信息
elif choose == '3':
modifyStudent(student_list)
break
# 修改成績(jī)信息
elif choose == '4':
modifyCourse(course_list)
break
# 刪除學(xué)生信息
elif choose == '5':
deleteStudent(student_list)
break
# 刪除成績(jī)信息
elif choose == '6':
deleteCourse(course_list)
break
# 顯示學(xué)生信息
elif choose == '7':
showStudent(student_list)
break
# 顯示成績(jī)信息
elif choose == '8':
showCourse(course_list)
break
# 通過姓名查詢?cè)撋某煽?jī)信息
elif choose == '9':
searchScoreByName(student_list, course_list)
break
# 查詢某門課程得分最高的學(xué)生信息
elif choose == '10':
searchStudentByHighScore(student_list, course_list)
break
# 輸出某門課的平均成績(jī)
elif choose == '11':
outputAverageScore(course_list)
break
# 保存數(shù)據(jù)并退出
elif choose == '0':
saveStudent(student_list)
saveCourse(course_list)
flag = False
break
else:
choose = input("輸入錯(cuò)誤, 請(qǐng)重新輸入:")
if __name__=='__main__':
main()
原文鏈接:https://blog.csdn.net/qq_42276781/article/details/125525012
相關(guān)推薦
- 2022-06-19 Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解_云其它
- 2023-11-20 帶寬單位是什么?帶寬單位詳解?帶寬單位如何換算?
- 2022-08-10 C++中string字符串分割函數(shù)split()的4種實(shí)現(xiàn)方法_C 語言
- 2022-06-07 Python接口自動(dòng)化之文件上傳/下載接口詳解_python
- 2022-06-28 Python技法之簡(jiǎn)單遞歸下降Parser的實(shí)現(xiàn)方法_python
- 2022-08-05 C語言簡(jiǎn)明介紹指針的使用_C 語言
- 2022-08-01 MongoDB基礎(chǔ)之集合操作_MongoDB
- 2022-02-28 Error: clean-webpack-plugin only accepts an option
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支