内容正文:
6.6实战案例-制作通讯录
程序设计基础Python
同步精品课堂
高教版
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
1. 掌握通讯录项目的“总体设计→数据定义→程序设计→调试”完整流程;
2. 理解SQLite3数据库在项目中的“连接-游标-执行-提交-关闭”逻辑;
3. 熟悉文件读写与数据库操作的结合方式。
教学重难点
二
重点:各功能模块的代码实现、项目的代码整合;
难点:数据库操作的调试、模块间的逻辑调用、文件与数据库的联动。
“如果要把这些数据存在电脑里,怎么实现‘结构化存储’?”
导入新课
三
“大家平时用什么存通讯录?如果让你用Python做一个自己的通讯录,需要哪些功能?”下面大家看下这个通讯录的展示。
新知讲授
四
一、案例描述
通讯录是一种常用的保存通讯信息数据的文件。通讯录中数据一般以二维表的形式呈现的。
姓名 单位 职务 手机号码 QQ
张小* 第一中学 主任 153*****161 4499*****6
李明* 第六中学 教师 177*****245 7132*****8
...... ...... ...... ...... ......
通讯录示例
新知讲授
四
一、案例描述
①总体设计
②数据定义
③程序设计
④程序调试
应用Python之SQLite3制作通讯录主要有以下操作步骤:
新知讲授
四
二、总体设计
通讯录数据库表设计
功能模块设计
应用Python之SQLite3制作通讯录主要实现以下功能:
①设计数据库:通讯录数据库文件为“tongxinlu.db”。
②设计联系人数据表:联系人数据表标识名为“lianxiren”。
联系人数据表结构
列名 数据类型 列名 数据类型
姓名 TEXT 手机号码 TEXT
单位 TEXT QQ TEXT
职务 TEXT
新知讲授
四
二、总体设计
录入模块:新建联系人。
编辑模块:删除联系人、更新联系人信息。
查询模块:查询联系人信息。
输出模块:导出联系人信息,将联系人信息保存到文本文件。
主控模块:功能模块菜单设计程序,根据需要调用功能模块完成操作功能。
基于Python-SQLite3制作通讯录程序应具有录入、编辑、查询和输出联系人四个功能模块和一个主控程序模块。功能模块以Python自定义函数形式呈现,主控模块以Python程序文件保存。
新知讲授
四
三、数据定义
数据定义功能为构建基于SQLite3的通讯录数据库文件和数据表。
01 import os
02 import sqlite3
03 txl=sqlite3.connect('tongxinlu.db')
04 tx=txl.cursor()
05 s='create table lianxiren\
(姓名 TEXT,单位 TEXT,职务 TEXT,手机号码 TEXT,QQ TEXT)'
06 tx.execute(s)
07 tx.close()
08 txl.close()
新知讲授
四
四、程序设计
录入模块实现数据表lianxiren新建联系人的功能。
01 #录入模块
02 def ins(cur):
03 name=input('请输入姓名:')
04 danwei=input('请输入单位:')
05 zhiwu=input('请输入职务:')
06 phone=input('请输入手机号码:')
07 qq=input('请输入QQ号:')
08 s='insert into lianxiren values("{n}","{d}","{z}","{p}",\
"{q}")'.format(n=name,d=danwei,z=zhiwu,p=phone,q=qq)
09 cur.execute(s)
新知讲授
四
四、程序设计
编辑模块实现数据表lianxiren删除、更新联系人的功能。
01 #删除模块
02 def dele(cur):
03 name=input('请输入要删除联系人的姓名:')
04 s='delete from lianxiren where 姓名="{n}"'.format(n=name)
05 cur.execute(s)
新知讲授
四
四、程序设计
编辑模块实现数据表lianxiren删除、更新联系人的功能。
01 #更新模块
02 def upd(cur):
03 name=input('请输入要更新联系人的姓名:')
04 x=input('请输入要更新的项目:')
05 y=input('请输入要更新的数据:')
06 s='update lianxiren set '+x+'="{xm}"'.format(xm=y)\
+'where 姓名="{n}"'.format(n=name)
07 cur.execute(s)
新知讲授
四
四、程序设计
编辑模块实现对数据表lianxiren的联系人信息进行查询的功能。
01 #查询模块
02 def query(cur):
03 name=input('请输入要查询联系人的姓名:')
04 s='select * from lianxiren where 姓名\
="{xm}"'.format(xm=name)
05 cur.execute(s)
06 a=cur.fetchone()
07 print(a)
新知讲授
四
四、程序设计
输出模块实现对数据表lianxiren的联系人信息输出到文本文件“lianxiren.txt”的功能。
01 #输出模块
02 def out(cur):
03 s='select * from lianxiren'
04 cur.execute(s)
05 a=cur.fetchall()
06 f=open('lianxiren.txt','w+',encoding='utf-8')
07 for row in a:
08 line = "\t".join(row) + "
"
09 f.write(line)
10 f.close()
新知讲授
四
四、程序设计
主控模块通过菜单选择实现对各功能模块的调用。
01 #主控模块
02 import os
03 import sqlite3
04 txl=sqlite3.connect('tongxinlu.db')
05 tx=txl.cursor()
06 while True:
07 print("===通讯录管理系统===")
08 print("======功能菜单======")
09 print("1--新增联系人
")
10 print("2--删除联系人
")
新知讲授
四
四、程序设计
主控模块通过菜单选择实现对各功能模块的调用。
11 print("3--更新联系人信息
")
12 print("4--查询联系人信息
")
13 print("5--导出联系人信息
")
14 print("6--退出系统
")
15 ch=input("请输入你的选择:")
16 c=int(ch)
17 if c==1:
18 ins(tx)
19 if c==2:
20 dele(tx)
新知讲授
四
四、程序设计
主控模块通过菜单选择实现对各功能模块的调用。
21 if c==3:
22 upd(tx)
23 if c==4:
24 query(tx)
25 if c==5:
26 out(tx)
27 if c==6:
28 break
29 txl.commit()
30 tx.close()
31 txl.close()
新知讲授
四
四、程序设计
主控模块通过菜单选择实现对各功能模块的调用(代码展示)。
师生互动
五
一:现在我们分组讨论2分钟——一个实用的通讯录,除了‘新增联系人’,还需要哪些功能?每组选一个代表分享,我们一起把功能列出来。”
二:本节课本上代码190页执行有错误,谁能找出,为什么出错?
file.writelines() 要求传入的必须是字符串或字符串组成的可迭代对象,直接传入元组会触发 TypeError: write() argument must be str, not tuple 错误。
随堂练习
1. 下列选项中,属于SQLite3连接数据库的语句是( )
A. sqlite3.open("test.db")
B. sqlite3.connect("test.db")
C. sqlite3.create("test.db")
D. sqlite3.link("test.db")
【答案】B
【解析】SQLite3中连接数据库的函数是 connect() ,参数为数据库文件名。
六
随堂练习
2. Python中打开文件并写入内容,正确的模式是( )
A. r
B. w
C. a
D. r+
【答案】B
【解析】 w 是“写入模式”,会覆盖文件原有内容; a 是“追加模式”, r 是“只读模式”。
六
随堂练习
3. 下列属于SQLite3“插入数据”的语句是( )
A. UPDATE table SET ...
B. DELETE FROM table WHERE ...
C. INSERT INTO table VALUES (...)
D. SELECT * FROM table
答案】C
【解析】 INSERT INTO 用于插入数据, UPDATE 用于更新, DELETE 用于删除, SELECT 用于查询。
六
随堂练习
4.Python中关闭SQLite3游标对象的方法是( )
A. cursor.end()
B. cursor.close()
C. cursor.stop()
D. cursor.quit()
【答案】B
【解析】游标对象的关闭方法是 close() ,数据库连接对象的关闭方法也是 close() 。
六
随堂练习
5.下列代码中,能获取SQLite3查询结果的一行数据的是( )
A. cursor.fetchall()
B. cursor.fetchone()
C. cursor.getone()
D. cursor.getall()
【答案】B
【解析】 fetchone() 获取一行结果, fetchall() 获取所有结果。
六
随堂练习
6. Python中打开文件时指定编码为UTF-8,正确的语句是( )
A. open("test.txt", "r", code="UTF-8")
B. open("test.txt", "r", encoding="UTF-8")
C. open("test.txt", "r", format="UTF-8")
D. open("test.txt", "r", charset="UTF-8")
【答案】B
【解析】 open() 函数中指定编码的参数是 encoding 。
六
随堂练习
7.下列属于SQLite3“更新数据”的语句是( )
A. INSERT INTO table VALUES (...)
B. UPDATE table SET 列名=值 WHERE 条件
C. SELECT * FROM table WHERE 条件
D. DELETE FROM table WHERE 条件
【答案】B
【解析】 UPDATE 语句用于更新表中已有的数据,需要指定“列名=值”和筛选条件。
六
随堂练习
8. Python中,要将数据库的修改保存,需要调用的方法是( )
A. connect.commit()
B. cursor.commit()
C. connect.save()
D. cursor.save()
【答案】A
【解析】数据库连接对象的 commit() 方法用于提交修改,确保数据写入数据库。
六
课堂小结
八
谢谢
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
$