对《图书馆借阅管理系统》里的用户数据和图书数据改用文件进行存储,用户信息存一个文件user.csv,图书存一个文件book.csv,并实现基本的增删改查操作。 加入异常处理。
时间: 2023-06-12 16:04:05 浏览: 164
好的,这里是一个简单实现的代码示例,代码实现了用户和图书数据的存储、增删改查操作以及异常处理:
```python
import csv
class Library:
def __init__(self):
self.users_file = 'user.csv'
self.books_file = 'book.csv'
self.users = {}
self.books = {}
def load_data(self):
try:
with open(self.users_file, 'r') as file:
reader = csv.reader(file)
for row in reader:
self.users[row[0]] = {'name': row[1], 'borrowed_books': row[2].split(';')}
except FileNotFoundError:
pass
try:
with open(self.books_file, 'r') as file:
reader = csv.reader(file)
for row in reader:
self.books[row[0]] = {'name': row[1], 'author': row[2], 'available': row[3]}
except FileNotFoundError:
pass
def save_data(self):
with open(self.users_file, 'w') as file:
writer = csv.writer(file)
for user_id, user_data in self.users.items():
writer.writerow([user_id, user_data['name'], ';'.join(user_data['borrowed_books'])])
with open(self.books_file, 'w') as file:
writer = csv.writer(file)
for book_id, book_data in self.books.items():
writer.writerow([book_id, book_data['name'], book_data['author'], book_data['available']])
def add_user(self, user_id, name):
if user_id in self.users:
raise ValueError('User already exists')
self.users[user_id] = {'name': name, 'borrowed_books': []}
self.save_data()
def remove_user(self, user_id):
if user_id not in self.users:
raise ValueError('User does not exist')
del self.users[user_id]
self.save_data()
def add_book(self, book_id, name, author):
if book_id in self.books:
raise ValueError('Book already exists')
self.books[book_id] = {'name': name, 'author': author, 'available': True}
self.save_data()
def remove_book(self, book_id):
if book_id not in self.books:
raise ValueError('Book does not exist')
del self.books[book_id]
self.save_data()
def borrow_book(self, user_id, book_id):
if user_id not in self.users:
raise ValueError('User does not exist')
if book_id not in self.books:
raise ValueError('Book does not exist')
if not self.books[book_id]['available']:
raise ValueError('Book is not available')
self.users[user_id]['borrowed_books'].append(book_id)
self.books[book_id]['available'] = False
self.save_data()
def return_book(self, user_id, book_id):
if user_id not in self.users:
raise ValueError('User does not exist')
if book_id not in self.books:
raise ValueError('Book does not exist')
if book_id not in self.users[user_id]['borrowed_books']:
raise ValueError('User did not borrow this book')
self.users[user_id]['borrowed_books'].remove(book_id)
self.books[book_id]['available'] = True
self.save_data()
def search_user(self, user_id):
if user_id not in self.users:
raise ValueError('User does not exist')
return self.users[user_id]
def search_book(self, book_id):
if book_id not in self.books:
raise ValueError('Book does not exist')
return self.books[book_id]
```
在这段代码中,我们定义了一个`Library`类,它包含了用户数据和图书数据的文件名、用户数据和图书数据的字典、以及一些操作这些数据的方法。
在初始化方法`__init__`中,我们初始化了文件名和数据字典,并且调用了`load_data`方法从文件中读取数据。
在`load_data`方法中,我们尝试打开用户数据文件和图书数据文件,如果文件不存在则跳过。对于每一行数据,我们将其解析为字典并添加到相应的数据字典中。
在`save_data`方法中,我们将用户数据和图书数据分别写入到对应的文件中。
在`add_user`方法中,我们检查用户是否已经存在,如果存在则抛出异常,否则将其添加到用户数据字典中,并调用`save_data`方法保存数据。
在`remove_user`方法中,我们检查用户是否存在,如果不存在则抛出异常,否则将其从用户数据字典中删除,并调用`save_data`方法保存数据。
在`add_book`方法中,我们检查图书是否已经存在,如果存在则抛出异常,否则将其添加到图书数据字典中,并调用`save_data`方法保存数据。
在`remove_book`方法中,我们检查图书是否存在,如果不存在则抛出异常,否则将其从图书数据字典中删除,并调用`save_data`方法保存数据。
在`borrow_book`方法中,我们检查用户和图书是否存在,并且图书是否可借。如果有任何一个条件不满足则抛出异常,否则将图书标记为不可借,将图书ID添加到用户的已借书籍列表中,并调用`save_data`方法保存数据。
在`return_book`方法中,我们检查用户和图书是否存在,并且用户是否曾经借过这本书。如果有任何一个条件不满足则抛出异常,否则将图书标记为可借,将图书ID从用户的已借书籍列表中删除,并调用`save_data`方法保存数据。
在`search_user`方法中,我们检查用户是否存在,如果不存在则抛出异常,否则返回该用户的数据字典。
在`search_book`方法中,我们检查图书是否存在,如果不存在则抛出异常,否则返回该图书的数据字典。
这段代码虽然简单,但是已经实现了一个基本的图书馆借阅管理系统。你可以在此基础上进行扩展,添加更多的功能和异常处理。
阅读全文