网易首页 > 网易号 > 正文 申请入驻

一个完整的图书借阅管理系统的Python实现

0
分享至

以下是一个完整的图书借阅管理系统的Python实现,包含核心功能(图书管理、借阅/归还、查询等),无需任何外部库或网址依赖,直接运行即可使用:

完整代码

python

import datetime

class Book:

def __init__(self, book_id, title, author, total_copies=1):

self.book_id = book_id #图书ID

self.title = title #书名

self.author = author #作者

self.total_copies = total_copies #总副本数

self.available_copies = total_copies #可借副本数

self.borrow_records = [] #借阅记录(记录用户ID和借阅日期)

def __str__(self):

return f"ID: {self.book_id} |书名: {self.title} |作者: {self.author} |可借副本: {self.available_copies}/{self.total_copies}"

class User:

def __init__(self, user_id, name):

self.user_id = user_id #用户ID

self.name = name #用户名

self.borrowed_books = {} #借阅的图书{book_id:归还截止日期}

def __str__(self):

return f"用户ID: {self.user_id} |姓名: {self.name} |当前借阅: {len(self.borrowed_books)}本"

class Library:

def __init__(self):

self.books = {} #所有图书{book_id: Book对象}

self.users = {} #所有用户{user_id: User对象}

self.borrow_period = 30 #默认借阅期限(天)

# ==========图书管理==========

def add_book(self, book_id, title, author, copies=1):

if book_id in self.books:

print("❌ 图书ID已存在!")

else:

self.books[book_id] = Book(book_id, title, author, copies)

print(f"✅ 成功添加图书: {title} (共{copies}本)")

def remove_book(self, book_id):

if book_id not in self.books:

print("❌ 图书不存在!")

elif self.books[book_id].borrow_records:

print("❌ 图书有未归还记录,无法删除!")

else:

del self.books[book_id]

print(f"✅ 已删除图书ID: {book_id}")

# ==========用户管理==========

def register_user(self, user_id, name):

if user_id in self.users:

print("❌ 用户ID已存在!")

else:

self.users[user_id] = User(user_id, name)

print(f"✅ 成功注册用户: {name}")

# ==========借阅功能==========

def borrow_book(self, user_id, book_id):

if user_id not in self.users:

print("❌ 用户不存在!")

elif book_id not in self.books:

print("❌ 图书不存在!")

elif self.books[book_id].available_copies <= 0:

print("❌ 图书已全部借出!")

else:

user = self.users[user_id]

book = self.books[book_id]

#记录借阅

due_date = datetime.date.today() + datetime.timedelta(days=self.borrow_period)

user.borrowed_books[book_id] = due_date

book.available_copies -= 1

book.borrow_records.append((user_id, datetime.date.today()))

print(f"✅ 用户{user.name}成功借阅《{book.title}》,请于{due_date}前归还。")

def return_book(self, user_id, book_id):

if user_id not in self.users:

print("❌ 用户不存在!")

elif book_id not in self.books:

print("❌ 图书不存在!")

elif book_id not in self.users[user_id].borrowed_books:

print("❌ 用户未借阅此书!")

else:

user = self.users[user_id]

book = self.books[book_id]

#归还图书

del user.borrowed_books[book_id]

book.available_copies += 1

#检查是否逾期

due_date = user.borrowed_books[book_id]

today = datetime.date.today()

if today > due_date:

days_overdue = (today - due_date).days

print(f"⚠️图书已逾期{days_overdue}天,请尽快缴纳罚款!")

else:

print(f"✅ 用户{user.name}已归还《{book.title}》。")

# ==========查询功能==========

def search_books(self, keyword):

results = []

for book in self.books.values():

if (keyword.lower() in book.title.lower() or

keyword.lower() in book.author.lower() or

keyword.lower() in book.book_id.lower()):

results.append(book)

if results:

print("\n�� 搜索结果:")

for book in results:

print(book)

else:

print("❌ 未找到匹配的图书!")

def list_all_books(self):

if not self.books:

print("�� 图书馆暂无图书!")

else:

print("\n�� 所有图书:")

for book in self.books.values():

print(book)

def list_user_borrowed(self, user_id):

if user_id not in self.users:

print("❌ 用户不存在!")

else:

user = self.users[user_id]

print(f"\n��{user.name}的借阅记录:")

if not user.borrowed_books:

print("无借阅记录")

else:

for book_id, due_date in user.borrowed_books.items():

book = self.books.get(book_id, None)

title = book.title if book else "未知图书"

print(f"-《{title}》(截止日期: {due_date})")

# ==========主菜单==========

def main():

library = Library()

#预置测试数据

library.add_book("B001", "三体", "刘慈欣", 2)

library.add_book("B002", "平凡的世界", "路遥", 1)

library.register_user("U001", "张三")

library.register_user("U002", "李四")

while True:

print("\n===图书借阅管理系统===")

print("1.图书管理")

print("2.用户管理")

print("3.借阅/归还")

print("4.查询")

print("5.退出系统")

choice = input("请选择功能(1-5): ").strip()

#图书管理

if choice == "1":

print("\n---图书管理---")

print("1.添加图书")

print("2.删除图书")

print("3.查看所有图书")

sub_choice = input("请选择操作(1-3): ").strip()

if sub_choice == "1":

book_id = input("输入图书ID: ").strip()

title = input("输入书名: ").strip()

author = input("输入作者: ").strip()

copies = int(input("输入副本数量: ").strip() or 1)

library.add_book(book_id, title, author, copies)

elif sub_choice == "2":

book_id = input("输入要删除的图书ID: ").strip()

library.remove_book(book_id)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
20年前的2006德国世界杯,才是真正的诸神黄昏!

20年前的2006德国世界杯,才是真正的诸神黄昏!

球叮足球
2026-05-01 09:56:08
假期第一天因车流量大,河南部分高速路段通行缓慢,高速工作人员:按照以往经验,明天车也不会少

假期第一天因车流量大,河南部分高速路段通行缓慢,高速工作人员:按照以往经验,明天车也不会少

大象新闻
2026-05-01 14:46:02
个人收款被查了!2026年个人收款高于这个数,要小心!

个人收款被查了!2026年个人收款高于这个数,要小心!

新浪财经
2026-04-21 22:04:32
欧尔班末日清算,百亿资产被截停,16年执政掏空了匈牙利多少财富

欧尔班末日清算,百亿资产被截停,16年执政掏空了匈牙利多少财富

健身狂人
2026-04-30 18:14:11
合肥市一栋住宅楼拍卖,被129个人合伙以底价2.1755亿元竞得

合肥市一栋住宅楼拍卖,被129个人合伙以底价2.1755亿元竞得

天天话事
2026-05-01 09:22:26
我国低空经济持续“扩容” 打开高质量发展新空间

我国低空经济持续“扩容” 打开高质量发展新空间

新华社
2026-04-30 20:54:03
女儿美国读高中花掉110万,单亲妈妈向社会求助:求捐200万读大学

女儿美国读高中花掉110万,单亲妈妈向社会求助:求捐200万读大学

谈史论天地
2026-04-17 16:50:03
人到中年才明白:伴侣的“疏远”和“沉默”,看似是感情变淡,实则是生活在逼你,让你看清这2个生活的真相

人到中年才明白:伴侣的“疏远”和“沉默”,看似是感情变淡,实则是生活在逼你,让你看清这2个生活的真相

心理观察局
2026-05-01 17:36:26
看来是真的,055发射鹰击20,迫使美菲七国军演在南海草草收场

看来是真的,055发射鹰击20,迫使美菲七国军演在南海草草收场

七月夏安
2026-05-01 16:46:12
电影《寒战1994》票房破3000万

电影《寒战1994》票房破3000万

界面新闻
2026-05-01 15:01:01
曼联官宣新帝星续约!给15万周薪原因揭秘,有迹象证实他能成核心

曼联官宣新帝星续约!给15万周薪原因揭秘,有迹象证实他能成核心

罗米的曼联博客
2026-05-01 08:49:53
曼联新帅之争!卡里克手握欧冠门票,却可能输给免费的西班牙人

曼联新帅之争!卡里克手握欧冠门票,却可能输给免费的西班牙人

体坛鉴春秋
2026-05-01 12:57:20
伊朗最高领袖,“最详细伤情”披露

伊朗最高领袖,“最详细伤情”披露

中国新闻周刊
2026-04-30 16:23:05
实锤了!湖南中医附一院长儿子被曝吃空饷,央媒发声、学校回应

实锤了!湖南中医附一院长儿子被曝吃空饷,央媒发声、学校回应

小鋭有话说
2026-04-30 20:52:39
全A只有22个,市盈率低于10倍,利润增长10%以上,低估值高增长

全A只有22个,市盈率低于10倍,利润增长10%以上,低估值高增长

鹏哥投研
2026-05-01 10:13:50
12分钟砍8+8!李月汝新赛季首秀闪耀:联手两大状元新星夺开门红

12分钟砍8+8!李月汝新赛季首秀闪耀:联手两大状元新星夺开门红

李喜林篮球绝杀
2026-05-01 12:07:37
知名女演员李心艾暴瘦80斤,颧骨突出双颊凹陷,与产后形象反差巨大,网友:不敢认!

知名女演员李心艾暴瘦80斤,颧骨突出双颊凹陷,与产后形象反差巨大,网友:不敢认!

极目新闻
2026-04-30 15:18:21
韦德:季后赛有赢球公式,靠球星赢2场+角色球员爆发赢1场+教练

韦德:季后赛有赢球公式,靠球星赢2场+角色球员爆发赢1场+教练

懂球帝
2026-05-01 15:32:26
超值引援!2100万欧新门神撑起曼联半边天,铁拳砸碎球队门线危机

超值引援!2100万欧新门神撑起曼联半边天,铁拳砸碎球队门线危机

体坛老球迷
2026-05-01 16:54:27
莫氏鸡煲加盟费10万、管理费每月2万?莫叔儿子:网传内容都是假的,已报警

莫氏鸡煲加盟费10万、管理费每月2万?莫叔儿子:网传内容都是假的,已报警

大象新闻
2026-05-01 12:46:07
2026-05-01 19:51:00
建邺区生态科技岛人工智能商会
建邺区生态科技岛人工智能商会
南京市建邺区生态科技岛人工智能行业商会
250文章数 0关注度
往期回顾 全部

科技要闻

苹果上季在华收入继续大增 iPhone收入新高

头条要闻

特朗普发了张图 伊朗外长回应:犯了个"可怕的错误"

头条要闻

特朗普发了张图 伊朗外长回应:犯了个"可怕的错误"

体育要闻

无奈!约基奇:这要在塞尔维亚 全队早被炒了

娱乐要闻

邓超在景德镇被偶遇,穿黑外套逛茶园

财经要闻

GPU神话松动,AI真正的战场变了

汽车要闻

限时9.67万起 吉利星越L/星瑞i-HEV智擎混动上市

态度原创

旅游
健康
亲子
游戏
公开课

旅游要闻

民宿以“蛇很多”为由劝退预订客户,官方:双倍赔付

干细胞治烧烫伤面临这些“瓶颈”

亲子要闻

宝蓝和爸爸比赛吹气球,吹成各种各样的形状,快来看看谁赢了~

Switch国行即将永久关闭服务器!不想变砖就做好这些

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版