今天第十二天 - 自律代码100天

天数:第十二天 

时间:2023年12月26日

内容:

综合训练:图书管理系统(结合文件读取,json数据库调取,字典,列表,自定义函数)

题目是网上找的,代码自己打,自己测试的,真的进步很大!!! 

关键只用了11天时间,感动死了~   

(你们不懂得都能在下面评论,帮助一个人,我就可以巩固一部分)

好了,进入正题!!!!

---------------------------------------------------------------------------------------------------------------------------------

题目:宝安小学图书馆开馆了,准备开发一个图书管理系统。

json模拟数据库的方式完成下列业务:

a.用户登录;login()

b.显示图书列表;showAllBooks()

c.图书上架;addBook()  增加图书信息

d.图书下架;delBook() 删除增加图书信息

e.借书;borrowBook()判断借出状态是不是可借,如果是,就更改为已借出

f.还书;returnBook()

提醒:

  1. 使用json数据保存用户数据(包含用户名,密码,姓名);
  2. 使用json数据保存图书数据(包含编号,书名,作者,借出状态state); 可借---已借出
  3. 编写用户各个业务函数,在main函数中将所有函数串联起来;

---------------------------------------------------------------------------------------------------------------------------------

代码:

import json

# {"编号": 1001, "书名": "<红楼梦>", "作者": "曹雪芹", "借出状态": "借出"}
# {"用户名": "admin", "密码": "123", "姓名": "张三"}

# step1:使用json数据保存图书数据(包含编号,书名,作者,状态(可借借出));

# bookData = {"编号":"001","书名":"红楼梦","作者":"曹雪芹","状态":"已借"},
{"编号":"002","书名":"工程营地水处理模块设计","作者":"中国水利水电出版社","状态":"可借"},
{"编号":"003","书名":"电能质量","作者":"中国水利水电出版社","状态":"可借"}


jsonData = json.dumps(bookData,ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt","w") as f1:
     f1.write(jsonData)


# step2:使用json数据保存用户数据(包含用户名,密码,姓名);
# userData = {"用户名": "zhangsan", "密码": "123", "姓名": "张三"},
{"用户名": "lisi", "密码": "123", "姓名": "张三"}

jsonData = json.dumps(userData,ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt","w") as f2:
    f2.write(jsonData)


def readInformation(userList, bookList):
    if userList is not False and bookList is False:
        with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt", "r") as f1:
            users = f1.read()
        userList = json.loads(users)
        return userList
    if userList is False and bookList is not False:
        with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt", "r") as f1:
            books = f1.read()
        bookList = json.loads(books)
        return bookList


def writeInformation(booluserList, boolbookList, context):
    if booluserList is not False and boolbookList is False:
        jsonData = json.dumps(context, ensure_ascii=False)
        with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt", "w") as f1:
            f1.write(jsonData)
    if booluserList is False and boolbookList is not False:
        jsonData = json.dumps(context, ensure_ascii=False)
        with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt", "w") as f1:
            f1.write(jsonData)


def showAllBooks():
    # 从数据库中,读取用户信息
    bookList = readInformation(False, True)

    # 列出书单
    for s in bookList:
        print(s, '\n')

    # 项目选择
    # 3.图书上架;addBook()  增加图书信息
    # 4.图书下架;delBook() 删除增加图书信息
    # 5.借书;lendBook()判断借出状态是不是可借,如果是,就更改为已借出
    # 6.还书;returnBook()
    val = int(input("进行操作: 1.图书上架  2.图书下架  3.借书  4.还书 "))

    if val == 1:
        # 3.图书上架;addBook()  增加图书信息
        addBook()
        bookList = readInformation(False, True)
        for s in bookList:
            print(s, '\n')
        return

    if val == 2:
        # 4.图书下架;delBook() 删除增加图书信息
        bookList = readInformation(False, True)
        for s in bookList:
            print(s, '\n')
        delBook()
        bookList = readInformation(False, True)
        for s in bookList:
            print(s, '\n')
        return

    if val == 3:
        # 5.借书;borrowBook()判断借出状态是不是可借,如果是,就更改为已借
        borrowBook()

    if val == 4:
        # 6.还书;returnBook()
        returnBook()


# 3.图书上架;addBook()  增加图书信息
def addBook():
    bookList = readInformation(False, True)
    number = len(bookList)
    name = input("书名")
    authorName = input("作者")
    status = "可借"

    if number < 9:
        newBook = {"编号": "00" + str(number + 1), "书名": name, "作者": authorName, "状态": status}
        print(newBook)
        bookList.append(newBook)
        writeInformation(False, True, bookList)
    elif 9 <= number < 99:
        newBook = {"编号": "0" + str(number + 1), "书名": name, "作者": authorName, "状态": status}
        bookList.append(newBook)
        writeInformation(False, True, bookList)
    elif 99 <= number < 999:
        newBook = {"编号": str(number + 1), "书名": name, "作者": authorName, "状态": status}
        bookList.append(newBook)
        writeInformation(False, True, bookList)


def delBook():
    number = str(input("输入编号,即可删除. 如001,011,111 "))
    bookList = readInformation(False, True)
    for s in bookList:
        if s["编号"] == number:
            bookList.remove(s)  # json转出来的是一个列表,列表里面套很多字典   想要删除包含很多内容的字典,就直接删,把他当成一个列表即可
            writeInformation(False, True, bookList)
            return
    print("删除失败!没有此编号")


def borrowBook():
    name = str(input("输入书名,查询是否可借"))
    bookList = readInformation(False, True)
    for s in bookList:
        if s["书名"] == name and s["状态"] == "已借":
            print("此书已借出,借出失败!!!")
            return
        elif s["书名"] == name and s["状态"] == "可借":
            print("此书可借,并且成功借出!!!")
            s["状态"] = "已借"
            writeInformation(False, True, bookList)
            return
    print("输入错误,请重新输入!!!")


def returnBook():
    name = input("输入书名,完成还书操作")
    bookList = readInformation(False, True)
    for s in bookList:
        if s["书名"] == name and s["状态"] == "已借":
            print("此书已还成功!!!")
            s["状态"] = "可借"
            writeInformation(False, True, bookList)
            return


def login():
    # 从数据库中,读取用户信息
    userList = readInformation(True, False)
    print(userList)
    name = input("用户名")
    pwd = input("密码")
    for s in userList:
        if s["用户名"] == name and s["密码"] == pwd:
            print("成功登录")
            showAllBooks()
            return

        print("登录失败!!! 请重新输入")
        break


if __name__ == '__main__':
        login()

这是users.txt 数据库:

[
{"用户名": "zhangsan", "密码": "123", "姓名": "张三"}, 
{"用户名": "lisi", "密码": "123", "姓名": "张三"}
]

这是books.txt 数据库:

[
{"编号": "001", "书名": "红楼梦", "作者": "曹雪芹", "状态": "已借"}, 
{"编号": "002", "书名": "工程营地水处理模块设计", "作者": "中国水利水电出版社", "状态": "已借"}, 
{"编号": "003", "书名": "电能质量", "作者": "中国水利水电出版社", "状态": "可借"}, 
{"编号": "004", "书名": "老舍", "作者": "老舍", "状态": "可借"}
]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值