#! -*- coding:utf-8 -*-
def Show_menu():
print("-" * 34)
print("| 1. 添加學生信息 |")
print("| 2. 顯示所有學生信息 |")
print("| 3. 刪除學生信息 |")
print("| 4. 修改學生信息 |")
print("| 5. 按學生成績高-低顯示學生信息 |")
print("| 6. 按學生成績低-高顯示學生信息 |")
print("| 7. 按學生年齡高-低顯示學生信息 |")
print("| 8. 按學生年齡低-高顯示學生信息 |")
print("| 9. 保存學生信息到文件(si.txt) |")
print("| 10. 從文件中讀取學生數據(si.txt)|")
print("| 11. 退出程序 |")
print("-" * 34)
students = [{'ID': 1, 'Name': '張三', 'Age': 21, 'Score': 99}, {'ID': 2, 'Name': '李四', 'Age': 23, 'Score': 97},
{'ID': 7, 'Name': '王五', 'Age': 25, 'Score': 55}, {'ID': 9, 'Name': '趙柳', 'Age': 28, 'Score': 80}]
# students = []
def Add_stus():
print("\033[41;36m 開始添加學生! \033[0m")
while True:
try:
ID = int(input("請輸入學號(不可重複:)"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型 \033[0m")
continue
try:
Name = input("請輸入學生姓名:")
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
while True:
try:
Age = int(input("請輸入年齡:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型 \033[0m")
continue
while True:
try:
Score = int(input("請輸入學生成績:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型 \033[0m")
continue
t = 0
for i in students:
if i['ID'] == ID:
t = 1
if t == 1:
print("\033[41;36m 學號重複,添加失敗 \033[0m")
else:
stuInfo = {}
stuInfo['ID'] = ID
stuInfo['Name'] = Name
stuInfo['Age'] = Age
stuInfo['Score'] = Score
students.append(stuInfo)
print("\033[41;36m 添加成功 \033[0m")
def Show_stus():
print("|--------------|--------------|--------------|--------------|")
print("|" + "學號".center(12) + "|" + "姓名".center(12) + "|" + "年齡".center(12) + "|" + "成績".center(12) + "|")
print("|--------------|--------------|--------------|--------------|")
for i in students:
print("|%s|%s|%s|%s|" % (
str(i['ID']).center(14), i['Name'].encode(encoding='GBK').center(14).decode(encoding='GBK'),
str(i['Age']).center(14), str(i['Score']).center(14)))
print("|--------------|--------------|--------------|--------------|")
def Del_stu():
print("\033[41;36m 您選擇了刪除學生功能! \033[0m")
while True:
try:
delID = int(input("請輸入學生學號:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41:36m 請輸入int類型 \033[0m")
continue
for i, v in enumerate(students):
if v['ID'] == delID:
del students[i]
print("\033[41;36m 刪除成功 \033[0m")
break
else:
print("\033[41;36m 沒有此學號,刪除失敗 \033[0m")
def Change_stu():
print("你選擇了修改學生信息的功能!")
while True:
Show_stus()
print("\033[36;41m 退出請按11 \033[0m")
while True:
try:
alterID = int(input("請輸入修改學生的學號:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型 \033[0m")
continue
List = []
if alterID == 11:
break
else:
while True:
for i in students:
L = i['ID']
List.append(L)
if alterID not in List:
print("\033[41;36m 沒有此學號,請重新輸入 \033[0m")
break
else:
while True:
print("1. 修改學號\n2. 修改姓名\n3. 修改年齡\n4. 修改成績\n5. 退出修改")
while True:
try:
alterNum = int(input("請輸入需要修改的序號:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型! \033[0m")
continue
if alterNum == 1:
while True:
try:
NewID = int(input("請輸入新的ID:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型! \033[0m")
continue
while True:
for i in students:
if i['ID'] == NewID:
print("\033[41;36m 修改失敗,學號重複 \033[0m")
break
elif i['ID'] == alterID:
i['ID'] = NewID
print("\033[41;36m 學號修改成功 \033[0m")
break
elif alterNum == 2:
try:
NewName = input("請輸入新名字:")
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
for i in students:
if alterID == i['ID']:
i['Name'] = NewName
print("\033[41;36m 修改成功 \033[0m")
elif alterNum == 3:
while True:
try:
NewAge = int(input("請輸入新年齡:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36 請輸入int類型 \033[0m")
continue
for i in students:
if alterID == i['ID']:
i['Age'] = NewAge
print("\033[41;36m 修改成功 \033[0m")
elif alterNum == 4:
while True:
try:
NewScore = int(input("請輸入新成績:"))
break
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36 請輸入int類型 \033[0m")
continue
for i in students:
if alterID == i['ID']:
i['Score'] = NewScore
print("\033[41;36m 修改成功 \033[0m")
elif alterNum == 5:
break
else:
print("請輸入正確的序號!")
break
def Show_score_gd():
print("|--------------|--------------|--------------|--------------|")
print("|" + "學號".center(12) + "|" + "姓名".center(12) + "|" + "年齡".center(12) + "|" + "成績".center(12) + "|")
print("|--------------|--------------|--------------|--------------|")
students_g = sorted(students,key=lambda students:students['Score'],reverse=True)
for i in students_g:
print("|%s|%s|%s|%s|" %(
str(i['ID']).center(14), i['Name'].encode(encoding='GBK').center(14).decode(encoding='GBK'),
str(i['Age']).center(14), str(i['Score']).center(14)))
print("|--------------|--------------|--------------|--------------|")
def Show_score_dg():
print("|--------------|--------------|--------------|--------------|")
print("|" + "學號".center(12) + "|" + "姓名".center(12) + "|" + "年齡".center(12) + "|" + "成績".center(12) + "|")
print("|--------------|--------------|--------------|--------------|")
students_d = sorted(students,key=lambda students:students['Score'],reverse=False)
for i in students_d:
print("|%s|%s|%s|%s|" %(
str(i['ID']).center(14), i['Name'].encode(encoding='GBK').center(14).decode(encoding='GBK'),
str(i['Age']).center(14), str(i['Score']).center(14)))
print("|--------------|--------------|--------------|--------------|")
def Show_age_gd():
print("|--------------|--------------|--------------|--------------|")
print("|" + "學號".center(12) + "|" + "姓名".center(12) + "|" + "年齡".center(12) + "|" + "成績".center(12) + "|")
print("|--------------|--------------|--------------|--------------|")
students_g = sorted(students,key=lambda students:students['Age'],reverse=True)
for i in students_g:
print("|%s|%s|%s|%s|" %(
str(i['ID']).center(14), i['Name'].encode(encoding='GBK').center(14).decode(encoding='GBK'),
str(i['Age']).center(14), str(i['Score']).center(14)))
print("|--------------|--------------|--------------|--------------|")
def Show_age_dg():
print("|--------------|--------------|--------------|--------------|")
print("|" + "學號".center(12) + "|" + "姓名".center(12) + "|" + "年齡".center(12) + "|" + "成績".center(12) + "|")
print("|--------------|--------------|--------------|--------------|")
students_d = sorted(students,key=lambda students:students['Age'],reverse=False)
for i in students_d:
print("|%s|%s|%s|%s|" %(
str(i['ID']).center(14), i['Name'].encode(encoding='GBK').center(14).decode(encoding='GBK'),
str(i['Age']).center(14), str(i['Score']).center(14)))
print("|--------------|--------------|--------------|--------------|")
def Save_file():
try:
f = open('si.txt','w')
for d in students:
f.write(str(d['ID']))
f.write(',')
f.write(d['Name'])
f.write(',')
f.write(str(d['Age']))
f.write(',')
f.write(str(d['Score']))
f.write('\n')
print("\033[41;36m 文件保存成功 \033[0m")
except OSError:
print("\033[41;36m 文件寫入失敗!\033[0m")
def Read_file():
try:
f = open('si.txt','r+')
L = f.readlines()
print('ID','Name','Age','Score')
for i in L:
s = i.strip()
print(s)
except OSError:
print("\033[41;36m 文件讀取失敗!\033[0m")
while True:
Show_menu()
try:
key = int(input("請輸入要操作的選項(1-11 :)"))
except KeyboardInterrupt:
print("\033[41;36 終止程序!\033[0m")
exit()
except Exception:
print("\033[41;36m 請輸入int類型 \033[0m")
else:
if key == 1:
Add_stus()
elif key == 2:
Show_stus()
elif key == 3:
Del_stu()
elif key == 4:
Change_stu()
elif key == 5:
Show_score_gd()
elif key == 6:
Show_score_dg()
elif key == 7:
Show_age_gd()
elif key == 8:
Show_age_dg()
elif key == 9:
Save_file()
elif key == 10:
Read_file()
elif key == 11:
exit()
else:
print("\033[41;36m 請輸入正確的序號!!! \033[0m")