名片管理系统课程设计.docx
《名片管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《名片管理系统课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
名片管理系统课程设计
目录
一、设计课题名称及要求……………………………………1
二、需求分析…………………………………………………2
三、软件配置…………………………………………………3
四、数据库分析………………………………………………3
五、设计思路…………………………………………………5
六、Delphi界面设计…………………………………………6
七、代码编写与实现…………………………………………9
八、系统演示…………………………………………………16
九、遇到问题及解决方法……………………………………24
十、收获与体会………………………………………………26
十一、参考文献………………………………………………27
一、设计课题名称及要求
1、设计课题
名片管理系统
2、设计要求
(1)要求对名片系统进行分类管理,对表中个人基本情况、银行开户情况和税号、联系途径、家庭基本情况、个人业绩及简历、业务现状进行系统性的分析、设计,并形成系统设计说明书;
(2)设计语言
基于ObjectPascal语言的Delphi语言
(3)系统功能要求
A、提供便捷、美观及丰富的界面以便能录入各类数据。
B、动态查询各类信息(按工司的地址、电话、银行的帐号,家庭住址等进行查询)。
C、能用图形、报表和表格三种形式对社会关系网中的人员的各种情况进行分析和统计。
D、能打印各类统计信息。
E、应用程序采用多文挡界面的风格。
F、尽量用菜单。
G、界面的风格要多样化,但必须满足用户的要求。
H、打印源程序、主要界面和报表。
二、需求分析
1、需求背景
随着社会发展的日异月新,商业来往日益广泛,人们之间的交往也日益频繁,于是人们手中便出现了繁多的名片、通讯片等记录一些客户信息等的联系工具,这些东西虽然能够保存一些基本信息,但是占得空间比较大,积累的名片多了,使用起来很麻烦,也不方便管理,同时也不方便管理,很容易丢失,而如果建立自己的电子文档文档对名片进行管理,虽然能克服上面所讲的缺点,但查询效率低下,在广大客户中难以普及,所以能够有一个既可以存储信息,又能够进行更新、查询等功能,必要时还能够进行统计分析,以及打印的管理系统就显得很有必要。
所以我就借助这次课程设计进行名片管理系统的设计开发,同时也可以方便自己以后对名片的管理维护。
2、需求说明
所要设计开发的该软件应该能够满足实际的需求,通过分析调查分析如下
(1)个人能够对自己的纸质名片进行信息输入的功能,以便日后能够查询维护管理;
(2)当需要快速查找某个联系人时,能够快速的进行查询本条名片的相关个人信息及其他记录;
(3)同时要能够进行对系统的所包含的记录进行删除、添加、修改等;
(4)并能够满足用户对所包含的记录进行纸质名片的打印、及预览;
(5)若需要,则还要能够对其进行统计分析统计,如性别人数统计、年龄统计、所包含名片的客户的职务统计以及所属公司等的统计
3、分析需求
该名片管理系统适用于个人名片管理系统,个人对自己保存的客户的名片的管理与维护。
其名片管理系统包括以下几个内容:
·客户信息添加、修改、查询、删除
增加客户信息→提交添加信息
修改客户信息→确定修改信息
查询客户详细信息→选择查询条件进行查询
删除某条客户信息→选择需要先删除的信息→确认删除
·信息统计分析
客户性别统计分析→图形表示
客户年龄统计分析→图形表示
客户职务统计分析→图形表示
客户公司信息统计分析→图形表示
客户家庭情况统计分析→图形表示
·名片打印
所选名片或全部名片打印预览→打印
三、软件配置
软件配置主要包括数据库的选择和操作界面设计的选择。
我所设计的名片管理系统的软件要求,由于只是针对个人进行名片管理与维护,所以要求不是很高,所以我选择了方便的SQLServer2000数据库;由于要设计的系统使人们能够简单方便的接受,设计要人性化,所以选择了Delphi7进行设计界面与整个系统。
四、数据库分析
对名片管理系统的分析,首先建立数据库,最根本通过在UML系统模型上建立所需要涉及的表格及相互关系,由于系统较简单,所以建立的表也比较少总共涉及三个表:
用户表:
包括用户号、用户名、用户密码,其中用户号设为主键,用户号、用户名、密码都设为非空;
员工表:
这是最主要的表,包括所有信息:
员工号、姓名、性别、年龄、职务、电话、家庭住址、银行账号、税号、所在公司以及个人简历等基本的信息,其中将员工号设为主键,姓名非空;
公司表:
这个表所涉及公司的信息,包括公司号、公司名、公司地址、公司网址、主要经营业绩等信息,将公司号设为主键,公司名非空
通过对上述三个表进行分析比较可以得出该系统数据库的E-R图:
五、设计思想
名片管理系统应该能够限制登录的权限,只有合法用户才能够通过登陆界面进行名片的管理与维护,通过对名片管理系统的分析理解现将我的设计思路画如下:
六、Delphi界面设计
完成了上面数据库的设计分析,以及设计该名片管理系统的思路后,从而建立起了能够保障系统顺利、正确运行的后台。
现在就需要进行名片管理系统的界面设计
a)系统开始界面
要进行名片管理,首先必须进入系统的引导界面,这个界面设计比较简单,只是起到一个引导进入的界面,设计界面如下:
2、用户登陆界面
如上图所示,是对系统登录权限的管理,只有当用户名跟密码正确时才允许进入主界面进行管理,否则无法访问该系统。
3、主界面设计
主界面我采用了下拉菜单进行管理和访问,如上图,可以进行对客户进行默认查询和删除某条记录等操作,界面设计如上。
4、添加、修改、查询界面设计
对客户信息进行添加、修改、查询的界面设计如下三图所示,基本框架都一样
所用到的控件也差不多,通过跟数据库连接进行管理:
修改界面
查询界面
5、报表界面设计
通过Delphi的quickreport多种控件的应用,从而实现报表功能,从而满足打印预览、打印等功能,设计如下。
七、代码编写与实现
程序代码是程序的核心所在,是名片管理系统开发的灵魂。
这部分也是花费我时间最多的的部分。
现将实现的功能的代码程序实现一一列出。
a)系统开始的代码实现
名片管理系统启动时,首先出现的是系统的进入系统界面,单击界面的“进入”按钮,就可进入登陆界面。
其下面的代码如下:
procedureTForm1.Button1Click(Sender:
TObject);
begin
form2.show;
end;
在进入系统界面设计中,我也添加了当前日期时间的显示,日期时间显示的代码如下:
procedureTForm1.Timer1Timer(Sender:
TObject);
begin
label2.Caption:
=datetimetostr(now);
end;
其实这个功能实现也很简单,只是用到了datetime函数,从而方便快捷的实现功能。
b)用户登陆的代码实现
在进入用户登录界面后,程序从数据库中获取用户名和密码,和输入的用户名的密码比较,如果正确,则身份验证通过,符合权限;否则,警告用户出错,重新输入。
确认按钮下面的代码实现如下:
procedureTForm2.Button1Click(Sender:
TObject);
varusername,password:
string;
begin
ifedit1.text=''then
messagebox(form2.Handle,‘请输入用户名','警告',mb_ok+mb_iconwarning)
else
ifedit2.text=''then
messagebox(form2.Handle,'请输入密码','警告',mb_ok+mb_iconwarning)
else
begin
username:
=edit1.text;
password:
=edit2.text;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select*from用户表where用户名=:
A1and密码=:
A2');
adoquery1.Parameters.ParamByName('A1').Value:
=trim(edit1.Text);
adoquery1.Parameters.ParamByName('A2').Value:
=trim(edit2.Text);
adoquery1.Open;
ifadoquery1.recordcount=1then
begin
form2.hide;
form4.show;
end
else
messagebox(form2.Handle,'请输入正确密码','警告',mb_ok+mb_iconwarning);
end;
end;
end;
若用户要退出登陆界面,则按“取消”按钮,代码如下:
procedureTForm2.Button2Click(Sender:
TObject);
begin
close;
end;
c)主界面代码
在主界面里,基本可以实现所有功能,通过下拉菜单,可以进入各个窗体的相关功能的实现,下拉菜单设计如下:
在默认查询功能是实现对整个表进行显示,其下代码实现如下:
procedureTForm4.Button1Click(Sender:
TObject);
begin
withadoquery1do
begin
close;
sql.clear;
sql.add('select*from员工表');
open;
end;
end;
在进行删除操作时,删除按钮下面的代码如下:
procedureTForm4.Button2Click(Sender:
TObject);
begin
ifMessageDlg('确认删除吗?
',mtconfirmation,mbOKCancel,0)=mrOKthen
adoquery1.Delete;
end;
各种情况的统计分析按钮只是起到一个转到作用,具体统计是在各个统计界面实现.
d)添加功能的代码实现
通过下拉菜单进入到添加窗体,在输入信息后,保存按键下面代码实现如下:
procedureTForm5.Button1Click(Sender:
TObject);
begin
ifflag=truethen
begin
ifedit1.text=''then
messagebox(form5.Handle,'请输入编号','编号',mb_ok+mb_iconwarning)
else
ifedit2.text=''then
messagebox(form5.Handle,'请输入姓名','姓名',mb_ok+mb_iconwarning)
end;
withADOQuery1do
begin
close;
withsqldo
begin
clear;
add('insertinto员工表values(:
p0,:
p1,:
p2,:
p3,:
p4,:
p5,:
p6,:
p7,:
p8,:
p9,:
p10)');
end;
parameters[0].Value:
=edit1.Text;
parameters[1].Value:
=edit2.Text;
parameters[2].Value:
=edit3.Text;
parameters[3].Value:
=edit4.Text;
parameters[4].Value:
=edit5.Text;
parameters[5].Value:
=edit6.Text;
parameters[6].Value:
=edit7.Text;
parameters[7].Value:
=edit8.Text;
parameters[8].Value:
=edit9.Text;
parameters[9].Value:
=edit10.Text;
parameters[10].Value:
=edit11.Text;
ExecSQL;
flag:
=false;
messagebox(form5.handle,'新名片添加成功','恭喜',mb_ok);
end;
end;
若要继续保存,则“继续添加”按钮下面的代码实现如下:
procedureTForm5.Button2Click(Sender:
TObject);
begin
flag:
=true;//点击添加按妞时是程序处于INSERT状态
edit1.Text:
='';
edit2.Text:
='';
edit3.Text:
='';
edit4.Text:
='';
edit5.Text:
='';
edit6.Text:
='';
edit8.Text:
='';
edit9.Text:
='';
edit10.Text:
='';
edit11.Text:
='';
end;
e)修改功能的代码实现
在进入修改界面后,首先选择要修改的某条记录,选择按钮下的代码实现如下:
procedureTForm6.Button4Click(Sender:
TObject);
begin
if(ComboBox1.Text='编号')then
begin
withadoquery1do
begin
close;
sql.clear;
sql.add('select*from员工表where序号=:
A1');
parameters.parambyname('A1').value:
=edit12.text;
open;
end;
end;
if(ComboBox1.Text='姓名')then
begin
withadoquery1do
begin
close;
sql.clear;
sql.add('select*from员工表where姓名=:
A2');
parameters.parambyname('A2').value:
=edit12.text;
open;
end;
end;
end;
在修改信息后,保存按钮下面的代码实现如下:
procedureTForm6.Button1Click(Sender:
TObject);
vari:
integer;
begin
i:
=dbgrid1.Fields[0].asinteger;
ifedit1.text=''then
showmessage('编号不能为空')
else
ifedit2.text=''then
showmessage('姓名不能为空')
else
withadoquery1do
begin
close;
sql.clear;
sql.Add('update员工表set序号='''+edit1.Text+''',姓名='''+edit2.Text+''',性别='''+edit3.Text+''',年龄='''+edit4.Text+''',职务='''+edit5.Text+''',联系方式='''+edit6.Text+''',家庭住址='''+edit7.Text+''',银行账号='''+edit8.Text+''',税号='''+edit9.Text+''',所在公司='''+edit10.Text+''',个人简历='''+edit11.Text+'''');
sql.Add('where序号='+inttostr(i)+'');
showmessage('信息已经成功修改!
');
end;
其中datasource需要编写代码,实现如下:
procedureTForm6.DataSource1DataChange(Sender:
TObject;Field:
TField);
begin
edit1.Text:
=adoquery1.fieldbyname('序号').AsString;
edit2.Text:
=adoquery1.fieldbyname('姓名').AsString;
edit3.Text:
=adoquery1.fieldbyname('性别').AsString;
edit4.Text:
=adoquery1.fieldbyname('年龄').AsString;
edit5.Text:
=adoquery1.fieldbyname('职务').AsString;
edit6.Text:
=adoquery1.fieldbyname('联系方式').AsString;
edit7.Text:
=adoquery1.fieldbyname('家庭住址').AsString;
edit8.Text:
=adoquery1.fieldbyname('银行账号').AsString;
edit9.Text:
=adoquery1.fieldbyname('税号').AsString;
edit10.Text:
=adoquery1.fieldbyname('所在公司').AsString;
edit11.text:
=adoquery1.fieldbyname('个人简历').asString;
end;
f)查询功能的代码实现
在进入查询功能的界面后,查询按钮下面的代码实现如下:
procedureTForm7.Button1Click(Sender:
TObject);
begin
if(ComboBox1.Text='编号')then
begin
withadoquery1do
begin
close;
sql.clear;
sql.add('select*from员工表where序号=:
A1');
parameters.parambyname('A1').value:
=edit1.text;
open;
end;
end;
if(ComboBox1.Text='姓名')then
begin
withadoquery1do
begin
close;
sql.clear;
sql.add('select*from员工表where姓名=:
A2');
parameters.parambyname('A2').value:
=edit1.text;
open;
end;
end;
end;
g)报表实现
为了实现名片的报表的输出打印预览及打印,我没有选择rave控件,而是应用Qreport组件来实现报表,报表可以输出全部名片信息或者单个名片,同时显示当前日期和时间。
h)统计功能的代码实现
在Datacontrols控件中,选择DBchart组件和ADOquery来选择对某个信息的统计分析,主要在adoquery的属性中,比如SQL设置为
select性别,count(*)
from员工表
groupby性别
就可以实现性别人数的统计分析。
八、系统演示
运行名片管理系统后,首先进入系统进入界面
点击进入后,便进入用户登陆界面:
若没有输入密码则提醒:
若输入密码错误,在点击确认后,出现警告:
只有密码正确后才允许进入主菜单界面,点击“默认查询”后,显示如下:
从表中可以发现员工表中的全部信息,在表的右边的导向按钮可以进行各种信息的统计,当点击“家庭情况统计”便出现下面的饼形统计图,统计出各个家庭的住址人数统计图
从图中可以看出,在整个名片管理中,家庭住在湖南的占到七分之三,占了将近一半,其他如图。
点击“公司情况统计”出现相同公司人数的统计情况饼形图:
同样也可以从图中看到公司情况的统计图。
当要查看年龄统计情况的分析时,只要点击“年龄统计”导向就可以,统计图如下面所示:
点击“性别统计”后,就出现下面的柱形性别人数统计,
若要进行对客户的职务进行统计,只要点击“职务情况统计”就会出现饼形的职务人数统计图:
进行完统计情况分析后,在主菜单里也可以从下拉菜单里选择添加,便进入对客户的添加,加入一部分信息后,点击保存,如图:
点击确定后,便可在主菜单中查看到,
若要继续添加,则按“续添加记录”按钮,便再次添加,不再详细介绍。
点击返回,便回到主菜单,从下拉菜单中选择修改,便可进行修改操作,首先要选择修改的某条记录,可按编号或姓名选择,如下操作:
从上图可以看到要修改的某条记录的全部信息,若要修改年龄,直接重新输入新的年龄就行,点击保存,便修改成功,可以通过默认查询或查询看到所修改后的信息。
当默认查询里面的记录较多时,不容易查询到需要的记录,可以从下拉菜单中选择查询,便可通过编号或姓名进行查询,若要查询刚才添加的信息,如图,选择编号8查询后,
从图中也可以看到刚才的年龄确实修改成功!
删除记录很简单,只要在主菜单中的默认查询的表格中选择要删除的某个记录,点击删除就OK了!
,如下:
点击OK后,要删除的编号为8的记录就删除了。
从而基本操作也结束了。
若用户要对名片进行打印的话,在下拉菜单中选择报表,直接就可以在报表中进行报表预览,打印等操作,如图:
在表眉上,有打印等操作,见下图:
通过报表可以打印整个名片的信息,报表中也显示出当前日期和时间。
若要退出该系统,直接在主菜单的下拉菜单中选择退出即可。
至此,我所设计的名片管理系统的主要演示基本完毕!
九、遇到问题及解决方法
在做这个名片管理系统的过程中,由于是第一次用deliphi做系统,在做之前根本就没接触过Delphi所以在做该名片管理系统之前,首先花费了我大部分时间去研究Delphi的使用。
现就在做本次课程设计过程中遇到的几个问题一一叙述如下:
1、首先通过对本次课程设计所提出对名片管理系统的要求,我就遇到了第一个问题:
数据库怎么建,应该建几个表,每个表的主外键关系及约束情况。
由于没做过数据库,根本不知道要怎么建表。
接到课题后,我与和我做相同系统的同学商量探讨后,最后根据数据库课本所介绍的方法,我建立了三个表,分别是:
员工表、用户表、公司表。
并建立了相对的约束,从而为后面的系统设计做好铺垫。
2、一个最基本最基础的问题是我不知道怎么从一个FORM进入另一个FORM,这么基础的问题我因为没看书,一直在纳闷。
直到我看了一个系统的实例我才豁然开朗,原来只是一个简单的SHOW就解决问题了,呵呵。
3、在设计基本功能时,我在编写修改功能的代码的时候出错了,搞了整整一个晚上,我就是发现不了为什么就是不能修改,而且老报错,真气人。
明明觉得我的代码根本没有问题,但就是出不来,真郁闷。
就在第二天中午,我在XX上查找出错原因,才突然发现出现了一个致命的错误,原来在做修改的时候,最后的结束语句不能用OPEN,只能用ExecSQ