day17作业

学生管理系统

学生类Student

属性:学号sid    姓名name		年龄age   性别gender		电话号码tel

学生管理系统Manager

学生管理系统的数据结构设置:
一个学生信息对应一个字典
整个系统的所有学生:所有学生对应一个列表,列表中的元素全是字典
整个系统:一个字典, 字典中有一个键(all_student), 对应的值是所有学生;
									一个键count  对应的是学生的个数
这个字典需要做数据持久化,将数据存储到json文件中, 文件名就是admin.json
{
    'all_student': [
        {'sid':'stu0001', 'name': '张三', 'age': 89, 'gender':'男','tel': '237837293'},
        {'sid':'stu0002', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'},
        {'sid':'stu0003', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'},
        {'sid':'stu0004', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'}
    ],
    'count': 4
}
方法有
1. 添加学生
		学号根据第几个学生生成的
		其他学生信息由input录入
2. 查找学生
		输入1 --- 查看所有学生的信息
		输入2 --- 根据姓名查找
		输入3 --- 根据学号查找
		输入其他符号 --- 退出查询
3. 删除学生
		输入1 --- 按姓名删除
		输入2 --- 按学号删除
		输入其他符号 --- 放弃删除

程序的启动文件index.py

	登陆账号和密码
			如果输入的账号是admin和密码是123456,则登陆成功
				在登陆成功的情况下 执行管理中的行为
					输入1 ---- 添加学生
					输入2 ---- 查询学生
					输入3 ---- 删除学生
					输入其他符号 ---- 结束操作
			否则提示登陆失败 请重新登陆
class Student(object):
    __slots__ = ("sid","name","age","gender","tel")
    def __init__(self,sid,name,age,gender,tel):
        self.sid=sid
        self.name=name
        self.age=age
        self.gender=gender
        self.tel=tel
import os,json
from stusys.student import Student
def singleton(cls):
    instance=None
    def getinstance(*args,**kwargs):
        nonlocal instance
        if not instance:
            instance=cls(*args,**kwargs)
            return instance
    return getinstance

@singleton
class Manager(object):
    #程序运行时加载本地文件
    def __init__(self):
        self.get_stu()
    def get_stu(self):
        if not os.path.exists(r"admin.json"):
            self.sys={
    'all_student': [
        {'sid':'stu0001', 'name': '张三', 'age': 89, 'gender':'男','tel': '237837293'},
        {'sid':'stu0002', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'},
        {'sid':'stu0003', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'},
        {'sid':'stu0004', 'name': '张三', 'age': 89, 'gender':'男', 'tel': '237837293'}
    ],
    'count': 4
}
            self.sevesys()
        else:
            self.loadsys()
    #序列化
    def sevesys(self):
        with open(r"admin.json","w",encoding="utf-8") as f:
            json.dump(self.sys,f)
    #反序列化
    def loadsys(self):
        with open(r"admin.json","r",encoding="utf-8") as f:
            self.sys=json.load(f)
    #获取sid
    def getsid(self):
        studict=self.sys
        num = int(studict["all_student"][-1]["sid"][3:])+1
        # num=str(len(studict["all_student"])+1)
        numzero=(4-len(str(len(studict["all_student"]))))*"0"
        #sid="stu"+ numzero + num
        sid="stu"+numzero+str(num)
        return  sid
    #1. 添加学生
    def add_stu(self):
        sid=self.getsid()
        name = input("请输入学生姓名:")
        age = input("请输入学生年龄:")
        gender = input("请输入学生性别:")
        tel = input("请输入学生的电话号码:")
        astu=Student(sid,name,age,gender,tel)
        adict={'sid':astu.sid, 'name': astu.name, 'age': astu.age, 'gender':astu.gender,'tel': astu.tel}
        self.sys['all_student'].append(adict)
        self.sevesys()
    #2. 查找学生
    def find_stu(self):
        while True:
            print("该查询系统提供以下功能:".center(30,"="))
            print("""输入1 --- 查看所有学生的信息
            输入2 --- 根据姓名查找
            输入3 --- 根据学号查找
            输入其他符号 --- 退出查询
            """)
            num =input("请输入功能对应的编号:")
            if num=="1":
                for i in self.sys["all_student"]:
                    print(i)
            elif num=="2":
                name=input("请输入查询的姓名:")
                for i in self.sys["all_student"]:
                    if i["name"]==name:
                        print(i)
                        break

                else:
                    print("无此姓名的学生!")
            elif num=="3":
                sid = input("请输入查询的学号:")
                for i in self.sys["all_student"]:
                    if i["sid"] == sid:
                        print(i)
                        break
                else:
                    print("无此学号的学生!")
            elif num not in range(1,4):
                print("已退出查询")
                return

    #3.删除学生
    def del_stu(self):
        print("该查询系统提供以下功能:".center(30, "="))
        print("""输入1 --- 按姓名删除
                    输入2 --- 按学号删除
                    输入其他符号 --- 放弃删除
                    """)
        num = input("请输入功能对应的编号:")
        if num == "1":
            name = input("请输入删除学生的姓名:")
            for i in self.sys["all_student"][:]:
                if i["name"] == name:
                    self.sys["all_student"].remove(i)
                    self.sevesys()
                    print("已删除该学生")
                    break
            else:
                print("无此姓名的学生!")

        elif num == "2":
            sid = input("请输入删除学生的学号:")
            for i in self.sys["all_student"][:]:
                if i["sid"] == sid:
                    self.sys["all_student"].remove(i)
                    self.sevesys()
                    print("已删除该学生")
                    break
            else:
                print("无此姓名的学生!")

        elif num not in range(1, 4):
            print("放弃删除")
            return
from stusys.student import Student
from stusys.manager import Manager

def load_sys():
    while True:
        account=input("请输入账号【按q退出】:")
        if account=="q":
            return
        if account=="admin":
            psw = input("请输入密码:")
            if psw=="123456":
                print("登陆成功")
                operation()
                return
            else:
                print("密码不对请重新输入:")
        else:
            print("账号不对请重新输入:")
def operation():
    ma = Manager()
    while True:
        print("系统提供以下功能:".center(30, "="))
        print("""输入1 ---- 添加学生
        输入2 ---- 查询学生
        输入3 ---- 删除学生
        输入其他符号 ---- 结束操作
        """)
        num=input("请输入相应功能的编号【其他符号结束功能】:")

        if num=="1":
            ma.add_stu()
        elif num=="2":
            ma.find_stu()
        elif num=="3":
            ma.del_stu()
        else:
            print("已关闭,欢迎下次光临!")
            return

if __name__=="__main__":
    load_sys()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值