用python实现图书管理系统
生活随笔
收集整理的這篇文章主要介紹了
用python实现图书管理系统
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用戶注冊
def logon():print("歡迎來到圖書管理系統(tǒng)注冊頁面~")username = input("請輸入用戶名:")if len(username)<6:print("用戶名不能小于6個字符")else:email = input("請輸入郵箱:")password = input("請輸入密碼:")if len(password)<8:print("密碼不能少于8位")else:rpassword = input("請確認(rèn)密碼:")if password ==rpassword:print("注冊成功!")# 函數(shù)調(diào)用,每追加一列數(shù)據(jù)都進(jìn)行換行 每個數(shù)據(jù)之間都有空格preserve_data(path,[username,' '+ email,' '+ password + '\n'])login_tips = input('是否登錄?(yes/no)')if login_tips =='yes':login()else:passreturn Trueelse:print("兩次輸入的密碼不一致,請重新輸入!")# 遞歸調(diào)用logon()保存數(shù)據(jù)到文件
path = r'/Users/mozili/PYTHONWORKSPACE/bookManage/user.txt' def preserve_data(file_path,data):# 將字符串轉(zhuǎn)換為bytes,因為write寫入的是字節(jié)流,不能是字符串 當(dāng)為w時需要解碼# data = data.encode()# 打開文件,追加數(shù)據(jù)到文件with open(file_path,'a') as wstream:# 判斷是否可寫if wstream.writable():wstream.writelines(data)else:print("沒有權(quán)限!")用戶登錄
def login():print("歡迎來到圖書管理系統(tǒng)登錄頁面~")tips = input("是否已經(jīng)注冊?(yes/no)")if tips =='yes':while True:username = input("輸入用戶名:")password = input("輸入密碼:")# 讀取文件時可能會出現(xiàn)找不到文件的異常,因此使用try excepttry:# 讀取文件中的內(nèi)容with open(path, 'rb') as stream:# 讀取多行保存到列表中,列表中保存的是二進(jìn)制,字節(jié)result = stream.readlines()# print(result)# 列表推導(dǎo)式,循環(huán)遍歷列表,將字節(jié)解碼為字符串放在一個新列表uesr_listuesr_list = [i.decode() for i in result]# print(uesr_list)# 循環(huán)遍歷列表,檢查輸入的用戶名和密碼是否在字符串中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)# 沒有異常時執(zhí)行else語句else:breakelse:print("您還未注冊,請先注冊后再登錄!")# 遞歸logon()查詢圖書
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def find_books(path):try:with open(path, 'r') as rstream:# readlines讀到的內(nèi)容是一個列表container = rstream.readlines()# 通過列表推導(dǎo)式得到新的列表,即每個元素去掉后面的換行符號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 ,否則會清空之前的內(nèi)容with open(b_path, 'a') as wstream:# 判斷是否可寫if wstream.writable:msg = input("請輸入書名:")try:# 添加書籍之前判斷某本書是否已經(jīng)添加with open(b_path) as rstream:while True:line = rstream.readline()# 去掉右邊的換行line = line.rstrip('\n')# 當(dāng)找到空行是如果還沒有找到與輸入的書名一致的時候,就添加輸入的書名if not line:book = '\n' + msgwstream.write(book)print("添加成功")breakelse:# 輸入的圖書和讀到的行有一致的則提示不能重復(fù)添加if line == msg:print("{}已添加,請不要重復(fù)添加哦~".format(msg))breakexcept Exception as err:print("錯誤原因:", err)else:print("沒有權(quán)限")修改圖書
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def update_book(b_path,username):permission(b_path, username)try:with open(b_path, 'r') as rstream:container = rstream.read()# 通過'\n'來分割字符串,返回結(jié)果是列表container = container.split('\n')# print(container)# 刪除前先展示有哪些圖書find_books(book_path)book_name = input("請輸入需要修改的圖書書名:")# 循環(huán)遍歷修改書名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)# 將書名更新后的內(nèi)容以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'來分割字符串,返回結(jié)果是列表container = container.split('\n')# print(container)# 展示有哪些圖書find_books(book_path)book_name = input("請輸入需要刪除的圖書書名:")# 循環(huán)遍歷修改書名for i in range(len(container) - 1):if book_name == container[i]:container.remove(container[i])else:# 列表中的每個書名后面加換行符,用于寫入文件時換行container[i] = container[i] + '\n'# print(container)# 將書名刪除后的內(nèi)容以writelines寫入文件中 writelines(可迭代)with open(b_path, 'w') as wwstream:wwstream.writelines(container)print("刪除成功")except Exception as err:print("錯誤原因:", err)借書
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和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')# 將讀到的內(nèi)容通過空格分割保存到列表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))# 讀到的結(jié)果是列表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("請選擇你要?dú)w還的圖書:")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:# 將變更后的列表再寫入文件,只變更當(dāng)前用戶的圖書信息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)查看個人信息
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和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:# 當(dāng) 當(dāng)前用戶名在用戶信息行且新的郵箱不在時就刪除之前的用戶信息,不會刪除其他用戶的信息if username in lines[i] and new_email not in lines[i]:lines.remove(lines[i])i += 1l -= 1# 刪除舊郵箱對應(yīng)的當(dāng)前用戶信息后,再將新郵箱對應(yīng)的用戶信息以及其他用戶的信息從新寫入到文件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:# 當(dāng) 當(dāng)前用戶名在用戶信息行且新的密碼不在時就刪除之前的用戶信息,不會刪除其他用戶的信息if username in lines[i] and new_password not in lines[i]:lines.remove(lines[i])i+=1l-=1# 刪除舊密碼對應(yīng)的當(dāng)前用戶信息后,再將新密碼對應(yīng)的用戶信息以及其他用戶的信息從新寫入到文件with open(path,'w') as wstream:wstream.writelines(lines)個人信息
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和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)只有管理員才可以進(jìn)行圖書的增刪改操作
def permission(user_path,username):try:with open(user_path) as rstream:while True:line = rstream.readline()# 讀到空行跳出循環(huán)if not line:break# 通過3個空格將字符串line分割為一個列表,存儲三個值line = line.split(' ')# 循環(huán)遍歷列表,去掉列表中每個元素后面的換行,如果有就去掉,沒有就不取掉for i in range(len(line)):line[i] = line[i].rstrip('\n')# 判斷是否管理員,如果是就可以進(jìn)行添加操作if username == 'admin123':passelse:print("只有管理員{}才可以進(jìn)行該操作~".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()結(jié)尾給大家推薦一個非常好的學(xué)習(xí)教程,希望對你學(xué)習(xí)Python有幫助!
Python基礎(chǔ)入門教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
【Python教程】全網(wǎng)最容易聽懂的1000集python系統(tǒng)學(xué)習(xí)教程(答疑在最后四期,滿滿干貨)
Python爬蟲案例教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
2021年P(guān)ython最新最全100個爬蟲完整案例教程,數(shù)據(jù)分析,數(shù)據(jù)可視化,記得收藏哦
總結(jié)
以上是生活随笔為你收集整理的用python实现图书管理系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python格式化输出的三种形式
- 下一篇: python+mysql:实现一千万条数