开发者

python编写图书管理系统

开发者 https://www.devze.com 2022-12-12 13:46 出处:网络 作者: Brisa56
本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下

本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下

题目:写一个简单的图书http://www.cppcns.com借阅系统‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

学校二手书是个大市场,A老师决定涉足这个领域,她需要写一个图书管理系统帮她管理书籍的借阅情况,她希望这个程序可以做到:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

1. 查询书籍:可以一键查询系统里所有书籍的信息和借阅情况‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

2. 添加书籍:往系统添加书籍时,需要输入书籍的基本信息(书名,作者,推荐理由)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

3. 借阅书籍:当书籍的状态是“未借出”的时候,书籍才可以借,借出以后的书籍状态为“已借出”‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

4. 归还书籍:归还成功后书籍的状态会更改成“未借出”,下一个同学可以再借了。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

既然已经学习了类和对象,所以不用考虑其他编程模式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

类的两种用法:1. 类作为实例对象的模板 2. 类作为函数包。第一种用法是使用类生成实例对象。类作为实例对象的模版,每个实例创建后,都将拥有类的所有属性和方法。第二种用法是用类将多个函数(方法)打包封装在一起,让类中的方法相互配合。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

该项目中,处理的对象是每本具体的书籍,每本书都有自己的属性信息,由此,可以定义一个Book类,利用Book类创建一个个书的实例,绑定属性(第一种用法)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

而对于而这个管理系统的运行主体,是多个可供选择的功能的叠加,所以我们可以创建一个系统运行类BookManager,将查询书籍、添加书籍等功能封装成类中的方法以供调用(第二种用法)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

课堂上,我们已编写了基本功能,见附件1BookRent.py‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

------------------------------------------‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

对程序进行改造升级:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

1. 图书信息从CSV文件获取(附件2),注意在借阅和归还时修改图书的状态‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

2. 考虑对书籍进行分类:继承Book类,创建一些子类,例如,FictionBook,改造其初始化方法,增加参数type=‘玄幻类’‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

3. 实现模糊查询:例如,让用户输入作者名,就能打印出系统里该作者所有书籍的相关信息;输入玄幻类,打印出所有这类书籍的相关信息

CSV表格部分如下:

python编写图书管理系统

代码:

# coding = utf-8
import csv
from itertools import islice
import pandas as pd
import os


class Book:
  def __init__(self, name, author, recommendation, type, status=0): # 对实例属性进行初始化
    self.name = name
    self.author = author
    self.recommendation = recommendation
    sehttp://www.cppcns.comlf.status = status
    self.type = type

  def __str__(self):
    if self.status == 1:
      status = '已借出'
    else:
      status = '未借出'
    return '名称:《%s》作者:%s 推荐语:%s 类别: %s 状态:%s ' % (self.name,xsxSd self.author, self.recommendation, self.type, status)


class FictionBook(Book):
  def __init__(self, type='奇幻'):
    self.type = type


class NovelBook(Book):
  def __init__(self, type='小说'):
    self.type = type


class JottingsBook(Book):
  def __init__(self, type='随笔'):
    self.type = type


class BookManager:
  books = []

  def __init__(self):
    f = open('BookInfos.csv', 'r')
    readers = csv.reader(f)
    for row in islice(readers, 1, None):
      self.books.append(Book(row[0], row[1], row[2], row[3], row[4]))
    f.close()

  def menu(self): # 显示选择菜单,根据不同菜单的选项调用不同的方法
    print('欢迎使用大数据团队图书节约系统,每本书都是好书,希望钟老师的市场越来越好。\n')
    while True:
      print(' 1.查询书籍\n 2.添加书籍\n 3.借阅书籍\n 4.归还书籍\n 5.退出系统\n')
      choice = int(input('请输入数字选项对应的功能,例如:1(指....)'))
      if choice == 1:
        self.show_all_book()
      elif choice == 2:
        self.add_book()
      elif choice == 3:
        self.lend_book()
      elif choice == 4:
        self.return_book()
      elif choice == 5:
        print('感谢使用!欢迎下次再来!')
        break

  def show_all_book(self): # 显示书籍信息
    print("1.查询作者相关书籍\n2.查询类别相关书籍\n3.查询所有书籍")
    ch = eval(input('请输入你的选择:例如:1(指....)'))
    if ch == 1:
      author = input("请输入作者名字:")
      for book in self.books:
        if book.author == author:
          print('')
          print(book)
    elif ch == 2:
      type = input("请输入书籍类别:")
      for book in self.books:
        if book.type == type:
          print('')
          print(book)
    elif ch == 3:
      for book in self.books:
        print('')
        print(book)
    else:
      print(www.cppcns.com"您的输入有误噢!")

  def add_book(self): # 添加书籍
    new_name = input('请输入书籍的名字:')
    new_author = input('请输入书籍的作者:')
    new_comment = input('请输入书籍的推荐语:')
    new_type = input('请输入书籍的类别:')
    new_book = [new_name, new_author, new_comment, new_type, 0]
    # 写入CSV文件
    f = open('BookInfos.csv', 'a+')
    writer = csv.writer(f)
    writer.writerow(new_book)
    f.close()
    # 改变books[]
    self.books.append(Book(new_book[0], new_book[1], new_book[2], new_book[3], new_book[4]))
    print('书籍录入成功!\n')

  def check_book(self, name): # 检查是否存在该书籍
    for book in self.books:
      if book.name == name:
        return book
    else:
      return -1

  def lend_book(self): # 借阅书籍
    name = input('请输入你想借阅的书籍名字:')
    res = self.check_book(name)
    if res != -1:
      if res.status == 1:
        print('你来晚了,这本书已经被借走了')
      else:
        print('借阅成功!借了不看会变胖~~~')
        res.status = 1
        manager.change_status(name)
    else:
      print('这本书暂时没有在系统里!')

  def return_book(self): # 归还书籍
    name = input('请输入归还书籍的名字:')
    res = self.check_book(name)
    if res == -1:
      print('没有这本书,你恐怕输错书名了~')
    else:
      if res.status == 0:
        print('这本书没有被借走!')
      else:
        print('归还成功')
        res.status = 0
        manager.change_status(name)
        # 这里我做实验时有些些问题,去掉manager.会出现 name is not defined 学艺不精,还不够了解python,见谅

  @staticmethod
  def change_status(name): # 修改CSV文件中借还书籍的状态
    in_file = open("BookInfos.csv", "r")
    reader = csv.reader(in_file)
    out_file = open("BookInfos1.csv", "w", newline='')
    writer = csv.writer(out_file)
    for row in reader:
      if row[0] == name:

        if row[4] == '0':
          row[4] = '1'
        else:
          row[4] = '0'
      writer.writerow(row)
  编程客栈  in_file.close()
    out_file.close()
    os.remove("BookInfos.csv") # 删除原文件
    os.rename("BookInfos1.csv", "BookInfos.csv") # 重命名写入文件,此法不可取,但是我暂时找不到好的方法了
    print("已修改CSV文件")
    # 这里我做实验时也有些些问题。1.不会修改特定单元格,2.选择了修改后替换原文件的方法,此法若真实用于大型文件管理,会导致效率大幅度降低,不可取,见谅


manager = BookManager()
manager.menu()

此次实验前前后后断断续续做了5天左右,主要还是对python的CSV模块不太熟悉,建议大家好好学习。

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号