python图书管理系统用csv文件储存图书信息并对一储存的图书信息进行增删查改,插入和遍历
时间: 2024-05-11 09:19:21 浏览: 16
好的,下面我来为您介绍如何编写一个基于 CSV 文件的图书管理系统。
首先,我们需要定义一些 CSV 文件中的列名,例如:书名、作者、出版社、ISBN 码等。假设我们使用以下列名:
```
book_name, author, publisher, isbn
```
然后,我们可以编写一个 Book 类来表示图书:
```python
class Book:
def __init__(self, book_name, author, publisher, isbn):
self.book_name = book_name
self.author = author
self.publisher = publisher
self.isbn = isbn
```
接下来,我们需要编写一个 CsvManager 类来管理 CSV 文件。这个类需要实现以下功能:
- 从 CSV 文件中读取图书信息
- 向 CSV 文件中写入图书信息
- 根据 ISBN 码查询图书信息
- 根据 ISBN 码删除图书信息
- 遍历所有图书信息
```python
import csv
class CsvManager:
def __init__(self, file_path):
self.file_path = file_path
self.fieldnames = ['book_name', 'author', 'publisher', 'isbn']
def read_books(self):
books = []
with open(self.file_path, 'r') as f:
reader = csv.DictReader(f, fieldnames=self.fieldnames)
for row in reader:
book = Book(row['book_name'], row['author'], row['publisher'], row['isbn'])
books.append(book)
return books
def write_book(self, book):
with open(self.file_path, 'a') as f:
writer = csv.DictWriter(f, fieldnames=self.fieldnames)
writer.writerow({'book_name': book.book_name, 'author': book.author, 'publisher': book.publisher, 'isbn': book.isbn})
def find_book_by_isbn(self, isbn):
with open(self.file_path, 'r') as f:
reader = csv.DictReader(f, fieldnames=self.fieldnames)
for row in reader:
if row['isbn'] == isbn:
return Book(row['book_name'], row['author'], row['publisher'], row['isbn'])
return None
def delete_book_by_isbn(self, isbn):
books = []
with open(self.file_path, 'r') as f:
reader = csv.DictReader(f, fieldnames=self.fieldnames)
for row in reader:
if row['isbn'] != isbn:
book = Book(row['book_name'], row['author'], row['publisher'], row['isbn'])
books.append(book)
with open(self.file_path, 'w') as f:
writer = csv.DictWriter(f, fieldnames=self.fieldnames)
writer.writeheader()
for book in books:
writer.writerow({'book_name': book.book_name, 'author': book.author, 'publisher': book.publisher, 'isbn': book.isbn})
def traverse_books(self):
with open(self.file_path, 'r') as f:
reader = csv.DictReader(f, fieldnames=self.fieldnames)
for row in reader:
book = Book(row['book_name'], row['author'], row['publisher'], row['isbn'])
print(book.book_name, book.author, book.publisher, book.isbn)
```
最后,我们可以编写一个 Menu 类来提供一个简单的命令行菜单,用于调用 CsvManager 类的各种方法:
```python
class Menu:
def __init__(self, csv_manager):
self.csv_manager = csv_manager
def display_menu(self):
print('1. Add book')
print('2. Find book')
print('3. Delete book')
print('4. Traverse books')
print('0. Exit')
def run(self):
while True:
self.display_menu()
choice = input('Enter your choice: ')
if choice == '1':
book_name = input('Enter book name: ')
author = input('Enter author: ')
publisher = input('Enter publisher: ')
isbn = input('Enter ISBN: ')
book = Book(book_name, author, publisher, isbn)
self.csv_manager.write_book(book)
elif choice == '2':
isbn = input('Enter ISBN: ')
book = self.csv_manager.find_book_by_isbn(isbn)
if book:
print(book.book_name, book.author, book.publisher, book.isbn)
else:
print('Book not found')
elif choice == '3':
isbn = input('Enter ISBN: ')
self.csv_manager.delete_book_by_isbn(isbn)
elif choice == '4':
self.csv_manager.traverse_books()
elif choice == '0':
break
```
现在,我们可以在主函数中创建 CsvManager 和 Menu 对象,并调用 Menu 的 run 方法来启动图书管理系统:
```python
if __name__ == '__main__':
csv_manager = CsvManager('books.csv')
menu = Menu(csv_manager)
menu.run()
```
这样,一个基于 CSV 文件的图书管理系统就完成了。