python+图书管理系统
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、代码展示
- 总结
前言
运用Python编程语言,实现图书管藏书(书号、书名、出版社、作者、价格以及库存)、学生信息(学号、姓名、性别、班级)、借阅书籍、归还书籍(学号、书号、借阅日期)、查询书籍等功能
一、代码展示
import timeimport pandas as pd
import os
import matplotlib.pyplot as plt# 先定义一个配置类
from Tools.scripts.treesync import raw_inputclass Config:# 定义表一table1_url = "C:\\Users\\Shinelon\\Desktop\\untitled\\resource\\table1.csv"table1_header = ["书号", "书名", "出版社", "作者", "价格", "库存"]# 定义表二table2_url = "C:\\Users\\Shinelon\\Desktop\\untitled\\resource\\table2.csv"table2_header = ["学号", "书号", "借阅日期"]# 定义表三table3_url = "C:\\Users\\Shinelon\\Desktop\\untitled\\resource\\table3.csv"table3_header = ["学号", "姓名", "性别", "班级"]class library_system(object):def __init__(self):print("图书馆系统初始化中...")self.input_table1_table2()self.book_table, self.borrow_table, self.student_table = self.get_info_from_file()print("图书馆系统初始化完成!")self.menu()def input_table1_table2(self):print("请输入图书馆藏书表")table1 = []print("输入藏书表:书号 书名 出版社 作者 价格 库存\n")x = raw_input('请输入数据:')while x != "exit\n":y = x.split()if len(y) != 6:x = raw_input('列数不一致\n请重新输入:')else:table1.append(y)x = raw_input('下一条记录:')print("请输入学生信息表")table3 = []print("输入学生表:学号 姓名 性别 班级\n")x = raw_input('请输入数据:')while x != "exit\n":y = x.split()if len(y) != 4:x = raw_input('数据列数不一致\n请重新输入:')else:table3.append(y)x = raw_input('下一条记录:')table1 = pd.DataFrame(table1)table3 = pd.DataFrame(table3)table1.to_csv(Config.table1_url, header=Config.table1_header, index=None)table3.to_csv(Config.table3_url, header=Config.table3_header, index=None)def get_info_from_file(self):book_table = pd.read_csv(Config.table1_url)borrow_table = []student_table = pd.read_csv(Config.table3_url)print("信息读取成功...")return book_table, borrow_table, student_tabledef save_file(self):self.book_table.to_csv(Config.table1_url, header=Config.table1_header, index=None)boo = pd.DataFrame(self.borrow_table)boo.to_csv(Config.table2_url, header=Config.table2_header, index=None)self.student_table.to_csv(Config.table3_url, header=Config.table3_header, index=None)print("保存文件成功")# 实现借阅功能:输入学号和书号,如果借阅成功(学号所对应的学生在表3中并且书号所对应的图书在表1中且库存大于等于1),修改表1和表2,并保存到文件def borrow(self, student_id, book_id):flag1=Truefor i in range(len(self.student_table["学号"])):if int(self.student_table["学号"][i])==int(student_id):print("查询到该学生")flag1=Falsefor j in range(len(self.book_table["书号"])):if int(self.book_table["书号"][j])==int(book_id) and int(self.book_table["库存"][j])>0:print("库存充足")self.book_table["库存"][j] = str(int(self.book_table["库存"][j])-1)borrow = [student_id,book_id, time.strftime("%d/%m/%Y")]self.borrow_table .append(borrow)self.save_file()breakif not flag1:breakif flag1:print("未查询到该学生")print("借阅图书")# 实现还书功能:从表2中删除该学生的借阅信息,并修改表1的库存信息,并保存到文件def let_back(self, student_id, book_id):for j in range(len(self.book_table["书号"])):if int(self.book_table["书号"][j])==int(book_id):self.book_table["库存"][j] = str(int(self.book_table["库存"][j])+1)for i in range(len(self.borrow_table)):if int(self.borrow_table[i][0])==int(student_id) and int(self.borrow_table[i][1])==int(book_id):del self.borrow_table[i]self.save_file()breakbreakprint("还书")# 输入某书号,可以查询借阅该书的学生信息def find_by_book_id(self, book_id):stu_ids=set()#先获取对应人的学号for i in range(len(self.borrow_table)):if int(self.borrow_table[i][1])==int(book_id):stu_ids.add(int(self.borrow_table[i][0]))stu=[]for i in range(len(self.student_table["学号"])):if int(self.student_table["学号"][i]) in stu_ids:stu.append(self.student_table.iloc[i])print("查询借了某本书的学生信息")print(stu)def sum_by_student_id(self, student_id):sum=0for i in range(len(self.borrow_table)):if int(self.borrow_table[i][0])==int(student_id):sum+=1print("统计某学生当前借书量"+str(sum))# 统计某出版社的藏书量,统计某学生当前借书量def sum_by_publish(self, publish_name):book_id = set()sum=0for i in range(len(self.book_table["出版社"])):if str(self.book_table["出版社"][i])==str(publish_name):book_id.add(int(self.book_table["出版社"][0]))sum+=int(self.book_table["库存"][i])for i in range(len(self.borrow_table)):if self.borrow_table[i][1] in book_id:sum+=1print(str(publish_name)+"统计藏书量"+str(sum))return sum# 输入某学生姓名,可以查询该生的借阅图书信息def find_by_student_name(self, student_name):stu_id=set()for i in range(len(self.student_table["姓名"])):if str(self.student_table["姓名"][i])==str(student_name):stu_id.add(int(self.student_table["学号"][i]))print("找到")book_id=set()res=[]for i in range(len(self.borrow_table)):if int(self.borrow_table[i][0]) in stu_id:book_id.add(int(self.borrow_table[i][1]))for i in range(len(self.book_table["书号"])):if int(self.book_table["书号"][i]) in book_id:res.append(self.book_table.iloc[i])print("查询某学生的借书信息")print(res)#获取各出版社的藏书量折线图def get_publish(self):pub = set()for i in range(len(self.book_table["出版社"])):pub.add(str(self.book_table["出版社"][i]))pubL = list(pub)x1 = range(len(pubL))numL = []for i in range(len(pubL)):numL.append(self.sum_by_publish(pubL[i]))plt.title('各出版社的藏书量折线图')plt.xlabel('出版社名字')plt.ylabel('藏书量')plt.plot(pubL, numL, 'r', label='藏书量')plt.xticks(x1, pubL, rotation=0)plt.legend()plt.grid()plt.show()# 利用第三方库matplotlib中的pyplot绘制统计图,如绘制各出版社的藏书量折线图,绘制各学生借书量的饼图等def get_stu(self):stu_id = set()for i in range(len(self.student_table["学号"])):stu_id.add(int(self.student_table["学号"][i]))stuL = list(stu_id)numL = []for i in range(len(stuL)):numL.append(self.sum_by_student_id(stuL[i]))plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示plt.figure(figsize=(6, 6)) # 将画布设定为正方形,则绘制的饼图是正圆plt.pie(numL, labels=stuL, autopct='%1.1f%%') # 绘制饼图plt.title('2018年饼图') # 绘制标题plt.show()# 1绘制各出版社的藏书量折线图,2绘制各学生借书量的饼图def show_diaglo(self,chos):if str(chos)=="1":self.get_publish()if str(chos)=='2':self.get_stu()print("展现图表")def cls(self):os.system("cls")def menu(self):level_1_choose = raw_input("按回车继续")while level_1_choose != "exit\n":self.cls()print("图书管理系统菜单\n")print("1 借阅功能 请输入: 1 学号 书号")print("2 还书功能 请输入: 2 学号 书号")print("3 查询学生借阅信息 请输入: 3 学生姓名")print("4 查询借该书的学生信息 请输入: 4 书号")print("5 统计某出版社的藏书量 请输入: 5 出版社名")print("6 统计某学生当前的借书量 请输入: 6 学生学号")print("7 绘图功能 请输入:7")level_1_choose = raw_input("请选择1-7你要选择的功能,输入exit退出")turn = Truewhile turn:sp = level_1_choose.split()# 1-7if sp[0] == "1":if len(sp) == 3:self.borrow(sp[1], sp[2])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "2":if len(sp) == 3:self.let_back(sp[1], sp[2])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "3":if len(sp) == 2:self.find_by_student_name(sp[1])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "4":if len(sp) == 2:self.find_by_book_id(sp[1])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "5":if len(sp) == 2:self.sum_by_publish(sp[1])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "6":if len(sp) == 2:self.sum_by_student_id(sp[1])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")elif sp[0] == "7":if len(sp) == 2:self.show_diaglo(sp[1])turn = Falseelse:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")else:turn = Truelevel_1_choose = raw_input("输入错误,请重新输入\n")if __name__ == '__main__':ls = library_system()
总结
提示:简单编程提供给初学者;
python+图书管理系统相关推荐
- 一个简单的基于python图书管理系统
一个简单的基于python图书管理系统 开发平台:pycharm 开发语言:python 数据库:mysql 登录界面 主界面 数据库文件 想要的联系丘丘:793064854.2R带走
- python毕业设计开题报告-基于Python图书管理系统开题报告
选题的背景.意义及研究现状: 研究背景及意义: 随着我国的教育产业的快速发展,各个学校的学生数量越来越多,在这种情况下的图书馆书籍管理和查询,以及读者的管理变得非常困难,使用计算机软件的图书管理系统来 ...
- Python图书管理系统(一)
最近在写一个项目--图书管理系统 在完成这个项目的道路上我写了2个基础的图书管理系统. ①用IO完成数据存储的图书管理系统 ②用MySQL完成数据存储的图书管理系统 今天先来更新第一个用IO操作 ...
- Python图书管理系统(二)
文章目录 前言 PyMySQL 安装 PyMySQL 使用 数据库方面的准备 图书管理系统代码 前言 上次写了用IO完成数据存储的图书管理系统, 这次更新一个用MySQL完成数 ...
- python 图书管理系统书写
题目:写一个简单的图书借阅系统 ...
- Python图书管理系统(课设)
基于python的tkinter,将图书管理系统的界面进行简单的开发,我在这里使用的方法比较简单理解,但是代码过于繁多.添加.删除及修改并未使用数据库,而是使用了csv文件的读取操作,从而替代数据库. ...
- python图书管理系统
以下三个文件需在同一目录下.json文件格式不能更改 books-fxm.json [{"name": "图书管理","author": & ...
- python图书管理系统增删改查_图书管理系统---增删改查
此代码只考虑正确情况,未判断错误情况 package dboperate; import java.util.Scanner; import model.BookDB; import dboperat ...
- Python图书管理系统(终章)
文章目录 前言 总的项目布局 效果展示 全部代码 总结 前言 上次写了用MySQL完成数据存储的图书管理系统, 这次我将把各个模块划分为系统的各个功能,通过flask框架与前端 ...
最新文章
- CSDN公众号新功能上线,居然还能搜出小姐姐???
- poj1734(最小环+路径)
- 几款xshell绝佳配色方案
- StringWriter/PrintWriter在Java输出异常信息中的作用
- mysql创建库和表确保utf8_mysql创建utf8数据库
- 快速复制数据库表中的数据SQL
- 将jar文件转换成exe可执行文件[转]
- leetcode 453,462. Minimum Moves to Equal Array Elements I, II | 453, 462. 最少移动次数使数组元素相等(图解)
- Linux-C实现GPRS模块发送短信
- 《DSP using MATLAB》示例Example7.25
- 【转】DPDK(一):专业术语
- LeetCode 1389. 按既定顺序创建目标数组
- LeetCode 2. Add Two Numbers
- Java虚拟机(JVM)之类的加载过程详解
- 错失黄金时期、连年亏损,国美App改名也难“真快乐”
- keras可视化模型
- 0penCV_(Watershed Segmenter)使用 分水岭算法 对图像进行分割
- 问题 C: 所罗门王的宝藏
- 代理服务器与NAT技术
- Matlab LZW编码
热门文章
- sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例
- 2021年第十二届蓝桥杯A组省赛
- Media Player Classic - HC 源代码分析 14:PIN连接过程中推模式和拉模式区别
- STM32实例-蜂鸣器实验
- 细菌如何交流和占地盘——细菌的群体感应和生物膜
- 在Mysql中无符号是什么意思博客_mysql中的unsigned是什么意思???
- 选中DataGridView行,将数据返填到TextBox控件
- Java中如何实现数组输入和输出
- DIV+CSS布局基本流程及实例介绍
- JavaEE——JUC