毕业设计案例:Python实现疫苗接种数据库管理系统

news2024/11/27 1:33:20

一、序言

那一年过年前,疫情开始爆发,对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力,新冠疫苗也很快的被技术人员研发出来,人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计,来设计“疫苗接种数据库”,存储人们接种疫苗的相关信息,并实现“增删改查”等基本操作以及其他的拓展功能。

国内新冠疫苗人员接种后,如果不通过数据统计到数据库,数据量之大,数据查询,数据核实,数据更改等工作会非常不方便,通过编程语言,设计疫苗接种数据库,来存储接种疫苗相关数据,能使得工作人员和接种人员的工作量大大减少,从而减少工作负担,节省时间,减少更多的财力损失,实现更好的数据管理,是一种非常高效、精确、快捷、方便的方式。

python 200集教学合集视频

【整整800集】Python爬虫项目零基础入门合集,细狗都学会了,你还不会?

数据库信息

本次数据库设计一共四张表,分别为《接种人员(person)》、《生产厂家(manufacturer)》、《疫苗信息(vaccine)》、《接种信息(inject_info)》。

  • 《接种人员》表的数据项:姓名,身份证号,生日,性别,家庭住址,联系电话,不良反应。
  • 《生产厂家》表的数据项:厂家名称,厂家编号,厂家地址,联系人,联系人电话。
  • 《疫苗信息》表的数据项:疫苗名称,疫苗编号,疫苗品种,疫苗厂家编号,生产日期,过期时间。
  • 《接种信息》表的数据项:接种编号,接种疫苗编号,疫苗品种,接种剂次,接种人姓名,接种人身份证号,接种时间,接种单位。

主要阶段

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

二、关键代码展示

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

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)

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

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)

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、接种人员(person)

在这里插入图片描述

2、生产厂家(manufacturer)

在这里插入图片描述

3、疫苗信息(vaccine)

在这里插入图片描述

4、接种信息(inject_info)

在这里插入图片描述

四、运行效果

1、设计背景

在这里插入图片描述

2、小组信息

在这里插入图片描述

3、主界面

在这里插入图片描述

4、新增操作

在这里插入图片描述
结果:可见新加的“张三”信息已成功插入。
在这里插入图片描述

5、删除操作

在这里插入图片描述
结果:可见新加的“张三”信息已成功删除。

6、查询操作

在这里插入图片描述

7、修改操作

在这里插入图片描述
结果:邓阳华的家庭住址已经被修改。
在这里插入图片描述

兄弟们,今天的分享就到这!下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(一)正则表达式——基础概念

&#xff08;一&#xff09;正则表达式——基础概念 概括 用来处理字符串的规则。除了对象、函数&#xff0c;我们操作得最多的就是字符串 正则的两大作用&#xff1a; 验证是否匹配把匹配到的内容捕获到量词元字符*特殊元字符点. &#xff1a;除了\r \n以外的字符 普通元字符h…

【OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域&#xff08;MSER&#xff09; 1. 最大稳定极值区域&#xff08;MSER&#xff09; 最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xf…

RNN/LSTM (三) 学习torchtext源码

文章目录包装dataset构建词库1.列举数据源2. 遍历数据3. 列举特殊符号4. 构建词库 Field::vocab_clsload_vectors构建读指针 data.BucketIterator在上一文&#xff0c;我们学习了基于torchtext编写lstm模型的实践案例&#xff0c;本文将结合上文案例&#xff0c;深入案例代码&a…

Python自动化之Excel利器openpyxl

文章目录前言一、Workbook1.1 读取xlsx文件1.2 保存二、Sheet2.1 创建Sheet2.2 遍历Sheet2.3 移动Sheet2.4 删除Sheet2.5 插入、删除行列三、单元格3.1 获取某个单元格3.2 遍历单元格3.3 获取范围单元格3.4 单元格赋值3.5 合并/解除合并单元格3.6 单元格数据格式3.7 单元格数字…

[附源码]Python计算机毕业设计Django儿童早教课程管理系统论文2022

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

算法设计与分析 SCAU19180 集合划分问题

19180 集合划分问题 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description 教材课后习题2-8 n个元素的集合{1,2,…,n}可以划分若干个非空子集。例如&#xff0c;当n4时&#xff0c;集合{1,2,3,4}可以划分为15个不同的非…

微信小程序开发学习文档(万字总结,一篇搞定前端开发)

一、微信小程序简介 与网页开发不同&#xff0c;小程序有自己的一套标准开发模式&#xff1a;-申请小程序开发账号-安装小程序开发工具-创建和配置小程序项目 1.1 创建第一个小程序 1.2 主界面的5个组成部分 1.3小程序项目的基本构成 pages 用来存放所有小程序的页面&#xf…

Java并发编程—Thread类中的start()方法如何启动一个线程【原理分析】?

一、java线程的介绍&#xff1a; 在java的开发过程中&#xff0c;很多铁子对于java线程肯定不感到陌生&#xff0c;作为java里面重要的组成部分&#xff0c;这里就从如何创建一个线程给大家进行分析&#xff1b; 二、相关知识引入&#xff1a; ​ 之前我了解过&#xff0c;j…

2022年浙江省中职组“网络空间安全”赛项模块B--Windows渗透测试

2022年中职组浙江省“网络空间安全”赛项 B-1:Windows渗透测试一、竞赛时间 420分钟 共计7小时 吃饭一小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第①阶段: 单兵模式系统渗透测试 任务一: Windows操作系统渗透测试 任务二: Linux操作系统渗透测试 任务三…

[附源码]Python计算机毕业设计SSM科技项目在线评审系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

segmenter

patch embedding&#xff1a;例如输入图片大小为224x224&#xff0c;将图片分为固定大小的patch&#xff0c;patch大小为16x16&#xff0c;则每张图像会生成224x224/16x16196个patch&#xff0c;即输入序列长度为196&#xff0c;每个patch维度16x16x3768&#xff0c;线性投射层…

hexo+github手把手教你部署个人博客

一、安装并配置Node.js&#xff08;原本就有安装&#xff09; 参考&#xff1a;(1条消息) Node.js安装与配置&#xff08;详细步骤&#xff09;_普通网友的博客-CSDN博客_nodejs安装配置 一、下载Node.js官网下载 安装位置与环境变量配置 系统属性-环境变量-系统变量-Path 验…

129页4万字某智慧能源集团数字化管控平台项目 建设方案

目录 数字化管控平台相关项目建议书 1 目录&#xff1a; 1 一、相关项目背景 2 二、需求理解 3 2.1 需求理解 3 三、方案设计 5 3.1 整体方案设计 7 3.3.1 整体架构 7 3.3.2 解决方案说明 8 3.3.3 需求应答 10 3.2 数据仓库 11 3.2.1 数据仓库架构 11 3.2.2 数据仓库产品说明 1…

springMVC01,【第一个springMVC例子(注解版):HelloWorld】

springMVC01,【第一个springMVC例子-注解版&#xff1a;HelloWorld】创建项目1.配置web.xml2.编写spring配置文件3.controller层3.1RequestMapping注解4.运行测试5.小结链接: springMVC01,springMVC的执行流程【第一个springMVC例子&#xff08;XML配置版本&#xff09;&#x…

一种多引擎可视化数据流实现方案

企业大数据处理的挑战 随着大数据时代的到来&#xff0c;数据量迅猛增长&#xff0c;给传统的分析技术带来了巨大的冲击和挑战&#xff0c;企业面临着大数据处理的巨大挑战。将复杂的大数据处理问题进行简化&#xff0c;以便企业有更多人能够进行大数据处理&#xff0c;进而整…

使用azure-data factory

data-fatory介绍 Azure Data Factory&#xff08;简写 ADF&#xff09;是Azure的云ETL服务&#xff0c;简单的说&#xff0c;就是云上的SSIS。ADF是基于云的ETL&#xff0c;用于数据集成和数据转换&#xff0c;不需要代码&#xff0c;直接通过UI&#xff08;code-free UI&…

[附源码]SSM计算机毕业设计疫情防控期间人员档案追寻系统设计与实现论文JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

操作系统实验5:信号量的实现与应用

写在最前的总结 下面的实验内容是在完整做完实验时候补充的&#xff0c;这里先把踩过的坑记录一下。 调试总结 先在Ubuntu上模拟生产者—消费者问题。这个实验分为两大部分&#xff0c;一个是实现信号量&#xff0c;另一个是验证信号量。对于第二个&#xff0c;建议先在Ubun…

银河麒麟 linux V10 安装JDK

1、安装JDK之前&#xff0c;先查看系统是否已安装JDK相关软件包&#xff1a; 2. 如果已经安装过&#xff0c;可以先卸载&#xff08;可以跳过&#xff09; 3. 下载并解压jdk包 # 将下载好的jdk压缩包解压到指定目录/usr/local/jdk8 mkdir /usr/local/jdk8 cp jdk-8u271-linu…

详解设计模式:享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;&#xff0c;是对象池的一种体现&#xff0c;也是 GoF 的 23 种设计模式中的一种结构型设计模式。 享元模式 主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。它提供了减少对象数量从而改善应用所需的对象…