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中的许多知识,最基本的是增、删、改、查几个过程,此程序方便、快捷,但是还有一些不足之处,希望我自己以后慢慢研究,将此程序完善。


发布评论