65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2007年3月1日

CPOL

3分钟阅读

viewsIcon

75741

downloadIcon

2288

一个简单的多用户联系人管理系统,将帮助程序员使用一些技巧

Screenshot - multicontact.gif

引言

生活就像一根根连接的线。我们缝合每一个线头,构成我们生活中的点滴。我们时不时地都喜欢与朋友、家人、同事、伙伴,以及,至少,我们的敌人保持联系。

从一开始,许多人就发现了无数种记住联系人的方法。有些人用大脑,有些人用纸和笔,还有一些人使用电脑来完成这项简单的任务。互联网上有很多联系人管理软件,你可能已经猜到这个项目中会是什么。但不要停止阅读。你可能会发现一些有用的东西。

我想分享一些对开发人员有用的技巧和交易。因此,我用 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日:初始帖子
© . All rights reserved.