提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、代码展示
  • 总结

前言

运用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+图书管理系统相关推荐

  1. 一个简单的基于python图书管理系统

    一个简单的基于python图书管理系统 开发平台:pycharm 开发语言:python 数据库:mysql 登录界面 主界面 数据库文件 想要的联系丘丘:793064854.2R带走

  2. python毕业设计开题报告-基于Python图书管理系统开题报告

    选题的背景.意义及研究现状: 研究背景及意义: 随着我国的教育产业的快速发展,各个学校的学生数量越来越多,在这种情况下的图书馆书籍管理和查询,以及读者的管理变得非常困难,使用计算机软件的图书管理系统来 ...

  3. Python图书管理系统(一)

    最近在写一个项目--图书管理系统 在完成这个项目的道路上我写了2个基础的图书管理系统. ①用IO完成数据存储的图书管理系统 ②用MySQL完成数据存储的图书管理系统    今天先来更新第一个用IO操作 ...

  4. Python图书管理系统(二)

    文章目录 前言 PyMySQL 安装 PyMySQL 使用 数据库方面的准备 图书管理系统代码          前言    上次写了用IO完成数据存储的图书管理系统, 这次更新一个用MySQL完成数 ...

  5. python 图书管理系统书写

    题目:写一个简单的图书借阅系统‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪ ...

  6. Python图书管理系统(课设)

    基于python的tkinter,将图书管理系统的界面进行简单的开发,我在这里使用的方法比较简单理解,但是代码过于繁多.添加.删除及修改并未使用数据库,而是使用了csv文件的读取操作,从而替代数据库. ...

  7. python图书管理系统

    以下三个文件需在同一目录下.json文件格式不能更改 books-fxm.json [{"name": "图书管理","author": & ...

  8. python图书管理系统增删改查_图书管理系统---增删改查

    此代码只考虑正确情况,未判断错误情况 package dboperate; import java.util.Scanner; import model.BookDB; import dboperat ...

  9. Python图书管理系统(终章)

    文章目录 前言 总的项目布局 效果展示 全部代码 总结          前言    上次写了用MySQL完成数据存储的图书管理系统, 这次我将把各个模块划分为系统的各个功能,通过flask框架与前端 ...

最新文章

  1. CSDN公众号新功能上线,居然还能搜出小姐姐???
  2. poj1734(最小环+路径)
  3. 几款xshell绝佳配色方案
  4. StringWriter/PrintWriter在Java输出异常信息中的作用
  5. mysql创建库和表确保utf8_mysql创建utf8数据库
  6. 快速复制数据库表中的数据SQL
  7. 将jar文件转换成exe可执行文件[转]
  8. leetcode 453,462. Minimum Moves to Equal Array Elements I, II | 453, 462. 最少移动次数使数组元素相等(图解)
  9. Linux-C实现GPRS模块发送短信
  10. 《DSP using MATLAB》示例Example7.25
  11. 【转】DPDK(一):专业术语
  12. LeetCode 1389. 按既定顺序创建目标数组
  13. LeetCode 2. Add Two Numbers
  14. Java虚拟机(JVM)之类的加载过程详解
  15. 错失黄金时期、连年亏损,国美App改名也难“真快乐”
  16. keras可视化模型
  17. 0penCV_(Watershed Segmenter)使用 分水岭算法 对图像进行分割
  18. 问题 C: 所罗门王的宝藏
  19. 代理服务器与NAT技术
  20. Matlab LZW编码

热门文章

  1. sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例
  2. 2021年第十二届蓝桥杯A组省赛
  3. Media Player Classic - HC 源代码分析 14:PIN连接过程中推模式和拉模式区别
  4. STM32实例-蜂鸣器实验
  5. 细菌如何交流和占地盘——细菌的群体感应和生物膜
  6. 在Mysql中无符号是什么意思博客_mysql中的unsigned是什么意思???
  7. 选中DataGridView行,将数据返填到TextBox控件
  8. Java中如何实现数组输入和输出
  9. DIV+CSS布局基本流程及实例介绍
  10. JavaEE——JUC