图 14
根据用户选择的用户名,系统自动判断用户权限,并且比较密码是否与数据库内纪录一致,如果是则可以进入系统主界面。
2、 主界面的设计
系统主界面由三部分构成,分别为菜单栏、导航栏和底部的状态栏,其中在制作导航栏的时候,使用了第三方的控件“NavNarControl”,做出来的效果还是相当的不错,其运行结果如下图。
图 15
菜单栏和导航栏的功能基本一致,只是从两种途径来实现,底部的状态栏通过一系列字符串的合并显示用户名,登录时间等信息。通过点击菜单栏或者导航栏的相应功能,开启子窗口就可以进行子项目的操作了。
3、 通用信息管理界面的设计
资料管理和我方信息管理里的7个小项目都具有一个共同的特点,都是对数据库进行的插入、删除及修改的操作,不同的只是针对的具体数据库表和字段的不同,以客户资料管理为例,预期的运行结果如下图。
图 16
整个界面由三个部分组成:
最上方的工具栏:提供新建及删除资料的服务,并且可以根据查询条件进行查询,还能调用邮件相关组件给客户发送E-mail。
中间的组合框:使用了textbox和combobox完成每一条记录详细显示,以供用户添加新信息或者修改现有信息。其中的联系电话,E-mail等还应设置正则表达式来检验数据输入的合法性。
下面的DataGridView列出了符合当前查询的所有条目,供用户查看,双击其条目可以在中间的组合框内显示改条目的详细内容,供用户修改。
4、 联系客户窗体的设计
联系客户窗体用来实现企业与客户的交流、沟通功能。实现该功能时调用了System.Net.Mail命名空间下的MailMessage类和SmtpClient类。界面设计如下图所示。
图 17
在窗体Load的时候自动载入客户的编号、名称和邮箱。
如果选择了上传附件,则会打开一个OpenFileDialog对话框,供用户选择文件,并返回该文件的路径。
点击发送后,调用系统函数发送邮件。
5、 水晶报表的设计
客户级别分析窗体主要反映不同级别的客户情况,操作人员可以通过选择客户等级,查看制定级别的客户详细信息。客户级别分析窗体运行结果如下图所示。
图 18
(七) 关键性代码解析
1、 邮件的发送
在联系客户的窗体中,实现了通过客户端发送邮件的功能,在事先给客户发送邮件时,需要制定邮件的发送者、接受者、主题、内容、发送邮件的SMTP服务器的地址及端口号。特别的,如果有附件的存在,还需要声明一个ContentDispotion类的对象,并通过其属性,完成附件属性的设置,其运行代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Net.Mail;
namespace CRM.DataManage
{
public partial class frmRClient : Form
{
CRM.BaseClass.BaseOperate boperate = new CRM.BaseClass.BaseOperate();
CRM.BaseClass.OperateAndValidate opAndvalidate = new CRM.BaseClass.OperateAndValidate();
public frmRClient()
{
InitializeComponent();
}
private void frmRClient_Load(object sender, EventArgs e)
{
opAndvalidate.cboxBind("select distinct ClientID from tb_ClientInfo", "tb_ClientInfo", "ClientID", cboxCID);
}
private void cboxCID_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataReader sqlread = boperate.getread("select CName,CEmail from tb_ClientInfo where ClientID='" + cboxCID.Text.Trim() + "'");
sqlread.Read();
if (sqlread.HasRows)
{
txtCName.Text = sqlread["CName"].ToString().Trim();
txtCEmail.Text = sqlread["CEmail"].ToString().Trim();
}
sqlread.Close();
}
//选择附件
private void btnUP_Click(object sender, EventArgs e)
{
oFDialogSFile.InitialDirectory = "C:\\";
oFDialogSFile.Filter = "all files (*.*)|*.*";
oFDialogSFile.RestoreDirectory = true;
oFDialogSFile.ShowDialog();
cboxAccessories.Items.Add(oFDialogSFile.FileName.Trim());
}
//删除附件
private void btnDel_Click(object sender, EventArgs e)
{
if (cboxAccessories.Text == "")
{
MessageBox.Show("没有附件可删!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
cboxAccessories.Items.Remove(cboxAccessories.Text.Trim());
}
}
//发送邮件
private void btnSend_Click(object sender, EventArgs e)
{
//邮箱格式验证
if (!opAndvalidate.validateEmail(txtSEmail.Text.Trim()))
{
errorSEmail.SetError(txtSEmail, "输入的邮箱格式不正确!");
}
else
{
errorSEmail.Clear();
try
{
//创建MailMessage对象,使用邮件功能
string file = Application.StartupPath + "testXML.xml";
System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage();
myMail = new System.Net.Mail.MailMessage(txtSEmail.Text.Trim(), txtCEmail.Text.Trim());
myMail.Subject = txtETitle.Text.Trim();
myMail.Body = txtEContent.Text.Trim();
if (cboxAccessories.Items.Count > 0)
{
for (int i = 0; i < cboxAccessories.Items.Count; i++)
{
System.Net.Mail.Attachment myAttachment = new System.Net.Mail.Attachment(
cboxAccessories.Items[i].ToString(), System.Net.Mime.MediaTypeNames.Application.Octet); |