博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原创:Python编写通讯录,支持模糊查询,利用数据库存储
阅读量:4958 次
发布时间:2019-06-12

本文共 5079 字,大约阅读时间需要 16 分钟。

1.要求

       数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。

2.实现功能

       可通过输入指令进行操作。

(1)首先输入“add”,可以对通讯录进行添加联系人信息。

sql1 = 'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'

sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)
conn.execute(sql1)
conn.commit()#提交,否则无法保存

(2)输入“delete”,可以删除指定的联系人信息。

输入姓名删除:

cursor = c.execute("SELECT name from TA where name = '%s';"%i)

输入电话号码删除:

cursor = c.execute("SELECT name from TA where telenumber= '%s';" % i)

(3)输入“search”,可以输入联系人或者电话号码,查询联系人信息,这里实现了模糊查询以及精确查询。

输入姓名查询:

sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i + "%'"

cursor = c.execute(sql1)

输入电话号码查询:

sql1="SELECT id,name,age, address, telenumber from TA where name like '%"+i+"%'"

cursor = c.execute(sql1)

(4)输入“searchall”,查询全部联系人信息。

cursor = c.execute("SELECT id, name, age, address, telenumber  from TA")

 

3.数据库sqlite3

       Python自带一个轻量级的关系型数据库sqlite。这一数据库使用SQL语言。sqlite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。sqlLite还在其它领域有广泛的应用,比如HTML5和移动端。Python标准库中的sqlite3提供该数据库的接口。因此此次使用了sqlite3数据库存储通讯录的联系人信息。

源码:

import sqlite3import re#打开本地数据库用于存储用户信息conn = sqlite3.connect('mysql_telephone_book.db')c = conn.cursor()#在该数据库下创建表,创建表的这段代码在第一次执行后需要注释掉,否则再次执行程序会一直提示:该表已存在'''c.execute("CREATE TABLE TA       (ID INT PRIMARY KEY     NOT NULL,       NAME           TEXT    NOT NULL,       AGE            INT     NOT NULL,       ADDRESS        CHAR(50),       TELENUMBER         TEXT);")'''conn.commit()#提交当前的事务#增加用户信息def insert():    global conn    c = conn.cursor()    ID=int(input("请输入id号:"))    name=input("请输入姓名:")    age=int(input("请输入年龄:"))    address=input("请输入地址:")    telenumber=input("请输入电话号码:")    sql1 = 'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'    sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)    conn.execute(sql1)    conn.commit()#提交,否则无法保存    print("提交成功!!")#删除用户信息def delete():    global conn    c=conn.cursor()    i = input("请输入所要删除的联系人姓名或电话号码:")    if len(i) < 11:        cursor = c.execute("SELECT name from TA where name = '%s';"%i)        for row in cursor:            if i == row[0]:                c.execute("DELETE from TA where name ='%s';"%i)                conn.commit()                print("成功删除联系人信息!!")                break        else:            print("该联系人不存在!!")    else :        cursor = c.execute("SELECT name from TA where telenumber= '%s';" % i)        for row in cursor:            if i == row[0]:                c.execute("DELETE from TA where telenumber ='%s';" % i)                conn.commit()                print("成功删除联系人信息!!")                break        else:            print("该电话号码错误!!")#查询用户信息def search():    global conn    c = conn.cursor()    i = input("请输入所要查询的联系人姓名或电话号码:")    if i.isnumeric():        sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i + "%'"        cursor = c.execute(sql1)        res=cursor.fetchall()        if len(res)!=0:            for row in res:                print("id:{0}".format(row[0]))                print("姓名:{0}".format(row[1]))                print("年龄:{0}".format(row[2]))                print("地址:{0}".format(row[3]))                print("电话号码:{0}".format(row[4]))        else:            print("无此电话号码!!")    else:        sql1="SELECT id,name,age, address, telenumber from TA where name like '%"+i+"%'"        cursor = c.execute(sql1)        res=cursor.fetchall()        if len(res) == 0:            print("该联系人不存在!!")        else:            for row in res:                print("id:{0}".format(row[0]))                print("姓名:{0}".format(row[1]))                print("年龄:{0}".format(row[2]))                print("地址:{0}".format(row[3]))                print("电话号码:{0}".format(row[4]))#显示所有用户信息def showall():    global conn    c = conn.cursor()    cursor = c.execute("SELECT id, name, age, address, telenumber  from TA")    for row in cursor:        print("id:{0}".format(row[0]))        print("姓名:{0}".format(row[1]))        print("年龄:{0}".format(row[2]))        print("地址:{0}".format(row[3]))        print("电话号码:{0}".format(row[4]))print("指令如下:\n1.输入\"add\"为通讯录添加联系人信息\n2.输入\"delete\"删除通讯录里的指定联系人信息 \n3.输入\"searchall\"查询通讯录里的所有用户 \n4.输入\"search\"根据姓名或手机号码查找信息 ")while 1:    temp = input("请输入指令:")    if temp == "add":        insert()        print("添加成功!")        temp1=input("是否继续操作通讯录?(y or n)")        if temp1=="n":            print("成功退出!!")            break        else:            continue    elif temp=="delete":        delete()        temp1 = input("是否继续操作通讯录?(y or n)")        if temp1 == "n":            print("成功退出!!")            break        else:            continue    elif temp=="searchall":        showall()        temp1 = input("是否想继续操作通讯录?(y or n)")        if temp1 == "n":            print("成功退出!!")            break        else:            continue    elif temp=="search":        search()        temp1 = input("您是否想继续操作通讯录?(y or n)")        if temp1 == "n":            print("成功退出!!")            break        else:            continue    else:        print("请输入正确指令!!")conn.close()#关闭数据库

 

 

转载于:https://www.cnblogs.com/momoli/p/11202060.html

你可能感兴趣的文章
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
关于使用“状态模式”做工作流概要。
查看>>
谈谈:程序集加载和反射
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>
【知识强化】第二章 线性表 2.2 线性表的顺序表示
查看>>
00_前情回顾
查看>>
fortran90简明教程
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
ubuntu12.04 串口登录系统配置
查看>>
poj3061
查看>>
linux--多进程进行文件拷贝
查看>>
笔记:git基本操作
查看>>