• Python实现疫苗接种数据库管理——毕业设计经典案例


    嗨害大家好鸭,我是小熊猫🖤


    有什么python相关报错解答自己不会的、或者源码资料/模块安装/女装大佬精通技巧 都可以来这里:(https://jq.qq.com/?_wv=1027&k=2Q3YTfym)或者+V:python10010问我


    2020 这一年,疫情开始爆发

    对全国人民的生活和工作造成了严重的影响。

    但凭借着国家强盛的实力,

    新冠疫苗也很快的被技术人员研发出来,

    人们通过接种新冠疫苗来抵御新冠病毒的危害。

    本次通过接种新冠疫苗的这个数据统计,来设计“疫苗接种数据库”,存储人们接种疫苗的相关信息,并实现“增删改查”等基本操作以及其他的拓展功能。

    国内新冠疫苗人员接种后,

    如果不通过数据统计到数据库,数据量之大,

    数据查询,数据核实,

    数据更改等工作会非常不方便,

    通过编程语言,设计疫苗接种数据库,

    来存储接种疫苗相关数据,

    能使得工作人员和接种人员的工作量大大减少,

    从而减少工作负担,节省时间,减少更多的财力损失,

    实现更好的数据管理,是一种非常高效、精确、快捷、方便的方式。


    一、数据库信息 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    本次数据库设计一共四张表,分别为:

    • 《接种人员(person)》
    • 《生产厂家(manufacturer)》
    • 《疫苗信息(vaccine)》
    • 《接种信息(inject_info)》

    《接种人员》表的数据项:姓名,身份证号,生日,性别,家庭住址,联系电话,不良反应。

    《生产厂家》表的数据项:厂家名称,厂家编号,厂家地址,联系人,联系人电话。

    《疫苗信息》表的数据项:疫苗名称,疫苗编号,疫苗品种,疫苗厂家编号,生产日期,过期时间。

    《接种信息》表的数据项:接种编号,接种疫苗编号,疫苗品种,接种剂次,接种人姓名,接种人身份证号,接种时间,接种单位。

    主要阶段

    • 确定选题:《课程设计-疫苗接种数据库》。
    • 需求分析:《数据库数据字典》,编程语言为:python + mysql

    二、关键代码展示 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    1、app.py(主函数)

    if __name__ == '__main__':
        # 全局变量初始化
        gol._init()
     
        # # 课题背景信息
        # menu.course_background()
        #
        # # 打印小组成员信息
        # menu.team_info()
     
        # 连接数据库信息
        db.connect_to_db(config.db_host, config.db_user, config.db_password, config.db_name)
     
        # 跳出数据库的标志 
        flag = True
        while (flag):
            menu.main_menu()
            cin = input("请输入要执行操作:")
     
            choice = int(cin) if cin.isdigit() else config.DEFAULT_INPUT
     
            if choice == 0:
                print("您已选择退出,感谢您的操作体验")
                break
            elif choice == config.OP_TYPE_ADD:
                # ----------------------添加----------------------------
                mgr_add.add_data()
                print(config.END_OP_TEXT)
                input()
     
            elif choice == config.OP_TYPE_DELETE:
                # ----------------------删除----------------------------
                mgr_delete.do_delete()
                print(config.END_OP_TEXT)
                input()
     
            elif choice == config.OP_TYPE_SELECT:
                # ----------------------查找----------------------------
                mgr_selector.do_select()
                print(config.END_OP_TEXT)
                input()
     
            elif choice == config.OP_TYPE_UPDATE:
                # ----------------------修改----------------------------
                mgr_update.do_update()
                print(config.END_OP_TEXT)
                input()
            else:
                print("操作选项输入错误,请重新输入")
     
        db.close_db_link()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    2、mgr_update.py(更新)

    def do_update():
        menu.update_menu_total()
     
        cin = util.get_user_input(5)
     
        if cin == 0:
            return
        if cin == config.TYPE_1:
            do_update_person()
     
        if cin == config.TYPE_2:
            do_update_inject_info()
     
        if cin == config.TYPE_3:
            do_update_vaccine()
     
        if cin == config.TYPE_4:
            do_update_manufacturer()
     
     
    def do_update_person():
        # 更新接种人员表
     
        menu.update_menu_1()
     
        cin_update = util.get_user_input(4)
     
        if cin_update == 0:
            return
     
        # 根据身份证号更新
        cert_no = input("请输入身份证号:")
     
        table = config.table_dict[config.TYPE_1]
        table_inject_info = config.table_dict[config.TYPE_2]
     
        if cin_update == 1:
            # 更新姓名
            new_name = input("请输入修改后的姓名:")
            sql1 = "UPDATE %s SET name='%s' WHERE cert_no='%s';" % (table, new_name, cert_no)
            sql2 = "UPDATE %s SET person_name='%s' WHERE person_cert_no='%s';" % (table_inject_info, new_name, cert_no)
            db.execute_sql(sql1)
            db.execute_sql(sql2)
     
        elif cin_update == 2:
            # 更新电话
            new_phone = input("请输入修改后的接种人联系电话:")
            sql1 = "UPDATE %s SET phone='%s' WHERE cert_no='%s';" % (table, new_phone, cert_no)
            db.execute_sql(sql1)
     
        elif cin_update == 3:
            # 更新住址
            new_address = input("请输入修改后的家庭住址:")
            sql1 = "UPDATE %s SET address='%s' WHERE cert_no='%s';" % (table, new_address, cert_no)
            db.execute_sql(sql1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    3、mgr_add.py(添加)

    def add_data():
        # 添加操作
        add_menu_1()
     
        # 获取用户输入
        cin = util.get_user_input(5)
     
        if cin == 0:
            return
     
        # 获取数据表列
        table = config.table_dict[cin]
        columns = get_table_col(table)
     
        util.print_log("表的列信息: ",  columns)
     
        field_list = []
        data_list = []
        for i in columns:
            col_name = i[0]     # 列名
            col_type = i[1]     # 列类型
            col_index_type = i[4]     # 列索引类型
            col_desc = i[8]     # 列值
     
            # 如果是不需要录入则跳过, 比如 id,person_id 等
            if(col_name in config.SKIP_FIELD_SET):
                continue
     
            util.print_log("当前列信息", i)
     
            # 输入值
            if col_type == config.FIELD_TYPE_DATETIME:
                # 日期检查
                a = input("请输入【%s】, 例如 2022-05-02 : " % col_desc)
                input_data_invalid = True
                while(input_data_invalid):
                    if(util.is_valid_date(a) == True):
                        break
                    a = input("您输入日期不合法,请重新输入,例如 2022-05-02 : ")
            else:
                a = input("请输入【%s】: " % col_desc)
     
            # 判断唯一关键字是否重复
            if col_index_type == 'UNI':
                sql = '''
                    SELECT 1 FROM  %s  
                    WHERE %s = %s 
                ''' % (table, col_name, a)
                util.print_log("查重 sql: ", sql)
                cursor = gol.get_value('cursor')
                exist_in_table = 1
                while exist_in_table == 1:
                    dup_result = cursor.execute(sql)
                    if dup_result == 0:
                        break
     
                    # 如果重复则重新输入
                    a = input("您输入与表中信息重复,请重新输入【%s】" % col_name)
     
            field_list.append(col_name)
            data_list.append(a)
     
        # 输入完成,组装数据
        field_str = ",".join(field_list)
        data_tuple = tuple(data_list)
     
        # 拼接数据
        sql = '''
            INSERT INTO %s(%s) VALUES %s;
        ''' % (table, field_str, data_tuple)
        util.print_log(sql)
     
        cursor = gol.get_value('cursor')
        cursor.execute(sql)
     
        # 提交数据
        conn = gol.get_value('conn')
        conn.commit()
     
        util.print_log("%s 表成功插入数据 %s" % (table, data_tuple))
        return 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    4、mgr_delete.py(删除)

    def do_delete():
        # 删除操作
        menu.delete_menu_total()
     
        # 获取输入
        cin = util.get_user_input(5)
     
        if cin == 0:
            return
     
        if cin == config.TYPE_1:
            do_delete_person()
     
        if cin == config.TYPE_2:
            do_delete_inject_info()
     
        if cin == config.TYPE_3:
            do_delete_vaccine()
     
        if cin == config.TYPE_4:
            do_delete_manufacturer()
     
     
    def do_delete_vaccine():
        # 删除疫苗信息
     
        # 打印菜单
        menu.delete_menu_3()
     
        # 获取用户输入
        cin = util.get_user_input(2)
        if cin == 0:
            return
     
        delete_value = input("请输入具体信息:")
     
        # 获取相关表
        table = config.table_dict[config.TYPE_3]
        table2 = config.table_dict[config.TYPE_2]
     
        # 接种编号
        if cin == 1:
            sql1 = '''
                DELETE FROM %s WHERE vaccine_no='%s' 
                ''' % (table, delete_value)
            sql2 = '''
                DELETE FROM %s WHERE vaccine_no='%s' 
                ''' % (table2, delete_value)
     
            db.execute_sql(sql1)
            db.execute_sql(sql2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    5、mgr_selector.py(查找)

    def do_select():
        # 执行查询
        menu.select_menu_total()
     
        # 获取输入
        cin = util.get_user_input(5)
     
        if cin == 0:
            return
     
        if cin == config.TYPE_1:
            # ------------------查找接种人员相关信息----------------
            do_select_person()
     
        elif cin == config.TYPE_2:
            # ------------------查找接种信息-----------------------
            do_select_inject_info()
     
        elif cin == config.TYPE_3:
            # ------------------查找疫苗信息-----------------------
            do_select_vaccine()
     
        elif cin == config.TYPE_4:
            # ------------------查找生产企业相关信息-----------------------
            do_select_manufacturer()
     
     
    def do_select_vaccine():
        # 查找疫苗信息
        menu.select_menu_3()
        cin = util.get_user_input(5)
     
        if cin == 0:
            return
     
        # 获取搜索数据
        cin2 = input("请输入搜索数据:")
     
        table = config.table_dict[config.TYPE_3]
        query_value = cin2
     
        # 结果集合
        result = []
     
        # 疫苗编号
        if cin == 1:
            result = db.query_by_table_field(table, 'vaccine_no', query_value)
     
        # 厂家编号
        if cin == 2:
            result = db.query_by_table_field(table, 'company_no', query_value)
     
        # 生产日期
        if cin == 3:
            sql = ''' 
                SELECT * FROM %s  WHERE %s >= '%s' 
                ''' % (table, 'production_at', query_value)
     
            cursor = gol.get_value('cursor')
            cursor.execute(sql)
            result = cursor.fetchall()
     
        # 过期时间
        if cin == 4:
            sql = ''' 
                SELECT * FROM %s  WHERE %s <= '%s' 
                ''' % (table, 'expired_at', query_value)
     
            cursor = gol.get_value('cursor')
            cursor.execute(sql)
            result = cursor.fetchall()
     
        show_select_vaccine_result(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    三、数据库数据字典 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    1、接种人员(person)
    在这里插入图片描述
    2、生产厂家(manufacturer)
    在这里插入图片描述
    3、疫苗信息(vaccine)
    在这里插入图片描述
    4、接种信息(inject_info)
    在这里插入图片描述


    四、运行效果 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    1、设计背景
    请添加图片描述
    2、小组信息
    请添加图片描述
    3、主界面
    请添加图片描述
    4、新增操作
    请添加图片描述

    结果:可见新加的“张三”信息已成功插入。

    请添加图片描述
    5、删除操作
    请添加图片描述
    结果:可见新加的“张三”信息已成功删除。

    6、查询操作
    请添加图片描述
    7、修改操作
    请添加图片描述

    结果:邓阳华的家庭住址已经被修改。

    请添加图片描述

    今天的分享就到这啦~

    不会的话就后台找我 ~

    我是小熊猫,咱下篇文章再见(✿◡‿◡)

    在这里插入图片描述

  • 相关阅读:
    STM32CUBEMX开发GD32F303(13)----定时器TIM捕获PWM测量频率与占空比
    基于Android的学生管理系统App设计与实现(Eclipse开发)
    不知道PDF文件怎么解密?推荐3个实用方法给你
    java面试强基(6)
    【备考网络工程师】如何备考2023年网络工程师之错题集篇(2)
    SpringBoot、基础篇
    Ubuntu安装.Net SDK
    django 商品及购物车逻辑实现
    Java 基于 SpringBoot 的在线学习平台
    【大数据】大数据期末速通 (一)
  • 原文地址:https://blog.csdn.net/m0_67575344/article/details/126229541