目标:搭建名片管理系统 框架结构
通过本项目的学习,学员可以了解项目开发的流程,掌握项目需求分析、设计与功能的代码实现。提高同学们独立分析需求与功能实现的能力。
项目知识点:变量、流程控制、函数、模块等python基础中常用的知识点。
使用python设计一个名片管理系统,能提供下列服务:
- 程序启动,显示名片管理系统欢迎界面,并显示功能菜单
- 用户用数字选择不同的功能
- 根据功能选择,执行不同的功能
- 用户名片需要记录用户的 姓名、电话、QQ、邮件
- 如果查询到指定的名片,用户可以选择 修改 或者 删除 名片
程序源码
card_list = []
def card():
print('新增名片')
name = input('姓名:')
phone = input('电话:')
qq = input('qq:')
email = input('邮箱:')
card_d = {'name': name, 'phone': phone,'qq': qq,'email': email}
card_list.append(card_d)
print('成功添加%s的名片' % card_d['name'])
def show():
print('显示全部')
if len(card_list) == 0:
print('没有任何名片记录')
return
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'],card_d['phone'],card_d['qq'],card_d['email']))
def search():
print('搜索名片')
find_name = input('请输入要搜索的姓名:')
for card_d in card_list:
if card_d['name'] == find_name:
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
print('%s\t\t%s\t\t%s\t\t%s' % (card_d['name'],card_d['phone'],card_d['qq'],card_d['email']))
deal_card(card_d)
break
else:
print('没有找%s的名片' % find_name)
def deal_card(find_d):
b = input('请选择要进行的操作:1.修改 2.删除 3.返回主菜单')
if b == '1':
find_d['name'] = input("姓名")
find_d['phone'] = input("电话")
find_d['qq'] = input("qq")
find_d['email'] = input("邮箱")
print('修改名片成功')
elif b == '2':
card_list.remove(find_d)
print('删除名片成功')
def paixu():
print("请输入排序的项目:\n1.根据电话号码排序\n2.根据qq排序\n3.根据邮箱排序")
b = input()
if b in ['1', '2', '3', ]:
if b == '1':
card_list.sort(key=lambda s: int(s["phone"][:]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
if b == '2':
card_list.sort(key=lambda s: int(s["qq"][:]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
if b == '3':
card_list.sort(key=lambda s: int(s["email"][:8]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
while True:
print("—"*10)
print("欢迎使用名片管理系统\n1.新增名片\n2.显示全部\n3.搜索名片\n4.排序系统\n0.退出系统")
a = input("请选择序号:")
if a in ["1", "2", "3","4"]:
if a == "1":
card()
elif a == "2":
show()
elif a == "3":
search()
elif a == "4":
paixu()
elif a == "0":
print("已退出")
break
else:
print("输入错误,请重新输入:")
1.1引言
传统的手工方式,数据容易丢失,在统计时易发生错误高,速度慢。而使用计算机可以提高工作速度以及数据的准确性。从而提高了管理效率。在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,名片管理系统以计算机为工具,通过对所需信息的管理,把管理员从繁琐的数据计算处理中解脱出来。为用户节省很多时间跟精力,提高用户的工作效率。
随着计算机的普及,越来越多的管理系统应运而生。同时,随着人们交往范围的不断扩大,我们需要同更多的人保持交流和联系,尤其是已经参加了工作的公司职员,除了熟悉的朋友,还有很多的客户,我们都要时不时的同他们保持联系,这时个人名片管理系统就可以派上用场了。
个人名片管理系统是用于辅助个人完成其名片有序管理的计算机软件系统,系统实施的目的旨在帮助用户完成其私人名片管理的数字化,以提供较手工方式下更高的效率和更低的出错率。
电子名片管理系统要实现的目标是:
将用户目前在处理名片管理工作时所采用的手工处理方式进行计算机化,从而与整个办公自动化系统的数字化趋势相协调,以求为用户提供更为专业和高效的个人管理服务。
1.2任务概述
本系统属于人员信息管理系统中名片管理模块,实现网络管理系统中关于名片管理的子功能。通过此软件,提高用软件工程分析问题、解决问题的能力,同时增强对数据库和python的使用能力。
目标:搭建名片管理系统 框架结构
准备文件,确定文件名,保证能够 在需要的位置 编写代码
编写 主运行循环,实现基本的 用户输入和判断
1.3数据描述
1.静态数据:
所谓静态数据,指在运行过程中主要作为参考的数据,它们在很长的一段时间内不会变化,一般不随运行而改变。
2.动态数据:
所谓动态数据.包括所有在运行中要发生变化的数据以及在运行中要输入、输出的数据。
3.系统流程图:
1.4功能需求
- 程序启动,显示名片管理系统欢迎界面,并显示功能菜单
- 用户用数字选择不同的功能
- 根据功能选择,执行不同的功能
- 用户名片需要记录用户的 姓名、电话、QQ、邮件
- 将用户输入的数据排序,可以对电话,QQ,邮件的大小排序
- 如果查询到指定的名片,用户可以选择 修改 或者 删除 名片
提示用户依次输入名片信息
将名片信息保存到一个字典
将字典添加到名片列表
提示名片添加完成
1.5性能需求
用户进入系统在终端输入0~4数字序号,如果输入其他字符会显示“输入错误,请重新输入”,输出会以字符型输出相关内容。在名片管理模块中,我们可以新建名片,可以修改名片,可以删除名片资料,对名片列表进行了显示,提高用户体验。
1.6运行需求
(1)、数据精确度
进行操作请求时,如:名片录入、名片删除、名片修改、名片查询时,应保证输入数据与数据库数据的相匹配性。而在满足用户请求时,系统应保证所响应数据的正确性和全而性。
(2)、时间性
为满足用户高效要求,数据的响应时间、更新处理时间、数据转换与传输时间、运行时间都应在可接受范围之内。
第二章概要设计
2.1总体设计
设计主函数和部分功能的子函数,包括运行时的主菜单。首先函数运行时会弹出一个主菜单,然后输入数字选择操作,如图2.1.1主菜单。
图2.1.1 主菜单
2.2数据类型定义
def card(): 新增名片函数
def show(): 显示全部名片函数
def search(): 搜索名片函数
def deal_card(find_d): 删除名片函数
def xiugai(c,d): 修改名片函数
def paixu(): 对名片进行排序
2.3接口设计
表2.3:函数列表
函数名 函数格式 //即函数首部 函数功能
card def card(): 新增名片
show def show(): 显示全部名片
search def search(): 搜索名片
deal_card def deal_card(find_d): 删除名片
xiugai def xiugai(c,d): 修改名片
paixu def paixu(): 名片排序
2.4运行界面设计
以“—”为分割线,运行页面以简便友好的初衷设计,让用户可以轻松使用。
代码实现:
print("—"*10)
print("欢迎使用名片管理系统\n1.新增名片\n2.显示全部\n3.搜索名片\n4.排序系统\n0.退出系统")
a = input("请选择序号:")
if a in ["1", "2", "3","4"]:
if a == "1":
card()
elif a == "2":
show()
elif a == "3":
search()
elif a == "4":
paixu()
elif a == "0":
print("已退出")
break
else:
print("输入错误,请重新输入:")
第三章详细设计
3.1添加模块设计
使用 字典 记录 每一张名片 的详细信息
使用 列表 统一记录保存所有的 名片字典
根据步骤实现代码:
def card():
print('新增名片')
name = input('姓名:')
phone = input('电话:')
qq = input('qq:')
email = input('邮箱:')
card_d = {'name': name, 'phone': phone,'qq': qq,'email': email}
card_list.append(card_d)
print('成功添加%s的名片' % card_d['name'])
3.2显示全部名片模块设计
首先提示进入显示所有名片模块,然后将card_list中的信息循环输出,如果链表为空,则提示没有任何名片录入。
代码实现:
def show():
print('显示全部')
if len(card_list) == 0:
print('没有任何名片记录')
return
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'],card_d['phone'],card_d['qq'],card_d['email']))
3.3查询模块设计
提示用户要搜索的姓名,根据用户输入的姓名遍历列表,搜索到指定的名片后,再执行后续的操作。
代码实现
def search():
print('搜索名片')
find_name = input('请输入要搜索的姓名:')
for card_d in card_list:
if card_d['name'] == find_name:
print('姓名\t电话\tQQ\t邮箱')
print('%s\t%s\t%s\t%s' % (card_d['name'],card_d['phone'],card_d['qq'],card_d['email']))
deal_card(card_d)
break
else:
print('没有找%s的名片' % find_name)
3.4删除和修改名片模块设计
3.4.1删除模块
查询成功后删除名片,由于找到的字典记录已经在列表中保存,要删除名片记录,只需要把列表中对应的字典删除即可。
代码实现:
elif b == '2':
card_list.remove(find_d)
print('删除名片成功')
3.4.2修改模块
由于找到的字典记录已经在列表中保存要修改名片记录,只需要把列表中对应的字典中每一个键值对的数据修改即可。
代码实现:
if b == '1':
find_d['name'] = xiugai(find_d['name'], '姓名:')
find_d['phone'] = xiugai(find_d['phone'], '电话:')
find_d['qq'] = xiugai(find_d['qq'], 'QQ:')
find_d['email'] = xiugai(find_d['email'], '邮箱:')
print('修改名片成功')
3.5排序模块
根据链表card_list,只要使用sort快排函数即可完成排序,card_list.sort(key=lambda s: int(s"phone"))。首先设b来获取需要排序的项目,实现对电话号,qq,邮箱的排序功能。
代码实现:
print("请输入排序的项目:\n1.根据电话号码排序\n2.根据qq排序\n3.根据邮箱排序")
b = input()
if b in ['1', '2', '3', ]:
if b == '1':
card_list.sort(key=lambda s: int(s["phone"][:]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
if b == '2':
card_list.sort(key=lambda s: int(s["qq"][:]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
if b == '3':
card_list.sort(key=lambda s: int(s["email"][:8]))
print('姓名\t\t电话\t\t\t\tQQ\t\t\t\t邮箱')
for card_d in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_d['name'], card_d['phone'], card_d['qq'], card_d['email']))
第四章测试分析
4.1测试程序执行情况
4.2出现的问题和解决的方法
修改完之后,修改的程序无法运行,认真检查之后发现代码中有一个变量打错了,导致整个子函数无法运行,修改之后,正常运行。在测试中发现在主页面如果输入非0~3字符会报错,添加else语句进行提示就解决了这个问题。
while True:
print("欢迎使用名片管理系统\n1.新增名片\n2.显示全部\n3.搜索名片\n0.退出系统")
if a in ["1", "2", "3","4"]:
if a == "1":
card()
elif a == "2":
show()
elif a == "3":
search()
elif a == "4":
paixu()
elif a == "0":
print("已退出")
break
else:
print("输入错误,请重新输入:")
break
else:
print("输入错误,请重新输入:")
第五章实训总结
一周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习,相互监督。我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。我这次设计的科目是名片管理系统。
通过这次设计,我在多方面都有所提高。
很多程序在结构上是独立的,但是本此设计的程序功能不是零散的,它有一个连接是的程序是一个整体对以后的学习充满了信心和期待通过这次的课程设计,更是让我深刻认识到自己在学习中的不足,同时也找到了克服这些不足的方法,这也是一笔很大的资源。在以后的时间中,我们应该利用更多的时间去上机实验,加强自学的能力,多编写程序,相信不久后我们的编程能力都会有很大的提高能设计出更多的更有创新的作品。