一、文件夾結構
二、相關說明
1、系統開發環境
windows10系統,python3.6,開放工具ptcharm2018
2、相關庫
python內置模塊os和re
三、系統功能結構
包括6大模塊
錄入學生信息模塊、刪除學生模塊,修改學生模塊,查找學生模塊,排序學生模塊,查詢、統計學生模塊。
四、相關代碼
# _*_ coding:utf-8 _*_
import re, os
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 menu():
# 輸出菜單
print('''
╔———————學生信息管理系統————————╗
│ │
│ =============== 功能菜單 =============== │
│ │
│ 1 錄入學生信息 │
│ 2 查找學生信息 │
│ 3 刪除學生信息 │
│ 4 修改學生信息 │
│ 5 排序 │
│ 6 統計學生總人數 │
│ 7 顯示所有學生信息 │
│ 0 退出系統 │
│ ========================================== │
│ 說明:通過數字或↑↓方向鍵選擇菜單 │
╚———————————————————————╝
''')
def save(student):
try:
student_txt = open('student.txt', "a") # 追加模式打開
except Exception as e:
student_txt = open('student.txt',"w") # 文件不存在,創建文件打開
for info in student:
student_txt.write(str(info) + "\n") # 按行存儲,添加換行符
student_txt.close()
def insert():
studentList = [] # 添加保存學生信息的列表
mark = True # 是否繼續
while mark:
id = input("請輸入IP(如317XXXXX1):")
if not id: # ID爲空,跳出循環
break
name = input("請輸入名字")
if not name: # 名字爲空,跳出循環
break
try:
iep = float(input("請輸入智育分"))
mep = float(input("請輸入德育分"))
sp = float(input("請輸入文體分"))
except:
print("輸入無效,請重新輸入")
continue
# 請將輸入的學生信息保存到字典
student = {"id":id, "name":name, "iep":iep, "mep":mep, "sp":sp}
studentList.append(student) # 將學生字典添加到列表中
inputMark = input("是否繼續添加,(y/n):")
if inputMark == "y":
mark = True # 繼續添加
else:
mark = False # 不繼續添加
save(studentList) # 將學生信息保存到文件裏
print("學生信息錄入完畢")
def delete():
mark = True # 標記是否循環
while mark:
studentId = input("請輸入要刪除的學生ID:")
if studentId is not "": # 判斷輸入是否要刪除的學生
if os.path.exists("student.txt"): # 判斷文件是否存在
with open("student.txt", 'r') as rfile: # 打開文件
student_old = rfile.readlines() # 讀取全部內容
else:
student_old = []
ifdel = False
if student_old: #標記是否刪除
with open('student.txt', '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("student.txt"): # 判斷文件是否存在
with open("student.txt", 'r') as rfile:
student_old = rfile.readlines() # 讀取全部文件內容
else:
return
studentid = input("請輸入要修改的學生的ID:")
with open("student.txt", 'w') as wfile:
for student in student_old:
d = dict(eval(student))
if d['id'] == studentid: # 是否爲要修改的學生
print("找到這名學生,可以修改他的信息!")
while True:
try:
d['name'] = input("請輸入名字")
d['iep'] = float(input("請輸入智育分"))
d['mep'] = float(input("請輸入德育分"))
d['sp'] = float(input("請輸入文體分"))
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 search():
mark = True
student_query = [] # 用於保存查詢結果的時間的列表
while mark:
id = ""
name = ""
if os.path.exists("student.txt"):
mode = input("按ID查詢請輸入1, 按名字查詢請輸入2:")
if mode == '1':
id = input("請輸入學生ID")
elif mode == '2':
name = input("請輸入學生名字")
else:
print("你的輸入有誤,請重新輸入!")
search() # 重新查詢
with open("student.txt", 'r') as file:
student = file.readlines() # 讀取文件全部信息
for list in student:
d = dict(eval(list))
if id is not "": # 判斷是否按ID查詢
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 = "{:^12}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
# 按指定格式顯示標題
print(format_title.format("ID", "名字", "智育分", "德育分", "文體分", "總分"))
# 定義具體內容格式
format_data = "{:^12}{:^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("iep")),
str(info.get("mep")),
str(info.get("sp")),
str(info.get("iep")*0.7+info.get("mep")*0.2+info.get("sp")*0.1).center(12)))
def total():
if os.path.exists("student.txt"):
with open("student.txt", '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("student.txt"):
with open("student.txt", '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("暫未保存數據信息")
def sort():
show()
if os.path.exists("student.txt"):
with open("student.txt", 'r') as rfile:
student_old = rfile.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
elif ascORdesc == '1':
ascORdescBool = True
else:
print("你輸入的有誤,請重新輸入!")
sort()
mode = input("請選擇排序方式(1按智育分排序;2按德育分排序;3按文體分排序;0按總分排序):")
if mode == '1':
student_new.sort(key=lambda x: x["iep"], reverse=ascORdescBool)
elif mode == '2':
student_new.sort(key=lambda x: x["mep"], reverse=ascORdescBool)
elif mode == '3':
student_new.sort(key=lambda x: x["sp"], reverse=ascORdescBool)
elif mode == '0':
student_new.sort(key=lambda x: x["iep"]*0.7+x["mep"]*0.2+x["sp"]*0.1, reverse=ascORdescBool)
else:
print("你的輸入有誤,請重新輸入!")
sort()
show_student(student_new)
if __name__ == "__main__":
main()
五、說明
項目的核心是對文件、字典、列表的操作。當然還有很多不足,有想法的歡迎的評論區提出