第十五章
零、工程实践流程
面对一个工程要按照以下的步骤进行设计:
一、学生管理系统需求分析
二、学生管理系统系统设计
1、七大模块
2、思维导图
3、业务流程
三、学生管理系统系统开发必备
1、系统开发环境
操作系统是:win11
Python解释器版本:2020.1.2
开发工具:pycharm
Python内置模块:os,re
2、项目目录结构
在chap15中有一个保存学生信息的文件(由系统自动创建),还有一个实现集体功能的Python文件。
四、学生管理系统主函数设计
1、系统主界面效果图
2、业务流程图
3、主函数的实现
4、主函数代码
def main():
while True:
menu()
choice = int(input('请选择要办理的业务序号'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input('你真的要退出?y/n')
if answer == 'y' or answer == 'Y':
print('谢谢你的使用!!!!!')
break
else:
continue
elif choice == 1: '''若if要对应多个else记得用elif'''
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() # 显示所有学生信息
#elif type(choice) == str or choice not in [0, 1, 2, 3, 4, 5, 6, 7]:
else:
print('输入错误,请重新输入:')
continue
def menu():#主菜单
print('====================学生管理系统====================')
print('---------------------功能菜单----------------------')
print( '\t\t\t1、录入学生信息\n\t\t\t2、查找学生信息\n\t\t\t3、删除学生信息\n\t\t\t4、修改学生信息\n\t\t\t5、排序\n\t\t\t6、统计学生总人数\n\t\t\t7、显示所有学生信息\n\t\t\t0、退出系统')
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、实现结果
五、学生管理系统录入信息功能的设计
1、系统主界面效果图
2、业务流程图
3、具体实现
需要两个函数:
4、本部分代码
filename='student.txt'
def main():
while True:
menu()
choice = int(input('请选择要办理的业务序号'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input('你真的要退出?y/n')
if answer == 'y' or answer == 'Y':
print('谢谢你的使用!!!!!')
break
else:
continue
elif choice == 1:
'''若if要对应多个else记得用elif'''
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() # 显示所有学生信息
#elif type(choice) == str or choice not in [0, 1, 2, 3, 4, 5, 6, 7]:
else:
print('输入错误,请重新输入:')
continue
def menu():#主菜单
print('====================学生管理系统====================')
print('---------------------功能菜单----------------------')
print(
'\t\t\t1、录入学生信息\n\t\t\t2、查找学生信息\n\t\t\t3、删除学生信息\n\t\t\t4、修改学生信息\n\t\t\t5、排序\n\t\t\t6、统计学生总人数\n\t\t\t7、显示所有学生信息\n\t\t\t0、退出系统')
print('-------------------------------------------------')
def insert():#录入学生信息
student_list=[]
while True:
id=input('请输入ID(如1001):')
if not id:
print('输入的是空字符串!!!!!')
break
name=input('请输入姓名:')
if not name:
print('输入的是空字符串!!!!!')
break
try:
englist=int(input('请输入英语成绩:'))
Python=int(input('请输入python成绩:'))
java = int(input('请输入java成绩:'))
except:
print('输入无效,不是整数类型,请重新输入!!!!')
continue
#将录入的学生信息存入字典中
student={'id':id,'name':name,'englist':englist,'python':Python,'java':java}
#将学生信息添加到列表中
student_list.append(student)
answer=input('是否继续添加?y/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():
pass
def delete():
pass
def modify():
pass
def sort():
pass
def total():
pass
def show():
pass
if __name__=='__main__':#以主程序方式运行,在没编完代码是时候就起到作用了
main()
5、实现结果
我们可以看到输入的成绩等信息被录入到了一个叫student的txt文件里了:
六、学生管理系统录入信息功能的设计
1、系统主界面效果图
2、业务流程图
3、具体实现
4、delete部分代码
def delete():
while True:
id=input('请输入要删除的学生的ID:')
if 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 itemm in student_old:
d=dict(eval(item))
if d['id']!=id:
wfile.write(str(d)+'\n')
else:
flag=True
if flag:
print(f'ID为{id}的 学生信息已被删除')
else:
print(f'没有找到ID为{id}的学生信息')
else:
print('无学生信息')
break
show()
answer=input('继续删除吗?y/n\n')
if answer=='y':
continue
else:
break
5、实现结果
七、整体代码
import os
filename = 'stduent.txt'
def main():
while True:
caidan()
choice = int(input('请输入选项对应的数字:'))
if choice in [1, 2, 3, 4, 5, 6, 7, 8]:
if choice == 8:
b = input('您真的要退出系统吗?(y/n)')
if b == 'y' or b == 'Y':
print('谢谢您的使用')
break
else:
continue
elif choice == 1:
luru()
elif choice == 2:
chazhao()
elif choice == 3:
shanchu()
elif choice == 4:
xiugai()
elif choice == 5:
paixu()
elif choice == 6:
tongji()
elif choice == 7:
xianshi()
def caidan():
print('=======================学生信息管理系统=============================')
print('-----------------------------------------------------------------')
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\t8.退出系统')
print('-----------------------------------------------------------------')
def luru():
while True:
studentlist = []
id = input('请输入学号:')
if not id: # 空字符的返回值是flase
break
name = input('请输入学生姓名:')
if not name:
break
try:
english = int(input('请输入英语成绩:'))
java = int(input('请输入java成绩:'))
python = int(input('请输入python成绩:'))
except:
print('输入无效,请重新输入')
continue
student = {'id': id, 'name': name, 'english': english, 'java': java, 'python': python}
studentlist.append(student)
baocun(studentlist)
answer = input('是否继续录入(y/n):')
if answer == 'y':
continue
else:
break
print('学生信息录入完毕')
def baocun(lst):
try:
stutxt = open(filename, 'a', encoding='utf-8')
except:
stutxt = open(filename, 'w', encoding='utf-8')
for i in lst:
stutxt.write(str(i) + '\n')
stutxt.close()
def chazhao():
student = []
while True:
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8')as rfile:
c = rfile.readlines()
id = ''
nmae = ''
a = input('请问采取什么方式查找,学号按1,姓名按2:')
if a == '1':
id = input('请输入学号:')
elif a == '2':
name = input('请输入姓名:')
else:
print('你的输入结果错误,请重新输入')
continue
with open(filename, 'r', encoding='utf-8')as rfile:
for i in c:
d = dict(eval(i))
if id != '':
if d['id'] == id:
student.append(d)
elif name != '':
if d['name'] == name:
student.append(d)
show(student)
student.clear()
answer = input('是否继续查找(y/n):')
if answer == 'y':
continue
else:
break
def show(lst):
if len(lst) == 0:
print('没有查到学生信息,无数据显示')
return
title = '{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^8}'
print(title.format('学号', '姓名', '英语成绩', 'Python成绩', 'Java成绩', '总成绩'))
data = '{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^12}'
for i in lst:
print(data.format(i.get('id'),
i.get('name'),
i.get('english'),
i.get('java'),
i.get('python'),
int(i.get('english')) + int(i.get('java')) + int(i.get('python'))
))
def shanchu():
while True:
a = input('请输入要被删除学生的id:')
if a != '':
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8')as file:
b = file.readlines() # 返回值是列表
else:
b = []
flag = False
if b:
with open(filename, 'w', encoding='utf-8')as wfile:
d = {}
for i in b:
d = dict(eval(i)) # 将在字符串转换成字典
if d['id'] != a:
wfile.write(str(d) + '\n')
else:
flag = True
if flag:
print('该学生的信息已被删除')
else:
print('未找到id')
else:
print('无学生信息')
break
xianshi()
c = input('请问还要继续删除学生信息吗(y/n):')
if c == 'y' or c == 'Y':
continue
else:
break
def xiugai():
xianshi()
while True:
a = input('请输入要修改信息的学生的学号:')
if a != '':
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8')as file:
b = file.readlines()
else:
b = []
flag = False
if b:
with open(filename, 'w', encoding='utf-8')as wfile:
for i in b:
d = dict(eval(i))
if d['id'] == a:
print('找到相关学生的信息了!')
while True:
try:
d['name'] = input('请输入姓名:')
d['english'] = int(input('请输入英语成绩:'))
d['java'] = int(input('请输入java成绩:'))
d['python'] = int(input('请输入python成绩:'))
except:
print('输入有错误,请重新输入')
continue
else:
wfile.write(str(d) + '\n')
flag = True
break
else:
wfile.write(str(d) + '\n')
else:
print('无学生信息')
break
if flag:
print('修改成功')
else:
print('未找到该id的同学')
xianshi()
c = input('请问还要进行修改吗(y/n):')
if c == 'y':
continue
else:
break
def paixu():
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8')as rfile:
students = rfile.readlines()
student_list = []
for i in students:
student_list.append(eval(i))
else:
return
arr = input('请选择(0.升序/1.降序):')
if arr == '0':
brr = False
elif arr == '1':
brr = True
else:
print('您的输入有错误')
paixu()
mode = input('请输入排序依据(0.按英语成绩/1.按java成绩/2.按python成绩/3.按总成绩):')
if mode == 'o':
student_list.sort(key=lambda x: int(x['english']), reverse=brr)
elif mode == '1':
student_list.sort(key=lambda x: int(x['java']), reverse=brr)
elif mode == '2':
student_list.sort(key=lambda x: int(x['python']), reverse=brr)
elif mode == '3':
student_list.sort(key=lambda x: int(x['english']) + int(x['java']) + int(x['python']), reverse=brr)
else:
print('您的输入有错误!!!')
paixu()
show(student_list)
def tongji():
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 xianshi():
student_list = []
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8')as rfile:
students = rfile.readlines()
for i in students:
student_list.append(eval(i))
if student_list:
show(student_list)
else:
print('暂未保存过信息!!!')
main()