图书管理系统
语 言:python
系 统:Windows
编辑工具:pycharm
主 要: openpyxl库
1、用户注册
2、用户登录
3、管理员添加修改图书
4、搜索图书
代码如下(示例):
import time
import datetime #添加计算日期库
from openpyxl import load_workbook #添加操作xlsx库
from dateutil.relativedelta import * #添加日期时间换算库
程序预置管理员及用户账号、密码:
wb = load_workbook('shuku.xlsx')#打开当前目录下‘shuku.xlsx'文件
counts=len(wb.sheetnames)#查看看共有多少个sheet表
# print(counts)
print('*' * 10, '图书管理系统', '*' * 10)
dict_yh = {
'admin': '123456','tl':'123','tlei':'1234'}#普通登录用户信息(用字典保存)
lt_vip=['tl','admin']#vip登录信息(用列表保存)
dict_gl ={
'admin': '123456'}#管理员登录信息
def denglu():#登陆界面
jxtj()
xz= int(input('\n 1、用户登录''\n''*2、管理员登录''\n'' 3、注册''\n'' 4、搜索图书''\n'' 5、退出''\n''请选择:'))
if xz==1:
username=sign_yh()
yhcz(username)
elif xz==2:
sign_gl()
elif xz==3:
yhzc()
username = sign_yh()
yhcz(username)
elif xz==4:
soso('未注册用户')
elif xz==5:
out()
else:
print('输入错误,请重新选择')
print('='*25)
denglu()
def yhzc():#普通用户注册
username = input('请输入注册用户名:')
if username in dict_yh: #判断用户是否在字典中若在已经被注册了
print('“{}”该用户名已存在,请更换用户名:'.format(username))
yhzc()
else:
password = input('请输入注册密码:')
dict_yh[username] = password #添加到普通用户字典
answer6=input('{}您已注册成功,您想开通会员吗?\n请输入:'.format(username))
if answer6=='yes':
vip(username)
else:
return username
密码验证函数:
def sign(username,dict):#用户密码验证登录
count=0
while True:
if username in dict:
password = input('"{}"请输入密码:'.format(username))
if password == dict[username]:
return True
else:
print('"{}"密码输入错误请重新输入'.format(username))
count+=1
if count>3:
print ('"{}"您输入错误密码次数已达3次,请退出重新登陆'.format(username))
print()
break
else:
answer=input('"{}"用户名不存在,是否前往注册,yes/no'.format(username))
if answer =='yes':
yhzc()
else:
print('欢迎下次再来','\n','='*25)
会员注册函数:
def vip(username):#会员注册
answer = int(input('{}我们将根据您支付的金额,判定您是否能成为我们的会员请输入您的支付金额:'.format(username)))
if answer>=100000000:
lt_vip.append(username)
print('{}您已成为VVVVVVVVIP用户'.format(username))
elif answer>=10:
lt_vip.append(username)
print('{}您已成为VIP用户'.format(username))
else:
print('您的支付金额未达到我们的会员资格')
用户登录函数:
def sign_yh(*args):#用户登录验证1
username = input('请输入用户名:')
if username in dict_yh:
result = sign(username, dict_yh)
if result == True:
return username
else:
answer=input('"{}"用户名不存在,是否前往注册,yes/no\n请输入:'.format(username))
if answer =='yes':
yhzc()
return username
else:
print('欢迎下次再来','\n','='*25)
denglu()
管理员登录函数:
def sign_gl():#管理员登录以及验证
username = input('请输入管理员账号:')
if username in dict_gl:
result=sign(username,dict_gl)
if result==True:
print('"{}"管理员您已登陆成功'.format(username))
tushugl(username)
else:
answer= int(input('*非管理员账号*''\n'' 1、重新输入管理员账号''\n'' 2、普通用户登录''\n''请选择:'))
if answer==1:
sign_gl()
elif answer==2:
sign_yh()
else:
print('输入错误,返回首页重新选择')
def jxtj():#首页图书推荐
wb = load_workbook('shuku.xlsx') #打开文件并赋值给wb
ws = wb['精选图书']#选择’精选图书‘表赋值给ws
print('精选推荐:\n')
for i in range (2,8):
print ('《',ws.cell(i,2).value,'》',end=' ')#格式化打印图书名字 表第2列是图书名字列取第i行第二个单元格 例(2,2)
print()
def soso(username):#搜索图书
so=input('请输入您想搜索的图书名称:')
for e in range(0,counts):#遍历所有表
xl=wb.sheetnames[e]#把表名sheet对应的名字赋值给xl
ws = wb[xl]
rows = ws.max_row#本表的总行数
columns = ws.max_column#本表的总列数
for i in range(2, rows+1):#遍历所有图书名字
# if str(so)[0:2] in str(ws.cell(i, 2).value):#关键字搜索
# print(ws.cell(i, 2).value)
if so ==(ws.cell(i, 2).value):#判断搜索图书是否是需要的图书
print('《{}》在 {} 类型'.format(so, xl))
for b in range(1, 8):
print(ws.cell(1, b).value, ':', ws.cell(i, b).value, end=' \n')#遍历打印出对应图书的基本信息
if username in dict_gl:#判断是否是管理员
answer8=int(input('1、借阅图书\n2、修改图书\n3、退出\n请输入:'))
if answer8==1:
jy(username, ws, i)
elif answer8 ==2:
xgtu(i-1, ws, columns)
elif answer8==3:
break
else:
print('输入有误,请重新输入')
tushugl(username)
elif username in dict_yh:#判断用户是否登录
jy(username, ws,i )#调用借阅图书的函数
else:#如果是未注册用户
answer = int(input('您是{}需要登录才能借阅《{}》这本书,\n1、登录借阅\n2、返回首页\n请选择:'.format(username,so)))
if answer == 1:
username=sign_yh()#调用登录函数
jy(username,ws,i-1)
else:
denglu()#返回首页
else:#搜索的图书不存在
if e==counts-1 and i==rows:
answer9=int(input('您搜索的《{}》图书还未入库。\n 1、继续搜索其他书籍\n 2、进入用户浏览界面\n 3、返回首页\n请输入:'.format(so)))
if answer9==1:
soso(username)#调用搜索图书函数
elif answer9==2:
yhcz(username)#以未注册身份进入用户操作界面(可使用借阅功能)
elif answer9==3:
denglu()
else:
print('输入有误,请重新登陆')
denglu()
else:
continue
def yhcz(username):#用户登录后选书信息
print(wb.sheetnames,)
xl=input('{}输入图书类型浏览(例:精选图书):\n输入任意键搜索图书\n请输入:'.format(username))
if xl in wb.sheetnames:
print('以下是本目录下的图书:','\n')
ws = wb[xl]
rows = ws.max_row
count=0
for i in range (2,rows+1):
print (i-1,'、''《',ws.cell(i,2).value,'》',end='\t ')
count+=1
if count%5==0:
print('')
a=int(input('\n请选择您需要的图书:'))
jy(username, ws,a)
elif xl=='2' or xl=='搜索图书' or xl=='搜索':
soso(username)
else:
print('您的输入有误! 3秒后将进入搜索图书。。。')
time.sleep(3)
soso(username)
def tushugl(username):#管理员登陆后需要操作的界面
print(wb.sheetnames)
Sheet = input('输入图书类型浏览(例:精选图书):\n输入任意键搜索图书\n请输入:'.format(username))
if Sheet in wb.sheetnames:
print('以下是目录图书的信息:', '\n')
ws = wb[Sheet]
columns = ws.max_column
rows=ws.max_row
for i in range(1,rows+1):
for j in range(1, columns + 1):
print(ws.cell(i, j).value,end='\t ')
print('')
while True:
answer = int(input('{}请选择您需要的操作:,\n1、添加图书,\n2、修改或删除图书\n3、借阅图书\n4、退出\n请输入选项:'.format(username))) # 添加图书写入表格shuku.xlsx
if answer == 1: # 添加图书写入表格shuku.xlsx
for b in range(1, rows+1):
if 9 <= b <= 13:
continue
else:
ws.cell(rows+1 , b).value = input(ws.cell(1, b).value )
wb.save('shuku.xlsx')
print('{}管理员图书信息添加成功并已保存,若需修改请选择修改图书选项'.format(username))
elif answer == 2:# 修改已有图书写入表格shuku.xlsx
answer7 = int(input('请输入您需要更改的图书编号:'))
xgtu(answer7,ws,columns)
elif answer == 3:
yhcz(username)
else:
break
else:
soso(username)
def xgtu(answer7,ws,columns): # 修改已有图书写入表格shuku.xlsx
rows = answer7
for j in range(1, columns + 1):
print(j, '、',ws.cell(1, j).value,':', ws.cell(rows + 1, j).value, end=' \n')
while True:
answer1 = int(input('请选择需要修改的项目或退出输入“0”:'))
if 0 < answer1 <= 17:
ws.cell(rows + 1, answer1).value = input(ws.cell(1, answer1).value,)
elif answer1 == 0:
print('您已放弃修改,再次修改请重新登录')
break
else:
print('您输入的选项暂不支持修改,请选择其他修改项')
answer2 = input('请确认是否保存更改,yes/no \n请输入:')
if answer2 == 'yes':
wb.save('shuku.xlsx')#保存
elif answer2 == 'no':
wb.save('shuku2.xlsx')#另存为
print('您的修改已缓存在 shuku2.xlsx 2秒后退出修改页面')
time.sleep(2)
def jy(username,ws,a):#借阅图书界面
for b in range(1, 8):
print(ws.cell(1, b).value, ':', ws.cell(a+1,b).value, end=' \n')
print()
sm=ws.cell(a+1,2).value
answer=input('{}请您确认下是需要借阅《{}》这本书吗?yes/no''\n请输入:'.format(username,sm))
if answer=='yes':
def js(username): # 确认天数计算价格,以及写入表格
def inner_js(v, f):
hj = ws.cell(1, v).value
ds = int(input('您需要借的图书《{}》收费是{}。请输入您借阅的天数: \n'.format(sm, hj)))
zj = f * ds
hssj = str(datetime.datetime.now() + relativedelta(days=+ds))[0:10]
ws.cell(b + 1, 7).value = int(ws.cell(a + 1, 7).value) - 1
ws.cell(a + 1, 9).value = int(ws.cell(a + 1, 9).value) + 1
ws.cell(a + 1, 10).value = str(datetime.datetime.now())[0:10]
ws.cell(a + 1, 11).value = ds
ws.cell(a + 1, 12).value = hssj
ws.cell(a + 1, 13).value = username
ws.cell(a + 1, 15).value = zj
print('请确认:')
print(' 您借书费用是{}元,还书日期是:{}。'.format(zj, hssj))
print('------书籍是人类进步的阶梯-------', )
print('欢迎下次借阅,请按时归还图书')
time.sleep(3)
wb.save('shuku1.xlsx')
answer3 = input('是否继续浏览,yes/no')
if answer3 == 'yes':
yhcz(username)
else:
out()
if username in lt_vip: # 会员付费
inner_js(15, 1.5)
else: # 是否开通会员
answer = (input('{}用户开通会员有5折优惠,您是否需要开通会员yes/no\n请输入:'.format(username)))
if answer == 'yes':
vip(username)
js(username)
else: # 非会员付费
print('您已放弃注册会员,请继续。。。。')
inner_js(14, 3)
js(username)
elif answer=='no':
answer4=input('你想继续浏览吗,yes/no 请输入:')
if answer4=='yes':
print('请您重新选择需要的书籍')
yhcz(username)
else:
out()