Python疫苗接种管理数据库
编程吗 人气:0引言
那一年过年前,疫情开始爆发,对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力,新冠疫苗也很快的被技术人员研发出来,人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计,来设计“疫苗接种数据库”,存储人们接种疫苗的相关信息,并实现“增删改查”等基本操作以及其他的拓展功能。
国内新冠疫苗人员接种后,如果不通过数据统计到数据库,数据量之大,数据查询,数据核实,数据更改等工作会非常不方便,通过编程语言,设计疫苗接种数据库,来存储接种疫苗相关数据,能使得工作人员和接种人员的工作量大大减少,从而减少工作负担,节省时间,减少更多的财力损失,实现更好的数据管理,是一种非常高效、精确、快捷、方便的方式。
一、数据库信息
本次数据库设计一共四张表,分别为《接种人员(person)》、《生产厂家(manufacturer)》、《疫苗信息(vaccine)》、《接种信息(inject_info)》。
- 《接种人员》表的数据项:姓名,SFZ号,生日,性别,家庭住址,联系电话,不良反应。
- 《生产厂家》表的数据项:厂家名称,厂家编号,厂家地址,联系人,联系人电话。
- 《疫苗信息》表的数据项:疫苗名称,疫苗编号,疫苗品种,疫苗厂家编号,生产日期,过期时间。
- 《接种信息》表的数据项:接种编号,接种疫苗编号,疫苗品种,接种剂次,接种人姓名,接种人SFZ号,接种时间,接种单位。
主要阶段
- 确定选题:《课程设计-疫苗接种数据库》。
- 需求分析:《数据库数据字典》,编程语言为: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 # 根据SFZ号更新 cert_no = input("请输入SFZ号:") 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)
字段名 | 字段标题 | 字段类型 | 默认 | 字段备注 |
---|---|---|---|---|
id | ID | int | 无 | ID |
name | 姓名 | varchar(32) | 无 | 姓名 |
cert_no | SFZ号 | varchar(32) | 无 | SFZ号 |
birthday | 生日 | datetime | 无 | 生日 |
gender | 性别 | vtinyint(1) | 无 | 性别 |
address | 家庭住址 | varchar(128) | 无 | 家庭住址 |
phone | 电话 | varchar(16) | 无 | 电话 |
adverse_effect | 不良反应 | varchar(64) | 无 | 不良反应 |
2、生产厂家(manufacturer)
字段名 | 字段标题 | 字段类型 | 默认 | 字段备注 |
---|---|---|---|---|
id | ID | int | 无 | ID |
name | 厂家名称 | varchar(255) | 无 | 厂家名称 |
company_no | 厂家编号 | varchar(32) | 无 | 厂家编号 |
address | 厂家地址 | varchar(255) | 无 | 厂家地址 |
contact_person | 联系人 | varchar(255) | 无 | 联系人 |
contact_phone | 联系人电话 | int | 无 | 联系人电话 |
3、疫苗信息(vaccine)
字段名 | 字段标题 | 字段类型 | 默认 | 字段备注 |
---|---|---|---|---|
id | ID | int | 无 | ID |
name | 疫苗名称 | varchar(64) | 无 | ID |
vaccine_no | 疫苗编号 | varchar(64) | 无 | 疫苗名称 |
vaccine_type | 疫苗品种 | datetime(32) | 无 | 疫苗品种 |
company_no | 疫苗厂家编号 | vtinyint(32) | 无 | 疫苗厂家编号 |
production_at | 生产日期 | datetime | 无 | 生产日期 |
expired_at | 过期时间 | datetime | 无 | 过期时间 |
4、接种信息(inject_info)
字段名 | 字段标题 | 字段类型 | 默认 | 字段备注 |
---|---|---|---|---|
id | ID | int | 无 | ID |
inject_no | 接种编号 | varchar(32) | 无 | 接种编号 |
vaccine_no | 接种疫苗编号 | varchar(32) | 无 | 接种疫苗编号 |
vaccine_type | 疫苗品种 | varchar(32) | 无 | 疫苗品种 |
inject_does | 接种剂次 | varchar(16) | 无 | 接种剂次 |
person_name | 接种人姓名 | varchar(32) | 无 | 接种人姓名 |
person_cert_no | 接种人SFZ号 | varchar(32) | 无 | 接种人SFZ号 |
inject_at | 接种时间 | datetime | 无 | 接种时间 |
inject_company | 接种单位 | varchar(128) | 无 | 接种单位 |
四、运行效果
1、设计背景
2、小组信息
3、主界面
4、新增操作
结果:可见新加的“张三”信息已成功插入。
5、删除操作
结果:可见新加的“张三”信息已成功删除。
6、查询操作
7、修改操作
结果:邓阳华的家庭住址已经被修改。
加载全部内容