当前位置:网站首页>图书管理系统

图书管理系统

2022-06-11 21:45:00 yjhklxx

目录

1. 课程设计概述

1.1题目简介

1.2设计目标

2.问题分析

2.1系统需求的描述:

2.2系统功能的确定

3.代码实现:

 4.运行结果

 5.结论与不足


1. 课程设计概述

1.1题目简介

根据python课程的要求以及个人的偏向,做出了一个大致的图书借阅管理系统,通过对学生和书籍信息的管理,让同学们能够接到相应的书籍

1.2设计目标

根据题目“图书借阅管理系统”,大致模拟的通过管理员,学生两个方向对信息进行操作,并可以是该系统可以完成题目所需要求,以及利用文件来对系统中的所有信息进行保存。

2.问题分析

2.1系统需求的描述:

由于本次程序是一个《图书管理系统》,所以要考虑登录与注册的功能,以及管理员,学生不同的身份登录可以执行那些操作。作为管理员要实现对书籍与学生所有信息的增删改查,同时将程序中所有的人员和书籍信息进行储存,将其存放在文件中。

2.2系统功能的确定

 所有函数方法名称以及它的作用

其他的就不展示了

3.代码实现:

 -*- coding:utf-8 -*-    # 解决python Non-UTF-8的问题
import sys
import time


class Stu:  # 学生信息的类
    def __init__(self, number, name, sex, age):  # 初始化
        self.number = number
        self.name = name
        self.sex = sex
        self.age = age

    def __str__(self):
        return f"\n姓名:{self.name}\n学号:{self.number}\n性别:{self.sex}\n年龄:{self.age}"


class Student:  # 对学生信息进行修改的类
    students = []  # 保存学生的信息类的列表
    stu = []
    name = []
    number = []
    sex = []
    age = []

    # 保存学生信息
    def stu_save(self):
        f = open("学生", 'w')
        for i in self.students:
            f.write(str(i))
        f.close()

    # 读取学生信息
    def stu_du(self):
        f = open("学生", 'r')
        stu1 = f.read()
        f.close()
        stu1 = stu1.split()
        for i in stu1:
            stu2 = (i.split(':'))
            self.stu.append(stu2[1])
        self.name = self.stu[0::4]
        self.number = self.stu[1::4]
        self.sex = self.stu[2::4]
        self.age = self.stu[3::4]
        n = len(self.name)
        for i in range(0, n):
            b = Stu(self.number[i], self.name[i], self.sex[i], self.age[i])
            self.students.append(b)

    # 学生学号查重
    def repeat(self, number):
        for i in self.students:
            if number == i.number:
                number = input("该学号已有,请重新输入:")
                number = self.repeat(number)
        else:
            return number

    # 添加学生信息
    def add(self):
        while True:
            number = input("需要添加学生的学号:")
            number = self.repeat(number)
            name = input("需要添加学生的姓名:")
            sex = input("需要添加学生的性别:")
            age = input("需要添加学生的年龄:")
            self.students.append(Stu(number, name, sex, age))
            print(f"学生{name}添加成功!")
            print("是否继续:1.继续   0.不添加")
            i = int(input("请输入:"))
            if i == 0:
                break
        deng_stu()

    # 删除学生信息
    def det(self):
        number = input("输入要删除学生的学号:")
        for n in self.students:
            if n.number == number:
                self.students.remove(n)
                print("删除成功")
                break
          else:
              print("查无此学生")
        deng_stu()

    # 修改学生信息
    def gai(self):
        number = input("输入要修改学生的学号:")
        for n in self.students:
            if n.number == number:
                name = input("需要添加学生的姓名:")
                sex = input("需要添加学生的性别:")
                age = input("需要添加学生的年龄:")
                n.name = name
                n.sex = sex
                n.age = age
                print("修改完成")
                break
          else:
              print("查无此学生")
        deng_stu()

    # 查找学生信息
    def cha(self):
        number = input("输入要查找学生的学号:")
        for n in self.students:
            if n.number == number:
                print(n)
                break
        else:
            print("查无此学号")
        deng_stu()

    # 显示学生
    def xian(self):
        for n in self.students:
            print(n)
        deng_stu()


class Book:  # 书的信息类
    def __init__(self, name, author, state):
        self.name = name
        self.author = author
        self.state = state  # 判断书的状态0:借出 1:未借出

    def __str__(self):
        return f"书名:{self.name},作者:{self.author},状态:{self.state},"


class BookXiuGai:  # 对书的信息进行修改的类
    books = []  # 保存书的信息类的列表
    book_list = []
    name = []
    aut = []
    sta = []

    # 保存书籍信息
    def b_save(self):
        f = open("书籍", 'w')
        for i in self.books:
            f.write(str(i))
        f.close()

    # 读取书籍信息
    def b_du(self):
        f = open("书籍", 'r')
        book1 = f.read()
        f.close()
        book1 = book1.split(',')
        while '' in book1:
            book1.remove('')
        for i in book1:
            book2 = i.split(':')
            self.book_list.append(book2[1])
        self.name = self.book_list[0::3]
        self.aut = self.book_list[1::3]
        self.sta = self.book_list[2::3]
        n = len(self.name)
        for i in range(0, n):
            b = Book(self.name[i], self.aut[i], self.sta[i])
            self.books.append(b)

    # 查看借的书
    def look_book(self):
        print("所借的书籍有:")
        for book in self.books:
            # book是Book类创建的对象
            if book.state == '0':
                print(f"《{book.name}》")
        deng_book2()

    # 添加书籍
    def addBook(self):
        name = input("需要添加书籍的名字:")
        self.books.append(Book(name, input("作者:"), 1))
        print(f"图书{name}添加成功!")
        deng_book1()

    # 删除书籍
    def det(self):
        name = input("需要删除书籍的名字")
        for book in self.books:
            if name == book.name:
                self.books.remove(book)
                break
        deng_book1()

    # 修改书籍
    def gai(self):
        name = input("需要修改的书籍的名字")
        for book in self.books:
            if name == book.name:
                name = input("输入修改的名字:")
                author = input("输入修改的作者:")
                state = input("输入修改后的状态1(未借出)或0(借出)")
                book.name = name
                book.author = author
                book.state = state
                break
        deng_book1()

    # 查看书籍信息
    def kan(self):
        for book in self.books:
            print(book)
        deng_book1()

    # 借书
    def borrowBook(self):
        name = input("借阅书籍名称:")
        Books = self.checkBook(name)
        print(Books)
        # 判断书的状态
        if Books:
            if Books.state == '0':
                print(f"书籍《{name}》已经借出!")
            elif Books.state == '1':
                print(f"书籍《{name}》借阅成功!")
                Books.state = '0'
        else:
            print(f"书籍《{name}》不存在!")
        deng_book2()

    # 归还书籍
    def return_book(self):
        name = input("归还书籍名称:")
        Books = self.checkBook(name)
        if Books:
            if Books.state == '1':
                print(f"你没有借此书籍《{name}》!")
            elif Books.state == '0':
                print(f"书籍《{name}》归还成功!")
                Books.state = '1'
        else:
            print(f"书籍《{name}》与借出的不一致!")
        deng_book2()

    def checkBook(self, name):
        # 查找书籍是否存在
        for book in self.books:
            if book.name == name:
                return book
        else:
            return print(f"你查询的书籍《{name}》不在系统中!请重新输入!")


def pan_save1():
    print("正在对学生信息和书籍信息进行保存")
    a = Student()
    b = BookXiuGai()
    for i in range(0, 15):
        time.sleep(0.3)
        print(">", end='')
    a.stu_save()
    b.b_save()


def pan_save2():
    print("正在保存书籍信息")
    b = BookXiuGai()
    for i in range(0, 15):
        time.sleep(0.3)
        print(">", end='')
    b.b_save()


def save(a, b):  # 将注册的账号信息保存到文件里
    f = open("账号", "a")
    f.write(a + '\n')
    f.write(b + '\n')
    f.close()


def du():  # 读取文件里的账号信息
    f = open("账号", "r")
    text = f.read().split()
    p = 1
    for i in text:
        if p % 2 != 0:
            storage_name.append(i)
            p += 1
        else:
            for n in storage_name:
                if n not in storage_user:
                    storage_user[n] = i
            p += 1
    storage_name.clear()
    f.close()


def zhu_ce():  # 系统注册界面
    yi = True
    while yi:
        pan = True
        while pan:
            name = input('请输入用户名:')
            name_list = list(name)
            for i in name_list:
                if i in s:
                    print("用户名不合法请重新输入:")
                    pan = True
                    break
                else:
                    pan = False
        password = input("输入密码不少于6位,需要有数字和字母:")
        pan = True
        while pan:
            a = len(password)
            if a < 6:
                password = input("请重新输入密码不少于6位,需要有数字和字母:")
            else:
                if password.isdigit() or password.isalpha():
                    password = input("密码不能为纯数字或纯字母,请重新输入:")
                else:
                    pan = False
                    storage_name.append(name)
                    for item in storage_name:
                        if item not in storage_user:
                            storage_user[item] = password
                            yi = False
                            save(name, password)
                        else:
                            print("用户名重复")
                            print("注册失败")
                            storage_name.clear()
                            break
    deng_lu()


def deng_lu():  # 系统登陆界面
    print("----------登入账号----------")
    n1 = 0  # 记录密码错误次数
    n2 = 0  # 记录账号错误次数
    name = input('请输入用户名:')
    pan = True
    while pan:
        if name in storage_user:
            key = input('请输入密码:')
            while pan:
                if storage_user[name] == key:
                    print('登录成功')
                    pan = False
                    break
                else:
                    n1 += 1
                    if n1 >= 3:
                        print("错误次数过多,强制退出此系统")
                        sys.exit()
                    print("密码错误,还有%d次机会" % (3 - n1))
                    key = input("请重新输入:")
        else:
            n2 += 1
            if n2 >= 3:
                print("错误次数过多,强制退出此系统")
                sys.exit()
            print("用户名错误,还有%d次机会" % (3 - n2))
            name = input("请重新输入:")


def jie_begin():  # 系统开始界面
    print("-" * 35)
    print('----------欢迎您使用本系统------------')
    print("-" * 35)
    print("选择你的身份:1.学生  2.管理员  ")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            student()
            break
        elif i == 2:
            teacher()
            break
        else:
            print("未知身份,请重新输入:")


def deng_xuan():  # 管理员对修改信息选择界面
    print("请选择内容1.学生信息  2.书籍信息")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            deng_stu()
            break
        elif i == 2:
            deng_book1()
            break
        else:
            i = int(input("无法识别,重新输入:"))


def deng_book1():  # 管理员对书的修改选择界面
    print("选择:1.增 2.删 3.改 4.显 5.返回选择界面 0.退")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            books.addBook()
            break
        elif i == 2:
            books.det()
            break
        elif i == 3:
            books.gai()
            break
        elif i == 4:
            books.kan()
            break
        elif i == 5:
            deng_xuan()
            break
        elif i == 0:
            pan_save1()
            print("退出成功")
            break
        else:
            print("输入错误,请重新输入:")


def deng_book2():  # 学生关于书的选择界面
    print("选择:1.借书 2.还书 3.查看借阅的书 0.退")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            books.borrowBook()
            break
        elif i == 2:
            books.return_book()
            break
        elif i == 3:
            books.look_book()
            break
        elif i == 0:
            pan_save2()
            print("退出成功")
            break
        else:
            print("输入错误,请重新输入:")


def deng_stu():  # 管理员修改学生信息选择界面
    print("选择:1.增 2.删 3.改 4.查 5.显 6.返回选择界面 0.退")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            w.add()
            break
        elif i == 2:
            w.det()
            break
        elif i == 3:
            w.gai()
            break
        elif i == 4:
            w.cha()
            break
        elif i == 5:
            w.xian()
            break
        elif i == 6:
            deng_xuan()
            break
        elif i == 0:
            pan_save1()
            print("退出成功")
            break
        else:
            print("输入错误,请重新输入:")


def student():  # 学生登陆界面
    print("请选择:1.登录  2.注册  3.退出程序")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            deng_lu()
            deng_book2()
            break
        elif i == 2:
            zhu_ce()
            deng_book2()
            break
        elif i == 3:
            print("退出成功")
            break
        else:
            print("输入错误,请重新输入:")


def teacher():  # 管理员登录界面
    print("请选择:1.登录  2.注册  3.退出程序")
    i = int(input("请输入:"))
    while True:
        if i == 1:
            deng_lu()
            deng_xuan()
            break
        elif i == 2:
            zhu_ce()
            deng_xuan()
            break
        elif i == 3:
            print("退出成功")
            break
        else:
            print("输入错误,请重新输入:")


storage_name = []  # 用列表储存用户名
storage_user = {'yuan': 'yuan111'}  # 用字典将用户名设为建 密码为值
s = ['傻', '蠢', '笨', '呆', '愚']  # 不能出现的字
du()  # 读取文件里的账号信息
books = BookXiuGai()
books.b_du()  # 输入基本书籍信息
w = Student()
w.stu_du()  # 输入基本人物信息
jie_begin()

 4.运行结果

首先我们要先运行代码

进入程序,首先进入程序的选择界面然后进行登录

学生

总过有三次机会,全部用完会强制退出程序

注册也是同理输入三次不符合要求强制退出

登陆成功后进入功能选择界面

系统里的书是保存在文件里的书

退出是会保存书籍状态文件里的也会改变

管理员

登录与注册同上登陆成功后进入信息选择界面

信息的增加

因为文件里有学生信息所以系统里也有要防止学号重复

信息的删除和显示

信息的改变和查找

信息的保存

只要正常退出程序就能保存信息

管理员是对信息的保存

学生是对书籍信息的保存(书籍状态)

 5.结论与不足

由于时间紧促不能写的很好有许许多多的问题望包涵,这里我没有对账号进行分类,管理员新增的学生信息,也不会让该学生的学号变成自己的账号,赋予初始密码学生在改等等一系列问题,也没有使用pyqt来编辑登录界面。有大量的不足。

因为我不打算主攻python所以这个python课设就只会到这一步不会进一步的改进,有所不好的地方多多包涵

原网站

版权声明
本文为[yjhklxx]所创,转载请带上原文链接,感谢
https://blog.csdn.net/yjhklxx/article/details/125231441