python图书管理系统

以下三个文件需在同一目录下。json文件格式不能更改

books-fxm.json

[{"name": "图书管理","author": "fxm","price": "99999"},{"name": "完美世界","author": "辰东","price": "99"},{"name": "斗破苍穹","author": "土豆","price": "99"}
]

users-fxm.json

[{"name": "fxm","password": "123456"}
]

main.py

#!/usr/bin/python3
#  -*- coding: utf-8 -*-
"""
图书管理系统
1. 创建一个列表存储书籍信息,包括书名,作者名,价格
2. 创建一个列表存储用户信息,包括用户名,密码
3. 制作一个注册登录系统,登录后可以使用添加书籍,删除书籍,
修改书籍信息,查询单本书籍信息,查询所有书籍信息等功能
4. 图书信息、用户信息存入文件中 (新增)图书管理系统操作说明
一、普通用户1.先注册2.登录到系统3.进行功能操作    (增、删、改、查书籍)4.退出系统
二、管理者1.使用管理者账户登陆(fxm:123456)2.管理普通用户    (删、改、查用户)3.退出系统
"""import json
import os# 本系统保存信息的文件名
file_name_books = "books-fxm.json"
file_name_users = "users-fxm.json"# 主菜单
def menu():print('*' * 40)print('*' * 10, '欢迎来到图书管理系统 1.0 ')print('*' * 40)print('请选择:')print("1: 注册新用户:")print("2. 已有账户,登陆:")print("3. 退出本系统")# 用户小屋(功能页面)
def user_menu(self):print('*' * 40)print('欢迎%s!   来到图书小屋' % self)print('请选择您所需的功能:')print('1. 添加书籍')print('2. 删除书籍')print('3. 修改书籍信息')print('4. 查询单本书籍信息')print('5. 查询所有书籍信息')print('6. 退出您的图书小屋')# 管理者页面
def manger():print('*' * 40)print('欢迎本系统管理者!!!')print('*' * 40)print('请选择您所需的功能:')print('1. 删除一个用户')print('2. 修改用户密码')print('3. 查看一个用户信息')print('4. 查看全部用户信息')print('5. 退出管理者页面')# 删除用户
def del_user():user_name = input('请输入要删除的用户名:')count = 0index = 0for i in users:if user_name == i['name']:count = 1del users[index]print('删除成功!!!')index += 1if count == 0:print('查无此人!!!')# 修改用户
def edit_user():user_name = input('请输入要修改密码的用户名:')count = 0index = 0for i in users:if user_name == i['name']:count = 1del users[index]new_user_name = user_namenew_user_password = input('请输入修改后的密码:')new_user = {'name': new_user_name, 'password': new_user_password}users.append(new_user)print('修改成功!!!')index += 1if count == 0:print('查无此人!!!')# 查看一个用户
def look_user():user_name = input('请输入要查看的用户名:')count = 0print('用户名\t密码\t')for i in users:if user_name == i['name']:count = 1print('%s\t\t%s\t' % (i['name'], i['password']))if count == 0:print('查无此人!!!')# 查看全部用户
def look_users():print('用户名\t密码\t')for i in users:print('%s\t\t%s\t' % (i['name'], i['password']))# 注册页面
def sign_up():user_name = input("请输入您的用户名:")# 检验用户名是否重复for i in users:if user_name == i['name']:print("用户名已存在!!!")returnuser_password = input("请输入您的密码:")user = {'name': user_name, 'password': user_password}users.append(user)print("注册成功!!!")# 登陆页面
def login():user_name = input("请输入您的用户名:")user_password = input("请输入您的密码:")count = 0for i in users:if user_name == i['name']:count = 1if user_password == i['password']:print("登陆成功!!!")return user_nameelse:print("密码错误!!!")print("请重试。")if count == 0:print("用户名不存在!!!")print("请重试。")# 添加书籍
def add_book():book_name = input('请输入要添加书籍的名字:')# 检验书籍名是否重复for i in books:if book_name == i['name']:print("该书已存在!!!")returnbook_author = input('请输入要添加书籍的作者:')book_price = input('请输入要添加书籍的价格:')book = {'name': book_name, 'author': book_author, 'price': book_price}books.append(book)print('添加成功!!!')# 删除书籍
def del_book():book_name = input('请输入要删除书籍的名字:')count = 0index = 0for i in books:if book_name == i['name']:count = 1del books[index]print('删除成功!!!')index += 1if count == 0:print('查无此书!!!')# 修改书籍
def edit_book():book_name = input('请输入要修改书籍的名字:')count = 0index = 0for i in books:if book_name == i['name']:count = 1del books[index]new_book_name = input('请输入修改后书籍的名字:')new_book_author = input('请输入修改后书籍的作者:')new_book_price = input('请输入修改后书籍的价格:')new_book = {'name': new_book_name, 'author': new_book_author, 'price': new_book_price}books.append(new_book)print('修改成功!!!')index += 1if count == 0:print('查无此书!!!')# 查看一本书籍
def look_book():book_name = input('请输入要查看书籍的名字:')count = 0print('书名\t\t作者\t价格\t')for i in books:if book_name == i['name']:count = 1print('%s\t%s\t%s\t' % (i['name'], i['author'], i['price']))if count == 0:print('查无此书!!!')# 查看全部书籍
def look_books():print('书名\t\t作者\t价格\t')for i in books:print('[%s]\t%s\t%s\t' % (i['name'], i['author'], i['price']))# 初始状态读取文件
def get_init_data():if (not os.path.exists(file_name_users)) | (not os.path.exists(file_name_books)):raise print("缺少必要文件:", file_name_books, file_name_users)with open(file_name_books, 'r', encoding='utf-8') as f:books_json = json.load(f)with open(file_name_users, 'r', encoding='utf-8') as f:users_json = json.load(f)return books_json, users_json# 结束程序更新数据文件
def set_init_data():with open(file_name_books, 'w', encoding='utf-8') as f:f.write(json.dumps(books, ensure_ascii=False, indent=4))with open(file_name_users, 'w', encoding='utf-8') as f:f.write(json.dumps(users, ensure_ascii=False, indent=4))# 用户与管理者
def while_user(name):while name:  # 根据是否登陆成功,进入用户菜单if name == 'fxm':  # 判断是否为管理者manger()  # 管理者页面manger_n = input()if manger_n == '1':del_user()  # 删除一个用户elif manger_n == '2':edit_user()  # 修改用户密码elif manger_n == '3':look_user()  # 查看一个用户信息elif manger_n == '4':look_users()  # 查看全部用户信息elif manger_n == '5':break  # 退出管理者页面else:print("非法输入!!!")print("请再次选择:")else:user_menu(name)  # 普通用户页面user_n = input()if user_n == '1':add_book()  # 添加书籍elif user_n == '2':del_book()  # 删除书籍elif user_n == '3':edit_book()  # 修改书籍信息elif user_n == '4':look_book()  # 查询单本书籍信息elif user_n == '5':look_books()  # 查询所有书籍信息elif user_n == '6':break  # 退出普通用户页面else:print("非法输入!!!")print("请再次选择:")# 主函数
def main():# 循环菜单主页面while True:menu()  # 主菜单页面menu_n = input()if menu_n == '1':sign_up()elif menu_n == '2':# 循环用户菜单页面name = login()  # 用户登陆后返回值namewhile_user(name)  # 用户与管理者elif menu_n == '3':set_init_data()breakelse:print("非法输入!!!")print("请再次选择:")if __name__ == '__main__':# 初始信息读取books, users = get_init_data()# 调用主函数main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS actionlib学习(一)

actionlib是ROS中一个很重要的功能包集合,尽管在ROS中已经提供了srevice机制来满足请求—响应式的使用场景,但是假如某个请求执行时间很长,在此期间用户想查看执行的进度或者取消这个请求的话,service机制就不能满足了&#xff0c…

python 基础知识

- python语言特点 简单、易学、高级 面向对象 免费和开源 边编译边执行 :python是解释型语言,边编译边执行。 丰富的库 : python拥有许多功能丰富的库。 胶水语言 : 可以拼接c,c,java等语言 可移植 : python能运行在不…

机器学习笔记(十五):推荐系统

目录 1)Problem formulation 2)Content-based recommendations 3)Collaborative filtering 4)Collaborative filtering algorithm 5)Vectorization: Low rank matrix factorization 6)Implementation…

*【CodeForces - 280C】Game on Tree(期望模型,期望的线性性)

题干: Momiji has got a rooted tree, consisting of n nodes. The tree nodes are numbered by integers from 1 to n. The root has number 1. Momiji decided to play a game on this tree. The game consists of several steps. On each step, Momiji chooses…

武侠风云(基础版)

基本任务: 1 建立角色类,角色拥有生命值的属性和攻击的方法,攻击值是随机的。 2 建立职业子类,刀客,(伤害少,血量多)剑客(伤害正常,血量正常,有几…

机器学习笔记(十六):大规模机器学习

目录 1)Learning with large datasets 2)Stochastic gradient descent 3)Mini-batch gradient descent 4)Stochastic gradient descent convergence 1)Learning with large datasets 回顾一下我们之前提到的这句…

【ZOJ - 3329】One Person Game(带循环的概率dp,数学期望,高斯消元,数学)

题干: There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the dice are fair dice, so the probability of rolling each value, 1 to K1, K…

智能聊天机器人系统

# 智能聊天机器人系统 # 1.系统简介 # 随着社会的各个公司以及大学对人工智能技术的深入研究和快速发展,人工智能技术将逐步应用到 # 方方面面。智能聊天机器人系统是基于各类传感器收集人类语音数据(智能电视、智能空调, # 智能冰箱、智能音…

机器学习笔记:总结

下面是我们本课程学到的要点: 1)监督学习:线性回归,逻辑回归,神经网络,SVM; 2)无监督学习:k均值,PCA,异常检测 3)特别应用&#xf…

ROS探索总结(十二)——坐标系统

在机器人的控制中&#xff0c;坐标系统是非常重要的&#xff0c;在ROS使用tf软件库进行坐标转换。 相关链接&#xff1a;http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一、tf简介 我们通过一个小小的实例来介绍tf的作用。 1、安装turtle包 <span>$ rosdep instal…

【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)

题干&#xff1a; 随着新版百度空间的下线&#xff0c;Blog宠物绿豆蛙完成了它的使命&#xff0c;去寻找它新的归宿。 给出一个有向无环的连通图&#xff0c;起点为1终点为N&#xff0c;每条边都有一个长度。绿豆蛙从起点出发&#xff0c;走向终点。 到达每一个顶点时&#x…

python菜鸟100例精选

# 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; def four_number():n 0for i in range(1,5):for j in range(1,5):for k in range(1,5):if (i ! j) and (i!k) and (j!k):n 1# print(i,j,k)print(…

机器学习笔记:Overview

1&#xff09;机器学习笔记&#xff08;1&#xff09;&#xff1a;Introduction 2&#xff09;机器学习笔记&#xff08;2&#xff09;&#xff1a;单变量线性回归 3&#xff09;机器学习笔记&#xff08;3&#xff09;&#xff1a;线性代数回顾 4&#xff09;机器学习笔记&…

【LightOJ - 1030】Discovering Gold(概率dp,数学期望,期望的线性性)

题干&#xff1a; You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave can contain any amount of gold. Initially you are in position 1. Now each turn you throw a perfect 6 sided dice. If you get X in the dice …

【LightOJ - 1079】Just another Robbery(概率dp,概率背包)

题干&#xff1a; As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated risk, and grab as much money as possible. But his friends - Hermi…

强烈推荐的TensorFlow、Pytorch和Keras的样例资源(深度学习初学者必须收藏)

目录 一、TensorFlow 二、Keras 三、Pytorch 总结 本文转自微信公众号&#xff1a;机器学习初学者 原创&#xff1a; 机器学习初学者 机器学习初学者 TensorFlow、Keras和Pytorch是目前深度学习的主要框架&#xff0c;也是入门深度学习必须掌握的三大框架&#xff0c;但…

由浅到深理解ROS(1)

ROS机器人操作系统 &#xff08; Robot Operating System 或简称 ROS&#xff09;&#xff0c;可以帮助提高机器人软件的开发效率。ROS能够提供类似传统操作系统的诸多功能&#xff0c;如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外&#xff0c…

Centos7换yum源

1.进入到yum的源目录下 cd /etc/yum.repos.d/2.将原来的CentOS-Base.repo进行备份 mv CentOS-Base.repo CentOS-Base.repo_back3.下载阿里源 http://mirrors.aliyun.com/repo/Centos-7.repo 到/etc/yum.repos.d/目录下 4.改变名字 mv Centos-7.repo CentOS-Base.repo5.生成…

(3)链表

目录 下面是关于链表的一些知识点&#xff1a; 链表的操作&#xff1a; 创建链表 遍历链表 判断链表是否为空 求链表长度 插入元素 删除元素 排序链表 这篇笔记是根据郝斌老师的上课讲义整理而得&#xff1a; 前面介绍了连续的存储结构&#xff1a;数组&#xff0c;今…

【LightOJ - 1027】A Dangerous Maze(概率dp,数学期望)

题干&#xff1a; You are in a maze; seeing n doors in front of you in beginning. You can choose any door you like. The probability for choosing a door is equal for all doors. If you choose the ith door, it can either take you back to the same position wh…