赞
踩
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能从入门到精通教程
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文件请参考视频教程
打包教程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。