内容简介:功能:展示面板: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 学生奖学金的中国学生里,三分之一都来自这所学校
- 学生应该学习什么编程语言
- 智慧安防进校园,学生安全有保障
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
恰如其分的软件架构
George Fairbanks / 张逸、倪健、高翌翔 / 华中科技大学出版社 / 2013-9-1 / 88.00
本书描述了一种恰如其分的软件架构设计方法。作者建议根据项目面临的风险来调整架构设计的成本,并从多个视角阐述了软件架构的建模过程和方法,包括用例模型、概念模型、域模型、设计模型和代码模型等。本书不仅介绍方法,而且还对方法和概念进行了归类和阐述,将软件架构设计融入开发实践中,与 敏捷开发方法有机地结合在一起,适合普通程序员阅读。 . 这是一本超值的书,案例丰富有趣,言简意赅,阅读轻松。当年......一起来看看 《恰如其分的软件架构》 这本书的介绍吧!