本项目编写简单,属于初学者的练手小程序,可以实现学生信息的录入、查找、删除、修改、排序、统计、显示所有学生信息功能,目前数据是保存在文本文件中,后面等我学习了Python数据库,会再出一个保存到数据库版本的学生信息管理程序。
程序展示 主界面 录入学生信息 查找学生信息可以按照id与姓名查找
修改指定学生的成绩
支持升序降序,多种排序方式
以列表的方式显示所有学生信息
# 作者: 陈腾
# 开发时间:2022-01-15 21:41
import os.path
import time
from prettytable import PrettyTable
filename = 'student_info.txt'
u = PrettyTable(['ID', '姓名', 'Go', 'Python', 'English'])
def menum():
print('======================学生信息管理系统==========================')
print('=========================功能菜单=============================')
print('1、录入学生信息'.center(50))
print('2、查找学生信息'.center(50))
print('3、删除学生信息'.center(50))
print('4、修改学生信息'.center(50))
print('5、排序'.center(45))
print('6、统计学生总人数'.center(52))
print('7、显示所有学生信息'.center(52))
print('0、退出'.center(45))
print('==============================================================')
def main():
while True:
menum()
try:
choice = int(input('请选择[0-7]:'))
if choice in range(0, 8):
if choice == 0:
answer = input('您确定要退出系统吗?y/n')
if answer == 'y' or answer == 'Y':
print('欢迎下次使用!')
break
else:
print('下次摁错就揍你!')
time.sleep(1)
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()
except :
print('您输入的命令格式有误,请重新输入')
continue
def insert():
global golang, python, english
student_list = []
while True:
name = input("请输入学生姓名:")
if not name:
print('请输入姓名')
break
try:
id = int(input("请输入学生ID:"))
golang = int(input("Go语言成绩是:"))
python = int(input('python语言成绩是:'))
english = int(input('英语成绩是:'))
except:
print('请输入有效的整数,重新输入')
continue
student_info = {'id': id, 'name': name, 'golang': golang, 'python': python, 'english': english}
student_list.append(student_info)
save(name, student_list)
answer = input('是否继续添加?y/n')
if answer == 'y' or answer == 'Y':
continue
else:
break
def save(name, list):
with open(filename, 'a', encoding='utf-8') as stu_txt:
for item in list:
stu_txt.write(str(item) + 'n')
print('学生{0}信息保存成功'.format(name))
def search():
while True:
if os.path.exists(filename):
answer = int(input("希望根据ID或者姓名查询(0为退出)?(1/2/0)"))
if answer == 1:
try:
while True:
student_id = int(input('请输入学生ID:'))
if student_id in Stu.id('id'):
Stu.searchid(student_id)
else:
print('未查询到该学生')
break
except:
print('您的输入有误请重新输入')
break
elif answer == 2:
try:
while True:
student_name = input('请输入学生姓名:')
if student_name in Stu.name('name'):
Stu.searchname(student_name)
else:
print('未查询到该学生')
break
except:
print('您的输入有误请重新输入')
break
elif answer == 0:
break
else:
print('请输入0-3的选项内容')
continue
def exits():
if os.path.exists(filename):
a = True
else:
a = False
return a
def table(list):
for i in list:
d = dict(eval(str(i)))
u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
print(u)
u.clear_rows()
def delete():
while True:
try:
show()
student_id = int(input('请输入要删除的ID:'))
except ValueError:
print('您输入的ID有误,请重新输入')
continue
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 != '': # 上面的判断,如果文件存在这个列表才会有值,不存在会为空,进入else的分支
with open(filename, 'w', encoding='utf-8') as oldfile:
d = {}
for item in student_old:
d = dict(eval(item))
if d['id'] != student_id:
oldfile.write(str(d) + 'n')
else:
flag = True
if flag:
print('ID为{0}的学生信息已被删除'.format(student_id))
else:
print('没有找到ID为{0}的学生,请重新输入或添加该学生'.format(student_id))
time.sleep(1)
break
else:
print('您还没有录入学生信息,学生信息为空')
break
show()
answer = input('是否继续删除?y/n')
if answer == 'y' or answer == 'Y':
continue
else:
break
def modify():
if exits():
with open(filename, 'r', encoding='utf8') as readfile:
stu_list = readfile.readlines()
student_id=int(input('请输入要修改的学生ID:'))
with open(filename, 'w', encoding='utf8') as writefile:
for i in stu_list:
d=dict(eval(i))
if d['id'] == student_id:
print('找到学生信息可以修改了')
while True:
try:
new_golang = int(input("Go语言成绩是:"))
new_python = int(input('python语言成绩是:'))
new_english = int(input('英语成绩是:'))
d['golang'] = new_golang
d['python'] = new_python
d['english'] = new_english
break
except:
print('您的输入有误,请重新输入')
continue
writefile.write(str(d)+'n')
print('修改成功')
writefile.close()
show()
else:
writefile.write(str(d)+'n')
def sort():
while True:
if exits():
d = {}
with open(filename, 'r', encoding='utf8') as file:
stu_list = file.readlines()
stu_list_new = []
if stu_list:
for item in stu_list:
d = dict(eval(item))
stu_list_new.append(d)
else:
print('学生信息为空')
break
asc_or_desc = input('请选择升序(1)降序(2)退出(0)')
if asc_or_desc == '1':
asc_or_desc_bool = False
elif asc_or_desc == '2':
asc_or_desc_bool = True
elif asc_or_desc == '0':
break
else:
print('请输入1或者2选项')
continue
mode = input('请选择排序方式:n1--英语成绩排序n2--Python成绩排序n3--Go成绩培训n4--总成绩排序n:')
tag = True
while True:
if mode == '1':
stu_list_new.sort(key=lambda x: int(x['english']), reverse=asc_or_desc_bool)
table(stu_list_new)
break
elif mode == '2':
stu_list_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool)
table(stu_list_new)
break
elif mode == '3':
stu_list_new.sort(key=lambda x: int(x['golang']), reverse=asc_or_desc_bool)
table(stu_list_new)
break
elif mode == '4':
stu_list_new.sort(key=lambda x: int(x['golang']) + int(x['english']) + int(x['python']),
reverse=asc_or_desc_bool)
table(stu_list_new)
break
else:
print('您输入的有误,请重新输入')
break
else:
print('您还没有录入学生信息,学生信息为空')
break
def total():
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_list = file.readlines()
if stu_list:
print("当前系统共录入学生{0}人".format(len(stu_list)))
show()
else:
print('学生信息为空')
else:
print('您还没有录入学生信息,学生信息为空')
def show():
while True:
if os.path.exists(filename):
Stu.info('info')
break
else:
print('您还没有录入学生信息,学生信息为空')
break
class Stu():
def __init__(self,id,name):
self.id=id
self.name=name
def id(self):
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as id:
stu_list = id.readlines()
d = {}
list=[]
for item in stu_list:
d = dict(eval(item))
list.append(d[str('id')])
return list
def name(self):
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as id:
stu_list = id.readlines()
d = {}
list=[]
for item in stu_list:
d = dict(eval(item))
list.append(d[str('name')])
return list
def golang(self):
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as id:
stu_list = id.readlines()
d = {}
list=[]
for item in stu_list:
d = dict(eval(item))
list.append(d[str('golang')])
return list
def python(self):
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as id:
stu_list = id.readlines()
d = {}
list=[]
for item in stu_list:
d = dict(eval(item))
list.append(d[str('python')])
return list
def english(self):
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as id:
stu_list = id.readlines()
d = {}
list=[]
for item in stu_list:
d = dict(eval(item))
list.append(d[str('english')])
return list
def searchid(self):
with open('student_info.txt', 'r', encoding='utf-8') as id:
stu_list = id.readlines()
print(len(stu_list))
d = {}
for item in stu_list:
d = dict(eval(item))
if d['id'] == self:
u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
print(u)
def searchname(self):
with open('student_info.txt', 'r', encoding='utf-8') as file:
stu_list = file.readlines()
d = {}
for item in stu_list:
d = dict(eval(item))
if d['name'] == self:
u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
print(u)
def info(self):
with open('student_info.txt', 'r', encoding='utf-8') as file:
stu_list = file.readlines()
d = {}
if stu_list:
for item in stu_list:
d = dict(eval(item))
u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
print(u)
u.clear_rows()
else:
print('学生信息为空')
file=False
return file
if __name__ == '__main__':
main()



