前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能从入门到精通教程
1、需求分析
2、系统设计
3、系统开发必备
4、主函数设计
5、学生信息维护模块设计
6、查询/统计模块设计
7、排序模块设计
8、项目打包
系统功能结构
学生信息管理系统
实现主函数
编号 | 功能 |
---|---|
0 | 退出系统 |
1 | 录入学生信息,调用insert()函数 |
2 | 查找学生信息,调用search()函数 |
3 | 删除学生信息,调用delete()函数 |
4 | 修改学生信息,调用modify()函数 |
5 | 对学生成绩排序,调用sort()函数 |
6 | 统计学生总人数,调用total()函数 |
7 | 显示所有的学会信息,调用show()函数 |
stusystem.py
import os
filename = 'students.txt'
def main():
"""这个是一直循环,后面的录入查询退出了还会显示菜单,提醒选择数字重头再来"""
while True:
menum() # 显示菜单
"""输入数字选择你的操作"""
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:
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('输入错误!!!')
def menum():
"""显示菜单"""
print('====================学生信息管理系统=====================')
print('---------------------功能菜单--------------------------')
print('\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t2.查找学生信息')
print('\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t5.排序')
print('\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t0.退出')
print('-----------------------------------------------------')
def insert():
"""录入学生信息,并存储"""
student_list = [] # 用于存储学生信息的列表
while True:
id = input('请输入ID(001到100整数):')
if not id: # 录入的ID为空,如enter键什么的
break # 退出循环
"""确保输入整数"""
try:
a = int(id) # 输入的ID不是整数
except:
print('输入ID错误,请重新输入')
continue
"""确保输入100内整数"""
if int(id) not in range(1, 101):
print('输入ID超过100,请重新输入')
continue
name = input('请输入姓名:')
if not name:
break
try:
english = int(input('请输入英语成绩:'))
python = int(input('请输入python成绩:'))
java = int(input('请输入Java成绩:'))
except: # 输入了内容,但输入的不是整数,执行下面语句
print('输入无效,不是整数类型,请重新输入')
continue
# 将录入的学生信息保存到字典当中
student = {'id': id, 'name': name,
'english': english, 'python': python, 'java': java}
# 将存储学生信息的字典添加到列表中
student_list.append(student) # 列表中存储多个字典,字典中存储学生信息
answer = input('是否继续添加?y/n\n')
if answer == 'y':
continue # 从循环头开始,重新录入
else:
break # 跳出录入的循环,但是还在main的循环
# 调用save()函数
save(student_list)
print('学生信息录入完毕!!!')
def save(lst):
"""存储学生信息"""
try: # 追加模式打开,encoding防止中文乱码
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():
"""查找学生信息:
1.按ID查找
2.按姓名查找"""
student_query = [] # 存储需要查询的信息
while True:
id = '' # 初始化为空
name = ''
if os.path.exists(filename): # 如果文件存在
mode = input('按ID查找请输入1,按姓名查找请输入2:') # 输入的是字符串
if mode == '1':
id = input('请输入学生ID:')
elif mode == '2':
name = input('请输入学生的姓名:')
else:
print('您的输入有误,请重新输入:')
search()
with open(filename, 'r', encoding='utf-8') as rfile: # 以读的形式打开
student = rfile.readlines() # 将包含字典的字符串放入列表中
for item in student: # 遍历列表中的字符串形式的字典
d = dict(eval(item)) # 剥掉引号,转为字典
if id != '': # 如果输入的ID不为空
if d['id'] == id: # 输入的ID等于列表中的ID
student_query.append(d) # 需要查询的信息添加到另一个列表
elif name != '': # 如果输入的姓名不为空
if d['name'] == name: # 等于已有的
student_query.append(d) # 添加需要查询的东西
# 显示查询结果
show_student(student_query) # 显示需要查询的信息
# 清空列表
student_query.clear() # 清空这个暂时的列表
answer = input('是否要继续查询?y/n')
if answer == 'y':
continue
else:
break
else: # 文件不存在
print('暂未保存学生信息')
return
def show_student(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成绩', '总成绩'))
# 定义内容的显示格式
format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
for item in lst:
print(format_data.format(item.get('id'),
item.get('name'),
item.get('english'),
item.get('python'),
item.get('java'),
int(item.get('english'))+int(item.get('python'))+int(item.get('java'))
))
def delete():
"""删除学生信息"""
show()
while True:
student_id = input('请输入学生ID:') # 输入要删除的学生ID
if student_id != '': # 输入的ID不为空
if os.path.exists(filename): # 如果存在filename文件
with open(filename, 'r', encoding='utf-8') as file: # 以读的形式打开文件
student_old = file.readlines() # 将每一行元素作为独立字符串,放入列表当中
else:
student_old = []
flag = False # 标记是否删除,初始化False
if student_old: # 不为空
with open(filename, 'w', encoding='utf-8') as wfile: # 以写的形式打开
#d = {}
for item in student_old: # 遍历列表中字符串
# eval剥去引号,dict转为字典
d = dict(eval(item)) # 将字符串转换成字典
if d['id'] != student_id: # w是清空文件的方法写入
wfile.write(str(d)+'\n') # 这里写入除了要查询的以外的所有内容
else:
flag = True
if flag:
print(f'id为{student_id}的学生信息已被删除') # 字符串格式化
else:
print(f'没有找到ID为{student_id}的学生信息')
else: # TXT文件中无信息时
print('无学生信息')
break
show() # 删除之后要重新显示所有学生信息
answer = input('是否继续删除?y/n\n')
if answer == 'y':
continue
else:
break
def modify():
"""修改学生信息"""
show()
flag = True
if os.path.exists(filename): # 如果有文件
with open(filename, 'r', encoding='utf-8') as rfile: # 以读的形式打开文件
student_old = rfile.readlines() # 将每一行元素作为独立字符串,放入列表当中
else: # 没有文件
return # 也不知道返回什么
student_id = input('请输入要修改的学员的ID:')
with open(filename, 'w', encoding='utf-8') as wfile: # 以写的形式打开
for item in student_old: # 遍历列表中的字典
d = dict(eval(item))
if d['id'] == student_id:
print('找到学生信息,可以修改他的相关信息了!')
"""重新输入这个学号的信息"""
while True:
try:
d['name'] = input('请输入姓名:')
d['english'] = input('请输入英语成绩:')
d['python'] = input('请输入python成绩:')
d['java'] = input('请输入Java成绩:')
except:
print('您的输入有误,请重新输入:')
else:
break # 输入完后就退出循环
wfile.write(str(d)+'\n') # 修改后的重新写入,w是不保留原来的
#print('修改成功!!!')
else: # 输入的学号不存在
wfile.write(str(d)+'\n') # 写入空字符
#print('对不起,没有你要查找的ID!')
flag = False
if not flag:
print('对不起,没有你要查找的ID!')
else:
print('修改成功!!!')
answer = input('是否继续修改其他学生信息呢?y/n\n')
if answer == 'y':
modify()
def sort():
"""排序模块
1.升序
2.降序
又细分为:
1.按英语成绩
2.按python
3.按Java
4.按总成绩"""
show() # 先显示所有的学生信息
if os.path.exists(filename): # 文件存在
with open(filename, 'r', encoding='utf-8') as rfile:
studet_list = rfile.readlines() # 将每一行元素作为独立字符串,放入列表当中
student_new = [] # 之后把所有信息添加到这里
for item in studet_list:
d = dict(eval(item))
student_new.append(d)
else: # 文件不存在,还没录入生成
return
"""升序、降序"""
asc_or_desc = input('请选择(0.升序 1.降序):')
if asc_or_desc == '0':
asc_or_desc_boll = False
elif asc_or_desc == '1':
asc_or_desc_boll = True
else:
print('您的输入有误,请重新输入:')
sort()
"""按什么排序"""
mode = input('请选择排序方式(1.按英语成绩排序 2.按python成绩排序 3.按Java成绩排序 0.按总成绩排序)')
if mode == '1':
student_new.sort(key=lambda x: int(x['english']), reverse=asc_or_desc_boll)
elif mode == '2':
student_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_boll)
elif mode == '3':
student_new.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_boll)
elif mode == '0':
student_new.sort(key=lambda x: int(x['english'])+int(x['python'])+int(x['java']), reverse=asc_or_desc_boll)
else:
print('您的输入有误,请重新输入!!!')
sort()
show_student(student_new) # 展示排序后的
def total():
"""显示总共多少名学生"""
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 show():
"""显示模块"""
student_lst = []
if os.path.exists(filename):
with open(filename, 'r', encoding='utf-8') as rfile: # 读文件,文件里面数据全为字典
students = rfile.readlines() # 将每个字典作为列表中的一个元素
for item in students: # 遍历学生列表
student_lst.append(eval(item)) # 向列表中添加字典
if student_lst: # 不为空
show_student(student_lst) # 显示出来
else:
print('暂未保存学生信息')
if __name__ == '__main__':
main()
统计学生信息的TXT文件:
students.txt,这个是会自动录入信息的时候回自动生成
将.py文件打包成.exe文件请参考视频教程
打包教程