Python————封装类练习

文章目录

question1

在这里插入图片描述

'''学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail
    功能:1.系统以菜单方式工作
        2.学生信息录入功能(文件)
        3.学生信息浏览
        4.查询排序功能
            1)学号排序
            2)姓名排序
        5.信息删改       
'''
import json
import os

class StudentManage(object):
    student_info = {
        '许晨希':{"name": '许晨希',
         "age": 20,
         "studentID": '04162022',
         'gender': '男',
         'birthday':'1999-03-12',
         'address':'西安',
         'Tele':'123456',
         'Email':'123456@163.com'}
    }

    def __init__(self):
        self.newData = {}

    def add_student_info(self):

        name = input("请输入名字:")
        if name not in self.student_info:# 名字为空 跳出循环
            if not name:
                print('名字不可为空')
            try:
                age = int(input("请输入年龄:"))
                studentID = int(input("请输入学号:"))
                gender = input('请输入性别:')
                birthday = input('请输入生日')
                address = input('请输入地址')
                Tele = input('请输入电话')
                Email = input('请输入电子邮箱')
            except:
                print("输入无效....重新录入信息")
            new_info = {"name": name, "age": age, "studentID": studentID, 'gender': gender,
                    'birthday':birthday,'address':address,'Tele':Tele,'Email':Email}
            self.student_info[name] = new_info
            print('信息录入成功')
        else:
            print('该学生信息已录入')

    def show(self):
        print("学生信息显示".center(50, '*'))
        i = input('''请选择查询方式:
              1)按学生学号排序显示全部
              2)按学生姓名排序显示全部
              3)查找单个学生信息
              ''')
        if i == '1':
            print("按学号完整学生信息显示".center(50, '*'))
            print('按学号排序结果如下:')
            userInfo = self.student_info.values()
            for j in userInfo:
                self.newData[j['studentID']] = j
            print(self.newData)

        elif i == '2':
            print("按姓名完整学生信息显示".center(50, '*'))
            print(self.student_info)
        elif i == '3':
            info = input('请输入想要查询的学生姓名:')
            if info in self.student_info:
                print(self.student_info[info])
            else:
                print('查无此人')

    def mod_student_info(self):
        mod_name = input("请输入修改的学生姓名:")

        if mod_name in self.student_info:
            age = int(input("请输入年龄:"))
            studentID = int(input("请输入学号:"))
            gender = input('请输入性别:')
            birthday = input('请输入生日')
            address = input('请输入地址')
            Tele = input('请输入电话')
            Email = input('请输入电子邮箱')
            info = {"name": mod_name, "age": age, "studentID": studentID, 'gender': gender,
                    'birthday': birthday, 'address': address, 'Tele': Tele, 'Email': Email}
            self.student_info['name'] = info
        else:
            print("学生信息不匹配,没有找到%s" % mod_name)


    def del_student_info(self):
        name = input("请输入删除的学生姓名:")
        if name in self.student_info:
            del self.student_info[name]
            print('删除%s成功'% name)
        else:
            print("学生信息不匹配,没有找到%s" % name)

    def save_info(self):
        if os.path.exists("tudent.txt"):
            with open("student.txt", "r",encoding="utf-8") as f:
                data = f.read()
                self.student_info = json.loads(data)
            dataStr = json.dumps(self.student_info)

            with open("student.txt", "w",encoding="utf-8") as f:
                f.write(dataStr)
        else:
            with open("student.txt", "w+",encoding="utf-8") as f:
                f.seek(0, 0)
                dataStr = json.dumps(self.student_info)
                f.write(dataStr)

        print('信息存储成功')


def main():
    # 创建学生管理的对象
    student = StudentManage()

    prompt = """  
                    学生信息管理系统

            1). 学生信息录入;
            2). 浏览学生信息;
            3). 修改学生信息;
            4). 删除学生信息;
            5). 存储学生信息;
            6). 退出
    请输入你的选择:"""


    while True:
        choice = input(prompt)
        if choice == '1':
            student.add_student_info()
        elif choice == '2':
            student.show()
        elif choice == '3':
            student.mod_student_info()
        elif choice == '4':
            student.del_student_info()
        elif choice == '5':
            student.save_info()
        elif choice == '6':
            exit(0)
        else:
            print("请输入正确的选项")



if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

question2

加粗样式
“”"
书籍借阅系统需求分析:
1. 书籍的属性信息: 编号,书名, 作者,出版社,金额,类别,借阅状态(借出数量, 未借的数量)
2. 书籍借阅需要的操作:
1). 书籍信息;
书籍,期刊,报刊,分类,增删改查(字典套字典)
2). 借阅书籍
3). 归还书籍
更新书籍的库存信息,以及罚款相关信息,并显示其未按时归还的总信息
4). 续借书籍
0). 退出
“”"
‘’’
读者管理需求分析:
1. 读者等级处理,如教师与学生两类,并定义其可借阅图书的数量,以及节约时间
2. 读者信息,录入,挂失,注销,查询。
3. 统计,借阅排行榜,资料状态统计,未按时还书信息。
4. 罚款金额设置,借阅时长设置。
‘’’

"""

书籍借阅系统需求分析:
1. 书籍的属性信息: 编号,书名, 作者,出版社,金额,类别,借阅状态(借出数量, 未借的数量)
2. 书籍借阅需要的操作:
1). 书籍信息;
书籍,期刊,报刊,分类,增删改查(字典套字典)
2). 借阅书籍
3). 归还书籍
更新书籍的库存信息,以及罚款相关信息,并显示其未按时归还的总信息
4). 续借书籍
0). 退出
“”"
‘’’
读者管理需求分析:
1. 读者等级处理,如教师与学生两类,并定义其可借阅图书的数量,以及节约时间
2. 读者信息,录入,挂失,注销,查询。
3. 统计,借阅排行榜,资料状态统计,未按时还书信息。
4. 罚款金额设置,借阅时长设置。
‘’’

from prettytable import PrettyTable

class identity(object):
    # 定义存储用户名和密码的字典
    StudentDict = {'xcx': '123',
                   'lucy': '456',
                   'jay': '789'}
    TeacherDict = {
                    'xxx': '123',
                    'yyy': '456'
    }

    # 定义静态方法选择身份
    @staticmethod
    def Choice():
        print('*' * 50)
        print('\033[5;31;2m\t\t\t\t欢迎使用图书管理系统\033[0m\n')
        answer = input('  请选择您的身份:[1] 教师账号 [2] 学生帐号 [3] 注册帐号\n')
        if answer == '1':
            # 如果选择是1,调用老师的验证函数
            identity.TeacherIdentity()
        elif answer == '2':
            # 如果选择是2,调用学生用户的验证函数
            identity.StudentIdentity()
        elif answer == '3':
            # 如果选择是3,选择注册一个新的帐号,并调用验证函数登陆
            name = input('注册新用户———请输入您的姓名:')
            code = input('注册新用户———请输入您的密码:')
            cate = input('注册新用户————请输入您的类别:(1为学生,2为教师)')
            if cate == '1':
                identity.TeacherDict[name] = code
                print('***您已成功注册图书管理系统用户,请登陆:***')
                identity.TeacherIdentity()
            elif cate == '2':
                identity.StudentDict[name] = code
                print('***您已成功注册图书管理系统用户,请登陆:***')
                identity.StudentIdentity()
        else:
            print('***您的选择错误,不能登陆!***')

    # 定义类方法验证教师信息
    @classmethod
    def TeacherIdentity(cls):
        # 管理员的验证函数
        username1 = input('请输入您的帐号:')
        passwd1 = input('请输入您的密码:')
        print('')
        print('*' * 50)
        for key in cls.TeacherDict:
            if (key == username1 and cls.TeacherDict[key] == passwd1):
                print('\033[5;31;2m\t\t您的身份是教师,欢迎您进入图书管理系统\033[0m')
                break
            else:
                print('您的用户名或身份不正确!请重新输入:')
                break

    # 定义类方法验证学生信息
    @classmethod
    def StudentIdentity(cls):
        # 学生信息的验证函数
        username2 =input('请输入您的帐号:')
        passwd2 = input('请输入您的密码:')
        print(' ')
        print('*' * 50)
        for key in cls.StudentDict:
            if (key == username2 and cls.StudentDict[key] == passwd2):
                print('\033[5;31;2m\t\t您的身份是学生,欢迎您进入图书管理系统\033[0m')
            else:
                print('您的用户名或身份不正确!请重新输入:')
                break


class Book(object):
    def __init__(self, ID , name, author,press , price, cate,borrowed=0, borrow=0):
        """
        编号,书名, 作者,出版社,金额,类别
        :param name: 书籍名称
        :param author: 作者
        :param borrowed: 已经借出的书籍数量
        :param borrow: 未借出的书籍数量
        """
        self.ID = ID
        self.name = name
        self.author = author
        self.press = press
        self.price = price
        self.cate = cate
        self.borrowed = borrowed
        self.borrow = borrow

    # 书籍信息的字符串显示
    def __str__(self):
        return '<Book: %s>' % (self.name)


class BookManage(object):
    books = []

    def __iter__(self):
        return (book.name for book in self.books)

    def init(self):
        """初始化书籍信息的函数, 添加书籍信息"""
        self.books.append(Book('001', "Python核心编程", 'Linus', '一号出版社', '50', 'Python' , 5, 0))
        self.books.append(Book('002', "数据结构与算法", 'Guido', '二号出版社', '60', 'C',0, 10))
        self.books.append(Book('003', "Java核心编程", 'Linus', '三号出版社', '25', 'Java',5, 10))
        print( "初始化书籍信息成功" )

    def find(self, name):
        """
        根据用户传入的书籍名称判断书籍是否存在, 如果存在, 返回该书籍对象; 如果不存在, 返回None
        :param name:
        :return:
        """
        for book in self.books:
            if book.name == name:
                return book
        else:
            return None

    def borrowBook(self):
        # 删除字符串左右的空格
        name = input("借阅书籍名称:").strip()
        # 查找书籍, 如果存在, 返回书籍对象, 不存在, 返回None;
        book = self.find(name)
        if book:
            if book.borrow > 0:
                # 未借出书籍数量减1;
                book.borrow -= 1
                print("书籍借阅成功" )
            else:
                print("书籍%s库存不足" % (book.name))
        else:
            print("书籍%s不存在" % (name))

    def returnBook(self):
        name = input("归还书籍名称:").strip()
        book = self.find(name)
        if book:
            book.borrow += 1
            print("书籍归还成功")

        else:
            print("书籍%s不存在" % (name))

    def show(self):
        print("书籍信息显示".center(50, '*'))
        table = PrettyTable()
        table.field_names = ["编号", "书籍名称", "作者", '出版社','金额','类别','已借出数量', '库存数量']
        for index, book in enumerate(self.books):
            table.add_row([book.ID, book.name, book.author, book.press, book.price,
            book.cate,book.borrowed, book.borrow])
        print(table)


def main():
    # 创建书籍管理的对象
    bm = BookManage()
    User = identity()
    # 先初始化书籍信息
    bm.init()



    prompt = """
                    书籍借阅管理系统

            1). 录入书籍信息;
            2). 借阅书籍信息
            3). 归还书籍
            4). 查询书籍信息
            5). 退出



    请输入你的选择:"""
    User.Choice()

    while True:
        choice = input(prompt)
        if choice == '1':
            pass
        elif choice == '2':
            bm.borrowBook()
        elif choice == '3':
            bm.returnBook()
        elif choice == '4':
            bm.show()
        elif choice == '5':
            exit(0)
        else:
            print("请输入正确的选项")


if __name__ == '__main__':
    main()

在这里插入图片描述

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值