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

打印 上一主题 下一主题

主题 790|帖子 790|积分 2370

那一年过年前,疫情开始爆发,对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力,新冠疫苗也很快的被技术人员研发出来,人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计,来设计“疫苗接种数据库”,存储人们接种疫苗的相关信息,并实现“增删改查”等基本操作以及其他的拓展功能。
国内新冠疫苗人员接种后,如果不通过数据统计到数据库,数据量之大,数据查询,数据核实,数据更改等工作会非常不方便,通过编程语言,设计疫苗接种数据库,来存储接种疫苗相关数据,能使得工作人员和接种人员的工作量大大减少,从而减少工作负担,节省时间,减少更多的财力损失,实现更好的数据管理,是一种非常高效、精确、快捷、方便的方式。
数据库信息
本次数据库设计一共四张表,分别为《接种人员(person)》、《生产厂家(manufacturer)》、《疫苗信息(vaccine)》、《接种信息(inject_info)》。

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

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

1、app.py(主函数)
  1. if __name__ == '__main__':
  2.     # 全局变量初始化
  3.     gol._init()
  4.     # # 课题背景信息
  5.     # menu.course_background()
  6.     #
  7.     # # 打印小组成员信息
  8.     # menu.team_info()
  9.     # 连接数据库信息
  10.     db.connect_to_db(config.db_host, config.db_user, config.db_password, config.db_name)
  11.     # 跳出数据库的标志
  12.     flag = True
  13.     while (flag):
  14.         menu.main_menu()
  15.         cin = input("请输入要执行操作:")
  16.         choice = int(cin) if cin.isdigit() else config.DEFAULT_INPUT
  17.         if choice == 0:
  18.             print("您已选择退出,感谢您的操作体验")
  19.             break
  20.         elif choice == config.OP_TYPE_ADD:
  21.             # ----------------------添加----------------------------
  22.             mgr_add.add_data()
  23.             print(config.END_OP_TEXT)
  24.             input()
  25.         elif choice == config.OP_TYPE_DELETE:
  26.             # ----------------------删除----------------------------
  27.             mgr_delete.do_delete()
  28.             print(config.END_OP_TEXT)
  29.             input()
  30.         elif choice == config.OP_TYPE_SELECT:
  31.             # ----------------------查找----------------------------
  32.             mgr_selector.do_select()
  33.             print(config.END_OP_TEXT)
  34.             input()
  35.         elif choice == config.OP_TYPE_UPDATE:
  36.             # ----------------------修改----------------------------
  37.             mgr_update.do_update()
  38.             print(config.END_OP_TEXT)
  39.             input()
  40.         else:
  41.             print("操作选项输入错误,请重新输入")
  42.     db.close_db_link()
复制代码
  1. # 我给大家准备了这些资料:Python视频教程、100本Python电子书、基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题、Python学习路线图、问题解答!
  2. # 都放在这个扣群啦 : 279199867
复制代码
 
2、mgr_update.py(更新)
  1. def do_update():
  2.     menu.update_menu_total()
  3.     cin = util.get_user_input(5)
  4.     if cin == 0:
  5.         return
  6.     if cin == config.TYPE_1:
  7.         do_update_person()
  8.     if cin == config.TYPE_2:
  9.         do_update_inject_info()
  10.     if cin == config.TYPE_3:
  11.         do_update_vaccine()
  12.     if cin == config.TYPE_4:
  13.         do_update_manufacturer()
  14. def do_update_person():
  15.     # 更新接种人员表
  16.     menu.update_menu_1()
  17.     cin_update = util.get_user_input(4)
  18.     if cin_update == 0:
  19.         return
  20.     # 根据身份证号更新
  21.     cert_no = input("请输入身份证号:")
  22.     table = config.table_dict[config.TYPE_1]
  23.     table_inject_info = config.table_dict[config.TYPE_2]
  24.     if cin_update == 1:
  25.         # 更新姓名
  26.         new_name = input("请输入修改后的姓名:")
  27.         sql1 = "UPDATE %s SET name='%s' WHERE cert_no='%s';" % (table, new_name, cert_no)
  28.         sql2 = "UPDATE %s SET person_name='%s' WHERE person_cert_no='%s';" % (table_inject_info, new_name, cert_no)
  29.         db.execute_sql(sql1)
  30.         db.execute_sql(sql2)
  31.     elif cin_update == 2:
  32.         # 更新电话
  33.         new_phone = input("请输入修改后的接种人联系电话:")
  34.         sql1 = "UPDATE %s SET phone='%s' WHERE cert_no='%s';" % (table, new_phone, cert_no)
  35.         db.execute_sql(sql1)
  36.     elif cin_update == 3:
  37.         # 更新住址
  38.         new_address = input("请输入修改后的家庭住址:")
  39.         sql1 = "UPDATE %s SET address='%s' WHERE cert_no='%s';" % (table, new_address, cert_no)
  40.         db.execute_sql(sql1)
复制代码
 
3、mgr_add.py(添加)
  1. def add_data():
  2.     # 添加操作
  3.     add_menu_1()
  4.     # 获取用户输入
  5.     cin = util.get_user_input(5)
  6.     if cin == 0:
  7.         return
  8.     # 获取数据表列
  9.     table = config.table_dict[cin]
  10.     columns = get_table_col(table)
  11.     util.print_log("表的列信息: ",  columns)
  12.     field_list = []
  13.     data_list = []
  14.     for i in columns:
  15.         col_name = i[0]     # 列名
  16.         col_type = i[1]     # 列类型
  17.         col_index_type = i[4]     # 列索引类型
  18.         col_desc = i[8]     # 列值
  19.         # 如果是不需要录入则跳过, 比如 id,person_id 等
  20.         if(col_name in config.SKIP_FIELD_SET):
  21.             continue
  22.         util.print_log("当前列信息", i)
  23.         # 输入值
  24.         if col_type == config.FIELD_TYPE_DATETIME:
  25.             # 日期检查
  26.             a = input("请输入【%s】, 例如 2022-05-02 : " % col_desc)
  27.             input_data_invalid = True
  28.             while(input_data_invalid):
  29.                 if(util.is_valid_date(a) == True):
  30.                     break
  31.                 a = input("您输入日期不合法,请重新输入,例如 2022-05-02 : ")
  32.         else:
  33.             a = input("请输入【%s】: " % col_desc)
  34.         # 判断唯一关键字是否重复
  35.         if col_index_type == 'UNI':
  36.             sql = '''
  37.                 SELECT 1 FROM  %s  
  38.                 WHERE %s = %s
  39.             ''' % (table, col_name, a)
  40.             util.print_log("查重 sql: ", sql)
  41.             cursor = gol.get_value('cursor')
  42.             exist_in_table = 1
  43.             while exist_in_table == 1:
  44.                 dup_result = cursor.execute(sql)
  45.                 if dup_result == 0:
  46.                     break
  47.                 # 如果重复则重新输入
  48.                 a = input("您输入与表中信息重复,请重新输入【%s】" % col_name)
  49.         field_list.append(col_name)
  50.         data_list.append(a)
  51.     # 输入完成,组装数据
  52.     field_str = ",".join(field_list)
  53.     data_tuple = tuple(data_list)
  54.     # 拼接数据
  55.     sql = '''
  56.         INSERT INTO %s(%s) VALUES %s;
  57.     ''' % (table, field_str, data_tuple)
  58.     util.print_log(sql)
  59.     cursor = gol.get_value('cursor')
  60.     cursor.execute(sql)
  61.     # 提交数据
  62.     conn = gol.get_value('conn')
  63.     conn.commit()
  64.     util.print_log("%s 表成功插入数据 %s" % (table, data_tuple))
  65.     return 0
复制代码
 
4、mgr_delete.py(删除)
  1. def do_delete():
  2.     # 删除操作
  3.     menu.delete_menu_total()
  4.     # 获取输入
  5.     cin = util.get_user_input(5)
  6.     if cin == 0:
  7.         return
  8.     if cin == config.TYPE_1:
  9.         do_delete_person()
  10.     if cin == config.TYPE_2:
  11.         do_delete_inject_info()
  12.     if cin == config.TYPE_3:
  13.         do_delete_vaccine()
  14.     if cin == config.TYPE_4:
  15.         do_delete_manufacturer()
  16. def do_delete_vaccine():
  17.     # 删除疫苗信息
  18.     # 打印菜单
  19.     menu.delete_menu_3()
  20.     # 获取用户输入
  21.     cin = util.get_user_input(2)
  22.     if cin == 0:
  23.         return
  24.     delete_value = input("请输入具体信息:")
  25.     # 获取相关表
  26.     table = config.table_dict[config.TYPE_3]
  27.     table2 = config.table_dict[config.TYPE_2]
  28.     # 接种编号
  29.     if cin == 1:
  30.         sql1 = '''
  31.             DELETE FROM %s WHERE vaccine_no='%s'
  32.             ''' % (table, delete_value)
  33.         sql2 = '''
  34.             DELETE FROM %s WHERE vaccine_no='%s'
  35.             ''' % (table2, delete_value)
  36.         db.execute_sql(sql1)
  37.         db.execute_sql(sql2)
复制代码
 
5、mgr_selector.py(查找)
[code]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
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表