python實驗練習-圖書管理系統(使用文件來實現)

題目

功能描述:
圖書管理系統項目功能描述:
(1)創建txt文本文檔,包含如下:
① books.txt:保存有一些書籍名稱;
② users.txt:用于保存用戶相關的信息;
③ users_book.txt:記錄哪些用戶借了哪些書
(2)程序包含用戶注冊、用戶登錄、查看圖書、借閱圖書等相關圖書管理系統的功能。
(3)可根據自己對圖書管理系統的理解增加其它功能。

將問題分析劃分為如下內容完成:
(1)分別編寫用戶注冊(register)模塊、用戶登錄(login)模塊、查看圖書(show_books)模塊、借閱圖書(borrow_book)模塊,并將成功注冊的用戶名和密碼保存在文件users.txt中,已有書籍名稱保存在books.txt中,哪些用戶借閱了哪些圖書保存在users_book.txt中;
(2)主函數中可實現根據提示依次調用用戶注冊、用戶登錄、查看圖書、借閱圖書等功能。

代碼

# author:dq
# project:PythonProject
# date:2021年11月04日
# function:# ① books.txt:保存有一些書籍名稱;
# ② users.txt:用于保存用戶相關的信息;
# ③ users_book.txt:記錄哪些用戶借了哪些書import os
# 創建txt文件
def create(path):file = open(path, 'a')file.close()booksPath = "./book.txt"
usersPath = "./users.txt"
usersBookPath = "./users_book.txt"# create(booksPath)
# create(usersPath)
# create(usersBookPath)# 計算已有多少數量
def count(path):read = open(path, 'r', encoding='utf-8')count = len(read.readlines())read.close()return count# 用戶注冊(register)模塊、
def register(name, password):id = count(usersPath)users = open(usersPath, 'r', encoding='utf-8')isExist = Falsewhile True:info = users.readline()if info:if (name in info):isExist = Truebreakelse:breakusers.close()if isExist == True:print('此賬號已注冊,可直接進行登錄!')elif isExist == False:wUser = open(usersPath, 'a', encoding='utf-8')i = str(id + 1) + '\t' + name + '\t' + password + '\n'wUser.writelines(i)print(name + '已成功注冊!')wUser.close()# 用戶登錄(login)模塊
def login(name, password):readUsers = open(usersPath, 'r', encoding='utf-8')condition = 0while True:info = readUsers.readline()if info:if ((name in info) and (password in info)):condition = 1breakelif ((name in info) or (password in info)):condition = 2breakelse:condition = 3else:breakif condition == 1:print(name + '登錄成功!')return Trueelif condition == 2:print('用戶名或密碼錯誤!')return Falseelif condition == 3:print('您還未注冊!')return False# 創建圖書模塊
def create_books(name):id = count(booksPath)book = open(booksPath, 'r', encoding='utf-8')isExist = Falsewhile True:info = book.readline()if info:if (name in info):isExist = Truebreakelse:breakbook.close()if isExist == True:print('此書籍在圖書館里已存在!')elif isExist == False:wBooK = open(booksPath, 'a', encoding='utf-8')i = str(id + 1) + '\t' + name + '\n'wBooK.writelines(i)print(name + '成功放入圖書館!')wBooK.close()# 查看圖書(show_books)模塊
def show_books():read = open(booksPath, 'r', encoding='utf-8')print('圖書館現有的圖書如下:')while True:info = read.readline()if info:print(info)else:break# 借閱圖書(borrow_book)模塊,
def borrow_book(username, bookname):readUsersBook = open(usersBookPath, 'r', encoding='utf-8')readBooks = open(booksPath, 'r', encoding='utf-8')id = count(usersBookPath)condition = Falsewhile True:book = readBooks.readline()userbook = readUsersBook.readline()if book or userbook:if ((bookname in book) and (bookname in userbook)):condition = Truebreakelse:breakreadUsersBook.close()readBooks.close()if condition == True:print(bookname + '已經被借出了!')elif condition == False:wUserBook = open(usersBookPath, 'a', encoding='utf-8')i = str(id + 1) + '\t' + username + '\t' + bookname + '\n'wUserBook.writelines(i)wUserBook.close()print(username + '已成功借到' + bookname)# 程序包含用戶注冊、用戶登錄、查看圖書、借閱圖書等相關圖書管理系統的功能。
def main():print('歡迎使用圖書館!')print('請選擇要使用的功能(1-5):')print('1.用戶注冊')print('2.用戶登錄')print('3.查看圖書')print('4.捐贈圖書')print('5.借閱圖書')print('6.退出')while True:num = input('功能選擇:')if (num == '1'):name = input('請輸入要注冊的用戶名')password = input('請輸入要注冊的密碼')register(name, password)elif (num == '2'):name = input('請輸入用戶名')password = input('請輸入密碼')condition = login(name, password)elif (num == '3'):show_books()elif (num == '4'):name = input('請輸入要捐贈的圖書')create_books(name)elif (num == '5'):name = input('請輸入用戶名')bookname = input('請輸入要借閱的圖書')borrow_book(name, bookname)elif (num == '6'):print('已成功退出!')breakelse:print('輸入非法,請重新輸入!')main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446311.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echarts 折線圖 設置y軸最小刻度_【硬貨】vue全家桶+Echarts+百度地圖,搭建數據可視化系統...

作者丨夙言來源丨前端大牛愛好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略長,內容有點多,大佬可根據目錄選擇性查閱,新人可一步步來閱讀。1、 前言1.1 業務場景突然接到產品說要做一個數據監控的系統。有線圖、柱狀…

密碼學專題 文本數據庫

應用概述 文本數據庫是跟OpenSSL的CA應用程序緊密結合在一起的,它以文本的方式記錄CA已經簽發的證書的狀態和摘要信息。這些狀態信息可以用于跟證書庫相關的一些操作,比如使用ca指令生成CRL主要就是讀取這個文本數據庫的信息作為參考。文本數據庫就是普…

Python學習13 異常處理機制

概括 常見的異常 異常處理機制 可以多個異常放在元組里面 一旦產生異常,try后面的語句不會繼續執行,會做異常處理 異常使用場景1 close應該放在finally中 異常使用場景2 finally關鍵字 會執行except后面的,報錯

java 布隆過濾器_牛逼哄哄的布隆過濾器,到底有什么用?

Java技術棧www.javastack.cn打開網站看更多優質文章作者:CodeBear的園子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去討論布隆過濾器,如果你是科班出身,或者比較聰明,又或者真正想完全搞懂布隆過濾器的可以移…

密碼學專題 序列號文件

序列號文件是ca指令簽發證書的時候的依據文件之一,它從該文件讀取當前簽發的證書的序列號并將序列號文件中的序列號加1,這樣,就可以確保證書的序論號是遞增的,不會重復。序列號文件也是一個文本文件,里面僅僅簡單包含了…

Java web后端6 java Bean EL表達式

EL表達式和JSTL概述 java Bean規范 java中成員變量使用類Integer private Integer count; java Bean的創建 創建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成員變量使用類Integerprivate Integer count;private Boolean…

python根須系統斜杠_深入淺出Python中的os模塊

「Author:Runsen」當初學Python的時候,把一些標準庫和第三方開源庫學的七零八落,不成系統,正好趁這個機會來系統的整理一下,先從Python常用的標準庫os開始吧。osOS模塊簡單的來說它是一個Python的系統編程的操作模塊&a…

密碼學專題 隨機數文件

無論使用OpenSSL的指令還是其API,隨機數文件都是會經常碰到的一個概念。大部分密碼算法的安全性都跟隨機數的好壞相關,所以一個成功的密碼學應用軟件,對隨機數的處理是不能隨便的。OpenSSL雖然沒有提供很完美的隨機數生成程序,但是…

Java web后端7JSTL

概括 下載jstl的jar包 官網&#xff1a;https://mvnrepository.com/ 網址1&#xff1a;https://search.maven.org/ 在pomxml中插入依賴&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

python輸入程序_python程序的輸入輸出(acm的幾個小程序)

#!/usr/bin/env python#codingutf-8 a[]for x inraw_input().split(): a.append(int(x))print sum(a) 下面的代碼只有一行&#xff0c;&#xff0c;可惜不是我想出來的&#xff01;&#xff01;&#xff01;&#xff01;&#xff1a; print sum(int(x) for x in raw_input().sp…

密碼學專題 口令輸入的方式

雖然口令的安全性很值得擔憂&#xff0c;但是口令在OpenSSL中是經常使用的&#xff0c;這是沒有辦法替代的一種簡易的保護數據的方法。OpenSSL中使用口令的地方很多&#xff0c;比如密鑰的加密和解密&#xff0c;等等。OpenSSL的指令提供了多種靈活的口令輸入方法&#xff0c;但…

Python學習14 模塊和包

模塊 公共類、函數都可以放在獨立的文件中&#xff0c;這樣其他多個程序都可以使用&#xff0c;而不必把這些公共性的類、函數等在每個程序中復制一份&#xff0c;這樣獨立的文件就叫做模塊&#xff0c;它們的擴展名為.py 標準庫中的模塊 使用help查看模塊 代碼&#xff1a; …

python語句分為_python以什么劃分語句塊

語句塊是在條件為真&#xff08;條件語句&#xff09;時執行或者執行多次&#xff08;循環語句&#xff09;的一組語句&#xff1b;在代碼前放置空格來縮進語句即可創建語句塊&#xff0c;語句塊中的每行必須是同樣的縮進量&#xff1b;&#xff08;推薦學習&#xff1a;Python…

Python學習15 正則表達式1

網址 正則表達式測試網址&#xff1a;https://regex101.com/ 概述 正則表達式&#xff1a; 正則表達式(Regular Expression)是一種文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之間的字母&#xff09;和特殊字符&#xff08;稱為"元字符"…

STL源碼剖析 空間配置器 查漏補缺

ptrdiff_t含義 減去兩個指針的結果的帶符號整數類型ptrdiff_t (Type support) - C 中文開發手冊 - 開發者手冊 - 云社區 - 騰訊云 std::set_new_handler&#xff08;&#xff09;函數的理解 關于set_new_handler的理解_wck0617-CSDN博客new分配內存的時候 如果分配的空間不…

python每天定時9點執行_python定時器每天訂時執行的實例方法

python定時器,實現每天凌晨3點執行的方法 如下所示&#xff1a;Created on 2018-4-20 例子:每天凌晨3點執行func方法import datetime import threading def func(): print("haha") #如果需要循環調用&#xff0c;就要添加以下方法 timer threading.Timer(86400, fun…

Python學習16 正則表達式2 re模塊

re 模塊 re 模塊&#xff1a; Python的 re 模塊實現了正則表達式處理的功能。 導入re模塊后&#xff0c;使用findall、search函數可以進行匹配 查找&#xff1a;match和search 多個匹配上的&#xff0c;也只會返回第一個匹配上的 re.match()&#xff1a; 需要特別注意的是&…

STL源碼剖析 內存基本處理工具 初始化空間的五個函數

初始化空間的五個函數構造函數 construct()析構函數 destroy()剩余三個底層函數 和 高層函數之間的對應關系如下uninitialized_copy() 對應 copy()uninitialized_fill() 對應 fill()uninitialized_fill_n() 對應 fill_n()使用<memory>使用上述三個底層函數 uninitiali…

單基因gsea_篩到5分的核心基因以后你可以怎么做?

這一次我們從一些已經發表的文章拆解&#xff0c;我們來看看&#xff0c;你找到了一個核心基因以后&#xff0c;你可以怎么做呢&#xff1f;我們就不說那么多廢話了&#xff0c;直接用幾篇文章的解讀來帶著大家領會一下如何去進行下一步的分析。Case1&#xff1a;預后標志物免疫…

安卓 原生okhttp使用get與post獲取網絡數據

網址 https://square.github.io/okhttp/ 配置 依賴 在module的build.gradle中&#xff1a; implementation com.squareup.okhttp3:okhttp:3.14.7implementation com.squareup.okio:okio:1.17.5AndroidManifest.xml <uses-permission android:name"android.permissi…