那一年過年前,疫情開始爆發,對全國人民的生活和工作造成了嚴重的影響。但憑藉著國家強盛的實力,新冠疫苗也很快的被技術人員研發出來,人們通過接種新冠疫苗來抵禦新冠病毒的危害。本次通過接種新冠疫苗的這個數據統計,來設計“疫苗接種資料庫”,存儲人們接種疫苗的相關信息,並實現“增刪改查”等基本操作以及其他的拓 ...
那一年過年前,疫情開始爆發,對全國人民的生活和工作造成了嚴重的影響。但憑藉著國家強盛的實力,新冠疫苗也很快的被技術人員研發出來,人們通過接種新冠疫苗來抵禦新冠病毒的危害。本次通過接種新冠疫苗的這個數據統計,來設計“疫苗接種資料庫”,存儲人們接種疫苗的相關信息,並實現“增刪改查”等基本操作以及其他的拓展功能。
國內新冠疫苗人員接種後,如果不通過數據統計到資料庫,數據量之大,數據查詢,數據核實,數據更改等工作會非常不方便,通過編程語言,設計疫苗接種資料庫,來存儲接種疫苗相關數據,能使得工作人員和接種人員的工作量大大減少,從而減少工作負擔,節省時間,減少更多的財力損失,實現更好的數據管理,是一種非常高效、精確、快捷、方便的方式。
資料庫信息
本次資料庫設計一共四張表,分別為《接種人員(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()
# 我給大家準備了這些資料:Python視頻教程、100本Python電子書、基礎、爬蟲、數據分析、web開發、機器學習、人工智慧、面試題、Python學習路線圖、問題解答! # 都放在這個扣群啦 : 279199867
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)
欄位名 | 欄位標題 | 欄位類型 | 預設 | 欄位備註 |
---|---|---|---|---|
id | ID | int | 無 | ID |
name | 姓名 | varchar(32) | 無 | 姓名 |
cert_no | 身份證號 | varchar(32) | 無 | 身份證號 |
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 | 接種人身份證號 | varchar(32) | 無 | 接種人身份證號 |
inject_at | 接種時間 | datetime | 無 | 接種時間 |
inject_company | 接種單位 | varchar(128) | 無 | 接種單位 |
運行效果
1、設計背景
2、小組信息
3、主界面
4、新增操作
結果:可見新加的“張三”信息已成功插入。
5、刪除操作
結果:可見新加的“張三”信息已成功刪除。
6、查詢操作
7、修改操作
結果:鄧陽華的家庭住址已經被修改。
兄弟們,今天的分享就到這!下次再見!