用户注册

def logon():print("欢迎来到图书管理系统注册页面~")username = input("请输入用户名:")if len(username)<6:print("用户名不能小于6个字符")else:email = input("请输入邮箱:")password = input("请输入密码:")if len(password)<8:print("密码不能少于8位")else:rpassword = input("请确认密码:")if password ==rpassword:print("注册成功!")# 函数调用,每追加一列数据都进行换行 每个数据之间都有空格preserve_data(path,[username,'   '+ email,'   '+ password + '\n'])login_tips = input('是否登录?(yes/no)')if login_tips =='yes':login()else:passreturn Trueelse:print("两次输入的密码不一致,请重新输入!")# 递归调用logon()

保存数据到文件

path = r'/Users/mozili/PYTHONWORKSPACE/bookManage/user.txt'
def preserve_data(file_path,data):# 将字符串转换为bytes,因为write写入的是字节流,不能是字符串 当为w时需要解码# data = data.encode()# 打开文件,追加数据到文件with open(file_path,'a') as wstream:# 判断是否可写if wstream.writable():wstream.writelines(data)else:print("没有权限!")

用户登录

def login():print("欢迎来到图书管理系统登录页面~")tips = input("是否已经注册?(yes/no)")if tips =='yes':while True:username = input("输入用户名:")password = input("输入密码:")# 读取文件时可能会出现找不到文件的异常,因此使用try excepttry:# 读取文件中的内容with open(path, 'rb') as stream:# 读取多行保存到列表中,列表中保存的是二进制,字节result = stream.readlines()# print(result)# 列表推导式,循环遍历列表,将字节解码为字符串放在一个新列表uesr_listuesr_list = [i.decode() for i in result]# print(uesr_list)# 循环遍历列表,检查输入的用户名和密码是否在字符串中for i in uesr_list:info = i.split('   ')# print(info)if username == info[0] and password == info[2].rstrip('\r\n'):print("登录成功")operate(book_path,username)breakelse:raise Exception("用户名或密码错误,请重新输入!")except Exception as err:print(err)# 没有异常时执行else语句else:breakelse:print("您还未注册,请先注册后再登录!")# 递归logon()

查询图书

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def find_books(path):try:with open(path, 'r') as rstream:# readlines读到的内容是一个列表container = rstream.readlines()# 通过列表推导式得到新的列表,即每个元素去掉后面的换行符号new_container = [books_name.rstrip('\n') for books_name in container]for b_name in new_container:# 打印图书+《》print("《{}》".format(b_name))except Exception as err:print("错误原因:",err)

添加图书

def add_book(b_path,username):# 添加前首先判断是否是管理员permission(b_path, username)# 追加图书 不能是w ,否则会清空之前的内容with open(b_path, 'a') as wstream:# 判断是否可写if wstream.writable:msg = input("请输入书名:")try:# 添加书籍之前判断某本书是否已经添加with open(b_path) as rstream:while True:line = rstream.readline()# 去掉右边的换行line = line.rstrip('\n')# 当找到空行是如果还没有找到与输入的书名一致的时候,就添加输入的书名if not line:book = '\n' + msgwstream.write(book)print("添加成功")breakelse:# 输入的图书和读到的行有一致的则提示不能重复添加if line == msg:print("{}已添加,请不要重复添加哦~".format(msg))breakexcept Exception as err:print("错误原因:", err)else:print("没有权限")

修改图书

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def update_book(b_path,username):permission(b_path, username)try:with open(b_path, 'r') as rstream:container = rstream.read()# 通过'\n'来分割字符串,返回结果是列表container = container.split('\n')# print(container)# 删除前先展示有哪些图书find_books(book_path)book_name = input("请输入需要修改的图书书名:")# 循环遍历修改书名for i in range(len(container)):if book_name == container[i]:rbook_name = input("请输入修改后的图书书名:")container[i] = rbook_name + '\n'else:# 列表中的每个书名后面加换行符,用于写入文件时换行container[i] = container[i] + '\n'# print(container)# 将书名更新后的内容以writelines写入文件中  writelines(可迭代)with open(b_path, 'w') as wwstream:wwstream.writelines(container)print("修改成功")except Exception as err:print("错误原因:", err)

删除图书

def del_book(b_path,username):permission(path, username)try:with open(b_path, 'r') as rstream:container = rstream.read()# 通过'\n'来分割字符串,返回结果是列表container = container.split('\n')# print(container)# 展示有哪些图书find_books(book_path)book_name = input("请输入需要删除的图书书名:")# 循环遍历修改书名for i in range(len(container) - 1):if book_name == container[i]:container.remove(container[i])else:# 列表中的每个书名后面加换行符,用于写入文件时换行container[i] = container[i] + '\n'# print(container)# 将书名删除后的内容以writelines写入文件中  writelines(可迭代)with open(b_path, 'w') as wwstream:wwstream.writelines(container)print("删除成功")except Exception as err:print("错误原因:", err)

借书

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def borrow_book(username):while True:print("图书列表:")find_books(book_path)borrow_books = input("请选择图书:")try:with open('../user_books/user_books.txt') as rstream:# 每次读取一行lines = rstream.readline()lines = lines.rstrip('\n')# 将读到的内容通过空格分割保存到列表lines = lines.split(' ')# 判断输入的书是否已被借走if borrow_books not in lines:# print(lines)# 借书之前先判断该用户之前是否借过,如果借过,就在后面累加图书,用,分割图书# for user_book in lines:if username in lines:with open('../user_books/user_books.txt', 'a') as wstream:# 判断之前是否借过某本书if borrow_books not in lines:wstream.write(' {}'.format(borrow_books))print("借书成功")breakelse:print("您已借过此书,请从新选择!")breakelse:# 将选择的图书与用户名一起保存到文件中with open('../user_books/user_books.txt', 'a') as wstream:wstream.write('\n{} {}\n'.format(username, borrow_books))print("借书成功")breakelse:print("<<{}>>已被用户{}借走,请重新选择~".format(borrow_books,lines[0]))except Exception as err:print("错误原因:", err)

还书

def return_book(username):try:with open('../user_books/user_books.txt') as rstream:# print("{}您已借阅,未归还图书如下:".format(username))# 读到的结果是列表lines = rstream.readlines()# 遍历列表,将里面的元素再拆分为列表for i in range(len(lines)):# 去掉换行lines[i] = lines[i].rstrip('\n')lines[i] = lines[i].rstrip(' ')lines[i] = lines[i].split(' ')for ii in range(len(lines[i])-1):# 只打印登录用户借阅的图书if username == lines[i][0]:print("{}您已借阅,未归还图书如下:".format(username))print(lines[i][ii+1])msg = input("请选择你要归还的图书:")with open('../user_books/user_books.txt') as rstream:lines = rstream.readlines()for i in range(len(lines)):if username in lines[i] and msg in lines[i]:# 用空字符串替换msg,即表示删除归还的图书lines[i] = lines[i].replace(msg, '')with open('../user_books/user_books.txt', 'w') as wstream:# 将变更后的列表再写入文件,只变更当前用户的图书信息wstream.writelines(lines)print("归还成功!")breakwith open('../user_books/user_books.txt') as rstream:lines = rstream.readlines()for i in range(len(lines)):lines[i] = lines[i].rstrip('\n')lines[i] = lines[i].rstrip(' ')lines[i] = lines[i].split(' ')# print(type(lines[i]))for ii in range(len(lines[i])):# 图书归还成功后判断列表中只有用户名了,如果只有用户名则将用户名用空字符串代替if username == lines[i][0] and len(lines[i]) == 1:lines[i][0] = lines[i][0].replace(lines[i][0], '')lines.append(lines[i][0])# print(lines)str = ''for i in range(len(lines)):for ii in range(len(lines[i])):# 将嵌套列表中的元素取出来拼接成字符串str += lines[i][ii] + ' 'str += '\n'# 遍历完毕删除之前列表里面嵌套的列表,追加字符串strlines.clear()lines.append(str)# print(lines)# 将更新后的列表写入文件with open('../user_books/user_books.txt', 'w') as wstream:wstream.writelines(lines)else:print("您还没有借阅记录哦~")except Exception as err:print("错误原因:", err)

查看个人信息

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def look_person_info(path,username):with open(path) as rstream:lines = rstream.readlines()# print(lines)for info in lines:# 分割成一个列表info = info.split('   ')# print(info)if username in info:print("----个人信息----")print("用户名:", info[0])print("邮箱:", info[1])print("密码:", info[2].rstrip(' '))

修改个人信息

def update_password(path,username):tips = input("请选择操作:\n 1.修改邮箱\n 2.修改密码\n")# 修改邮箱if tips =='1':new_email = ''line = []try:with open(path) as rstream:while True:line = rstream.readline()if not line:breakline = line.split('   ')# 去掉密码后面的换行符line[2] = line[2].rstrip('\n')if username == line[0]:new_email = input("请输入新邮箱:")line[1] = new_emailbreakexcept Exception as err:print(err)else:# 将新修改邮箱后的用户的所有信息追加到文件夹with open(path, 'a') as wstream:for i in range(len(line)):if i == 0:# 遍历列表,第一个列表元素需要前面需要加换行,后面需要加空格与其他元素分割line[i] = '\n' + line[i] + '   'else:line[i] = line[i] + '   'wstream.writelines(line)print("修改成功")# 删除修改邮箱之前用户的信息with open(path) as rstream:# 读取多行lines = rstream.readlines()i = 0l = len(lines)while i < l:# 当 当前用户名在用户信息行且新的邮箱不在时就删除之前的用户信息,不会删除其他用户的信息if username in lines[i] and new_email not in lines[i]:lines.remove(lines[i])i += 1l -= 1# 删除旧邮箱对应的当前用户信息后,再将新邮箱对应的用户信息以及其他用户的信息从新写入到文件with open(path, 'w') as wstream:wstream.writelines(lines)# 修改密码elif tips =='2':new_password = ''line = []try:with open(path) as rstream:while True:line = rstream.readline()if not line:breakline = line.split('   ')# 去掉密码后面的换行符line[2] = line[2].rstrip('\n')if username == line[0]:new_password = input("请输入新密码:")# 判断新密码与旧密码是否一致if new_password ==line[2]:# 抛出异常raise Exception("新密码不能与旧密码相同哦~")else:line[2] =new_passwordbreak# 可以捕获到前面raise抛出的异常except Exception as err:print(err)else:# 将新修改密码后的用户的所有信息追加到文件夹with open(path,'a') as wstream:for i in range(len(line)):if i ==0:# 遍历列表,第一个列表元素需要前面需要加换行,后面需要加空格与其他元素分割line[i] = '\n'+line[i]+'   'else:line[i] = line[i] +'   'wstream.writelines(line)print("修改成功")# 删除修改密码之前用户的信息with open(path) as rstream:# 读取多行lines = rstream.readlines()i =0l = len(lines)while i < l:# 当 当前用户名在用户信息行且新的密码不在时就删除之前的用户信息,不会删除其他用户的信息if username in lines[i] and new_password not in lines[i]:lines.remove(lines[i])i+=1l-=1# 删除旧密码对应的当前用户信息后,再将新密码对应的用户信息以及其他用户的信息从新写入到文件with open(path,'w') as wstream:wstream.writelines(lines)

个人信息

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def person_information(path,username):tips = input("请选择操作:\n 1.查看个人信息\n 2.修改个人信息\n")if tips =='1':look_person_info(path,username)elif tips =='2':update_password(path, username)

只有管理员才可以进行图书的增删改操作

def permission(user_path,username):try:with open(user_path) as rstream:while True:line = rstream.readline()# 读到空行跳出循环if not line:break# 通过3个空格将字符串line分割为一个列表,存储三个值line = line.split('   ')# 循环遍历列表,去掉列表中每个元素后面的换行,如果有就去掉,没有就不取掉for i in range(len(line)):line[i] = line[i].rstrip('\n')# 判断是否管理员,如果是就可以进行添加操作if username == 'admin123':passelse:print("只有管理员{}才可以进行该操作~".format(username))# 不是管理员将回到操作页面operate(path, username)except Exception as err:print("错误原因:",err)

图书增删改借还操作

book_path = r'/Users/mozili/PYTHONWORKSPACE/book.txt'
# book_list = ['水浒传\n','红楼梦\n','廊桥遗梦']
def operate(b_path,username):while True:msg = input("请选择操作:\n 1.查询图书\n 2.添加图书\n 3.修改图书\n 4.删除图书\n 5.借书\n 6.归还图书\n 7.个人信息\n 8.退出登录\n")# 查询图书if msg =='1':find_books(book_path)# 添加图书elif msg =='2':add_book(b_path, username)# 修改图书elif msg =='3':update_book(b_path, username)# 删除图书elif msg =='4':del_book(b_path, username)# 借书elif msg =='5':borrow_book(username)# 还书elif msg =='6':return_book(username)#查看、修改个人信息elif msg =='7':person_information(path, username)# 退出登录elif msg =='8':msg = input("确定退出登录吗?(yes/no)")if msg == 'yes':breaklogin()

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者

【Python教程】全网最容易听懂的1000集python系统学习教程(答疑在最后四期,满满干货)

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者

2021年Python最新最全100个爬虫完整案例教程,数据分析,数据可视化,记得收藏哦

用python实现图书管理系统相关推荐

  1. 图书管理系统python源代码-Python实现图书管理系统

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

  2. python实现图书管理系统——通过excel文件或者TXT文件存放数据

    用python实现图书管理系统--通过excel文件或者TXT文件存放数据 话不多说,先上图,看看运行起来的效果: 由上图可知,我实现的主要功能: 用户注册 用户登录 添加图书 查询图书 删除图书 修 ...

  3. python实现图书管理系统(超详细)

    python实现图书管理系统 图书管理系统 python实现图书管理系统 图书管理系统: 图书的功能: 现在开始添加数据: 增加数据 删除数据 查询数据 图书位置修改 图书的借出 图书的还回 主体界面 ...

  4. python实现图书管理系统的借阅

    文章目录 具体代码 实践功能 python实现图书管理系统的借阅 具体代码 class Book:def __init__(self,name,author,comment,state=0):self ...

  5. python实现图书管理系统(带gui)

    0. 简介 这是这学期一门关于python的课程的大作业,我用了pyqt5来做界面,实现了一个简单的图书管理系统,其功能包括图书信息和读者信息的增删查找,源代码放在最后. 1.实现思路与基本架构 该项 ...

  6. 基于python的图书管理系统

    作业要求 Users.txt 用户名 密码 Books.txt 书名 数量 User_book.txt 用户名 [书名1,书名2,书名3,..] - ------图书管理系统------ 首先要求学生 ...

  7. python实现图书管理系统(课设)

    图书管理系统图书管理系统 某图书馆所藏图书如表1所示: 书号 书名 出版社 作者 价格 库存 10001 C语言程序设计 清华大学出版社 张三 51 5 10002 Python程序设计基础 高等教育 ...

  8. python PySide6 图书管理系统结合数据库实战教程之登录-注册界面(保姆级教程)(后续更新)

    首先默认安装了mysql8.0.29,默认安装了python. 此项目用到了python的第三方库PySide6.pymysql.pyinstaller. 目录 安装第三方库 数据库建表 py文件 注 ...

  9. python实现图书管理系统(完善版)

    user = [['aaa', '123456'], ['bbb', '123456789']] i = 0 f = 0 print('-'*10, '欢迎进入图书管理系统', '-'*10) pri ...

最新文章

  1. SAP制造业解决方案
  2. centos7 安装 Minio
  3. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
  4. redis 分布式锁的 5个坑,真是又大又深
  5. 冯德勇linux百度网盘,RHCE 学习笔记(14)- 文件系统(2) - 搜索文件
  6. COMPUTEX展 CPX论坛聚焦AI与物联网
  7. 【BZOJ】3566: [SHOI2014]概率充电器
  8. 装饰模式实例+java,java 中设计模式(装饰设计模式)的实例详解
  9. 7-12 文件传输 (25 point(s))
  10. 解析:百度快照与站点权重的关系!
  11. Ubuntu 16.04 LTS 下Nginx的编译安装与启动
  12. hget和get redis_redis hget阻塞 使用redis时遇到的问题 - Redis - 服务器之家
  13. 什么是电影衍生品,电影衍生品是用来干嘛的?
  14. ecplise 设置代码自动提示功能
  15. 运用Python 模拟太阳-地球-月亮运动模型
  16. 自动排课系统V2.0基本完善了
  17. SATA硬盘和U盘能否热插拨
  18. react-create-app 配置alias别名
  19. linux 共享内存 出错,共享内存的std :: string给出了分段错误(linux)
  20. Hub能新建但不能打开项目 Failed to connect to pipe_20220313

热门文章

  1. LintCode_173 链表插入排序
  2. 冒泡排序 oj - Google 搜索
  3. Windows域内的时间同步
  4. new 开始转向PHP
  5. wps大纲栏显示在右边_miui12通知栏在哪
  6. 【MM模块】Cycle Counting 周期盘点
  7. 【MM模块】 Goods Receipt 收货 3
  8. SAP相关会计科目的设置OBYC
  9. 内部错误:无法加载 ABAP 报表 LVBRKF0I
  10. SBO系统中销售订单日志的跟踪统计思路分析