内容简介:功能:展示面板:1.添加学生的信息
功能:
展示面板:
1.添加学生的信息
2.删除学生的信息
3.修改学生的信息
4.查询学生的信息
5.遍历所有学生的信息
6.保存并退出系统
需求:
- 可以保存用户数据,下次运行程序时能读取上次保存的数据
-
具有添加、查询、删除用户的功能
优化(此版代码未实现):
- 规范用户行为,用户输入错误不能直接报错,而是返回相关提示。
- 可以增加项目,比如班主任,成绩等。
- 可以实现 排序 功能
- 删除一个用户后,索引值自动-1,保证id的连续
- 实现批量增加或者删除?
import csv from pathlib import Path import pickle from prettytable import PrettyTable p_save = Path('/jupyter/tmp/student/StudentDetails.save') # 可以提取成配置文件 p_csv = Path('/jupyter/tmp/student/StudentDetails.csv') # 可以提取成配置文件 # StudenDetails = [['StudentID', 'name', 'age']] StudenDetails_Tmp = [['StudentID', 'name', 'age']] def showinfo(): """doc""" print('*' * 40) '''展示功能面板''' print(" 1.添加学生的信息") print(" 2.删除学生的信息") print(" 3.修改学生的信息") print(" 4.查询学生的信息") print(" 5.遍历所有学生的信息") print(" 6.保存并退出系统") def save_csv(x): # 保存为csv文件 if not p_csv.parent.exists(): p_csv.parent.mkdir(parents=True) # 相对危险的操作 p_csv.touch() with open(str(p_csv), 'a+') as f: writer_student = csv.writer(f) writer_student.writerows(x) def save(x): if not p_save.parent.exists(): p_save.parent.mkdir(parents=True) # 相对危险的操作 p_save.touch() with open(str(p_save), 'wb+') as f: pickle.dump(x, f) def pick_load(): with open(str(p_save), 'rb') as f: StudenDetails_Tmp = pickle.load(f) return StudenDetails_Tmp def generate_counter(lst=[0]): ##闭包实现自增功能==> 学生学号 CNT = lst def add_one(): CNT[0] += 1 return CNT[0] return add_one def show_student_details(lst: list, show_id: int): # 根据输入的id,打印学生的详情 for ii in lst: for xx in ii: if xx == show_id: # details_list = ii else: continue return details_list def StudentManagement(): # 主体函数 while True: # TODO 完成所有操作最后持久化 print('*' * 40) option_tmp = input("请选择您的操作:") while True: if option_tmp.isdigit(): break else: option_tmp = input("请输入正确的操作(1-6):") option = int(option_tmp) if option == 1: StudentID = counter() # TODO 自增问题 name = input("请输入学生的姓名:") while True: if (u'\u4e00' <= name <= u'\u9fff'): break if name.isalpha(): break else: name = input("请输入正确的年龄(中文或者字母):") age = input("请输入学生的年龄:") while True: if age.isdigit(): break else: age = input("请输入正确的年龄(1-99):") StudenDetails_Tmp.extend([[StudentID, name, age]]) elif option == 2: # 输入学生的id就可以删除 DelID = int(input("请输入需要删除的学生id:")) del_list = show_student_details(StudenDetails_Tmp, DelID) StudenDetails_Tmp.remove(del_list) print("删除用户成功:", del_list) elif option == 3: # 输入学生的id,然后弹出需要修改的选选项,输入值进行修改 ChgDetil = int(input("请输入需要修改的学生id:")) show_list = show_student_details(StudenDetails_Tmp, ChgDetil) print("该学生目前的信息:", show_list) chg_name = input("请输入学生的姓名:") chg_age = input("请输入学生的年龄:") new_student_details = [ChgDetil, chg_name, chg_age] st_index = StudenDetails_Tmp.index(show_list) StudenDetails_Tmp[st_index] = new_student_details elif option == 4: # 根据学生id查找学生信息 TODO 可改进为根据任意一个字段查找 ChgDetil = int(input("请输入需要查询的学生id:")) show_list = show_student_details(StudenDetails_Tmp, ChgDetil) tb4 = PrettyTable() tb4.field_names = ['StudentID', 'name', 'age'] tb4.add_row(show_list) print(tb4) elif option == 5: # 查询所有的学生信息 tb5 = PrettyTable() for idx,v in enumerate(StudenDetails_Tmp): if idx == 0: tb5.field_names = v if idx > 0: tb5.add_row(v) print(tb5) elif option == 6: save_csv(StudenDetails_Tmp) #保存为csv格式便于下载 save(StudenDetails_Tmp) #数据序列化保存 print('保存成功:',StudenDetails_Tmp) break else: print('请输入正确的选项(1-6)') continue if __name__ == "__main__": if p_save.exists(): StudenDetails_Tmp = pick_load() index_student = [StudenDetails_Tmp[-1][0]] else: index_student = [0] showinfo() counter = generate_counter(index_student) StudentManagement() pick_load() # print(StudenDetails_Tmp)
**************************************** 1.添加学生的信息 2.删除学生的信息 3.修改学生的信息 4.查询学生的信息 5.遍历所有学生的信息 6.保存并退出系统 **************************************** 请选择您的操作:1 请输入学生的姓名:zz 请输入学生的年龄:32 **************************************** 请选择您的操作:1 请输入学生的姓名:xx 请输入学生的年龄:12 **************************************** 请选择您的操作:1 请输入学生的姓名:张三 请输入学生的年龄:12 **************************************** 请选择您的操作:1 请输入学生的姓名:44 请输入正确的年龄(中文或者字母):jk 请输入学生的年龄:55 **************************************** 请选择您的操作:5 +-----------+------+-----+ | StudentID | name | age | +-----------+------+-----+ | 1 | gg | 44 | | 2 | gg | 55 | | 3 | hh | 66 | | 4 | zz | 32 | | 5 | xx | 12 | | 6 | 张三 | 12 | | 7 | jk | 55 | +-----------+------+-----+ **************************************** 请选择您的操作:4 请输入需要查询的学生id:2 +-----------+------+-----+ | StudentID | name | age | +-----------+------+-----+ | 2 | gg | 55 | +-----------+------+-----+ **************************************** 请选择您的操作:3 请输入需要修改的学生id:2 该学生目前的信息: [2, 'gg', '55'] 请输入学生的姓名:xx 请输入学生的年龄:66 **************************************** 请选择您的操作:2 请输入需要删除的学生id:1 删除用户成功: [1, 'gg', '44'] **************************************** 请选择您的操作:5 +-----------+------+-----+ | StudentID | name | age | +-----------+------+-----+ | 2 | xx | 66 | | 3 | hh | 66 | | 4 | zz | 32 | | 5 | xx | 12 | | 6 | 张三 | 12 | | 7 | jk | 55 | +-----------+------+-----+ **************************************** 请选择您的操作:6 保存成功: [['StudentID', 'name', 'age'], [2, 'xx', '66'], [3, 'hh', '66'], [4, 'zz', '32'], [5, 'xx', '12'], [6, '张三', '12'], [7, 'jk', '55']]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- python学生信息管理系统
- JSP学生信息管理系统设计
- python学生管理系统代码实现
- 今年获得 WWDC 学生奖学金的中国学生里,三分之一都来自这所学校
- 学生应该学习什么编程语言
- 智慧安防进校园,学生安全有保障
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Development Recipes
Brian P. Hogan、Chris Warren、Mike Weber、Chris Johnson、Aaron Godin / Pragmatic Bookshelf / 2012-1-22 / USD 35.00
You'll see a full spectrum of cutting-edge web development techniques, from UI and eye candy recipes to solutions for data analysis, testing, and web hosting. Make buttons and content stand out with s......一起来看看 《Web Development Recipes》 这本书的介绍吧!