2024年2月21日发(作者:)

《Windows应用开发》

综合实验报告

课题名称: 通讯录管理系统——系统功能实现模块

专业:

软件技术

班级: 103361

姓名: 杨雪 学号: 02

指导教师: 李莹 成绩:

完成日期: 2012 年 5 月 16 日

目录

1系统分析 .................................................................................................. 3

1.1需求分析 ........................................................................................ 3

1.2储存过程分析 ................................................................................ 3

2系统的实现.............................................................................................. 5

2.1登陆界面的实现 ............................................................................ 5

2.2主窗体的实现 ................................................................................ 6

2.3新增联系人实现 .......................................................................... 12

1系统分析

1.1需求分析

本系统将实现多用户对各自通讯录的管理功能,包括:添加联系人、修改联系人、删除联系人、查找联系人。为了体现多用户的特性,还必须包含一个用户管理子系统,作用是对用户的信息进行管理。具体功能模块如图1-1所示

通讯录管理系统

删用用添修查

除户户加改找

联管登联联联

系理 录 系系系

人 人 人

图1-1功能模块

1.2储存过程分析

查找联系人模块使用储存过程来搜索数据,查找联系人的储存过程如下

ALTER PROCEDURE [查找联系人]

(

@name varchar(50),

@phone varchar(50),

@user varchar(50)

)

AS

if len(@user)=0 return 1

if len(@name)=0 and len(@phone)=0

begin

select 姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]

return

end

if len(@name)<>0 and len(@phone)=0

begin

set @name='%'+@name+'%'

select姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]

where 姓名 like @name

return

end

if len(@name)=0 and len(@phone)<>0

begin

select姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]

where 联系电话 like @phone

return

end

if len(@name)=0 and len(@phone)<>0

begin

select姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]

where 联系电话 like @phone and 姓名 like @name

return

end

2系统的实现

2.1登陆界面的实现

登录窗体如图2-1

图2-1

处理流程图如图2-2示

等待用户输入

不合法

接受到用户输入 不匹配

验证数据合法

合法

验证身份

匹配

等待用户输入

2-2录窗体流程图

实现代码如下

private void btnOK_Click(object sender, EventArgs e)

{

try

{

if (() == "" || () == "")

{

("用户名不能为空,登录失败",

, );

return;

}

//验证用户

SqlConnection conn = new SqlConnection("server=.;database=通讯录管理系统;uid=sa;pwd=521125;");

StringBuilder sql = new StringBuilder();

Format("select count(*) from 用户where 用户名=杨雪 and 密码='01'", (), ());

SqlCommand cmd = new SqlCommand(ng(), conn);

();

int result = 32(eScalar());

();

if (result == 1)

{

//登陆成功

frmMain f = new frmMain();

= ();

();

();

}

else

{

("用户名错误!", "登录失败",

, );

return;

}

}

catch (Exception ee)

{

("发生错误!" + e, "登录失败",

, );

return;

}

}

2.2主窗体的实现

主窗体设计如图2-3

图2-3

主窗体处理流程图如图2-4示

分组数量

加载当前分组

的联系人信息

等待用户命令

添加命令 修改命令 删除命令 查找命令 视图命令

修加加删加

改载载除载

视添修联查

图加改系找

模人

联联联

系系系

人人人

体 体 体

加载联系人

分组信息

2.4窗体流程图

实现代码如下

public partial class frmMain : Form

{

private string strConn = "server=.;database=通讯录管理系统;uid=sa;pwd=521125;";

public frmMain()

{

InitializeComponent();

}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{

LoadList();

}

//主窗体加载事件

private void frmMain_Load(object sender, EventArgs e)

{

LoadGroup();

if ( > 0)

{

edNode = [0];

LoadList();

}

else

{

();

}

}

/加载分组信息到TreeView

private void LoadGroup()

{

try

{

();

SqlConnection conn = new SqlConnection(strConn);

SqlCommand cmd = new SqlCommand();

tion = conn;

dText = "select 组别 from 联系人 where 用户名='" + + "'";

();

SqlDataReader sdr = eReader();

while (())

{

(sdr[0].ToString());

}

();

();

}

catch

{ }

}

//加载当前分类的联系人信息

private void LoadList()

{

if ( == 0)

{

();

return;

}

if ( >= 0)

{

string strGroup = ;

try

{

();

("姓名", 100);

("工作单位", 150);

("联系电话", 100);

("电子邮箱", 150);

SqlConnection conn = new SqlConnection(strConn);

SqlCommand cmd = new SqlCommand();

tion = conn;

dText = "select 编号,姓名,工作单位 ,联系电话,电子邮箱 from 联系人 where 组别='" + strGroup + "'and 用户名='" +

+ "'";

();

SqlDataReader sdr = eReader();

int count = 0;

while (())

{

ListViewItem lvi = new ListViewItem();

= sdr["姓名"].ToString();

(sdr["工作单位"].ToString());

(sdr["联系电话"].ToString());

(sdr["电子邮箱?"].ToString());

= sdr["编号"];

ndex = 0;

(lvi);

count++;

}

="共计"+ng()+"个联系人";

();

();

}

catch

{ }

}

}

//详细信息在工具栏上的事件

private void 详细信息ToolStripMenuItem_Click(object sender, EventArgs

e)

{

=s;

}

//详细信息在菜单栏上的事件

private void 详细信息ToolStripMenuItem1_Click(object sender,

EventArgs e)

{

=s;

}

//添加方法在主窗体中的实现

private void Add()

{

frmAdd f=new frmAdd();

if(alog(this)==)

{

LoadGroup();

if(>0)

{

edNode=[0];

LoadList();

}

else

{

();

}

}

}

//编辑方法在主窗体的实现

private void Edit()

{

if(==1)

{

string id=edItems[0].ng();

frmEdit f=new frmEdit(id);

if(alog(this)==)

{

LoadGroup();

if(>0)

{

edNode=[0];

LoadList();

}

else

{

();

}

}

}

}

//删除方法在住窗体中的实现

private void Delete()

{

if(<1)

{

return;

}

if(("是否要删除选中的联系人","删除确认",,on)==)

{

string strWhere="";

foreach (ListViewItem lvi in edItems)

{

strWhere+=ng();

}

try

{

SqlConnection conn=new SqlConnection(strConn);

SqlCommand cmd=new SqlCommand();

tion=conn;

dText = "delete from 联系人where 姓名='" +

strWhere + "'";

();

eNonQuery();

();

LoadGroup();

if(>0)

{

edNode=[0];

LoadList();

}

else

{

();

}

}

catch

{ }

}

}

//搜索方法在主窗体中的实现

private void Search()

{

frmSearch f = new frmSearch();

if (alog() == )

{

LoadGroup();

if ( > 0)

{

edNode = [0];

LoadList();

}

else

{

();

}

}

}

}

2.3新增联系人实现

新增联系人设计如图2-5

图2-5

新增联系人窗体流程图如图2-6

获取配置信息

N

禁用添加联

联系人数量

系人功能

Y

N

禁用添加分分组数量

组功能

Y

加载分组信息

等待用户命令

添加命令

添加联系人

图2-6

实现代码如下

public partial class frmAdd : Form

{

private string strconn = "server=.;database=通讯录管理系统;pwd=521125";

private string strUserName= "";

private int groupCount = 0;

private int contentCount = 0;

private string txtFilePath = "";

public frmAdd()

{

InitializeComponent();

}

private void textBox2_TextChanged(object sender, EventArgs e)

{

}

private void frmAdd_Load(object sender, EventArgs e)

{

//获取用户名

strUserName = ((frmMain)()).;

try

{

SqlConnection conn = new SqlConnection(strconn);

SqlCommand cmd = new SqlCommand();

tion = conn;

//获取配置信息

dText = "selete * from 用户名where 用户名='" +

strUserName + "'";

();

SqlDataReader sdr = eReader();

if (())

{

groupCount = 32(sdr["组别数量最大值"]);

contentCount = 32(sdr["

联系人数量最大值"]);

}

();

//获取联系人数

dText = "select count(*) from联系人 where 用户名='" + strUserName + "'";

int count = 32(eScalar());

if (count >= contentCount)

{

("联系人的个数已经达到上限如需继续添加联系人,请联系管理员.", "提示", ,

g);

d = false;

}

();

}

catch { }

=通讯录管理系统.1;

//加载组别

LoadGroup();

}

protected void LoadGroup()

{

try

{

();

SqlConnection conn = new SqlConnection(strconn);

SqlCommand cmd = new SqlCommand();

tion = conn;

dText = "selete disinct 组别 from 联系人";

();

SqlDataReader sdr = eReader();

while (())

{

(sdr[0].ToString());

}

();

();

if (groupCount > 0 && == groupCount)

{

wnStyle =

wnList;

}

else

{

wnStyle = wn;

}

}

catch { }

}

private void pic_Click(object sender, EventArgs e)

{

if (alog() == )

{

= le(me);

txtFilePath = me;

}

}

private void btnOK_Click(object sender, EventArgs e)

{

#region 获取信息

//用户名

strUserName = ((frmMain)()).;

//姓名

string name;

if ( == "")

{

("联系人姓名不能为空", "添加失败",

, );

return;

}

else

{

name = ;

}

string group;

if (() == "")

{

group = "未分组";

}

else

{

group = ();

}

//电话

string phone = ();

//工作单位

string company = ();

//email

string email = ();

//照片

byte[] b = null;

if (txtFilePath != "")

{

try

{

FileStream fs = new FileStream(txtFilePath, ,

);

int len = 32();

b = new byte[len];

(b, 0, len);

();

}

catch

{

b = null;

}

}

#endregion 获取信息

#region 添加数据

try

{

SqlConnection conn = new SqlConnection(strconn);

SqlCommand cmd_maxid = new SqlCommand();

cmd_tion = conn;

//获取最大编号

cmd_dText = "selete isnull(max(编号),0)+1 from

联系人";

();

int maxid;

try

{

maxid = 32(cmd_eScalar());

}

catch

{

maxid = 1;

}

//insert

SqlCommand cmd_insert = new SqlCommand();

cmd_tion = conn;

cmd_dText = "insert into联系人(编号,用户名,组别,姓名,工作单位,联系电话,电子邮箱,照片)values(@编号,@用户名,@组别,@姓名,@工作单位,@联系电话,@电子邮箱,@照片)";

cmd_("@编号", );

cmd_("@用户名", r,

50);

cmd_("@组别", r, 50);

cmd_("@姓名", r, 50);

cmd_("@工作单位", r,

500);

cmd_("@联系电话", r,

200);

cmd_("@电子邮箱", r,

200);

cmd_("@照片", );

cmd_ters["@编号"].Value = maxid;

cmd_ters["@用户名"].Value = strUserName;

cmd_ters["@组别"].Value = group;

cmd_ters["@姓名"].Value = name;

cmd_ters["@工作单位"].Value = company;

cmd_ters["@联系电话"].Value = phone;

cmd_ters["@电子邮箱"].Value = email;

if (txtFilePath == "")

{

cmd_ters["@照片"].Value = ;

}

else

{

cmd_ters["@照片"].Value = b;

}

cmd_eNonQuery();

();

DialogResult = ;

}

catch (Exception ee)

{

(e);

return;

}

#endregion 添加数据

}

private void btnCancel_Click(object sender, EventArgs e)

{

DialogResult = ;

}

}

结论

课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异, 回顾起此次课程设计,至今我们仍感慨颇多,的确,从理论到实践,学到很多很多的东西。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,我们把前面所学过的知识又重新温故了一遍。

我做的是通讯录管理系统,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。尽管程序不是很完善,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习windows的一次实践作业。

在此程序中有用到.NET中的许多知识,最基本的是增、删、改、查几个过程,此程序方便、快捷,但是还有一些不足之处,希望我自己以后慢慢研究,将此程序完善。