Python综合应用——宿舍管理系统

  • 通过对 python 的函数,变量的应用,编写简单的关系系统
    实现功能:
  • 1.新增学生
  • 2.显示全部学生信息
  • 3.搜索学生
    可按照学生姓名,班级,学号,宿舍号标准进行查询
  • 4.修改信息(按照用户名进行检索标准)

备注:修改了代码到python3.x版本

代码包目录结构如下

python 线性分类图 python画类图_python综合应用

程序代码如下:

1 主函数,整体系统的框架(main.py)

from student_management import tools_apartment  # 调用工具函数
# 无限循环,由用户主动决定什么时候退出
while True:
    # TODO注释,用于标记需要去做的工作

    tools_apartment.show_menu()

    action_str = input("请选择希望执行的操作: ")
    print("你选择的操作是 %s" % action_str)
    # 1,2,3针对名片的操作
    if action_str in ["1", "2", "3", "4"]:
        if action_str == "1":
            tools_apartment.new_card()  # 调用功能为增添的函数
        elif action_str == "2":
            tools_apartment.show_all()  # 调用功能为显示全部的函数
        elif action_str == "3":
            tools_apartment.search_card()  # 调用功能为指定信息查找的函数
        elif action_str == "4":
            tools_apartment.search_name()  # 调用功能为修改的函数
    # 0退出系统
    elif action_str == "0":
        print("欢迎再次使用【宿舍管理系统】:")

        break
        # 如果在开发程序时,不希望立刻编写分支内部的代码
        # 可以使用pass关键字,表示一个占位符,能够保证程序的代码结构正确
        # 运行程序时,pass关键字不会执行任何操作
    else:
        print("输入错误,请重新输入:")

2 工具函数,系统功能的存放处(tools_apartment.py)

def show_menu():  # 主菜单函数
    """显示菜单"""
    print('*' * 50)
    print('欢迎使用【宿舍管理系统】')

    print('')
    print('1.新增学生')
    print('2.显示全部')
    print('3.搜索学生')
    print('4.修改信息')
    print('0.退出系统')
    print('*' * 50)


card_list = []


def new_card():  # 增加学生信息的函数
    """新增名片"""
    print('-' * 50)
    print('新增学生')
    # 1.提示用户输入名片的详细信息
    name_str = input('请输入姓名:')
    class_str = input('请输入班级:')
    ID_str = input('请输入学号:')
    room_str = input('请输入宿舍号:')

    # 2.使用用户输入的信息建立一个名片字典
    card_dict = {'name_str': name_str,
                 'class_str': class_str,
                 'ID_str': ID_str,
                 'room_str': room_str}

    # 3.将名片字典添加到列表中
    card_list.append(card_dict)  # 把一个字典追加到一个列表中
    # print(card_list)

    # 4.提示用户添加成功
    print('添加 %s 的信息成功' % name_str)


def show_all():  # 显示全部信息
    """显示所有学生信息"""
    print('-' * 50)
    print('显示所有学生信息')

    # 判断是否存在学生记录,如果没有,提示用户并且返回
    if len(card_list) == 0:
        print('没有当前学生信息,请确认输入或者进行添加')
        # return 可以返回一个函数的执行结果
        # 下方的代码不会被执行
        # 如果return后面没有任何的内容,表示会返回到调用函数的位置
        # 并且不返回任何结果
        return
    # 打印表头
    for name in ["姓名", "班级", "学号", "宿舍号"]:
        print(name, end="\t")
    print('')
    # 打印分隔线
    print('=' * 50)

    # 遍历名片列表依次输出字典信息
    for card_dict in card_list:
        # print card_dict
        print(
            '%s\t\t%s\t\t%s\t\t%s' % (card_dict['name_str'],
                                      card_dict['class_str'],
                                      card_dict['ID_str'],
                                      card_dict['room_str']))


def search_card():  # 指定信息查找的函数
    """搜索名片"""
    print('-' * 50)

    print('【搜索学生信息】')

    print('1.按姓名搜索')

    print('2.按班级搜索')

    print('3.按学号搜索')

    print('4.按宿舍搜索')

    print('0.返回主菜单')

    action_str = input("请选择希望执行的操作: ")
    print("你选择的操作是 %s" % action_str)
    # 1,2,3针对名片的操作
    if action_str in ["1", "2", "3", "4", "0"]:
        if action_str == "1":
            find_name = input('请输入要搜索的姓名:')
            for card_dict in card_list:
                if card_dict['name_str'] == find_name:
                    print('姓名 班级 学号 宿舍号')

                    print('=' * 50)

                    print(
                        '%s %s %s %s' % (card_dict['name_str'],
                                         card_dict['class_str'],
                                         card_dict['ID_str'],
                                         card_dict['room_str']))

                    # TODO 针对找到的名片记录执行修改和删除的操作
                    # 在我们的日常编写程序中,如果一个函数的代码太多,阅读和编写都是一件困难的事情,
                    # 而在开发中,可以针对一个具体独立的功能来封装一个函数,由这个函数来处理具体的
                    # 操作,这样就能保证每个函数中的代码清晰明了,功能明确
                    break

                else:
                    print('抱歉,没有找到学生:%s' % find_name)

        elif action_str == "2":
            find_class = input('请输入要搜索的班级:')
            for card_dict in card_list:
                if card_dict['class_str'] == find_class:
                    print('姓名 班级 学号 宿舍号')

                    print('=' * 50)

                    print(
                        '%s %s %s %s' % (card_dict['name_str'],
                                         card_dict['class_str'],
                                         card_dict['ID_str'],
                                         card_dict['room_str']))

                else:
                    print('抱歉,没有找到班级:%s' % find_class)

        elif action_str == "3":
            find_ID = input('请输入要搜索的学号:')
            for card_dict in card_list:
                if card_dict['ID_str'] == find_ID:
                    print('姓名 班级 学号 宿舍号')

                    print('=' * 50)

                    print(
                        '%s %s %s %s' % (card_dict['name_str'],
                                         card_dict['class_str'],
                                         card_dict['ID_str'],
                                         card_dict['room_str']))
                    break
                else:
                    print('抱歉,没有找到学号:%s' % find_ID)

        elif action_str == "4":
            find_room = input('请输入要搜索的宿舍:')
            for card_dict in card_list:
                if card_dict['room_str'] == find_room:
                    print('姓名 班级 学号 宿舍号')

                    print('=' * 50)

                    print(
                        '%s %s %s %s' % (card_dict['name_str'],
                                         card_dict['class_str'],
                                         card_dict['ID_str'],
                                         card_dict['room_str']))
                else:
                    print('抱歉,没有找到宿舍:%s' % find_room)

        elif action_str == "0":
            pass


def search_name():  # 信息修改前进行查找的函数
    """修改信息"""
    print('-' * 50)

    print('进行学生信息的修改')

    # 1.提示用户输入要搜索的姓名
    find_name = input('请输入要修改的姓名:')
    # 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户
    for card_dict in card_list:
        if card_dict['name_str'] == find_name:
            print('姓名 班级 学号 宿舍号')

            print('=' * 50)

            print(
                '%s %s %s %s' % (card_dict['name_str'],
                                 card_dict['class_str'],
                                 card_dict['ID_str'],
                                 card_dict['room_str']))
            deal_card(card_dict)
            break

        # else:
        #     print('抱歉,没有找到:%s' % find_name)


def deal_card(find_dict):  # 进行信息修改的函数
    # print(find_dict)
    print("=" * 50)
    action_str = input('请选择要执行的操作 '
                       '[1] 修改 [2] 删除 :')
    # 替换已经存在的键值对
    if action_str == '1':
        find_dict['name_str'] = input_card_info(find_dict['name_str'], '姓名:')
        find_dict['class_str'] = input_card_info(find_dict['class_str'], '班级:')
        find_dict['ID_str'] = input_card_info(find_dict['ID_str'], '学号:')
        find_dict['room_str'] = input_card_info(find_dict['room_str'], '学号:')

        print('修改学生信息成功!!!')

    elif action_str == '2':

        card_list.remove(find_dict)

        print('删除学生信息成功!!!')


def input_card_info(dict_value, tip_message):
    """

    :param dict_value:字典中原有的值
    :param tip_message:输入的提示文字
    :return:如果用户输入了内容,就返回内容,负责返回字典中原有的值
    """
    # 1.提示用户输入内容

    result_str = input(tip_message)
    # 2.针对用户的输入进行判断,如果用户输入了内容,直接返回结果
    if len(result_str) > 0:
        return result_str
    # 3.如果用户没有输入内容,返回‘字典中原有的值’
    else:
        return dict_value

3 程序运行截图

用户信息添加

python 线性分类图 python画类图_宿舍管理系统_02


显示所有用户信息

python 线性分类图 python画类图_管理系统_03


检索学生信息

按姓名搜索

python 线性分类图 python画类图_python 线性分类图_04


按班级搜索

python 线性分类图 python画类图_搜索_05


按学号搜索

python 线性分类图 python画类图_python 线性分类图_06


按宿舍搜索

python 线性分类图 python画类图_宿舍管理系统_07


修改学生信息

进行修改

python 线性分类图 python画类图_宿舍管理系统_08


查看修改后的信息

python 线性分类图 python画类图_管理系统_09