1.2主要用户视图
用户 需求
数据库管理员 录入、操作数据
裁判 查询数据
运动员 查询数据
1.3 用户需求分析
1.针对数据库管理者,界面简洁明了,提供交互支持,可根据功能或自行编辑进行数据的操作。本系统提供快速查找所有表即数据的功能,提升用户体验。本系统支持更小存储格式.txt文件的自动化导入,完善了数据的收集处理流程。
2.针对裁判使用者界面,提供交互支持,可根据自己的裁判编号查询自己报名的所有信息;还可根据运动组别进行秩序册的自动生成。
3.针对运动员界面,用户可根据运动员号码,查看报名的所有信息
4.本系统为用户提供了数据库语句操作手册,可自行进行体验数据库语句操作。
2 概念结构设计
2.1 使用流程设计
1.各年级以班级为单位将报名数据收齐后交给数据库管理者进行操作。
2.体育部将各裁判的报名信息进行汇总交给数据库管理者进行操作。
3.数据库管理者将运动员、裁判信息分别放入各自的自动导入文件夹中实现数据的自动化导入。
3.初次报名信息录入后,进行报名信息检查,若发现错误或漏报信息由各班班长统计,交给数据库管理者进行操作。
4.确认信息无误后由体育组打印各项目的秩序册。
5.最终将运动会成绩进行统计交给数据库管理者进行操作。
逻辑结构设计
3.1关系模式
运动员(#运动员号码,运动员姓名,对应裁判编号,运动员组别)
裁判(#裁判编号,裁判姓名,裁判组别号)
4 物理结构设计
4.1 索引
索引结构如下所示:
cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
cur.execute("SELECT * from caipan")
cur.execute("SELECT * from yundongyuan")
cur.execute("SELECT * from yundongyuan WHERE zubie IS "+"'"+e5.get()+"'")
cur.execute("SELECT * from yundongyuan WHERE haoma IS "+e5.get())
4.2表结构
5.1数据库管理者
5.1.1数据库、数据表创建操作功能(主要完成人:柴宇)
输入:可直接点击实现默认任务或输入所需名
输出:创建成功、已删除
实现代码:
'''1.1 创建数据库'''
def create_database():
# 数据库初始化
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
'''3. 按表名创建表'''
def create_table(event=None):
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
cur = conn.cursor() # 创建游标,以便获得查询对象。
cur.execute('create table if not exists '+e.get()+' (id integer primary key ,number varchar(20) NOT NULL ,haoma varchar(20) NOT NULL) ') # execute执行sql语句,创建表
conn.commit() # COMMIT命令用于把事务所做的修改保存到数据库
print("已创建",e.get())
'''4.按表名删除表'''
def delete_table(even=None):
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
cur = conn.cursor() # 创建游标,以便获得查询对象。
cur.execute("drop table "+e2.get())
print("已删除",e2.get())
5.1.2实现快速查询功能(主要完成人:马荣皓)
操作方法:鼠标点击触发
输出:将所有表名存为一元组,数据存为列表输出
代码:
'''2. 查找表数据'''
def find(): # 查找库有那些表,和数据
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
cur = conn.cursor() # 创建游标,以便获得查询对象。
cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
Tables=cur.fetchall()
print("表名: ",Tables)
# 4.查询表中记录
cur.execute("SELECT * from caipan")
conn.commit
data = cur.fetchall()
print("裁判[编号,姓名,编号]: ",data)
cur.execute("SELECT * from yundongyuan")
conn.commit
data2 = cur.fetchall()
print("运动员[裁判编号,姓名,编号,组别]: ",data2)
5.1.3数据自动化导入运动员/裁判信息功能(主要完成人:马荣皓)
操作方法:鼠标点击触发
输出:“插入第i条数据:”,“数据写入完成!共写入i条数据”
代码:
'''自动导入运动员/裁判'''
def create_table_txt1():#运动员:裁判编号、姓名、编号、组别
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
cur = conn.cursor() # 创建游标,以便获得查询对象。
cur.execute('create table if not exists yundongyuan (id integer ,name varchar(20) NOT NULL ,haoma integer ,zubie varchar(20) NOT NULL) ') # execute执行sql语句,创建表
conn.commit() # COMMIT命令用于把事务所做的修改保存到数据库
i = 0
for file in filesy:
if file.split('.')[-1] == 'txt':
print(file.split('.')[0])
# 使用 with 语句来创建文件对象,对象会在with语句结束时自动关闭
with open('./yundongyuan/'+file,'r',encoding = 'UTF-8') as f:
next(f) # 返回文件下一行
for line in f:
a = list(line.split())
i += 1
print("插入第", i, "条数据:裁判编号:",a[0],",运动员姓名:",a[1],",运动员编号:",a[2],"所在组别:",a[3])
cur.execute('insert into yundongyuan values(?,?,?,?)',(a[0],a[1],a[2],a[3])) # ?占位符,即(i,line)
conn.commit()
cur.close() # 关闭游标
conn.close() # 关闭数据库连接
print('运动员数据写入完成!共写入',i,' 条数据')
def create_table_txt2():
conn = sqlite3.connect(path+'\运动会.db') # 如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。
cur = conn.cursor() # 创建游标,以便获得查询对象。
cur.execute('create table if not exists caipan (id integer ,name varchar(20) NOT NULL ,haoma integer ) ') # execute执行sql语句,创建表
conn.commit() # COMMIT命令用于把事务所做的修改保存到数据库
i = 0
for file in filesc:
if file.split('.')[-1] == 'txt':
print(file.split('.')[0])
# 使用 with 语句来创建文件对象,对象会在with语句结束时自动关闭
with open('./caipan/'+file,'r',encoding = 'UTF-8') as f:
next(f) # 返回文件下一行
for line in f:
a = list(line.split())
i += 1
print("插入第", i, "条数据:裁判编号:",a[0],",裁判姓名:",a[1],",裁判组别:",a[2])
cur.execute('insert into caipan values(?,?,?)',(a[0],a[1],a[2])) # ?占位符,即(i,line)
conn.commit()
cur.close() # 关闭游标
conn.close() # 关闭数据库连接
print('裁判数据写入完成!共写入',i,' 条数据')
5.1.4 python实现交互界面化设计(主要完成人:马荣皓)
用户界面:
代码:
top = tkinter.Tk() # 创建窗口对象的背景色
top.title("数据库报名管理系统")
CREATEDB = tkinter.Button(top, text ="创建运动会数据库", command = create_database)
CREATETB1 = tkinter.Button(top, text ="导入运动员txt数据表", command = create_table_txt1)
CREATETB2 = tkinter.B