程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【課程設計實戰】Python 實現疫苗接種數據庫的管理

編輯:Python

目錄

一、需求分析

1、設計背景

2、設計目的

3、數據庫信息

4、主要階段

二、關鍵代碼展示

1、app.py(主函數)

2、mgr_update.py(更新)

3、mgr_add.py(添加)

4、mgr_delete.py(刪除)

5、mgr_selector.py(查找)

三、數據庫數據字典

1、接種人員(person)

2、生產廠家(manufacturer)

3、疫苗信息(vaccine)

4、接種信息(inject_info)

四、運行效果

1、設計背景

2、小組信息

3、主界面

4、新增操作

5、刪除操作

6、查詢操作

​7、修改操作


一、需求分析

1、設計背景

2019年年底,新冠肺炎開始爆發,對全國人民的生活和工作造成了嚴重的影響。但憑借著國家強盛的實力,新冠疫苗也很快的被技術人員研發出來,人們通過接種新冠疫苗來抵御新冠病毒的危害。本次通過接種新冠疫苗的這個數據統計,來設計“疫苗接種數據庫”,存儲人們接種疫苗的相關信息,並實現“增刪改查”等基本操作以及其他的拓展功能。

2、設計目的

國內新冠疫苗人員接種後,如果不通過數據統計到數據庫,數據量之大,數據查詢,數據核實,數據更改等工作會非常不方便,通過編程語言,設計疫苗接種數據庫,來存儲接種疫苗相關數據,能使得工作人員和接種人員的工作量大大減少,從而減少工作負擔,節省時間,減少更多的財力損失,實現更好的數據管理,是一種非常高效、精確、快捷、方便的方式。

3、數據庫信息

本次數據庫設計一共四張表。分別為《接種人員(person)》、《生產廠家(manufacturer)》、《疫苗信息(vaccine)》、《接種信息(inject_info)》四張表。

  • 《接種人員》表的數據項:姓名,身份證號,生日,性別,家庭住址,聯系電話,不良反應。
  • 《生產廠家》表的數據項:廠家名稱,廠家編號,廠家地址,聯系人,聯系人電話。
  • 《疫苗信息》表的數據項:疫苗名稱,疫苗編號,疫苗品種,疫苗廠家編號,生產日期,過期時間。
  • 《接種信息》表的數據項:接種編號,接種疫苗編號,疫苗品種,接種劑次,接種人姓名,接種人身份證號,接種時間,接種單位。

4、主要階段

  • 確定選題:《課程設計-疫苗接種數據庫》。
  • 需求分析:《數據庫數據字典》,編程語言為: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)

字段名字段標題字段類型默認值字段備注idIDint 無IDname姓名varchar(32)無姓名cert_no身份證號varchar(32)無身份證號birthday生日datetime無生日gender性別vtinyint(1)無性別address家庭住址varchar(128)無家庭住址phone電話varchar(16)無電話adverse_effect不良反應varchar(64)無不良反應

2、生產廠家(manufacturer)

字段名字段標題字段類型默認值字段備注idIDint 無IDname廠家名稱varchar(255)無廠家名稱company_no廠家編號varchar(32)無廠家編號address廠家地址varchar(255)無廠家地址contact_person聯系人varchar(255)無聯系人contact_phone聯系人電話int無聯系人電話

3、疫苗信息(vaccine)

字段名字段標題字段類型默認值字段備注idIDint 無IDname疫苗名稱varchar(64)無疫苗名稱vaccine_no疫苗編號varchar(64)無疫苗編號vaccine_type疫苗品種varchar(32)無疫苗品種company_no疫苗廠家編號varchar(32)無疫苗廠家編號production_at生產日期datetime無生產日期expired_at過期時間datetime無過期時間

4、接種信息(inject_info)

字段名字段標題字段類型默認值字段備注idIDint 無IDinject_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、修改操作

結果:鄧陽華的家庭住址已經被修改。

菜鳥實戰,持續學習! 


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved