学生管理系统v1

栏目: Python · 发布时间: 5年前

内容简介:功能:展示面板:1.添加学生的信息

功能:

展示面板:

1.添加学生的信息

2.删除学生的信息

3.修改学生的信息

4.查询学生的信息

5.遍历所有学生的信息

6.保存并退出系统

需求:

  1. 可以保存用户数据,下次运行程序时能读取上次保存的数据
  2. 具有添加、查询、删除用户的功能

    优化(此版代码未实现):

  3. 规范用户行为,用户输入错误不能直接报错,而是返回相关提示。
  4. 可以增加项目,比如班主任,成绩等。
  5. 可以实现 排序 功能
  6. 删除一个用户后,索引值自动-1,保证id的连续
  7. 实现批量增加或者删除?
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']]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Development Recipes

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》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具