图书管理系统-第一个小程序

文章目录

  • 前言
  • 一、图书管理实现功能
  • 二、实现步骤
    • 0.引入库
    • 1.主界面函数
    • 2.用户注册以及登录函数
    • 3.精选图书推荐函数
    • 4.图书搜索函数
    • 5.用户登录后操作函数
    • 6.管理员登后操作函数
    • 7.管理员修改图书操作函数
    • 8.借阅图书操作函数


前言

图书管理系统
语 言:python
系 统:Windows
编辑工具:pycharm
主 要: openpyxl库


一、图书管理实现功能

1、用户注册
2、用户登录
3、管理员添加修改图书
4、搜索图书

二、实现步骤

0.引入库

代码如下(示例):

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'}#管理员登录信息

1.主界面函数

图书管理系统-第一个小程序_第1张图片

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()

2.用户注册以及登录函数

普通用户登录注册函数:
图书管理系统-第一个小程序_第2张图片

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('输入错误,返回首页重新选择')

3.精选图书推荐函数

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()

4.图书搜索函数

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

5.用户登录后操作函数

图书管理系统-第一个小程序_第3张图片

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)

6.管理员登后操作函数

图书管理系统-第一个小程序_第4张图片
图书管理系统-第一个小程序_第5张图片
图书管理系统-第一个小程序_第6张图片

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)

7.管理员修改图书操作函数

图书管理系统-第一个小程序_第7张图片

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)

8.借阅图书操作函数

图书管理系统-第一个小程序_第8张图片

图书管理系统-第一个小程序_第9张图片

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()

你可能感兴趣的:(python)