Python基础终于复习完了,之前也没有从项目分析的角度去写过一个项目,所以跟着娟姐的思路,从项目分析到code写一下吧!
该系统应该包括七个功能模块:
1.录入学生信息模块
2.查找学生信息模块
3.删除学生信息模块
4.修改学生信息模块
5.学生成绩排序模块
6.统计学生总人数
7.显示全部学生信息
def main():
while True:
menum()
try:
choice = int(input('请选择功能:'))
except ValueError:
print('请确保输入的是数字')
else:
if choice in range(0, 8):
if choice == 0:
ans = input('确定退出?y/n')
if ans == 'y' or ans == '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('无此功能,请输入0-7')
def insert():
stu_lst = []
while True:
id = input('请输入学号:')
if not id:
print('未输入')
break
name = input('请输入姓名:')
if not name:
print('未输入')
break
try:
english = int(input('请输入英语成绩:'))
chinese = int(input('请输入语文成绩:'))
math = int(input('请输入数学成绩:'))
except ValueError:
print('请输入正确格式的成绩')
continue
stu = {'学号': id, '姓名': name, '英语成绩': english, '语文成绩': chinese, '数学成绩': math}
stu_lst.append(stu)
x = input('是否继续添加?y/n:')
if x == 'n' or x == 'N':
break
else:
continue
try:
with open('stu.txt', 'a', encoding='utf-8') as file:
for item in stu_lst:
file.write(str(item) + '\n')
except:
with open('stu.txt', 'w', encoding='utf-8') as file:
for item in stu_lst:
file.write(str(item) + '\n')
def delete():
while True:
stu_id = input('请输入要删除的学生的学号')
if not stu_id:
continue
else:
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_old = file.readlines()
else:
stu_old = []
flag = False
if stu_old:
with open(filename, 'w', encoding='utf-8') as file:
d = {}
for item in stu_old:
d = dict(eval(item))
if d['学号'] != stu_id:
file.write(str(d) + '\n')
else:
flag = True
if flag:
print(f'学号为{stu_id}的学生信息已删除')
else:
print(f'没有找到学号为{stu_id}的学生')
else:
print('学生信息档案为空')
break
show()
ans = input('是否继续删除y/n')
if ans == 'y' or ans == 'Y':
continue
else:
break
def modify():
show()
while True:
stu_id = input('请输入要修改的学生的学号:')
if not stu_id:
print('未检索到该学生')
continue
else:
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_old = file.readlines()
else:
stu_old = []
if stu_old:
with open(filename, 'w', encoding='utf-8') as file:
d = {}
for item in stu_old:
d = dict(eval(item))
if d['学号'] != stu_id:
file.write(str(d) + '\n')
else: # 修改
id = input('请输入学号:')
if not id:
print('未输入')
id = d['学号']
name = input('请输入姓名:')
if not name:
print('未输入')
name = d['姓名']
try:
english = int(input('请输入英语成绩:'))
chinese = int(input('请输入语文成绩:'))
math = int(input('请输入数学成绩:'))
except ValueError:
print('请输入正确格式的成绩')
english = d['英语成绩']
chinese = d['语文成绩']
math = d['数学成绩']
stu = {'学号': id, '姓名': name, '英语成绩': english, '语文成绩': chinese, '数学成绩': math}
file.write(str(stu) + '\n')
print('修改完成')
else:
print('学生信息档案为空')
break
ans = input('是否继续修改y/n')
if ans == 'y' or ans == 'Y':
continue
else:
break
def search():
while True:
pattern = int(input('按学号查找输入1,按姓名查找输入2:'))
if pattern != 1 and pattern != 2:
print('请输入相应数字')
continue
elif pattern == 1:
stu_id = input('请输入要查找的学生的学号:')
if not stu_id:
print('无输入')
continue
else:
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_old = file.readlines()
else:
print('学生档案为空')
break
flag = False
if stu_old:
d = {}
for item in stu_old:
d = dict(eval(item))
if d['学号'] == stu_id:
print('已查到:' + str(item))
flag = True
if not flag:
print('未查到')
ans = input('是否继续查找y/n')
if ans == 'y' or ans == 'Y':
continue
else:
break
elif pattern == 2:
stu_name = input('请输入要查找的学生的姓名:')
if not stu_name:
print('无输入')
continue
else:
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_old = file.readlines()
else:
print('学生档案为空')
break
flag = False
if stu_old:
d = {}
for item in stu_old:
d = dict(eval(item))
if d['姓名'] == stu_name:
print('已查到:' + str(item))
flag = True
if not flag:
print('未查到')
ans = input('是否继续查找y/n')
if ans == 'y' or ans == 'Y':
continue
else:
break
def total():
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu_old = file.readlines()
else:
print('学生档案为空')
print(f'一共有{len(stu_old)}名学生')
def total():
with open(filename, 'r', encoding='utf-8') as file:
print(file.read())
def sort():
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as file:
stu = file.readlines()
d = {}
p = []
for item in stu:
d = eval(item)
p.append(d)
else:
print('学生档案为空')
try:
pattern = int(input('请选择排序模式-0升序,1降序:'))
if pattern == 0:
flag = False
elif pattern == 1:
flag = True
else:
print('请输入0/1')
return
mode = int(input('请选择排序依据,0按总成绩,1-3分别按英语语文数学:'))
except ValueError:
print('请输入数字')
return
if mode == 1:
p.sort(key=lambda d: int(d['英语成绩']), reverse=flag)
elif mode == 2:
p.sort(key=lambda d: int(d['语文成绩']), reverse=flag)
elif mode == 3:
p.sort(key=lambda d: int(d['数学成绩']), reverse=flag)
elif mode == 0:
p.sort(key=lambda d: int(d['英语成绩']) + int(d['语文成绩']) + int(d['数学成绩']), reverse=flag)
else:
print('输入有误,重新输入')
sort()
for item in p:
print(item)
在终端输入
pyinstaller -F 对应py文件的完整路径
生成成功,在我的python项目文件夹里的dist文件夹下,注意这个exe运行也需要stu.txt,所以复制一个过来。