找回密码
 会员注册
查看: 34|回复: 0

Python------实现学生管理器

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-4 13:53:55 | 显示全部楼层 |阅读模式
欢迎各位大佬的到来,今天所要分享的文章是关于如何实现学生管理系统,有需要的朋友可以参考一下,希望可以帮到大家!文章目录一、开始界面实现1.定义主函数2.运用循环,获取用户需求二、函数实现各个模块功能1.添加学生信息2.展示学生信息3.查找学生信息4.删除学生信息5.退出程序三、把信息存入文件中1.save()函数2.load()函数四、整理代码1.代码展示2.运行过程一、开始界面实现1.定义主函数定义一个主函数main,在通过定义一个menu函数对学生管理系统的菜单进行打印。#定义menu()函数defmenu():print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')#定义主函数defmain():print('--------------------------------')print('欢迎来到学生管理系统')print('-------------------------------')menu()main()1234567891011121314151617'运行运行2.运用循环,获取用户需求1)使用whileTrue循环:让菜单一直保持循环,直到用户选择退出操作时才结束循环操作。2)变量choice:获取到的用户需要实现的功能进行存储。3)if循环:使用多个分支循环语句,分别实现各个模块的功能。defmenu():print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')choice=input('请输入你的选择:')returnchoice12345678'运行运行#定义主函数defmain():print('--------------------------------')print('欢迎来到学生管理系统')print('-------------------------------')whileTrue:choice=menu()ifchoice=='1':#新增学生passelifchoice=='2':#显示学生passelifchoice=='3':#查找学生passelifchoice=='4':#删除学生passelifchoice=='0':#退出程序passelse:print('您的输入有误,请重新输入!')#需要进入下次循环,让用户输入continue1234567891011121314151617181920212223242526'运行运行效果展示:二、函数实现各个模块功能下面,就需要完成上述代码所需要实现的各个功能操作1.添加学生信息1)studentId,name,gender,className:分别用来存储学生的学号、姓名、性别、班级的信息。2)student:定义一个字典,用来存储上述全部信息。3)append():列表添加操作,将当前的字典存入列表,作为列表的一个元素。4)students[]:定义了一个列表用来存储所有的学生信息。该列表中的每个元素都属于一个"字典",而每个字典就分别表示一个同学!#使用这个全局变量,来管理所有学生的信息.students=[]definsert():print('[新增学生]开始!')studentId=input('请输入学生的学号:')name=input('请输入学生的姓名:')gender=input('请输入学生的性别:')ifgendernotin('男','女'):print('性别输入的内容不符合要求,新增失败!')returnclassName=input('请输入学生的班级:')#使用一个字典把上述的信息给聚合起来.student={'studentId':studentId,'name':name,'gender':gender,'className':className}#将上述信息添加到全局变量students列表中globalstudentsstudents.append(student)print('[新增学生]完毕!')123456789101112131415161718192021222324'运行运行2.展示学生信息遍历全局变量这个列表,把每个学生的信息进行打印。defshow():print('[显示学生]开始!')forsinstudents:print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")print(f'[显示学生]完毕!共显示了{len(students)}条数据!')12345'运行运行3.查找学生信息我们假设根据学生的姓名来进行查找。使用count变量完成计数功能操作。deffind():#根据学生姓名,来进行查找print('[查找学生]开始!')name=input('请输入要查找的同学姓名:')count=0forsinstudents:ifname==s['name']:print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")count+=1print(f'[查找学生]完毕!共找到了{count}个匹配的同学.')12345678910'运行运行4.删除学生信息假设按照学生的学号进行删除操作。通过学号来确定该学生属于哪一个“字典”,然后把这个字典从列表中进行删除即完成该操作。defdelete():print('[删除学生]开始!')#按照学号进行删除studentId=input('请输入要删除学生的学号:')#看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除forsinstudents:ifstudentId==s['studentId']:print(f"删除{s['name']}同学的信息!")students.remove(s)print('[删除学生]结束!')12345678910'运行运行5.退出程序使用内建函数sys.exit(0)退出程序即可。elifchoice=='0':#退出程序print('GoodBye!')sys.exit(0)1234三、把信息存入文件中由于上述的插入学生信息操作和删除学生信息操作都保存在内存中,一旦我们结束程序,我们插入或删除的信息就全都不见了。为了让我们插入的信息可以一直保存下去,我们就需要定义两个函数:save()函数和load()函数。1.save()函数这个函数是用于存档学生信息的。把信息存储在和当前文件同级的目录中。存档的文件定义为文本文件。defsave():#用于存档#此处的路径不是以d:开头的"绝对路径",而是"相对路径"#这个写法的含义就是让record.txt和当前的文件在同一个目录里.withopen('record.txt','w',encoding='utf8')asf:forsinstudents:f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")print(f'[存档成功]共存储了{len(students)}条记录!')12345678'运行运行因此,每当我们修改一个数据时,就可以调用save函数对这个信息进行保存操作。2.load()函数该函数是用于读取文档的操作。使用此函数,就可以实现当我们关闭程序再次运行程序时,可以读取到上次我们所保存的学生信息。1)os.path.exists():该内建函数用来判断某一个文件是否存在。2)line.strip():该功能是去掉一个字符串开头和末尾的空白符。空白符包括:空格,换行,回车,制表符等等。3)line.split():用于将字符串按照指定的分隔符分割成若干个字符串。defload():#用于读档#如果存档文件不存在,则直接跳过读档操作ifnotos.path.exists('record.txt'):return#读档的时候要保证先把旧的数据先清理干净!globalstudentsstudents=[]withopen('record.txt','r',encoding='utf8')asf:forlineinf:#针对这一行数据,按照\t对其进行切分操作!#切分之前要去除末尾的换行line=line.strip()tokens=line.split('\t')iflen(tokens)!=4:print(f'当前行格式存在问题!line={line}')continuestudent={'studentId':tokens[0],'name':tokens[1],'gender':tokens[2],'className':tokens[3]}students.append(student)print(f'[读档成功]共读取了{len(students)}条记录!')1234567891011121314151617181920212223242526'运行运行四、整理代码1.代码展示importos.pathimportsys#使用这个全局变量,来管理所有学生的信息.#这个列表的每个元素都是一个"字典",每个字典就分别表示一个同学!students=[]defsave():#用于存档withopen('record.txt','w',encoding='utf8')asf:forsinstudents:f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")print(f'[存档成功]共存储了{len(students)}条记录!')defload():#用于读档#如果存档文件不存在,则直接跳过读档操作ifnotos.path.exists('record.txt'):return#读档的时候要保证先把旧的数据先清理干净!globalstudentsstudents=[]withopen('record.txt','r',encoding='utf8')asf:forlineinf:#针对这一行数据,按照\t对其进行切分操作!#切分之前要去除末尾的换行line=line.strip()tokens=line.split('\t')iflen(tokens)!=4:print(f'当前行格式存在问题!line={line}')continuestudent={'studentId':tokens[0],'name':tokens[1],'gender':tokens[2],'className':tokens[3]}students.append(student)print(f'[读档成功]共读取了{len(students)}条记录!')defmenu():print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')choice=input('请输入你的选择:')returnchoicedefinsert():print('[新增学生]开始!')studentId=input('请输入学生的学号:')name=input('请输入学生的姓名:')gender=input('请输入学生的性别:')ifgendernotin('男','女'):print('性别输入的内容不符合要求,新增失败!')returnclassName=input('请输入学生的班级:')#使用一个字典把上述的信息给聚合起来.student={'studentId':studentId,'name':name,'gender':gender,'className':className}globalstudentsstudents.append(student)#保存操作save()print('[新增学生]完毕!')defshow():#遍历全局变量这个列表,把每个学生的信息打印出来.print('[显示学生]开始!')forsinstudents:print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")print(f'[显示学生]完毕!共显示了{len(students)}条数据!')deffind():#根据学生姓名,来进行查找print('[查找学生]开始!')name=input('请输入要查找的同学姓名:')count=0forsinstudents:ifname==s['name']:print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")count+=1print(f'[查找学生]完毕!共找到了{count}个匹配的同学.')defdelete():print('[删除学生]开始!')#按照学号进行删除studentId=input('请输入要删除学生的学号:')#看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除forsinstudents:ifstudentId==s['studentId']:print(f"删除{s['name']}同学的信息!")students.remove(s)#增加保存操作save()print('[删除学生]结束!')defmain():#通过控制台和命令进行交互print('--------------------------------')print('欢迎来到学生管理系统')print('-------------------------------')load()whileTrue:#通过menu函数打印出菜单项choice=menu()ifchoice=='1':#新增学生insert()elifchoice=='2':#显示学生show()elifchoice=='3':#查找学生find()elifchoice=='4':#删除学生delete()elifchoice=='0':#退出程序print('GoodBye!')sys.exit(0)else:print('您的输入有误,请重新输入!')#需要进入下次循环,让用户输入continuemain()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411422.运行过程以上就是今天所要分享的内容,如果感觉内容不错,记得一键三连噢。创作不易,感谢大家的支持,我们下次再见!ヾ( ̄▽ ̄)ByeBye
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-29 12:31 , Processed in 1.353280 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表