我们首先要了解要干什么,咱要实现以下界面,进行增删改查,能够输入查询,并且将数据存储到数数据库中,和文件中。
主页面代码如下:
#调用增删改查函数
import 名片项目.dyhs as dy
#调用存储文件函数
import 名片项目.xmfz1 as dx
dx.read_f()
while True:
dy.xscd()
aa =input ("请选择希望执行的操作")
print("请选择您的操作[%s]"%aa)
#1,2,3针对名片的操作
if aa in ['1','2','3']:
if aa == '1':
dy.xzhs()
elif aa == '2':
sql = 'select * from xmb'
list =dy.selectData(sql)
print(list)
elif aa =='3':
dy.selectA()
elif aa == '0':
print('欢迎再次使用【名片管理系统】')
dx.write_f(dy.card_list)
break
实现增删改查函数:
import pymysql.cursors
card_list = [] #记录所有的名片字典
#显示菜单
def xscd():
print("*"*70)
print('1.创建名片')
print("2.显示全部")
print("3.显示所有名片")
print("0.退出")
print('*'*70)
def xzhs():#新增名片
#1.提示用户输入名片的详细信息
name_str = input('请输入姓名:')
phon_str = input('请输入电话:')
qq_str = int(input('请输入QQ:'))
email_str = input('请输入邮箱:')
#2.使用用户输入的信息建立一个名片字典
card_dict = {"name":name_str,
'phon':phon_str,
'qq':qq_str,
'email':email_str}
#3.将名片字典添加到列表中
# card_list.append(card_dict)
#将名片字典添加到数据库中
sql = "insert into xmb(name,phon,qq,email) values('%s','%s',%d,'%s')"%(name_str,phon_str,qq_str,email_str)
insertData(sql)
print('插入成功')
#4.提示用户添加成功
print('添加%s 的名片成功!'%name_str)
print("_"*70)
def show_all():
print("*" * 70)
#显示所有名片
#判断是否存在名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print('【当前没有任何的名片记录,请使用新增功能添加名片】')
#return 可以返回一个函数的执行结果
#下方的代码不会被执行
#如果 return 后面没有任何的内容,表示会返回到调用函数的位置
#并且不反悔任何的结果
return
#打印表头
for name in ['姓名','电话','QQ','邮箱']:
print(name,end='\t\t\t')
print("")
print('_'*70)
#遍历名片列表依次输出字典信息
for card_dict in card_list:
print('%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t'%(card_dict['name'],
card_dict['phon'],
card_dict['qq'],
card_dict['email']))
#显示所有
def sho():
print('-'*70)
list_dic = selectA()
for i in list_dic:
print("姓名:%s\t\t 电话:%s\t\t qq:%s\t\t 电话%s\t\t"
% (i['name'], i['phon'], i['qq'], i['email']))
#查询所有的
def selectA():
sql = "select name,phon ,qq,email from xmb order by id asc"
list =selectData(sql)
list_dic = tupeleToDic(list)
return list_dic
def tupeleToDic(list):
new_list = []
for tuple in list:
new_list.append({
"id":tuple[0],
"name": tuple[1],
"emil": tuple[2],
"tel": tuple[3],
})
return new_list
def ssmp():
"""查询名片"""
print("_" * 70)
#1.提示用户输入要搜索的姓名
find_name = input('请输入要搜索的姓名:')
#2.遍历列表。查询要搜索的姓名,如果没有找到,需要提示用户
for card_dict in card_list:
if card_dict['name'] == find_name:
print('姓名\t\t电话\t\tQQ\t\t邮箱')
print("_" * 70)
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_dict['name'],
card_dict['phon'],
card_dict['qq'],
card_dict['emall']))
#删除修改
deal_card(card_dict)
break
else:
print('抱歉没有找到 %s '%find_name)
#封装一个函数专门修改和操作
def deal_card(find_dict): #指定一个形参,表示已经找到的字典
"""处理查找到的名片
:param find_dict: 查找到的名片
"""
print(find_dict)
a_str = input('请选择要执行的操作 '
'【1】.修改 【2】.删除 0.返回上级:')
if a_str == '1':
#把传递函数的字典中每个键值对的值进行替换
find_dict['name'] = input_card_info(find_dict['name'],'姓名:')
find_dict['phon'] = input_card_info(find_dict['phon'],'电话:')
find_dict['qq'] = input_card_info(find_dict['qq'],'QQ:')
find_dict['emall'] = input_card_info(find_dict['emall'],'邮箱:')
print('修改名片')
elif a_str =='2':
card_list.remove(find_dict)
print('删除成功')
def input_card_info(dict_value,tip_message):
"""输入名片信息
:param dict_value: 字典中原有的值
:param tip_message: 输入的提示文字
:return:如果用户输入了内容,就返回内容,否则返回字典中原有的值
"""
#1.提示用户输入内容
#2.针对用户的输入进行判断,如果用户输入了内容,直接返回结果
#3.如果用户没有输入内容,返回‘字典中原有的值
result_str = input(tip_message)
if len(result_str)>0:
return result_str
else:
return dict_value
#插入数据
def insertData(sql):
conn = getConnect()#获取连接
cursor = conn.cursor() #创建游标(新建查询会话),通过游标执行sql语句
cursor.execute(sql)#(5)将sql语句放入游标中,准备执行
conn.commit()#提交,真正的执行
closeConnect(cursor,conn)#关闭
count = cursor.rowcount
if count>0:
return True
else:
return False
#链接数据库
def getConnect():
conn = pymysql.connect(host='localhost',
user='root',
password='123',
database='xmmysql',
charset='utf8')
return conn
#关闭连接
def closeConnect(cursor,conn):
if cursor:
cursor.close()
if conn:
conn.close()
#查询数据
def selectData(sql):
conn = getConnect()#获取链接
cursor = conn.cursor()#创建游标(新建查询会话),通过游标执行sql语句
cursor.execute(sql)#将sql语句放入游标中,准备执行
closeConnect(cursor,conn)#关闭
return cursor.fetchall() #结果是一个元组,元组中元素又是元组
存储函数:
import 名片项目.dyhs as dy
#读文件
def read_f():
global card_list
try:
f = open('ccwj.txt',mode='r',encoding='utf8')
card_list = eval(f.read(card_list))
f.close()
except:
pass
#写文件
def write_f(a):
f = open('ccwj.txt','w',encoding='utf8')
f.write(str(a))
f.write('\t')