《學(xué)生信息管理系統(tǒng)》
學(xué)習(xí)python時(shí)自己做的小東西,供大家學(xué)習(xí)參考。源碼放到最后。
運(yùn)行《學(xué)生信息管理系統(tǒng)》即可進(jìn)入如圖1所示的系統(tǒng)主界面。在該界面中可以選擇要使用功能對(duì)應(yīng)的菜單進(jìn)行不同的操作。在選擇功能菜單時(shí),有兩種方法,一種是輸入1,另一種是按下鍵盤(pán)上的↑或↓方向鍵進(jìn)行選擇。這兩種方法的結(jié)果是一樣的,所以使用哪種方法都可以。
下面是功能展示:圖1 系統(tǒng)主界面
具體的操作步驟如下:
(1)錄入學(xué)生信息。在“請(qǐng)選擇:”右側(cè)光標(biāo)所在位置,輸入數(shù)字1,并按下鍵,系統(tǒng)將分別提示輸入學(xué)生編號(hào)、學(xué)生名字、英語(yǔ)成績(jī)、Python成績(jī)和C語(yǔ)言成績(jī),輸入正確的信息后,系統(tǒng)會(huì)提示是否繼續(xù)添加,如圖2所示。輸入y,系統(tǒng)將會(huì)再次提示用戶(hù)輸入用戶(hù)信息,輸入n,則將錄入學(xué)生信息保存到文件中。
圖2 錄入一條學(xué)生信息
(2)查找學(xué)生信息。在功能菜單上輸入功能編號(hào)2,并且按下鍵,系統(tǒng)將要求用戶(hù)選擇是按學(xué)生編號(hào)查詢(xún)還是按學(xué)生姓名查詢(xún),如果用戶(hù)輸入1,則要求用戶(hù)輸入學(xué)生ID,表示按學(xué)生編號(hào)查詢(xún),輸入想要查詢(xún)的學(xué)生編號(hào),系統(tǒng)查找該學(xué)生信息,如果找到則顯示,效果如圖3所示,否則顯示“(o@.@o) 無(wú)數(shù)據(jù)信息 (o@.@o)”,效果如圖4所示。最后提示是否繼續(xù)查找輸入y,系統(tǒng)將再次提示用戶(hù)選擇查找方式,輸入n,則退出查找學(xué)生信息功能。
圖3 通過(guò)學(xué)生ID查找學(xué)生信息
圖4 未找到符合條件的學(xué)生信息
(3)刪除學(xué)生信息。在功能菜單上輸入功能編號(hào)3,并且按下鍵,系統(tǒng)將提示輸入要?jiǎng)h除學(xué)生的編號(hào),輸入相應(yīng)的學(xué)生ID后,系統(tǒng)會(huì)直接從文件中刪除該學(xué)生信息,并且提示是否繼續(xù)刪除,如圖5所示。輸入y,系統(tǒng)將會(huì)再次提示用戶(hù)輸入要?jiǎng)h除的學(xué)生編號(hào),輸入n,則退出刪除功能。
圖5 刪除一條學(xué)生信息
(4)修改學(xué)生信息。在功能菜單上輸入功能編號(hào)4,并且按下鍵,系統(tǒng)首先顯示全部學(xué)生信息列表,再提示輸入要修改學(xué)生的編號(hào),輸入相應(yīng)的學(xué)生ID后,系統(tǒng)會(huì)在文件中查找該學(xué)生信息,如果找到,則提示修改相應(yīng)的信息,否則不修改。最后提示是否繼續(xù)修改,如圖6所示。輸入y,系統(tǒng)將會(huì)再次提示用戶(hù)輸入要修改的學(xué)生編號(hào),輸入n,則退出修改功能。
圖6 修改一條學(xué)生信息
(5)排序。在功能菜單上輸入功能編號(hào)5,并且按下鍵,系統(tǒng)將先顯示不排序的全部學(xué)生信息,然后提示選擇排序方式,這里輸入2,再選擇降序排列“1”,將對(duì)學(xué)生信息按Python成績(jī)降序排列并顯示,如圖7所示。
圖7 按Python降序排序
(6)統(tǒng)計(jì)學(xué)生總?cè)藬?shù)。在功能菜單上選擇“6 統(tǒng)計(jì)學(xué)生總?cè)藬?shù)”菜單項(xiàng),并且按下鍵,系統(tǒng)將自動(dòng)統(tǒng)計(jì)出學(xué)生總?cè)藬?shù)并顯示,如圖8所示。
圖8 統(tǒng)計(jì)學(xué)生總?cè)藬?shù)
(7)顯示所有學(xué)生信息。在功能菜單上選擇“7 顯示所有學(xué)生信息”菜單項(xiàng),并且按下鍵,系統(tǒng)將獲取并顯示全部學(xué)生信息,如圖9所示。
圖9 顯示所有學(xué)生信息
(8)退出系統(tǒng)。在功能菜單上輸入功能編號(hào)5,并且按下鍵即可退出系統(tǒng),如圖10所示。
圖10 退出系統(tǒng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-775177.html
def menu():
# 輸出菜單
print('''
╔———————學(xué)生信息管理系統(tǒng)————————╗
│ │
│ =============== 功能菜單 =============== │
│ │
│ 1 錄入學(xué)生信息 │
│ 2 查找學(xué)生信息 │
│ 3 刪除學(xué)生信息 │
│ 4 修改學(xué)生信息 │
│ 5 排序 │
│ 6 統(tǒng)計(jì)學(xué)生總?cè)藬?shù) │
│ 7 顯示所有學(xué)生信息 │
│ 0 退出系統(tǒng) │
│ ========================================== │
│ 說(shuō)明:通過(guò)數(shù)字或↑↓方向鍵選擇菜單 │
╚———————————————————————╝
''')
def main():
ctrl = True # 標(biāo)記是否退出系統(tǒng)
while (ctrl):
menu() # 顯示菜單
option = input("請(qǐng)選擇:") # 選擇菜單項(xiàng)
option_str = re.sub("\D", "", option) # 提取數(shù)字
if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
option_int = int(option_str)
if option_int == 0: # 退出系統(tǒng)
print('您已退出學(xué)生成績(jī)管理系統(tǒng)!')
ctrl = False
elif option_int == 1: # 錄入學(xué)生成績(jī)信息
insert()
elif option_int == 2: # 查找學(xué)生成績(jī)信息
search()
elif option_int == 3: # 刪除學(xué)生成績(jī)信息
delete()
elif option_int == 4: # 修改學(xué)生成績(jī)信息
modify()
elif option_int == 5: # 排序
sort()
elif option_int == 6: # 統(tǒng)計(jì)學(xué)生總數(shù)
total()
elif option_int == 7: # 顯示所有學(xué)生信息
show()
'''1 錄入學(xué)生信息'''
def insert():
stdentList = [] # 保存學(xué)生信息的列表
mark = True # 是否繼續(xù)添加
while mark:
id = input("請(qǐng)輸入ID(如 1001):")
if not id: # ID為空,跳出循環(huán)
break
name = input("請(qǐng)輸入名字:")
if not name: # 名字為空,跳出循環(huán)
break
try:
english = int(input("請(qǐng)輸入英語(yǔ)成績(jī):"))
python = int(input("請(qǐng)輸入Python成績(jī):"))
c = int(input("請(qǐng)輸入C語(yǔ)言成績(jī):"))
except:
print("輸入無(wú)效,不是整型數(shù)值....重新錄入信息")
continue
stdent = {"id": id, "name": name, "english": english, "python": python, "c": c} # 將輸入的學(xué)生信息保存到字典
stdentList.append(stdent) # 將學(xué)生字典添加到列表中
inputMark = input("是否繼續(xù)添加?(y/n):")
if inputMark == "y": # 繼續(xù)添加
mark = True
else: # 不繼續(xù)添加
mark = False
save(stdentList) # 將學(xué)生信息保存到文件
print("學(xué)生信息錄入完畢!??!")
# 將學(xué)生信息保存到文件
def save(student):
try:
students_txt = open(filename, "a") # 以追加模式打開(kāi)
except Exception as e:
students_txt = open(filename, "w") # 文件不存在,創(chuàng)建文件并打開(kāi)
for info in student:
students_txt.write(str(info) + "\n") # 按行存儲(chǔ),添加換行符
students_txt.close() # 關(guān)閉文件
'''2 查找學(xué)生成績(jī)信息'''
def search():
mark = True
student_query = [] # 保存查詢(xún)結(jié)果的學(xué)生列表
while mark:
id = ""
name = ""
if os.path.exists(filename): # 判斷文件是否存在
mode = input("按ID查輸入1;按姓名查輸入2:")
if mode == "1":
id = input("請(qǐng)輸入學(xué)生ID:")
elif mode == "2":
name = input("請(qǐng)輸入學(xué)生姓名:")
else:
print("您的輸入有誤,請(qǐng)重新輸入!")
search() # 重新查詢(xún)
with open(filename, 'r') as file: # 打開(kāi)文件
student = file.readlines() # 讀取全部?jī)?nèi)容
for list in student:
d = dict(eval(list)) # 字符串轉(zhuǎn)字典
if id is not "": # 判斷是否按ID查
if d['id'] == id:
student_query.append(d) # 將找到的學(xué)生信息保存到列表中
elif name is not "": # 判斷是否按姓名查
if d['name'] == name:
student_query.append(d) # 將找到的學(xué)生信息保存到列表中
show_student(student_query) # 顯示查詢(xún)結(jié)果
student_query.clear() # 清空列表
inputMark = input("是否繼續(xù)查詢(xún)?(y/n):")
if inputMark == "y":
mark = True
else:
mark = False
else:
print("暫未保存數(shù)據(jù)信息...")
return
'''3 刪除學(xué)生成績(jī)信息'''
def delete():
mark = True # 標(biāo)記是否循環(huán)
while mark:
studentId = input("請(qǐng)輸入要?jiǎng)h除的學(xué)生ID:")
if studentId is not "": # 判斷要?jiǎng)h除的學(xué)生是否存在
if os.path.exists(filename): # 判斷文件是否存在
with open(filename, 'r') as rfile: # 打開(kāi)文件
student_old = rfile.readlines() # 讀取全部?jī)?nèi)容
else:
student_old = []
ifdel = False # 標(biāo)記是否刪除
if student_old: # 如果存在學(xué)生信息
with open(filename, 'w') as wfile: # 以寫(xiě)方式打開(kāi)文件
d = {} # 定義空字典
for list in student_old:
d = dict(eval(list)) # 字符串轉(zhuǎn)字典
if d['id'] != studentId:
wfile.write(str(d) + "\n") # 將一條學(xué)生信息寫(xiě)入文件
else:
ifdel = True # 標(biāo)記已經(jīng)刪除
if ifdel:
print("ID為 %s 的學(xué)生信息已經(jīng)被刪除..." % studentId)
else:
print("沒(méi)有找到ID為 %s 的學(xué)生信息..." % studentId)
else: # 不存在學(xué)生信息
print("無(wú)學(xué)生信息...")
break # 退出循環(huán)
show() # 顯示全部學(xué)生信息
inputMark = input("是否繼續(xù)刪除?(y/n):")
if inputMark == "y":
mark = True # 繼續(xù)刪除
else:
mark = False # 退出刪除學(xué)生信息功能
'''4 修改學(xué)生成績(jī)信息'''
def modify():
show() # 顯示全部學(xué)生信息
if os.path.exists(filename): # 判斷文件是否存在
with open(filename, 'r') as rfile: # 打開(kāi)文件
student_old = rfile.readlines() # 讀取全部?jī)?nèi)容
else:
return
studentid = input("請(qǐng)輸入要修改的學(xué)生ID:")
with open(filename, "w") as wfile: # 以寫(xiě)模式打開(kāi)文件
for student in student_old:
d = dict(eval(student)) # 字符串轉(zhuǎn)字典
if d["id"] == studentid: # 是否為要修改的學(xué)生
print("找到了這名學(xué)生,可以修改他的信息!")
while True: # 輸入要修改的信息
try:
d["name"] = input("請(qǐng)輸入姓名:")
d["english"] = int(input("請(qǐng)輸入英語(yǔ)成績(jī):"))
d["python"] = int(input("請(qǐng)輸入Python成績(jī):"))
d["c"] = int(input("請(qǐng)輸入C語(yǔ)言成績(jī):"))
except:
print("您的輸入有誤,請(qǐng)重新輸入。")
else:
break # 跳出循環(huán)
student = str(d) # 將字典轉(zhuǎn)換為字符串
wfile.write(student + "\n") # 將修改的信息寫(xiě)入到文件
print("修改成功!")
else:
wfile.write(student) # 將未修改的信息寫(xiě)入到文件
mark = input("是否繼續(xù)修改其他學(xué)生信息?(y/n):")
if mark == "y":
modify() # 重新執(zhí)行修改操作
'''5 排序'''
def sort():
show() # 顯示全部學(xué)生信息
if os.path.exists(filename): # 判斷文件是否存在
with open(filename, 'r') as file: # 打開(kāi)文件
student_old = file.readlines() # 讀取全部?jī)?nèi)容
student_new = []
for list in student_old:
d = dict(eval(list)) # 字符串轉(zhuǎn)字典
student_new.append(d) # 將轉(zhuǎn)換后的字典添加到列表中
else:
return
ascORdesc = input("請(qǐng)選擇(0升序;1降序):")
if ascORdesc == "0": # 按升序排序
ascORdescBool = False # 標(biāo)記變量,為False表示升序排序
elif ascORdesc == "1": # 按降序排序
ascORdescBool = True # 標(biāo)記變量,為T(mén)rue表示降序排序
else:
print("您的輸入有誤,請(qǐng)重新輸入!")
sort()
mode = input("請(qǐng)選擇排序方式(1按英語(yǔ)成績(jī)排序;2按Python成績(jī)排序;3按C語(yǔ)言成績(jī)排序;0按總成績(jī)排序):")
if mode == "1": # 按英語(yǔ)成績(jī)排序
student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
elif mode == "2": # 按Python成績(jī)排序
student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
elif mode == "3": # 按C語(yǔ)言成績(jī)排序
student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
elif mode == "0": # 按總成績(jī)排序
student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
else:
print("您的輸入有誤,請(qǐng)重新輸入!")
sort()
show_student(student_new) # 顯示排序結(jié)果
''' 6 統(tǒng)計(jì)學(xué)生總數(shù)'''
def total():
if os.path.exists(filename): # 判斷文件是否存在
with open(filename, 'r') as rfile: # 打開(kāi)文件
student_old = rfile.readlines() # 讀取全部?jī)?nèi)容
if student_old:
print("一共有 %d 名學(xué)生!" % len(student_old))
else:
print("還沒(méi)有錄入學(xué)生信息!")
else:
print("暫未保存數(shù)據(jù)信息...")
''' 7 顯示所有學(xué)生信息 '''
def show():
student_new = []
if os.path.exists(filename): # 判斷文件是否存在
with open(filename, 'r') as rfile: # 打開(kāi)文件
student_old = rfile.readlines() # 讀取全部?jī)?nèi)容
for list in student_old:
student_new.append(eval(list)) # 將找到的學(xué)生信息保存到列表中
if student_new:
show_student(student_new)
else:
print("暫未保存數(shù)據(jù)信息...")
# 將保存在列表中的學(xué)生信息顯示出來(lái)
def show_student(studentList):
if not studentList:
print("(o@.@o) 無(wú)數(shù)據(jù)信息 (o@.@o) \n")
return
format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
print(format_title.format("ID", "名字", "英語(yǔ)成績(jī)", "Python成績(jī)", "C語(yǔ)言成績(jī)", "總成績(jī)"))
format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
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)))
if __name__ == "__main__":
main()
如有問(wèn)題,請(qǐng)聯(lián)系Q:3207088303文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-775177.html
到了這里,關(guān)于python_學(xué)生信息管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!