本文實例為大家分享了python實現學生信息管理系統的具體代碼,供大家參考,具體內容如下
簡易學生信息管理系統主要功能有
1 錄入學生信息
2 查找學生信息
3 刪除學生信息
4 修改學生信息
5 排序
6 統計學生總人數
7 顯示所有學生信息
0 退出系統
系統運行效果
主菜單的代碼方法:
# Author: dry
# 開發時間:2019/9/11
# 開發工具:PyCharm
import re # 導入正則表達式模塊
import os # 導入操作系統模塊
filename = "student.txt" # 學生信息保存文件
def menu():
# 輸出菜單
print('''
---------------學生信息管理系統------------
==================功能菜單================
1 錄入學生信息
2 查找學生信息
3 刪除學生信息
4 修改學生信息
5 排序
6 統計學生總人數
7 顯示所有學生信息
0 退出系統
=======================================
說明:通過數字選擇菜單
=======================================
''')
系統主方法:
def main():
ctrl = True # 標記是否退出系統
while (ctrl):
menu() # 顯示菜單
option = input("請選擇:") # 選擇菜單項
option_str = re.sub("\D", "", option) # 提取數字
if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
option_int = int(option_str)
if option_int == 0: # 退出系統
print('您已退出學生成績管理系統!')
ctrl = False
elif option_int == 1: # 錄入學生成績信息
insert()
elif option_int == 2: # 查找學生成績信息
search()
elif option_int == 3: # 刪除學生成績信息
delete()
elif option_int == 4: # 修改學生成績信息
modify()
elif option_int == 5: # 排序
sort()
elif option_int == 6: # 統計學生總數
total()
elif option_int == 7: # 顯示所有學生信息
show()
錄入學生信息方法:
'''錄入學生信息'''
def insert():
studentList = [] # 保存學生信息的列表
mark = True # 是否繼續添加
while mark:
id = input("請輸入學生ID(如1001):")
if not id:
break
name = input("請輸入名字:")
if not name:
break
try:
english = int(input("請輸入英語成績:"))
python = int(input("請輸入python成績:"))
c = int(input("請輸入C語言成績:"))
except:
print("輸入無效,不是整型數值,請重新輸入信息")
continue
# 將輸入的學生信息保存到字典
student = {"id": id, "name": name, "english": english, "python": python, "c": c}
studentList.append(student) # 將學生字典添加到列表中
inputList = input("是否繼續添加?(y/n):")
if inputList == 'y': # 繼續添加
mark = True
else:
mark = False
save(studentList) # 將學生信息保存到文件
print("學生信息錄入完畢!!!")
保存學生信息方法:
'''將學生信息保存到文件'''
def save(student):
try:
student_txt = open(filename, 'a') # 以追加模式打開
except Exception as e:
student_txt = open(filename, 'w') # 文件不存在,創建文件并打開
for info in student:
student_txt.write(str(info) + "\n") # 執行存儲,添加換行符
student_txt.close() # 關閉文件
查詢學生信息方法:
'''查詢學生信息'''
def search():
mark = True
student_query = []
while mark:
id = ""
name = ""
if os.path.exists(filename):
mode = input("按ID查詢輸入1:按姓名查詢輸入2:")
if mode == "1":
id = input("請輸入學生ID:")
elif mode == "2":
name = input("請輸入學生姓名:")
else:
print("您輸入有誤,請重新輸入!")
search()
with open(filename, "r") as file:
student = file.readlines()
for list in student:
d = dict(eval(list))
if id is not "":
if d['id'] == id:
student_query.append(d)
elif name is not "":
if d['name'] == name:
student_query.append(d)
show_student(student_query)
student_query.clear()
inputMark = input("是否繼續查詢?(y/n):")
if inputMark == "y":
mark = True
else:
mark = False
else:
print("暫未保存數據信息...")
return
顯示學生信息方法
'''將保存在列表中的學生信息顯示出來'''
def show_student(studentList):
if not studentList:
print("無效的數據")
return
format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:10}"
print(format_title.format("ID", "名字", "英語成績", "python成績", "C語言成績", "總成績"))
format_data = "{:^6}{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:10}"
for info in studentList:
print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
str(info.get("c")),
str(info.get("english") + info.get("python") + info.get("c")).center(12)))
刪除學生信息方法:
'''刪除學生信息'''
def delete():
mark = True # 標記是否循環
while mark:
studentId = input("請輸入要刪除的學生ID:")
if studentId is not "": # 判斷要刪除的學生ID是否存在
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
else:
student_old = []
ifdel = False # 標記是否刪除
if student_old: # 如果存在學生信息
with open(filename, 'w') as wfile:
d = {} # 定義空字典
for list in student_old:
d = dict(eval(list)) # 字符串轉字典
if d['id'] != studentId:
wfile.write(str(d) + "\n") # 將一條信息寫入文件
else:
ifdel = True # 標記已經刪除
if ifdel:
print("ID為%s的學生信息已經被刪除..." % studentId)
else:
print("沒有找到ID為%s的學生信息..." % studentId)
else:
print("不存在學生信息")
break
show() # 顯示全部學生信息
inputMark = input("是否繼續刪除?(y/n):")
if inputMark == "y":
mark = True # 繼續刪除
else:
mark = False # 退出刪除學生信息操作
修改學生信息方法:
'''修改學生信息'''
def modify():
show() # 顯示全部學生信息
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
else:
return
studentid = input("請輸入要修改的學生ID:")
with open(filename, 'w') as wfile:
for student in student_old:
d = dict(eval(student))
if d['id'] == studentid:
print("找到了這名學生,可以修改他的信息")
while True: # 輸入要修改的信息
try:
d["name"] = input("請輸入姓名:")
d["english"] = int(input("請輸入英語成績:"))
d["python"] = int(input("請輸入python成績:"))
d['c'] = int(input("請輸入C語言成績:"))
except:
print("您輸入有誤,請重新輸入!")
else:
break
student = str(d) # 將字典轉為字符串
wfile.write(student + "\n") # 將修改信息寫入到文件
print("修改成功")
else:
wfile.write(student) # 將未修改的信息寫入文件
mark = input("是否繼續修改其他學生信息?(y/n):")
if mark == "y":
modify()
學生信息排序方法:
'''排序'''
def sort():
show()
if os.path.exists(filename):
with open(filename, 'r') as file:
student_old = file.readlines()
student_new = []
for list in student_old:
d = dict(eval(list))
student_new.append(d)
else:
return
ascORdesc = input("請選擇(0升序;1降序)")
if ascORdesc == "0":
ascORdescBool = False # 標記變量,為False時表示升序,為True時表示降序
elif ascORdesc == "1":
ascORdescBool = True
else:
print("您輸入的信息有誤,請重新輸入!")
sort()
mode = input("請選擇排序方式(1按英語成績排序;2按python成績排序;3按C語言成績排序;0按總成績排序):")
if mode == "1": # 按英語成績排序
student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
elif mode == "2": # 按python成績排序
student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
elif mode == "3": # 按C語言成績排序
student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
elif mode == "0": # 按總成績排序
student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
else:
print("您的輸入有誤,請重新輸入!")
sort()
show_student(student_new) # 顯示排序結果
統計學生總數方法:
'''統計學生總數'''
def total():
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
if student_old:
print("一共有%d名學生!" % len(student_old))
else:
print("還沒有錄入學生信息")
else:
print("暫未保存數據信息")
顯示所有學生信息方法:
'''顯示所有學生信息'''
def show():
student_new = []
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
for list in student_old:
student_new.append(eval(list))
if student_new:
show_student(student_new)
else:
print("暫未保存數據信息")
開始函數:
if __name__ == '__main__':
main()
完整代碼如下:
# Author: dry
# 開發時間:2019/9/11
# 開發工具:PyCharm
import re # 導入正則表達式模塊
import os # 導入操作系統模塊
filename = "student.txt" # 學生信息保存文件
def menu():
# 輸出菜單
print('''
---------------學生信息管理系統------------
==================功能菜單================
1 錄入學生信息
2 查找學生信息
3 刪除學生信息
4 修改學生信息
5 排序
6 統計學生總人數
7 顯示所有學生信息
0 退出系統
=======================================
說明:通過數字選擇菜單
=======================================
''')
def main():
ctrl = True # 標記是否退出系統
while (ctrl):
menu() # 顯示菜單
option = input("請選擇:") # 選擇菜單項
option_str = re.sub("\D", "", option) # 提取數字
if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
option_int = int(option_str)
if option_int == 0: # 退出系統
print('您已退出學生成績管理系統!')
ctrl = False
elif option_int == 1: # 錄入學生成績信息
insert()
elif option_int == 2: # 查找學生成績信息
search()
elif option_int == 3: # 刪除學生成績信息
delete()
elif option_int == 4: # 修改學生成績信息
modify()
elif option_int == 5: # 排序
sort()
elif option_int == 6: # 統計學生總數
total()
elif option_int == 7: # 顯示所有學生信息
show()
'''錄入學生信息'''
def insert():
studentList = [] # 保存學生信息的列表
mark = True # 是否繼續添加
while mark:
id = input("請輸入學生ID(如1001):")
if not id:
break
name = input("請輸入名字:")
if not name:
break
try:
english = int(input("請輸入英語成績:"))
python = int(input("請輸入python成績:"))
c = int(input("請輸入C語言成績:"))
except:
print("輸入無效,不是整形數值,請重新輸入信息")
continue
# 將輸入的學生信息保存到字典
student = {"id": id, "name": name, "english": english, "python": python, "c": c}
studentList.append(student) # 將學生字典添加到列表中
inputList = input("是否繼續添加?(y/n):")
if inputList == 'y': # 繼續添加
mark = True
else:
mark = False
save(studentList) # 將學生信息保存到文件
print("學生信息錄入完畢!!!")
'''將學生信息保存到文件'''
def save(student):
try:
student_txt = open(filename, 'a') # 以追加模式打開
except Exception as e:
student_txt = open(filename, 'w') # 文件不存在,創建文件并打開
for info in student:
student_txt.write(str(info) + "\n") # 執行存儲,添加換行符
student_txt.close() # 關閉文件
'''查詢學生信息'''
def search():
mark = True
student_query = []
while mark:
id = ""
name = ""
if os.path.exists(filename):
mode = input("按ID查詢輸入1:按姓名查詢輸入2:")
if mode == "1":
id = input("請輸入學生ID:")
elif mode == "2":
name = input("請輸入學生姓名:")
else:
print("您輸入有誤,請重新輸入!")
search()
with open(filename, "r") as file:
student = file.readlines()
for list in student:
d = dict(eval(list))
if id is not "":
if d['id'] == id:
student_query.append(d)
elif name is not "":
if d['name'] == name:
student_query.append(d)
show_student(student_query)
student_query.clear()
inputMark = input("是否繼續查詢?(y/n):")
if inputMark == "y":
mark = True
else:
mark = False
else:
print("暫未保存數據信息...")
return
'''將保存在列表中的學生信息顯示出來'''
def show_student(studentList):
if not studentList:
print("無效的數據")
return
format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:10}"
print(format_title.format("ID", "名字", "英語成績", "python成績", "C語言成績", "總成績"))
format_data = "{:^6}{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:10}"
for info in studentList:
print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
str(info.get("c")),
str(info.get("english") + info.get("python") + info.get("c")).center(12)))
'''刪除學生信息'''
def delete():
mark = True # 標記是否循環
while mark:
studentId = input("請輸入要刪除的學生ID:")
if studentId is not "": # 判斷要刪除的學生ID是否存在
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
else:
student_old = []
ifdel = False # 標記是否刪除
if student_old: # 如果存在學生信息
with open(filename, 'w') as wfile:
d = {} # 定義空字典
for list in student_old:
d = dict(eval(list)) # 字符串轉字典
if d['id'] != studentId:
wfile.write(str(d) + "\n") # 將一條信息寫入文件
else:
ifdel = True # 標記已經刪除
if ifdel:
print("ID為%s的學生信息已經被刪除..." % studentId)
else:
print("沒有找到ID為%s的學生信息..." % studentId)
else:
print("不存在學生信息")
break
show() # 顯示全部學生信息
inputMark = input("是否繼續刪除?(y/n):")
if inputMark == "y":
mark = True # 繼續刪除
else:
mark = False # 退出刪除學生信息操作
'''修改學生信息'''
def modify():
show() # 顯示全部學生信息
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
else:
return
studentid = input("請輸入要修改的學生ID:")
with open(filename, 'w') as wfile:
for student in student_old:
d = dict(eval(student))
if d['id'] == studentid:
print("找到了這名學生,可以修改他的信息")
while True: # 輸入要修改的信息
try:
d["name"] = input("請輸入姓名:")
d["english"] = int(input("請輸入英語成績:"))
d["python"] = int(input("請輸入python成績:"))
d['c'] = int(input("請輸入C語言成績:"))
except:
print("您輸入有誤,請重新輸入!")
else:
break
student = str(d) # 將字典轉為字符串
wfile.write(student + "\n") # 將修改信息寫入到文件
print("修改成功")
else:
wfile.write(student) # 將未修改的信息寫入文件
mark = input("是否繼續修改其他學生信息?(y/n):")
if mark == "y":
modify()
'''排序'''
def sort():
show()
if os.path.exists(filename):
with open(filename, 'r') as file:
student_old = file.readlines()
student_new = []
for list in student_old:
d = dict(eval(list))
student_new.append(d)
else:
return
ascORdesc = input("請選擇(0升序;1降序)")
if ascORdesc == "0":
ascORdescBool = False # 標記變量,為False時表示升序,為True時表示降序
elif ascORdesc == "1":
ascORdescBool = True
else:
print("您輸入的信息有誤,請重新輸入!")
sort()
mode = input("請選擇排序方式(1按英語成績排序;2按python成績排序;3按C語言成績排序;0按總成績排序):")
if mode == "1": # 按英語成績排序
student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
elif mode == "2": # 按python成績排序
student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
elif mode == "3": # 按C語言成績排序
student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
elif mode == "0": # 按總成績排序
student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
else:
print("您的輸入有誤,請重新輸入!")
sort()
show_student(student_new) # 顯示排序結果
'''統計學生總數'''
def total():
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
if student_old:
print("一共有%d名學生!" % len(student_old))
else:
print("還沒有錄入學生信息")
else:
print("暫未保存數據信息")
'''顯示所有學生信息'''
def show():
student_new = []
if os.path.exists(filename):
with open(filename, 'r') as rfile:
student_old = rfile.readlines()
for list in student_old:
student_new.append(eval(list))
if student_new:
show_student(student_new)
else:
print("暫未保存數據信息")
if __name__ == '__main__':
main()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

