图书管理系统——Chapter2功能函数

图书管理系统—功能函数

我们使用函数可以使我们的代码结构分明,并且可以实代码的多次利用,程序更加紧凑,有条理

  • 登录部分

密码验证:

    user_info=[]
    user_info=multpasswordbox(msg='请输入登录信息',title='Login',fields=('用户名','密码'))
    name=user_info[0]
    password=user_info[1]

在这里multpasswordbox返回值数据类型为列表。

def login(lista):
    user_info=[]
    user_info=multpasswordbox(msg='请输入登录信息',title='Login',fields=('用户名','密码'))
    name=user_info[0]
    password=user_info[1]
    if name in lista.keys() :
        targp=lista[name]
        if targp==password:
            return (1)
        else:
            login(lista)
    else:
        msgbox("该用户不存在或账户错误,请重新输入")
        login(lista)


  • 用户操作选择部分

def operate(op_choice):
    if op_choice=='查看借书书单':
        display_book()
    elif op_choice =='添加书籍':
        append_book()
    elif op_choice =='删除书籍':
        delete_book()
    elif op_choice =='借书':
        borrow_book()
    elif op_choice =='还书':
        return_book()
    elif op_choice =='输入id查书':
        search_book()
    elif op_choice =='查看书单':
        all_book()

相当于if ——else,多个if也可以达到相同的效用。

这个部分可以有效地为后面的函数执行做所谓的“广播”处理。

  • 借书部分

def borrow_book():
    borrow_msg=[]
    borrow_msg = multenterbox("借书", "图书借阅系统", ["书名", "id", "作者"])
    br=0
    for i in range(1,ws.max_row):
        if ws.cell(row=i,column=1).value==borrow_msg[0] or ws.cell(row=i,column=2).value==borrow_msg[1]:
            print("书单有该书籍")
            wbw.append(borrow_msg)
            ws.delete_rows(i)
            br=1
            wb.save('books.xlsx')
            return
    if br==0:
        print("图书馆无该书")
    wb.save('books.xlsx')
    return

  • 还书部分

def return_book():
    re=0
    borrow_msg = multenterbox("还书", "图书借阅系统", ["书名","id", "作者"])
    for i in range(1,wbw.max_row):
        if wbw.cell(row=i,column=1).value==borrow_msg[0]:
            print("书单有该书籍")
            ws.append(borrow_msg)
            wbw.delete_rows(i)
            re=1
            wb.save('books.xlsx')
            return
    if re==0:
        print("改书未在借书单内")
    wb.save('books.xlsx')
    return


这两个部分操作是一样的,只不过一个是对sheet1进行了添加,而对另外一个删减。所谓借还就是对不同的sheet页进行特定的操作不同而已。
  • 查看书单部分

def all_book():
    print(ws["A"])
    for cell in ws["A"]:
        print(cell.value)
    return
  • 查看借书单部分

def display_book():
    for cell in wbw["A"]:
        print(cell.value)
    return

这两个部分就是对于单元格的输出读取操作。

  • 删除图书

def delete_book():
    colunms=[]
    for col in ws["A"]:
        colunms.append(col.value)
    while True:
        de_book=choicebox(msg='请选择要删除的书',title='图书管理系统',choices=colunms)
        if de_book in colunms:
            ws.delete_rows(de_book.rows)
            print("删除成功")
            break
        else:
            print("删除失败")
            continue

  • 增添图书

def append_book():
    append_msg=[]
    append_msg=multenterbox("添加新书","图书管理系统",["书名","id","作者"])
    ws.append(append_msg) # 也可以使用遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
    wb.save('books.xlsx')
    return

删除与增添图书几乎是一样的只不过是两者使用的函数不一样而已,本质都是对表进行处理。

  • 通过id查找书目

def search_book():
    search_msg=enterbox("输入需找书的id","图书借阅系统",)
    for i in range(1,ws.max_row):
        if ws.cell(row=i,column=2).value==search_msg:
            print("书为",ws.cell(row=i,column=3).value,"作品",ws.cell(row=i,column=1).value)
            return

  • 界面操作

在这个部分我们复用函数operate()体现了函数的妙用——利用率提高,并且有多个函数嵌套,和函数的递归,其中不乏关于局部变量与全局变量的使用。

def choice(cchoices):
    if(cchoices == '管理员'):
        login(admsg)
        while 1:
            c=choicebox(msg='请选择下列操作', title='管理员系统', choices=['查看借书书单', '添加书籍', '删除书籍','退出'])
            if c !='退出':
                operate(c)
            else:
                msgbox("欢迎下次使用")
                break
    elif (cchoices == '普通用户'):
        login(usermsg)
        while 1:
            c=choicebox(msg='请选择下列操作', title='学生操作系统', choices=['借书', '还书','输入id查书','查看书单', '退出'])
            if c !='退出':
                operate(c)
            else:
                msgbox("欢迎下次使用")
                break
    else:
        return 0

  • 主函数

if __name__ == "__main__":

    while 1:
        cchoices = buttonbox(msg='选择登陆方式', title='Library', choices=('普通用户', '管理员'))
        if cchoices is None:
            break
        else:
            choice(cchoices)

补充:
if name == 'main’的意思是:当.py文件被直接运行时,if name == 'main’之下的代码块将被运行;当.py文件以模块形式被导入时,if name == 'main’之下的代码块不被运行.

完整代码:

# 图书管理系统
from easygui import *
from openpyxl import *

admsg = {'李元': '111', '王二': '222', '张三': '333'}
usermsg = {'小芳': '444', '婷婷': '555', '小辉': '666'}
cchoices = 0
wb = load_workbook(r"E:\library\books.xlsx")
print(wb.sheetnames)
ws = wb['Sheet1']
wbw = wb['bbook_sheet']


def login(lista):
    user_info = []
    user_info = multpasswordbox(msg='请输入登录信息', title='Login', fields=('用户名', '密码'))
    name = user_info[0]
    password = user_info[1]
    if name in lista.keys():
        targp = lista[name]
        if targp == password:
            return (1)
        else:
            login(lista)
    else:
        msgbox("该用户不存在或账户错误,请重新输入")
        login(lista)


def display_book():
    for cell in wbw["A"]:
        print(cell.value)
    return


def append_book():
    append_msg = []
    append_msg = multenterbox("添加新书", "图书管理系统", ["书名", "id", "作者"])
    ws.append(append_msg)  # 也可以使用遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
    wb.save('books.xlsx')
    return


def delete_book():
    colunms = []
    for col in ws["A"]:
        colunms.append(col.value)
    while True:
        de_book = choicebox(msg='请选择要删除的书', title='图书管理系统', choices=colunms)
        if de_book in colunms:
            ws.delete_rows(de_book.rows)
            print("删除成功")
            break
        else:
            print("删除失败")
            continue


def borrow_book():
    borrow_msg = []
    borrow_msg = multenterbox("借书", "图书借阅系统", ["书名", "id", "作者"])
    br = 0
    for i in range(1, ws.max_row):
        if ws.cell(row=i, column=1).value == borrow_msg[0] or ws.cell(row=i, column=2).value == borrow_msg[1]:
            print("书单有该书籍")
            wbw.append(borrow_msg)
            ws.delete_rows(i)
            br = 1
            wb.save('books.xlsx')
            return
    if br == 0:
        print("图书馆无该书")
    wb.save('books.xlsx')
    return


def return_book():
    re = 0
    borrow_msg = multenterbox("还书", "图书借阅系统", ["书名", "id", "作者"])
    for i in range(1, wbw.max_row):
        if wbw.cell(row=i, column=1).value == borrow_msg[0]:
            print("书单有该书籍")
            ws.append(borrow_msg)
            wbw.delete_rows(i)
            re = 1
            wb.save('books.xlsx')
            return
    if re == 0:
        print("改书未在借书单内")
    wb.save('books.xlsx')
    return


def search_book():
    search_msg = enterbox("输入需找书的id", "图书借阅系统", )
    for i in range(1, ws.max_row):
        if ws.cell(row=i, column=2).value == search_msg:
            print("书为", ws.cell(row=i, column=3).value, "作品", ws.cell(row=i, column=1).value)
            return


def all_book():
    print(ws["A"])
    for cell in ws["A"]:
        print(cell.value)
    return


wb.save('books.xlsx')


def operate(op_choice):
    if op_choice == '查看借书书单':
        display_book()
    elif op_choice == '添加书籍':
        append_book()
    elif op_choice == '删除书籍':
        delete_book()
    elif op_choice == '借书':
        borrow_book()
    elif op_choice == '还书':
        return_book()
    elif op_choice == '输入id查书':
        search_book()
    elif op_choice == '查看书单':
        all_book()


def choice(cchoices):
    if (cchoices == '管理员'):
        login(admsg)
        while 1:
            c = choicebox(msg='请选择下列操作', title='管理员系统', choices=['查看借书书单', '添加书籍', '删除书籍', '退出'])
            if c != '退出':
                operate(c)
            else:
                msgbox("欢迎下次使用")
                break
    elif (cchoices == '普通用户'):
        login(usermsg)
        while 1:
            c = choicebox(msg='请选择下列操作', title='学生操作系统', choices=['借书', '还书', '输入id查书', '查看书单', '退出'])
            if c != '退出':
                operate(c)
            else:
                msgbox("欢迎下次使用")
                break
    else:
        return 0


if __name__ == "__main__":
    msgbox('欢迎进入图书管理系统', 'Library')
    while 1:
        cchoices = buttonbox(msg='选择登陆方式', title='Library', choices=('普通用户', '管理员'))
        if cchoices is None:
            break
        else:
            choice(cchoices)

今天就讲这些啦,有问题随时留言哦!!!

你可能感兴趣的:(python,vba,程序人生,经验分享)