main.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. """
  2. -- 创建名为address的数据库
  3. create database address default charset utf8;
  4. -- 切换到address数据库
  5. use address;
  6. -- 创建联系人表tb_contacter
  7. create table tb_contacter
  8. (
  9. conid int auto_increment comment '编号',
  10. conname varchar(31) not null comment '姓名',
  11. contel varchar(15) default '' comment '电话',
  12. conemail varchar(255) default'' comment '邮箱',
  13. primary key (conid)
  14. );
  15. """
  16. import pymysql
  17. INSERT_CONTACTER = """
  18. insert into tb_contacter (conname, contel, conemail)
  19. values (%s, %s, %s)
  20. """
  21. DELETE_CONTACTER = """
  22. delete from tb_contacter where conid=%s
  23. """
  24. UPDATE_CONTACTER = """
  25. update tb_contacter set conname=%s, contel=%s, conemail=%s
  26. where conid=%s
  27. """
  28. SELECT_CONTACTERS = """
  29. select conid as id, conname as name, contel as tel, conemail as email
  30. from tb_contacter limit %s offset %s
  31. """
  32. SELECT_CONTACTERS_BY_NAME = """
  33. select conid as id, conname as name, contel as tel, conemail as email
  34. from tb_contacter where conname like %s
  35. """
  36. COUNT_CONTACTERS = """
  37. select count(conid) as total from tb_contacter
  38. """
  39. class Contacter(object):
  40. def __init__(self, id, name, tel, email):
  41. self.id = id
  42. self.name = name
  43. self.tel = tel
  44. self.email = email
  45. def input_contacter_info():
  46. name = input('姓名: ')
  47. tel = input('手机: ')
  48. email = input('邮箱: ')
  49. return name, tel, email
  50. def add_new_contacter(con):
  51. name, tel, email = input_contacter_info()
  52. try:
  53. with con.cursor() as cursor:
  54. if cursor.execute(INSERT_CONTACTER,
  55. (name, tel, email)) == 1:
  56. print('添加联系人成功!')
  57. except pymysql.MySQLError as err:
  58. print(err)
  59. print('添加联系人失败!')
  60. def delete_contacter(con, contacter):
  61. try:
  62. with con.cursor() as cursor:
  63. if cursor.execute(DELETE_CONTACTER, (contacter.id, )) == 1:
  64. print('联系人已经删除!')
  65. except pymysql.MySQLError as err:
  66. print(err)
  67. print('删除联系人失败!')
  68. def edit_contacter_info(con, contacter):
  69. name, tel, email = input_contacter_info()
  70. contacter.name = name or contacter.name
  71. contacter.tel = tel or contacter.tel
  72. contacter.email = email or contacter.email
  73. try:
  74. with con.cursor() as cursor:
  75. if cursor.execute(UPDATE_CONTACTER,
  76. (contacter.name, contacter.tel,
  77. contacter.email, contacter.id)) == 1:
  78. print('联系人信息已经更新!')
  79. except pymysql.MySQLError as err:
  80. print(err)
  81. print('更新联系人信息失败!')
  82. def show_contacter_detail(con, contacter):
  83. print('姓名:', contacter.name)
  84. print('手机号:', contacter.tel)
  85. print('邮箱:', contacter.email)
  86. choice = input('是否编辑联系人信息?(yes|no)')
  87. if choice == 'yes':
  88. edit_contacter_info(con, contacter)
  89. else:
  90. choice = input('是否删除联系人信息?(yes|no)')
  91. if choice == 'yes':
  92. delete_contacter(con, contacter)
  93. def show_search_result(con, cursor):
  94. contacters_list = []
  95. for index, row in enumerate(cursor.fetchall()):
  96. contacter = Contacter(**row)
  97. contacters_list.append(contacter)
  98. print('[%d]: %s' % (index, contacter.name))
  99. if len(contacters_list) > 0:
  100. choice = input('是否查看联系人详情?(yes|no)')
  101. if choice.lower() == 'yes':
  102. index = int(input('请输入编号: '))
  103. if 0 <= index < cursor.rowcount:
  104. show_contacter_detail(con, contacters_list[index])
  105. def find_all_contacters(con):
  106. page, size = 1, 5
  107. try:
  108. with con.cursor() as cursor:
  109. cursor.execute(COUNT_CONTACTERS)
  110. total = cursor.fetchone()['total']
  111. while True:
  112. cursor.execute(SELECT_CONTACTERS,
  113. (size, (page - 1) * size))
  114. show_search_result(con, cursor)
  115. if page * size < total:
  116. choice = input('继续查看下一页?(yes|no)')
  117. if choice.lower() == 'yes':
  118. page += 1
  119. else:
  120. break
  121. else:
  122. print('没有下一页记录!')
  123. break
  124. except pymysql.MySQLError as err:
  125. print(err)
  126. def find_contacters_by_name(con):
  127. name = input('联系人姓名: ')
  128. try:
  129. with con.cursor() as cursor:
  130. cursor.execute(SELECT_CONTACTERS_BY_NAME,
  131. ('%' + name + '%', ))
  132. show_search_result(con, cursor)
  133. except pymysql.MySQLError as err:
  134. print(err)
  135. def find_contacters(con):
  136. while True:
  137. print('1. 查看所有联系人')
  138. print('2. 搜索联系人')
  139. print('3. 退出查找')
  140. choice = int(input('请输入: '))
  141. if choice == 1:
  142. find_all_contacters(con)
  143. elif choice == 2:
  144. find_contacters_by_name(con)
  145. elif choice == 3:
  146. break
  147. def main():
  148. con = pymysql.connect(host='120.77.222.217', port=3306,
  149. user='root', passwd='123456',
  150. db='address', charset='utf8',
  151. autocommit=True,
  152. cursorclass=pymysql.cursors.DictCursor)
  153. while True:
  154. print('=====通讯录=====')
  155. print('1. 新建联系人')
  156. print('2. 查找联系人')
  157. print('3. 退出系统')
  158. print('===============')
  159. choice = int(input('请选择: '))
  160. if choice == 1:
  161. add_new_contacter(con)
  162. elif choice == 2:
  163. find_contacters(con)
  164. elif choice == 3:
  165. con.close()
  166. print('谢谢使用, 再见!')
  167. break
  168. if __name__ == '__main__':
  169. main()