使用三层架构的多用户联系人管理系统






4.08/5 (17投票s)
一个简单的多用户联系人管理系统,将帮助程序员使用一些技巧

引言
生活就像一根根连接的线。我们缝合每一个线头,构成我们生活中的点滴。我们时不时地都喜欢与朋友、家人、同事、伙伴,以及,至少,我们的敌人保持联系。
从一开始,许多人就发现了无数种记住联系人的方法。有些人用大脑,有些人用纸和笔,还有一些人使用电脑来完成这项简单的任务。互联网上有很多联系人管理软件,你可能已经猜到这个项目中会是什么。但不要停止阅读。你可能会发现一些有用的东西。
我想分享一些对开发人员有用的技巧和交易。因此,我用 C# 编写了一个非常简单的联系人管理程序。我从设计、开发开始,最后是实现。
每个人都喜欢创造。有些人复制,有些人使用过去的经验,有些人喜欢从某事开始,从中获得一些东西。我使用了所有这些方法。
这是许多程序员快速完成事情的一种方式。但快速完成某些事情最终会导致越来越多的调试,程序中会冒出越来越多的错误。
我试图以一种简单易懂的方式展示完成事情的简单方法。为此,我使用了三种类型的类
1. 信息类
这些类包含有关类的通用信息和属性。
2. 数据访问类
这些类的对象处理数据库,它们使用信息和业务对象来完成特定工作。
3. 业务类
这些类的对象定义了信息对象应该做什么。可能插入一些数据。它不知道如何处理数据库。
那么,创建上述类的意义何在?答案是让事情变得更容易。常用的一句话是 KISS,意思是“保持简单,笨蛋”。
最基本的是定义一些信息类。列出这些类可以完成的工作,并创建一些业务类,然后让数据类定义如何处理数据库以设置和获取数据。
兴趣点
- 使用业务对象/数据访问/用户界面层
- 使用带参数值的报告
- 实现限制用户在指定天数内使用该软件
- 通过 POP 发送电子邮件
有趣和有用
调用业务类来填充一个 ArrayList
public void PopulateContacts(ListView lvw, int contactType)
{
lvw.Items.Clear();
BusinessLayerContacts b = new BusinessLayerContacts();
ArrayList al = new ArrayList();
Contacts c = new Contacts();
c.ContactType = contactType;
c.UserID = this.UserID;
al = b.GetContacts(c);lvw.Columns.Add("Name", 300);
lvwChoosen.Columns.Add("Name", 300);
for (int i = 0; i < al.Count; i++)
{
Contacts ct = new Contacts();
ct.ID = ((Contacts)al[i]).ID;
ct.Name = ((Contacts)al[i]).Name;
ct.Telephone = ((Contacts)al[i]).Telephone;
ct.UserID = this.UserID;
ListViewItem lvi = new ListViewItem();
lvi.Tag = ct.ID.ToString();
lvi.Text = ct.Name;
lvw.Items.Add(lvi);
}
}
向报告发送参数
很多时候,新的程序员会发现向报告发送参数或在运行时绑定报告很困难。这里有一种方法可以做到。
...
// instantiate the report
Envelope ex = new Envelope();
// Connect to Datasource at runtime
CrystalDecisions.CrystalReports.Engine.ReportDocument r =
new CrystalDecisions.CrystalReports.Engine.ReportDocument();
TableLogOnInfo t = new TableLogOnInfo();
t.ConnectionInfo.ServerName = Application.StartupPath + "\\ZSContacts.mdb";
r.FileName = Application.StartupPath + "\\" + "Envelope.rpt";
r.Database.Tables[0].ApplyLogOnInfo(t);
// set datasource
ex.SetDataSource(dt);
// set report source
crvReport.ReportSource = r;
ex.VerifyDatabase();
// report has one discrete value
ParameterDiscreteValue d = new ParameterDiscreteValue();
d.Value = this.userid;
crvReport.ParameterFieldInfo["userid"].CurrentValues.Add(d);
// report has discrete with multiple values
ParameterValues currentParameterValues = new ParameterValues();
for (int i = 0; i < al.Count; i++)
{
ParameterDiscreteValue dd = new ParameterDiscreteValue();
dd.Value = ct.ID = ((Contacts)al[i]).ID; ;
currentParameterValues.Add(dd);
}
crvReport.ParameterFieldInfo["contactId"].CurrentValues = currentParameterValues;
...
实现一个简单的许可证技巧
如果你想让你的产品像共享软件一样运行,简单的注册表项可以帮助你进行许可。
...
ArrayList al = new ArrayList();
al.Add("AV32 FGHG RE23 FGHT ASW34");
al.Add("AV32 FDFG RE23 FEHT ASW34");
al.Add("AV32 FFHH RE43 FFHT ASW34");
al.Add("AV32 FFHG RER3 FGHT ASW34");
al.Add("AVS2 FGSG RFD3 FFHT ASWD4");
bool registerd = false;
for (int i = 0; i < al.Count; i++)
{
if (txtLicense.Text == al[i].ToString())
{
RegistryKey rk =
Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("ZakaSoft", true);
if (rk == null)
{
RegistryKey main = Registry.LocalMachine.OpenSubKey("Software", true);
RegistryKey x = main.CreateSubKey("ZakaSoft");
x.SetValue("STATUS", txtName.Text);
}
else
{
rk.SetValue("STATUS", txtName.Text.ToString());
MessageBox.Show("Thanks for Registering!");
frm.btnRegister.Visible = false;
frm.lblUsed.Text = "This Software is Registerd to " + txtName.Text;
registerd = true;
this.Dispose();
}
break;
}
}
if (registerd == false)
{
MessageBox.Show("License key not valid!");
txtLicense.Focus();
}
...
从应用程序发送电子邮件
这里有一个关于如何从你的应用程序发送电子邮件的小片段
...
using System.Net.Mail;
...
private void SendMail()
{
MailAddress from = new MailAddress("sales@zakasoft.com");
MailAddress to = new MailAddress("zakaria7@gmail.com");
MailMessage message = new MailMessage(from, to);
message.Subject = "Using the SmtpClient class.";
message.Body = @"Using this feature,
you can send an e-mail message from an application very easily.";
SmtpClient client = new SmtpClient("mail.zakasoft.com");
System.Net.NetworkCredential basicAuthenticationInfo =
new System.Net.NetworkCredential("sales@zakasoft.com", "1234567");
client.UseDefaultCredentials = false;
client.Credentials = basicAuthenticationInfo;
client.Send(message);
}
结论
我希望你喜欢这个非常简单的项目。我强调使用一些基本方法和技巧,这将帮助你编写和设计有用的软件。
历史
- 2007年3月1日:初始帖子