项目-学生信息管理系统
一、功能简介
项目路径:D:\Study\Python\NewFight\studentsystem
项目文件:studentsystem.py、students.txt
逻辑说明:入口main(),打印选项0-7,分别对应方法逻辑:
0)退出逻辑
1)insert()录入信息,补充函数save()用来保存信息。
2)search()查找信息
3)delete()删除信息
4)modify()修改信息
5)sort()排序
6)total()统计总数
7)show()显示信息,补充方法show_student(studentList)用来显示学生信息
二、代码
1、整体代码
#!/usr/bin/env python # -*- coding: utf-8 -*- import re,os filename="students.txt" 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)#数值进行int转换 if option_int==0:#退出系统 print("您已退出学生信息管理系统!") ctrl = False if 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 insert():#1 studentList =[]#保存学生信息的列表 mark = True#是否继续添加 while mark: id=input("请输入ID(如 1001):") if not id:#id为空,跳出循环 break name=input("请输入名字:") if not name:#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)#将学生字典添加到列表 inputMark =input("是否继续添加?(y/n):") if inputMark =="y":#继续添加 mark=True else:#不继续添加 mark=False save(studentList)#将学生信息保存到文件 print("学生信息录入完毕") def search():#2 mark=True student_query=[]#保存查询信息的学生列表 while mark: id="" name="" if os.path.exists(filename):#判断文件是否存在 mode=input("按ID输入1;按姓名输入2:") if mode=="1":#按id查询 id=input("请输入学生ID:") elif mode=="2":#按name查询 name=input("请输入学生姓名:") else: print("您的而输入有误,请重新输入!") search()#重新查询 with open(filename,'r',encoding="utf-8") 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 "":#判断是否按name查询 if d["name"]==name: student_query.append(d)#将查找到的学生信息保存到列表中 show_studnet(student_query)#显示查询结果 student_query.clear()#清空列表 inputMark=input("是否继续查询?(y/n?):") if inputMark=="y": mark=True else: mark=False else: print("暂未保存数据...") return def delete():#3 mark=True #标记是否循环 while mark: studentId=input("请输入要删除的学生ID:") if studentId is not "":#判断是否输入要删除的学生 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 else: student_old=[] ifdel=False #标记是否删除 if student_old:#如果存在学生信息 with open(filename,'w',encoding="utf-8") 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():#4 show() #显示全部学生信息 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 else: return studentid=input("请输入要修改的学生ID:") with open(filename,"w",encoding="utf-8") as wfile:#以只写方式打开文件 for student in student_old: d=dict(eval(student))#字符串转字典 if d["id"]==studentid:#是否为要修改的学生 print("找到了这名学生,可以修改他的信息!") while True:#输入要修改的信息 try: d["name"]=input("请输入姓名:") d["english"]=input("请输入英语成绩:") d["python"]=input("请输入Python成绩:") d["c"]=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():#5 show()#显示全部学生信息 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") 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 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_studnet(student_new)#显示排序结果 def total():#6 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding='UTF-8') as rfile:#打开文件 student_old=rfile.readlines() #读取全部内容 if student_old: print("一共有%d名学生!"%len(student_old))#统计学生人数 else: print("还没录入学生信息") else: print("暂未保存数据信息...") def show():#7 student_new=[] if os.path.exists(filename):#判断文件是否存在 with open(filename,'r' ,encoding='UTF-8') as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 for list in student_old: student_new.append(eval(list))#将找到的学生信息保存到列表中 if student_new: show_studnet(student_new) else: print("暂未保存数据信息") #将保存的再列表中的血神信息显示出来 def show_studnet(studentList): if not studentList:#如果没有要显示的数据 print("无数据\n") return #定义标题显示格式 format_title="{0:^6}{1:^12}\t{2:^8}\t{3:^10}\t{4:^10}\t{5:^10}" print(format_title.format("ID","名字","英语成绩","Python成绩","C语言成绩","总成绩"))#指定格式显示标题 #定义具体内容显示格式 format_data="{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}" for info in studentList:#通过for循环将列表中的数全部显示出来 print(format_data.format(info.get("id"), info.get("name"),str(info.get("english")),str(info.get("python")), str(info.get("c")), str(int(info.get("english")) + int(info.get("python")) + int(info.get("c"))).center(12))) #将学生信息保存到文件 def save(student): try: students_txt =open(filename,"a",encoding="utf-8")#以追加模式打开 except Exception as e: students_txt=open(filename,"w",encoding="utf-8")#文件不存在,创建文件并打开 for info in student: students_txt.write(str(info)+"\n")#按行存储,添加换行符 students_txt.close()#关闭文件 if __name__ == "__main__": main()
2、main()
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)#数值进行int转换 if option_int==0:#退出系统 print("您已退出学生信息管理系统!") ctrl = False if 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()
3、menu()
def menu(): print(''' -------------------学生信息管理系统------------------ | | | ======== 功能菜单 ======== | | 1.录入学生信息 | | 2.查找学生信息 | | 3.删除学生信息 | | 4.修改学生信息 | | 5.排序 | | 6.统计学生总人数 | | 7.显示所有学生信息 | | 0.退出系统 | | =========================== | | 说明:通过数字或↑↓方向键选择菜单 | ----------------------------------------------------- ''')
4、insert()
def insert():#1 studentList =[]#保存学生信息的列表 mark = True#是否继续添加 while mark: id=input("请输入ID(如 1001):") if not id:#id为空,跳出循环 break name=input("请输入名字:") if not name:#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)#将学生字典添加到列表 inputMark =input("是否继续添加?(y/n):") if inputMark =="y":#继续添加 mark=True else:#不继续添加 mark=False save(studentList)#将学生信息保存到文件 print("学生信息录入完毕")
5、search()
def search():#2 mark=True student_query=[]#保存查询信息的学生列表 while mark: id="" name="" if os.path.exists(filename):#判断文件是否存在 mode=input("按ID输入1;按姓名输入2:") if mode=="1":#按id查询 id=input("请输入学生ID:") elif mode=="2":#按name查询 name=input("请输入学生姓名:") else: print("您的而输入有误,请重新输入!") search()#重新查询 with open(filename,'r',encoding="utf-8") 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 "":#判断是否按name查询 if d["name"]==name: student_query.append(d)#将查找到的学生信息保存到列表中 show_studnet(student_query)#显示查询结果 student_query.clear()#清空列表 inputMark=input("是否继续查询?(y/n?):") if inputMark=="y": mark=True else: mark=False else: print("暂未保存数据...") return
6、delete()
def delete():#3 mark=True #标记是否循环 while mark: studentId=input("请输入要删除的学生ID:") if studentId is not "":#判断是否输入要删除的学生 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 else: student_old=[] ifdel=False #标记是否删除 if student_old:#如果存在学生信息 with open(filename,'w',encoding="utf-8") 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 #退出删除学生信息功能
7、modify()
def modify():#4 show() #显示全部学生信息 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 else: return studentid=input("请输入要修改的学生ID:") with open(filename,"w",encoding="utf-8") as wfile:#以只写方式打开文件 for student in student_old: d=dict(eval(student))#字符串转字典 if d["id"]==studentid:#是否为要修改的学生 print("找到了这名学生,可以修改他的信息!") while True:#输入要修改的信息 try: d["name"]=input("请输入姓名:") d["english"]=input("请输入英语成绩:") d["python"]=input("请输入Python成绩:") d["c"]=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()#重新执行修改操作
8、sort()
def sort():#5 show()#显示全部学生信息 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding="utf-8") 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 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_studnet(student_new)#显示排序结果
9、total()
def total():#6 if os.path.exists(filename):#判断文件是否存在 with open(filename,'r',encoding='UTF-8') as rfile:#打开文件 student_old=rfile.readlines() #读取全部内容 if student_old: print("一共有%d名学生!"%len(student_old))#统计学生人数 else: print("还没录入学生信息") else: print("暂未保存数据信息...")
10、show()
def show():#7 student_new=[] if os.path.exists(filename):#判断文件是否存在 with open(filename,'r' ,encoding='UTF-8') as rfile:#打开文件 student_old=rfile.readlines()#读取全部内容 for list in student_old: student_new.append(eval(list))#将找到的学生信息保存到列表中 if student_new: show_studnet(student_new) else: print("暂未保存数据信息")
11、show_studnet(studentList)
#将保存的再列表中的血神信息显示出来 def show_studnet(studentList): if not studentList:#如果没有要显示的数据 print("无数据\n") return #定义标题显示格式 format_title="{0:^6}{1:^12}\t{2:^8}\t{3:^10}\t{4:^10}\t{5:^10}" print(format_title.format("ID","名字","英语成绩","Python成绩","C语言成绩","总成绩"))#指定格式显示标题 #定义具体内容显示格式 format_data="{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}" for info in studentList:#通过for循环将列表中的数全部显示出来 print(format_data.format(info.get("id"), info.get("name"),str(info.get("english")),str(info.get("python")), str(info.get("c")), str(int(info.get("english")) + int(info.get("python")) + int(info.get("c"))).center(12)))
12、save()
#将学生信息保存到文件 def save(student): try: students_txt =open(filename,"a",encoding="utf-8")#以追加模式打开 except Exception as e: students_txt=open(filename,"w",encoding="utf-8")#文件不存在,创建文件并打开 for info in student: students_txt.write(str(info)+"\n")#按行存储,添加换行符 students_txt.flush()#刷新缓存 students_txt.close()#关闭文件
三、打包exe
1、安装Pyinstaller模块
“命令提示符”窗口下,在python路径“C:\Program User\Python\Scripts”下执行“pip installer pyinstaller” 或升级“pip installer --upgrade pyinstaller”
检测Pyinstaller模块是否安装成功:用pyinstaller --version检测是否安装成功
2、 在python路径“C:\Program User\Python\Scripts”下执行打包命令
命令为:pyinstaller -F 含绝对路径的.py文件,例如:
pyinstaller -F D:\Study\Python\NewFight\studentsystem\studentsystem.py
说明:-F表示生成一个扩展名为.exe的可执行文件。
3、打包输出的.exe文件在python路径“C:\Program User\Python\Scripts\dist”下。

浙公网安备 33010602011771号