python基础(16):学生信息管理系统——Python编写(附全部代码)
✅作者简介:大家好我是Xlong,一枚正在学习COMSOL、Python的工科研究僧
📃个人主页: Xlong的个人博客主页
🔥系列专栏:Python学习
💖如果觉得博主的文章还不错的话,请👍支持一下博主哦🤞
目录
一、需求分析
1.学生管理系统应具备的功能:
(1)添加学生及成绩信息
(2)将学生信息保存到文件中
(3)修改和删除学生信息
(4)查询学生信息
(5)根据学生成绩进行排序
(6)统计学生的总分
二、系统分析
1.系统功能结构:学生信息管理系统的7大模块
(1)录入学生信息模块
(2)查找学生信息模块
(3)删除学生信息模块
(4)修改学生信息模块
(5)学生成绩排名模块
(6)统计学生总人数模块
(7)显示全部学生信息模块
2.系统业务流程:
三、系统开发必备
1.系统开发环境:
(1)操作系统:win10
(2)Python解释器版本:Python3.9.10
(3)开发工具:Pycharm
(4)Python内置模块:os,re
四、主函数设计
1.实现主函数 :
五、学生信息维护模块设计
1.实现录入学生信息功能
2.具体实现:
(1)save(student)函数,用于将学生信息保存到文件
(2)insert()函数,用于录入学生信息
3.删除学生信息功能:业务流程
4.修改学生信息功能:业务流程
5.查找学生信息功能:业务流程
六、查询/统计模块设计
1.统计学生总人数功能:业务流程
2.显示所有学生信息功能:业务流程
七、排序模块设计
八、项目打包
安装第三方模块:
(1)在线安装方式;pip install Pylnstaller
(2)执行打包操作:C:\Users\jjlu>pyinstaller -F E:\软件相关\Python\vippython\chap16\stusyste.py
最后打包的exe路径在C:\Users\jjlu\dist
九、代码
import os.path #导入os.path模块def menm(): #菜单 print('==========================学生信息管理系统==========================') print('------------------------------功能菜单-----------------------------') print('\t\t\t 1.录入学生信息') print('\t\t\t 2.查找学生信息') print('\t\t\t 3.删除学生信息') print('\t\t\t 4.修改学生信息') print('\t\t\t 5.排序') print('\t\t\t 6.统计学生总人数') print('\t\t\t 7.显示所有学生信息') print('\t\t\t 0.退出系统') print('-------------------------------------------------------------------')filename = 'student.txt'# 文件名def main(): #主程序 while True: menm() #调用菜单函数 choice = int(input('请选择')) if choice in [0,1,2,3,4,5,6,7]: if choice == 0: answer = input('您确定要退出系统吗?y/n') if answer == 'y' or answer == 'Y': print('谢谢您的使用!!!') break #退出系统 else: continue elif choice == 1: insert() #录入学生信息 elif choice == 2: search() #查找学生信息 elif choice == 3: delete() #删除学生信息 elif choice == 4: modify() #修改学生信息 elif choice == 5: sort() #排序 elif choice == 6: total() #统计学生总人数 elif choice == 7: show() #显示所有学生信息def insert():# 插入信息 student_list = [] while True: # 循环输入 id = input('请输入ID(如1001):') if not id:# 防止手滑 break name = input('请输入姓名:') if not name: break try: english = int(input('请输入英语成绩:')) python = int(input('请输入python成绩:')) java = int(input('请输入Java成绩:')) except: print('输入无效,不是整数类型,请重新输入') continue #将录入的学生信息保存到字典当中 student ={'id':id,'name':name,'english':english,'python':python,'java':java} #将学生信息添加到列表中 student_list.append(student) answer = input('是否继续添加?y/n\n') if answer == 'y': continue else: break #调用save()函数 save(student_list) print('学生信息录入完毕!!!')def save(lst):# 保存 try: stu_txt = open(filename,'a',encoding='utf-8') except: stu_txt = open(filename,'w',encoding='utf-8') for item in lst: stu_txt.write(str(item)+'\n')# 将内容写入文件中def search(): # 搜索 student_query = [] while True: 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',encoding='utf-8')as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) if id != '': if d['id'] == id:student_query.append(d) elif name != '': if d['name'] == name:student_query.append(d) #显示查询结果 show_student(student_query) #清空列表 student_query.clear() answer = input('是否要继续查询?y/n\n') if answer =='y': continue else: break else: print('暂未保存学生信息') returndef show_student(lst): if len(lst)==0: print('没有查询到学生信息,无数据显示!!!') return #定义标题显示格式 format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' print(format_title.format('ID','姓名','英语成绩','python成绩','java成绩','总成绩')) #定义内容的显示格式 format_data ='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' for item in lst: print(format_data.format(item.get('id'), item.get('name'), item.get('english'), item.get('python'), item.get('java'), int(item.get('english'))+int(item.get('python'))+int(item.get('java')) ))def delete(): while True: student_id = input('请输入要删除的学生的ID:') if student_id != '': if os.path.exists(filename): with open(filename,'r',encoding='utf-8')as file: student_old = file.readlines() else: student_old = [] flag = False #标记是否删除 if student_old: with open(filename,'w',encoding='utf-8')as wfile: d = {} for item in student_old: d = dict(eval(item)) #将字符串转成字典 if d['id'] != student_id:wfile.write(str(d)+'\n') else:flag = True if flag: print(f'id为{student_id}的学生信息已被删除') else: print(f'没有找到ID为{student_id}的学生信息') else: print('无学生信息') break show() #删除之后要重新显示所有学生信息 answer = input('是否继续删除?y/n\n') if answer == 'y': continue else: breakdef modify(): show() if os.path.exists(filename): with open(filename,'r',encoding='utf-8')as rfile: student_old = rfile.readlines() else: return student_id = input('请输入要修改的学员的ID:') with open(filename,'w',encoding='utf-8')as wfile: for item in student_old: d = dict(eval(item)) if d['id'] == student_id: print('找到学生信息,可以修改他的相关信息了!') while True: try: d['name'] = input('请输入姓名:') d['english'] = input('请输入英语成绩:') d['python'] = input('请输入Python成绩:') d['java'] = input('请输入java成绩:') except: print('您的输入有误,请重新输入!!!') else: break wfile.write(str(d)+'\n') print('修改成功!!!') else: wfile.write(str(d)+'\n') answer = input('是否继续修改其他学生信息呢?y/n\n') if answer == 'y': modify()def sort(): show() if os.path.exists(filename): with open(filename,'r',encoding='utf-8')as rfile: student_list = rfile.readlines() student_new = [] for item in student_list: d = dict(eval(item)) student_new.append(d) else: return asc_or_desc = input('请选择(0.升序 1.降序:)') if asc_or_desc =='0': asc_or_desc_bool =False elif asc_or_desc =='1': asc_or_desc_bool =True else: print('您的输入有误,请重新输入') sort() mode = input('请选择排序方式(1.按英语成绩排序 2.按python成绩排序 3.按java成绩排序 0.按总成绩排序):') if mode == '1': student_new.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool) elif mode == '2': student_new.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool) elif mode == '3': student_new.sort(key=lambda x:int(x['java']),reverse=asc_or_desc_bool) elif mode == '0': student_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool) else: print('您的输入有误,请重新输入!!!') sort() show_student(student_new)def total(): if os.path.exists(filename): with open(filename,'r',encoding='utf-8')as rfile: students = rfile.readlines() if students: print(f'一共有{len(students)}名学生') else: print('还未录入学生信息') else: print('暂未保存数据信息......')def show(): student_lst = [] if os.path.exists(filename): with open(filename,'r',encoding='utf-8')as rfile: students=rfile.readlines() for item in students: student_lst.append(eval(item)) if student_lst: show_student(student_lst) else: print('暂未保存过数据!!!')if __name__ == '__main__': main()
持续更新中......
原创不易,各位看官请随手点个赞和关注哦,感谢!!!
来源地址:https://blog.csdn.net/l1796333514/article/details/123410256
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341