学习python3,只学不练可不行啊,忘的快,所以来个xxx管理系统练练。哈哈哈
本人博客:
一、介绍
主题:学生信息管理系统
功能模块:
1.录入学生信息
2.查找学生信息
3.删除学生信息
4.修改学生信息
5.排序
6.统计学生人数
7.显示所有学生信息
0.退出系统
二、源码
# **************
# @Descripttion:
# @Vrsion: 1.0.0
# @Author: FENG
# @Date: 2022-02-27 17:04:50
# @LastEditors: FENG
# @LastEditTime: 2022-02-27 17:35:28
# **************
import os
filename = './student_manager/student.txt'
# -------------
# @description: 程序入口
# @author: feng
# @param {*}
# @return {*}
# -------------
def main():
while True:
menu()
choice = int(input('请您选择需要的功能:'))
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:
update()
elif choice == 5:
sort()
elif choice == 6:
total()
elif choice == 7:
showall()
else:
print('选择错误,请重新选择!')
main()
# -------------
# @description: 程序主菜单
# @author: feng
# @param {*} st
# @return {*}
# -------------
def menu():
print('=' * 40)
print('-' * 10, '功能菜单', '-' * 10)
print('\t' * 1 + '1.录入学生信息')
print('\t' * 1 + '2.查找学生信息')
print('\t' * 1 + '3.删除学生信息')
print('\t' * 1 + '4.修改学生信息')
print('\t' * 1 + '5.排序')
print('\t' * 1 + '6.统计学生人数')
print('\t' * 1 + '7.显示所有学生信息')
print('\t' * 1 + '0.退出系统')
l = []
# -------------
# @description: 新增一个学生的信息
# @author: feng
# @param {*}
# @return {*}
# -------------
def insert():
stu_list = []
while True:
id = input('请输入学生的id(如1001):')
# 如果id为空,退出
if not id:
print('学生id不能为空,请重新输入学生信息!')
continue
name = input('请输入学生的姓名:')
if not name:
print('学生姓名不能为空,请重新输入信息!')
continue
try:
engscore = int(input('请输入英语成绩:'))
pytscore = int(input('请输入python成绩:'))
javscore = int(input('请输入java成绩:'))
except:
print('输入无效,不是整数数字,请重新输入信息!')
continue
stu = {
'id': id,
'name': name,
'engscore': engscore,
'pytscore': pytscore,
'javscore': javscore
}
stu_list.append(stu)
answer = input('您还继续添加学生信息吗?(y/n):')
if answer == 'y' or answer == 'Y':
continue
else:
break
# 调用保存函数,存储学生信息到文件中
save(stu_list)
print('》〉》〉》学生信息下录入完毕!')
# -------------
# @description: 查询学生信息
# @author: feng
# @param {*}
# @return {*}
# -------------
def search():
stu_lst = []
lst = reload()
while True:
id = ''
name = ''
if not lst:
print('暂无学生信息!')
return
else:
model = input('按照ID查询请输入1,按照姓名查询请输入2:')
if model == '1':
id = input('请输入学生id:')
elif model == '2':
name = input('请输入学生姓名:')
else:
print('输入有误,请重新输入!')
search()
for item in lst:
if id != '':
if item['id'] == id:
stu_lst.append(item)
elif name != '':
if item['name'] == name:
stu_lst.append(item)
show_result(stu_lst)
stu_lst.clear()
answer = input('是否继续查询?(y/n):')
if answer == 'y' or answer == 'Y':
continue
else:
break
# -------------
# @description: 对传入的列表进行带格式渲染
# @author: feng
# @param {*} lst
# @return {*}
# -------------
def show_result(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成绩', '总成绩'))
for item in lst:
print(
format_title.format(
item['id'], item['name'], item['engscore'], item['pytscore'],
item['javscore'],
int(item['engscore']) + int(item['pytscore']) +
int(item['javscore'])))
# -------------
# @description: 删除一个学生信息
# @author: feng
# @param {*}
# @return {*}
# -------------
def delete():
lst = reload()
while True:
stu_id = input('请输入要删除的学生的id:')
if not stu_id:
print('输入为空,请重新输入!')
continue
# 如果读取到学生列表
flag = False
if lst:
with open(filename, 'w', encoding='utf-8') as originFile:
d = {}
for item in lst:
if item['id'] == stu_id:
# flag = True
lst.remove(item)
if flag:
print('id为' + stu_id + '的学生已经删除!')
save(lst)
else:
print('没有找到符合条件的学生!')
else:
print('暂无学生信息!')
break
showall()
answer = input('是否继续删除学生?(y/n):')
if answer == 'y':
continue
else:
break
# -------------
# @description: 修改一个学生信息
# @author: feng
# @param {*}
# @return {*}
# -------------
def update():
lst = reload()
print(lst)
while True:
stu_id = input('请输入要修改的学生的id:')
if not stu_id:
print('输入为空,请重新输入!')
continue
# 如果读取到学生列表,修改标志
flag = False
if lst:
with open(filename, 'w', encoding='utf-8') as originFile:
for item in lst:
if item['id'] == stu_id:
while True:
name = input('请输入学生的新名称:')
if not name:
print('学生名称为空,请重新输入!')
continue
item['name'] = name
try:
engscore = int(input('请输入新英语成绩:'))
pytscore = int(input('请输入新python成绩:'))
javscore = int(input('请输入新java成绩:'))
except:
print('输入无效,不是整数数字,请重新输入信息!')
continue
item['engscore'] = engscore
item['pytscore'] = pytscore
item['javscore'] = javscore
flag = True
break
break
if flag:
print('id为' + stu_id + '的学生信息修改成功!')
save(lst)
else:
print('没有找到符合条件的学生!')
else:
print('暂无学生信息!')
break
showall()
answer = input('是否继续修改学生信息?(y/n):')
if answer == 'y':
continue
else:
break
def sort():
lst = reload()
if not lst:
print('暂无学生!')
return
else:
asc_or_desc = input('请选择(0.升序,1.降序)')
if asc_or_desc != '0' and asc_or_desc != '1':
print('排序方式错误,请重新选择!')
sort()
elif asc_or_desc == '1':
asc_or_desc = True
elif asc_or_desc == '0':
asc_or_desc = False
model = input('请选择排序方式(1.按英语成绩,2.按python成绩,3.按java成绩,4.按总成绩):')
if model == '1':
lst.sort(key=lambda x: int(x['engscore']), reverse=asc_or_desc)
elif model == '2':
lst.sort(key=lambda x: int(x['pytscore']), reverse=asc_or_desc)
elif model == '3':
lst.sort(key=lambda x: int(x['javscore']), reverse=asc_or_desc)
elif model == '4':
lst.sort(key=lambda x: int(x['engscore']) + int(x['javscore']) +
int(x['pytscore']),
reverse=asc_or_desc)
else:
print('选择有误!请重新选择')
sort()
show_result(lst)
# -------------
# @description: 统计学生总人数
# @author: feng
# @param {*}
# @return {*}
# -------------
def total():
lst = reload()
print('所有学生数量:' + len(lst))
# -------------
# @description: 展示所有学生列表
# @author: feng
# @param {*}
# @return {*}
# -------------
def showall():
lst = reload()
show_result(lst)
# -------------
# @description: 将学生列表数据保存到文件中
# @author: feng
# @param {*} lst
# @return {*}
# -------------
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()
# -------------
# @description: 将文件中保存的学生信息读取到列表中
# @author: feng
# @param {*}
# @return {*}
# -------------
def reload():
lst = []
if os.path.exists(filename):
# stu_txt = open(filename, 'rw', encoding='utf-8')
# lst = stu_txt.readlines()
# stu_txt.close()
with open(filename, 'r', encoding='utf-8') as originFile:
lst2 = originFile.readlines()
for item in lst2:
d = dict(eval(item))
lst.append(d)
return lst
if __name__ == '__main__':
main()
三、运行截图