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.mzph.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…