def delete(): while True: books_id = input('请输入要删除的图书的ID:') if books_id != '': # 默认为True if os.path.exists(filename): # 判断磁盘上文件是否存在 with open(filename, 'r', encoding='utf-8') as file: # 起名 file books_old = file.readlines() else: books_old = [] flag = False # 标记是否删除(默认没有删除) if books_old: # 有内容,返回布尔值 True with open(filename, 'w', encoding='utf-8') as wfile: # 以只写方式打开文件 d = {} for item in books_old: d = dict(eval(item)) # 将字符串转成字典 if d['id'] != books_id: wfile.write(str(d) + '\n') else: flag = True # 表示删除 if flag: # 默认 flag=True print('id为{}的书本信息已被删除'.format(books_id)) else: print('没有找到id为{}的书本信息'.format(books_id)) else:
时间: 2024-02-10 21:30:10 浏览: 75
这段代码是用来删除图书信息的。它的作用是通过用户输入要删除的图书的ID,然后检查文件是否存在,如果存在则读取文件中的所有内容到列表books_old中,否则将列表books_old初始化为空列表。接下来,代码会遍历books_old中的每个元素,将其转化为字典格式,并且判断字典中的id是否与用户输入的id相同,如果不同,则将该字典格式的数据重新写入文件中;如果相同,则将flag标记设置为True,表示已经删除了该图书信息。最后,代码会根据flag的值来判断是否成功删除了图书信息,并且根据相应的情况打印出提示信息。如果用户输入的图书id为空,则程序会一直等待用户重新输入。
相关问题
①录入:从键盘输入(或从文件读入)图书(或学生)信息表的各个数据元素; ②查找:可按不同属性查找所有等于给定值的数据元素,找到并返回它们在表中的位序; ③插入:在表中第i(1=<i<=N+1)个位置插入一个新元素; ④删除:可删除表中第i(1=<i<=N)个位置上的元素; ⑤输出:依次打印表中的各个元素的值; ⑥排序:可按某属性对表中的元素进行排序。(可选)
以下是一个示例的图书信息管理程序的实现,包括录入、查找、插入、删除、输出和排序功能:
```python
class Book:
def __init__(self, name, author, publisher, year):
self.name = name
self.author = author
self.publisher = publisher
self.year = year
class BookList:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def find_books(self, key, value):
result = []
for i, book in enumerate(self.books):
if getattr(book, key) == value:
result.append(i)
return result
def insert_book(self, index, book):
self.books.insert(index, book)
def delete_book(self, index):
del self.books[index]
def print_books(self):
for book in self.books:
print(f"{book.name}, {book.author}, {book.publisher}, {book.year}")
def sort_books(self, key):
self.books.sort(key=lambda x: getattr(x, key))
# 示例程序
book_list = BookList()
while True:
print("请选择操作:")
print("1. 录入图书信息")
print("2. 查找图书信息")
print("3. 插入图书信息")
print("4. 删除图书信息")
print("5. 输出图书信息")
print("6. 排序图书信息")
print("0. 退出程序")
choice = input("请输入您的选择:")
if choice == "1":
name = input("请输入图书名称:")
author = input("请输入作者名字:")
publisher = input("请输入出版社:")
year = input("请输入出版年份:")
book = Book(name, author, publisher, year)
book_list.add_book(book)
print("已录入图书信息")
elif choice == "2":
key = input("请输入查找的属性(name/author/publisher/year):")
value = input("请输入查找的值:")
indices = book_list.find_books(key, value)
if indices:
print(f"找到了{len(indices)}本图书:")
for i in indices:
print(f"{i + 1}. {book_list.books[i].name}")
else:
print("没有找到匹配的图书")
elif choice == "3":
index = int(input("请输入插入的位置:"))
name = input("请输入图书名称:")
author = input("请输入作者名字:")
publisher = input("请输入出版社:")
year = input("请输入出版年份:")
book = Book(name, author, publisher, year)
book_list.insert_book(index - 1, book)
print("已插入图书信息")
elif choice == "4":
index = int(input("请输入删除的位置:"))
book_list.delete_book(index - 1)
print("已删除图书信息")
elif choice == "5":
print("图书信息如下:")
book_list.print_books()
elif choice == "6":
key = input("请输入排序的属性(name/author/publisher/year):")
book_list.sort_books(key)
print("已排序图书信息")
elif choice == "0":
print("谢谢使用,再见!")
break
else:
print("输入有误,请重新输入")
```
这个程序定义了两个类,`Book` 表示一本图书的信息,`BookList` 表示整个图书信息表,包括一些基本的操作方法。在主程序中,通过一个循环不断接受用户的选择,然后调用对应的方法实现相应的功能。用户可以通过键盘输入(或从文件读入)图书信息,按不同属性查找所有等于给定值的数据元素并返回它们在表中的位序,插入一个新元素,删除一个元素,依次打印表中的各个元素的值,以及按某属性对表中的元素进行排序。
三个表:用户表user和管理员表admin和图书表book 用户表user(用户名uname,密码password,姓名chrname,角色role) 图书表books(图书编号bid,图书名bname,作者aut) 图书借阅(用户名uname,图书编号bid,图书名bname,作者aut,时间date) 在user.txt中存放可以登录的用户信息(用户名,密码,姓名) book.txt以txt格式存放图书信息 运行程序时,首先输入用户名和密码,不正确提示用户重新输入,最多可以尝试3次,用户名密码正确后进入主菜单,如下所示: ====图书借阅管理系统==== 1.txt文件读取图书信息 2.键盘添加图书信息.(仅限2.3.4管理员功能) 3.修改某条图书信息 4.删除某条图书信息 5.增加一条用户借书记录 (5.6.7.8.9用户功能) 6.删除一条用户借书记录(还书) 7.通过学号修改用户的某条借书记录 8.通过学号查找用户借书还书记录 9.控制台直接显示用户借书记录 10.修改登录密码 11.txt导出图书信息 12.退出 请选择(1-12):
这是一道比较典型的数据库应用题目,需要使用文件读写和基本的数据操作知识。下面是一个简单的实现思路:
1. 读取user.txt文件中的用户信息,存储到一个字典中,用于登录验证和修改密码。
2. 读取book.txt文件中的图书信息,存储到一个列表中。
3. 实现登录验证功能,最多可以尝试3次,如果用户名或密码不正确则提示用户重新输入。
4. 登录成功后显示主菜单,根据用户的角色(role)显示不同的选项。
5. 如果用户角色是管理员,则可以进行图书信息的添加、修改和删除操作。如果是普通用户,则只能进行借书和还书操作。
6. 图书信息的添加、修改和删除操作需要对book.txt文件进行读写。可以使用csv模块来实现,也可以使用普通的文本文件读写。
7. 借书和还书操作需要对一个借阅记录文件进行读写,可以使用csv模块来实现。借阅记录文件的格式为:用户名,图书编号,图书名,作者,借阅时间。
8. 修改密码功能需要对user.txt文件进行读写。
9. 导出图书信息功能需要将book.txt文件的内容输出到一个新的文件中,可以使用csv模块来实现。
10. 程序退出前需要保存所有的数据到相应的文件中。
下面是一个简单的Python代码示例,仅供参考:
```python
import csv
def read_users(filename):
users = {}
with open(filename, 'r') as f:
reader = csv.reader(f)
for row in reader:
username, password, name, role = row
users[username] = {'password': password, 'name': name, 'role': role}
return users
def write_users(filename, users):
with open(filename, 'w') as f:
writer = csv.writer(f)
for username, info in users.items():
password = info['password']
name = info['name']
role = info['role']
writer.writerow([username, password, name, role])
def read_books(filename):
books = []
with open(filename, 'r') as f:
reader = csv.reader(f)
for row in reader:
bid, bname, author = row
books.append({'bid': bid, 'bname': bname, 'author': author})
return books
def write_books(filename, books):
with open(filename, 'w') as f:
writer = csv.writer(f)
for book in books:
bid = book['bid']
bname = book['bname']
author = book['author']
writer.writerow([bid, bname, author])
def read_records(filename):
records = []
with open(filename, 'r') as f:
reader = csv.reader(f)
for row in reader:
username, bid, bname, author, date = row
records.append({'username': username, 'bid': bid, 'bname': bname, 'author': author, 'date': date})
return records
def write_records(filename, records):
with open(filename, 'w') as f:
writer = csv.writer(f)
for record in records:
username = record['username']
bid = record['bid']
bname = record['bname']
author = record['author']
date = record['date']
writer.writerow([username, bid, bname, author, date])
def login(users):
for i in range(3):
username = input('请输入用户名:')
password = input('请输入密码:')
if username in users and users[username]['password'] == password:
print('登录成功!')
return username, users[username]['role']
else:
print('用户名或密码不正确,请重新输入。')
print('登录失败!')
return None, None
def add_book(books):
bid = input('请输入图书编号:')
bname = input('请输入图书名称:')
author = input('请输入作者名称:')
books.append({'bid': bid, 'bname': bname, 'author': author})
print('添加图书成功!')
def modify_book(books):
bid = input('请输入要修改的图书编号:')
for book in books:
if book['bid'] == bid:
book['bname'] = input('请输入新的图书名称:')
book['author'] = input('请输入新的作者名称:')
print('修改图书成功!')
return
print('没有找到该图书编号!')
def delete_book(books):
bid = input('请输入要删除的图书编号:')
for book in books:
if book['bid'] == bid:
books.remove(book)
print('删除图书成功!')
return
print('没有找到该图书编号!')
def borrow_book(username, books, records):
bid = input('请输入要借阅的图书编号:')
for book in books:
if book['bid'] == bid:
bname = book['bname']
author = book['author']
records.append({'username': username, 'bid': bid, 'bname': bname, 'author': author, 'date': '借阅时间'})
print('借阅图书成功!')
return
print('没有找到该图书编号!')
def return_book(username, records):
bid = input('请输入要归还的图书编号:')
for record in records:
if record['username'] == username and record['bid'] == bid:
record['date'] = '归还时间'
print('归还图书成功!')
return
print('没有找到该图书编号或您没有借阅过该图书!')
def modify_record(username, records):
bid = input('请输入要修改的图书编号:')
for record in records:
if record['username'] == username and record['bid'] == bid:
record['date'] = input('请输入新的借阅时间或归还时间:')
print('修改借阅记录成功!')
return
print('没有找到该图书编号或您没有借阅过该图书!')
def search_record(username, records):
for record in records:
if record['username'] == username:
print(record)
def main():
users = read_users('user.txt')
books = read_books('book.txt')
records = read_records('record.csv')
username, role = login(users)
if username is None:
return
while True:
print('====图书借阅管理系统====')
print('1.读取图书信息')
if role == '管理员':
print('2.添加图书信息')
print('3.修改图书信息')
print('4.删除图书信息')
elif role == '用户':
print('5.借阅图书')
print('6.归还图书')
print('7.修改借阅记录')
print('8.查找借阅记录')
print('9.显示借阅记录')
print('10.修改登录密码')
print('11.导出图书信息')
print('12.退出')
choice = input('请选择(1-12):')
if choice == '1':
for book in books:
print(book)
elif choice == '2' and role == '管理员':
add_book(books)
elif choice == '3' and role == '管理员':
modify_book(books)
elif choice == '4' and role == '管理员':
delete_book(books)
elif choice == '5' and role == '用户':
borrow_book(username, books, records)
elif choice == '6' and role == '用户':
return_book(username, records)
elif choice == '7' and role == '用户':
modify_record(username, records)
elif choice == '8' and role == '用户':
search_record(username, records)
elif choice == '9' and role == '用户':
for record in records:
if record['username'] == username:
print(record)
elif choice == '10':
new_password = input('请输入新的密码:')
users[username]['password'] = new_password
write_users('user.txt', users)
print('修改密码成功!')
elif choice == '11':
write_books('book_out.csv', books)
print('导出图书信息成功!')
elif choice == '12':
write_users('user.txt', users)
write_books('book.txt', books)
write_records('record.csv', records)
print('程序退出!')
break
if __name__ == '__main__':
main()
```
注意:上述代码仅供参考,还有很多细节和错误处理需要完善。实际应用中,还需要考虑并发访问、数据安全、备份恢复等问题。
阅读全文