学生管理系统【Python】
【摘要】
学生管理系统
前言1.需求分析2.系统设计3.系统开发必备4.主函数设计5.学生信息维护模块设计5.1 录入学生信息功能5.2 删除学生信息功能5.3 修改学生信息功能
6.查询/统计模块设计...
前言
本文介绍用Python实现学生管理系统,本文其实是我的一篇长文的第一章内容,这里把它单独截出来,方便大家的观看,本文的代码均为可执行代码,建议读者边看代码边动手敲写一遍,代码不算复杂,读者只需要跟着我的代码以及代码思路就可以轻松的实现学生管理系统。
1.需求分析
学生管理系统应具备的功能
1.添加学生及成绩信息
2.将学生信息保存到文件中
3.修改和删除学生信息
4.查询学生信息
5.根据学生成绩进行排序
6.统计学生的总分
2.系统设计
系统功能结构
学生信息管理系统的7大模块
1.录入学生信息模块
2.查找学生信息模块
3.删除学生信息模块
4.修改学生信息模块
5.学生成绩排名模块
6.统计学生总人数模块
7.显示全部学生信息模块
系统业务流程
3.系统开发必备
1.系统开发环境
a.操作系统:win10
b.Python解释器版本 :Python3.10
c.开发工具:PyCharm
d.Python内置模块:os ,re
2.项目目录结构
4.主函数设计
系统主界面运行效果图:
主函数的业务流程
实现主函数
编号 | 功能 |
---|---|
0 | 退出系统 |
1 | 录入学生信息,调用 insert() 函数 |
2 | 查找学生信息,调用 search() 函数 |
3 | 删除学生信息,调用 delete() 函数 |
4 | 修改学生信息,调用 modify() 函数 |
5 | 对学生成绩排序,调用 sort() 函数 |
6 | 统计学生总人数,调用 total() 函数 |
7 | 显示所有的学生信息,调用 show() 函数 |
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 12:25
# 欢迎大家关注AIoT相关博客~
def main():
while True:
menu()
choice = int(input('请选择:'))
if choice in range(8):
if choice == 0:
flag = True
while True:
answer = input('您确定要退出系统吗?y/n:')
if answer == 'y' or answer == 'Y':
print('感谢您的使用!!!')
break # 退出 y/n 循环
elif answer == 'n' or answer == 'N':
flag = False # 更改 flag 的值
break # 退出 y/n 循环
else: # 输入了未知的字符,重新输入
print('输入错误,请重新输入', end=' ')
if flag: # flag = True代表退出
break # 退出循环
else: # flag = False代表不退出
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 menu():
print('==========================学生信息管理系统==========================')
print('-----------------------------功能菜单-----------------------------')
print('\t\t\t\t\t\t 1.录入学生信息')
print('\t\t\t\t\t\t 2.查找学生信息')
print('\t\t\t\t\t\t 3.删除学生信息')
print('\t\t\t\t\t\t 4.修改学生信息')
print('\t\t\t\t\t\t 5.排序')
print('\t\t\t\t\t\t 6.统计学生总人数')
print('\t\t\t\t\t\t 7.显示所有学生信息')
print('\t\t\t\t\t\t 0.退出')
print('-----------------------------------------------------------------')
def insert():
pass
def search():
pass
def delete():
pass
def modify():
pass
def sort():
pass
def total():
pass
def show():
pass
if __name__ == '__main__':
main()
.
5.学生信息维护模块设计
5.1 录入学生信息功能
实现录入学生信息功能
从控制台录入学生信息,并且把它们保存到磁盘文件中
业务流程
具体实现
save(student)函数,用于将学生信息保存到文件
insert()函数,用于录入学生信息
因为我们要反复用到保存信息的磁盘文件,故我们在代码最开始定义一个变量:
filename = 'student.txt'
insert() 函数:
def insert():
student_list = []
while True:
id = input('请输入ID(如1001):')
if not id:
break
name = input('请输入姓名:')
if not name:
break
try:
englist = int(input('请输入英语成绩:'))
python = int(input('请输入Python成绩:'))
java = int(input('请输入Java成绩:'))
except:
print('输入无效,不是整数类型,请重新输入')
continue
#将录入的学生信息保存到字典中
student={'id':id, 'name':name, 'english':englist, 'python':python, 'java':java}
#将学生信息添加到列表中
student_list.append(student)
answer=input('是否继续添加?y/n\n')
if answer=='y':
continue
else:
break
#调用save()函数
save(student_list)
print('学生信息录入完毕!!!')
save() 函数:
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')
stu_txt.close()
运行实例:
查看一下我们的 student.txt
文件:
{'id': '1001', 'name': '辰chen', 'english': 60, 'python': 100, 'java': 60}
{'id': '1002', 'name': '娇妹儿', 'english': 70, 'python': 100, 'java': 90}
{'id': '1003', 'name': '枭哥', 'english': 80, 'python': 90, 'java': 90}
5.2 删除学生信息功能
实现修改学生信息功能
从控制台录入学生ID,到磁盘文件中找到对应的学生信息,将其进行修改
业务流程
具体实现
编写主函数中调用的删除学生信息的函数delete()
调用了show()函数显示学生信息,该函数的功能将在后面完成
show() 函数会在后面实现,这里实现 delete() 函数,需导入 os:
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:
break
student.txt 文档:
{'id': '1002', 'name': '娇妹儿', 'english': 70, 'python': 100, 'java': 90}
{'id': '1003', 'name': '枭哥', 'english': 80, 'python': 90, 'java': 90}
5.3 修改学生信息功能
实现修改学生信息功能
从控制台录入学生ID,到磁盘文件中找到对应的学生信息,将其进行修改
业务流程
具体实现
编写主函数中调用的修改学生信息的函数modify()
调用了show()函数显示学生信息,该函数的功能将在后面完成
def 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:')
if student_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()
student.txt 文档:
{'id': '1002', 'name': '娇妹儿', 'english': 70, 'python': 100, 'java': 90}
{'id': '1003', 'name': '枭哥', 'english': 80, 'python': 90, 'java': 90}
{'id': '1001', 'name': '辰chen', 'english': '65', 'python': '100', 'java': '60'}
6.查询/统计模块设计
6.1 查找学生信息功能
*实现查询学生信息功能
从控制台录入学生ID或姓名,到磁盘文件中找到对应的学生信息
业务流程
具体实现
编写主函数中调用的查找学生信息的函数search()
定义显示查询结果的函数show_student(query_student)
search() 函数:
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('暂未保存学生信息')
return
show_student() 函数:
def 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{:^8}\t{:^8}\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'))
))
6.2 统计学生总人数功能
实现统计学生总人数功能
统计学生信息文件中保存的学生信息个数
业务流程
total() 函数:
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('暂未保存数据信息.....')
6.3 显示所有学生信息功能
实现显示所有学生信息功能
将学生信息文件中保存的全部学生信息获取并显示
业务流程
show() 函数:
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('暂未保存过数据!!!!')
7.排序模块设计
实现按学生成绩排序功能
主要对学生信息按英语成绩、Python成绩、Java成绩、总成绩进行升序或降序排序
业务流程
sort() 函数:
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)
8.项目打包
安装第三方模块
在线安装方式
Windows + R 打开 cmd,输入pip install PyInstaller
下载等待:
下载完成:
执行打包操作
输入:pyinstaller -F 文件路径
文件路径就是我们写好的 stusystem.py 的绝对路径
再把文件名给复制进来:
回车后等待生成可执行文件:
红圈圈住的就是生成的可执行文件地址,根据地址可找到我们的文件。
9.总结与完整代码
9.1 总结
都说学生管理系统已经是个烂大街的项目,但是确确实实第一次完整的设计并敲出代码还是有些费时间,不得不承认,这是一个很适合初学者的小项目,希望读者能在理解代码的基础之上自己独立完整的敲打一遍;本文的代码还有一些不足之处,只能说是学生管理系统的大模板,代码健壮性很差,读者可以自己完善代码,多使用 try catch 来应对异常的处理。另外,对于文件的操作希望读者掌握,这些操作在以后的工作之中会经常的使用。
9.2 完整代码
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 12:25
# 欢迎大家关注AIoT相关博客~
import os
filename = 'student.txt'
def main():
while True:
menu()
choice = int(input('请选择:'))
if choice in range(8):
if choice == 0:
flag = True
while True:
answer = input('您确定要退出系统吗?y/n:')
if answer == 'y' or answer == 'Y':
print('感谢您的使用!!!')
break # 退出 y/n 循环
elif answer == 'n' or answer == 'N':
flag = False # 更改 flag 的值
break # 退出 y/n 循环
else: # 输入了未知的字符,重新输入
print('输入错误,请重新输入', end=' ')
if flag: # flag = True代表退出
break # 退出循环
else: # flag = False代表不退出
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 menu():
print('==========================学生信息管理系统==========================')
print('-----------------------------功能菜单-----------------------------')
print('\t\t\t\t\t\t 1.录入学生信息')
print('\t\t\t\t\t\t 2.查找学生信息')
print('\t\t\t\t\t\t 3.删除学生信息')
print('\t\t\t\t\t\t 4.修改学生信息')
print('\t\t\t\t\t\t 5.排序')
print('\t\t\t\t\t\t 6.统计学生总人数')
print('\t\t\t\t\t\t 7.显示所有学生信息')
print('\t\t\t\t\t\t 0.退出')
print('-----------------------------------------------------------------')
def insert():
student_list = []
while True:
id = input('请输入ID(如1001):')
if not id:
break
name = input('请输入姓名:')
if not name:
break
try:
englist = int(input('请输入英语成绩:'))
python = int(input('请输入Python成绩:'))
java = int(input('请输入Java成绩:'))
except:
print('输入无效,不是整数类型,请重新输入')
continue
#将录入的学生信息保存到字典中
student={'id':id, 'name':name, 'english':englist, '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')
stu_txt.close()
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('暂未保存学生信息')
return
def 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{:^8}\t{:^8}\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:
break
def 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:')
if student_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()
文章来源: chen-ac.blog.csdn.net,作者:辰chen,版权归原作者所有,如需转载,请联系作者。
原文链接:chen-ac.blog.csdn.net/article/details/122287396
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)