Python学习
学生管理系统
- 学生管理系统功能
- 录入学生信息模块
- 查找学生信息模块
- 删除学生信息模块
- 修改学生信息模块
- 学生成绩排名模块
- 统计学生总人数模块
- 显示全部学生信息模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nccxv5yT-1654696772160)(D:\Typora笔记\Python学习\第五天学习\功能模块.png)]
- 系统开发环境
- 操作系统:win10
- Python解释器版本:Python3.8
- 开发工具:pycharm
- Python内置模块:os,re
整体代码:
# author:wwj
# time:2022/6/8 10:42
import time
import os.path
filename = r'studentInformation.txt'
def main():
while True:
menu()
try:
choice = int(input('请输入你想要使用的功能:\t'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0: # 退出系统
answer = input('确定要退出系统吗? y/n')
if answer.lower() == '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()
else:
print('输入的功能模块数字错误,请重新输入!')
time.sleep(1)
continue
except:
print('输入的字符非数字,请重新输入!')
time.sleep(1)
continue
# 功能菜单 函数
def menu():
print('\t\t=================学生信息管理系统=================\t\t')
print('\t\t-------------------功能菜单-------------------\t\t')
print('\t\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t\t2.查找学生信息')
print('\t\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t\t5.排序')
print('\t\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t\t0.退出系统')
# 录入学生信息 函数
def insert():
student_list = []
while True:
ID = input('请输入学生的ID(如10001):\t')
if not ID: # ID 为空
break
name = input('请输入学生的姓名:\t')
if not name: # 姓名为空
break
try:
english = int(input('请输入英语成绩:\t'))
java = int(input('请输入java成绩:\t'))
python = int(input('请输入python成绩:\t'))
except:
print('输入的成绩有误,不是整数,请重新输入!')
time.sleep(1) # 休眠1秒
continue
# 将录入的学生 保存到 字典中
student = {'id': ID, 'name': name, 'english': english, 'java': java, 'python': python}
# 将学生字典信息 添加到 学生列表中
student_list.append(student)
answer = input('是否继续添加学生信息 y/n \n')
if answer.lower() == 'y':
continue
else:
break
# 将学生列表信息保存到 文件 当中
save(student_list)
print('学生信息录入完毕!!!')
def save(list1):
with open(filename, 'a+', encoding='utf-8') as file:
# file.write(list1) 这种写入不换行
for item in list1:
file.write(str(item) + '\n')
# 查找学生信息 函数
def search():
while True:
print('欢迎使用查找学生信息的功能模块')
with open(filename, 'r', encoding='utf-8') as file:
flag = False # 标记是否查询到了,初始值为 False,表明还未查询到
student_list = file.readlines()
if not student_list:
print('无学生信息')
time.sleep(1)
break
else:
print('模式1 表示 按学生ID 查询')
print('模式2 表示 按学生姓名 查询')
mode = input('请输入按哪种模式进行查询 输入 1 或 2')
if mode == '1':
ID = input('请输入你要查询的学生的ID\t')
if ID != '':
if os.path.exists(filename):
for item in student_list:
temp = eval(item)
if temp['id'] == ID:
flag = True # 表示已经查询到了
break # 找到了就立马退出循环,不用再读文件了
if flag:
print(f'ID为{ID}的学生的信息为:\n')
print('该学生的ID为:{0}'.format(temp['id']))
print('该学生的姓名为:{0}'.format(temp['name']))
print('该学生的英语成绩为:{0}'.format(temp['english']))
print('该学生的java成绩为:{0}'.format(temp['java']))
print('该学生的python成绩为:{0}'.format(temp['python']))
print('该学生的总成绩为:{0}'.format(int(temp['english']) + int(temp['java']) + int(temp['python'])))
else:
print(f'没有找到ID为{ID}的学生信息\n')
else:
print('不允许为空,请输入学生的ID:\t')
time.sleep(1)
elif mode == '2':
name = input('请输入你要查询的学生的姓名\t')
if name != '':
if os.path.exists(filename):
for item in student_list:
temp = eval(item)
if temp['name'] == name:
flag = True # 表示已经查询到了
break # 找到了就立马退出循环,不用再读文件了
if flag:
print(f'姓名为{name}的学生的信息为:\n')
print('该学生的ID为:{0}'.format(temp['id']))
print('该学生的姓名为:{0}'.format(temp['name']))
print('该学生的英语成绩为:{0}'.format(temp['english']))
print('该学生的java成绩为:{0}'.format(temp['java']))
print('该学生的python成绩为:{0}'.format(temp['python']))
print('该学生的总成绩为:{0}'.format(int(temp['english']) + int(temp['java']) + int(temp['python'])))
else:
print(f'没有找到姓名为{name}的学生信息\n')
else:
print('不允许为空,请输入学生的姓名:\t')
time.sleep(1)
else:
print('输入的模式有误,请重新输入!!')
answer = input('是否继续查找学生信息 y/n \n')
if answer.lower() == 'y':
continue
else:
break
# 删除学生信息 函数
def delete():
while True:
ID = input('请输入你要删除的学生的ID\t')
if ID != '':
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
student_list = file.readlines()
else:
student_list = []
flag = False # 标记是否删除,初始值为 False,表明还未删除
if student_list:
with open(filename, 'w', encoding='utf-8') as wfile:
temp = {}
for item in student_list: # in 后面不能接 wfile.readlines() ,这是以 w 的方式打开的
temp = eval(item)
if temp['id'] != ID:
wfile.write(str(temp) + '\n')
else:
flag = True # 表示已经删除
if flag:
print(f'ID为{ID}的学生的信息已被删除')
else:
print(f'没有找到ID为{ID}的学生信息')
else:
print('无学生信息')
time.sleep(1)
break
show() # 删除之后重新显示学生信息
answer = input('是否继续删除学生信息 y/n \n')
if answer.lower() == 'y':
continue
else:
break
# 修改学生信息 函数 这个函数没有按照 杨老师 视频中的来,根据自己的思路 写的
def modify():
while True:
try:
with open(filename, 'r', encoding='utf-8') as rfile:
student_list = rfile.readlines() # 读取所有的学生信息
except:
print('不存在记录学生信息的文件!!!')
time.sleep(1)
break
if student_list:
show() # 显示学生信息
flag = False # 记录学生信息是否已经修改
ID = input('请输入要修改学生信息的ID:\t')
with open(filename, 'w', encoding='utf-8') as wfile:
for item in student_list:
temp = eval(item)
if temp['id'] == ID:
temp['name'] = input('请输入要修改学生信息的姓名:\t')
try:
temp['english'] = int(input('请输入该学生的英语成绩\t'))
temp['java'] = int(input('请输入该学生的java成绩\t'))
temp['python'] = int(input('请输入该学生的python成绩\t'))
except:
print('你输入的成绩不是整数,请重新输入!')
time.sleep(1)
break
wfile.write(str(temp) + '\n')
flag = True
else:
wfile.write(str(temp) + '\n')
if flag:
print('该学生的信息已经修改完成!!!')
show()
answer = input('是否还需要修改学生的信息 y/n \n')
if answer.lower() == 'y':
continue
else:
break
else:
print('没有找到该学生的信息!!!')
continue
else:
print('无学生信息')
time.sleep(1)
break
# 排序 函数
def sort():
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as file:
student_list=file.readlines()
student_new=[]
for item in student_list:
temp = eval(item)
student_new.append(temp)
else:
print('没有相关记录学生信息的文件!!')
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 按 java 成绩排序 ; 3 按 python 成绩排序 ; 4 按 总成绩 排序)')
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['java']),reverse=asc_or_desc_bool)
elif mode=='3':
student_new.sort(key= lambda x : int(x['python']),reverse=asc_or_desc_bool)
elif mode=='4':
student_new.sort(key= lambda x : (int(x['english']+int(x['java']+int(x['python'])),reverse=asc_or_desc_bool)))
else:
print('你输入的方式有误,请重新输入!!')
sort()
print('\tID\t\t姓名\t\t英语成绩\t\tjava成绩\t\tpython成绩\t\t总成绩')
for item in student_new:
print(
'\t{0}\t{1}\t\t\t{2}\t\t\t{3}\t\t\t{4}\t\t\t{5}'.format(item['id'], item['name'], item['english'],
item['java'],
item['python'], (int(item['english']) + int(
item['java']) + int(item['python']))))
time.sleep(1)# 休眠一秒,用于观察结果
# 统计学生总人数 函数
def total():
with open(filename, 'r', encoding='utf-8') as file:
student_list = file.readlines()
if student_list:
print('一共有{0}名学生'.format(len(student_list)))
time.sleep(2)
else:
print('无学生信息')
# 显示所有学生信息 函数
def show():
with open(filename, 'r', encoding='utf-8') as file:
student_list = file.readlines()
print('\tID\t\t姓名\t\t英语成绩\t\tjava成绩\t\tpython成绩\t\t总成绩')
for item in student_list:
# print(item) <class 'str'>
# print(type(item))
temp = eval(item) # eval() 是用来 将 str 转换成 dict 类型的方法
# dict 内置函数 是这样用的 dict(name='wwj', age=20) 这样子才能转换 形成一个字典
# print(temp)
# print(type(temp))
# print(temp['python'])
print(
'\t{0}\t{1}\t\t\t{2}\t\t\t{3}\t\t\t{4}\t\t\t{5}'.format(temp['id'], temp['name'], temp['english'],
temp['java'],
temp['python'], (int(temp['english']) + int(
temp['java']) + int(temp['python']))))
time.sleep(1)
if __name__ == '__main__':
main()
代码压缩包地址:
链接:https://pan.baidu.com/s/1gmh7ezKOccMst_s9D1JbwA
提取码:rn76
打包成exe文件
-
即使对方没有安装python环境,也能运行你用python代码打包好的exe文件
-
首先安装PyInstaller模块
- 建议使用清华源
- 格式:pip install PyInstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
- 打包成exe方法:pyinstaller -F py文件的路径
exe文件地址:
链接:https://pan.baidu.com/s/1TiXkqsvPWLi_szwduxoTQw
提取码:vh2m