您好,登录后才能下订单哦!
在现代社会中,通讯录系统已经成为我们日常生活中不可或缺的一部分。无论是个人还是企业,都需要一个高效、便捷的通讯录管理系统来存储和管理联系人信息。本文将详细介绍如何使用C#编程语言和Windows Forms技术实现一个窗体通讯录系统。通过本文的学习,读者将掌握如何从零开始构建一个功能完善的通讯录系统,包括需求分析、系统设计、数据库设计、界面设计、功能实现以及测试与调试等环节。
在开始开发之前,首先需要明确系统的需求。一个基本的通讯录系统通常需要具备以下功能:
此外,系统还应具备良好的用户界面,操作简单直观,数据存储安全可靠。
本系统采用典型的三层架构,分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种架构有助于提高代码的可维护性和可扩展性。
通讯录系统的核心是联系人信息的存储。我们使用SQL Server作为数据库管理系统,设计一个简单的联系人表(Contacts)来存储联系人信息。表结构如下:
| 列名 | 数据类型 | 说明 | 
|---|---|---|
| ContactID | int | 联系人ID(主键) | 
| Name | nvarchar(50) | 联系人姓名 | 
| Phone | nvarchar(20) | 联系人电话 | 
| nvarchar(50) | 联系人电子邮件 | |
| Address | nvarchar(100) | 联系人地址 | 
系统的用户界面应简洁明了,易于操作。我们设计一个主窗体,包含以下主要控件:
首先,打开Visual Studio 2022,创建一个新的Windows Forms应用程序项目,命名为“ContactManagementSystem”。
在项目中添加一个App.config文件,配置数据库连接字符串:
<configuration>
  <connectionStrings>
    <add name="ContactDB" connectionString="Data Source=.;Initial Catalog=ContactDB;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
创建一个Contact类,用于表示联系人信息:
public class Contact
{
    public int ContactID { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
}
创建一个ContactDAL类,用于处理与数据库的交互:
public class ContactDAL
{
    private string connectionString = ConfigurationManager.ConnectionStrings["ContactDB"].ConnectionString;
    public List<Contact> GetContacts()
    {
        List<Contact> contacts = new List<Contact>();
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM Contacts", conn);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                contacts.Add(new Contact
                {
                    ContactID = (int)reader["ContactID"],
                    Name = reader["Name"].ToString(),
                    Phone = reader["Phone"].ToString(),
                    Email = reader["Email"].ToString(),
                    Address = reader["Address"].ToString()
                });
            }
        }
        return contacts;
    }
    public void AddContact(Contact contact)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("INSERT INTO Contacts (Name, Phone, Email, Address) VALUES (@Name, @Phone, @Email, @Address)", conn);
            cmd.Parameters.AddWithValue("@Name", contact.Name);
            cmd.Parameters.AddWithValue("@Phone", contact.Phone);
            cmd.Parameters.AddWithValue("@Email", contact.Email);
            cmd.Parameters.AddWithValue("@Address", contact.Address);
            cmd.ExecuteNonQuery();
        }
    }
    public void UpdateContact(Contact contact)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("UPDATE Contacts SET Name = @Name, Phone = @Phone, Email = @Email, Address = @Address WHERE ContactID = @ContactID", conn);
            cmd.Parameters.AddWithValue("@Name", contact.Name);
            cmd.Parameters.AddWithValue("@Phone", contact.Phone);
            cmd.Parameters.AddWithValue("@Email", contact.Email);
            cmd.Parameters.AddWithValue("@Address", contact.Address);
            cmd.Parameters.AddWithValue("@ContactID", contact.ContactID);
            cmd.ExecuteNonQuery();
        }
    }
    public void DeleteContact(int contactID)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("DELETE FROM Contacts WHERE ContactID = @ContactID", conn);
            cmd.Parameters.AddWithValue("@ContactID", contactID);
            cmd.ExecuteNonQuery();
        }
    }
}
创建一个ContactBLL类,用于处理业务逻辑:
public class ContactBLL
{
    private ContactDAL contactDAL = new ContactDAL();
    public List<Contact> GetContacts()
    {
        return contactDAL.GetContacts();
    }
    public void AddContact(Contact contact)
    {
        if (string.IsNullOrEmpty(contact.Name))
        {
            throw new ArgumentException("Name cannot be empty");
        }
        contactDAL.AddContact(contact);
    }
    public void UpdateContact(Contact contact)
    {
        if (string.IsNullOrEmpty(contact.Name))
        {
            throw new ArgumentException("Name cannot be empty");
        }
        contactDAL.UpdateContact(contact);
    }
    public void DeleteContact(int contactID)
    {
        contactDAL.DeleteContact(contactID);
    }
}
在主窗体中,添加一个DataGridView控件用于显示联系人列表,以及多个TextBox和Button控件用于输入和执行操作。
public partial class MainForm : Form
{
    private ContactBLL contactBLL = new ContactBLL();
    public MainForm()
    {
        InitializeComponent();
        LoadContacts();
    }
    private void LoadContacts()
    {
        dataGridView1.DataSource = contactBLL.GetContacts();
    }
    private void btnAdd_Click(object sender, EventArgs e)
    {
        Contact contact = new Contact
        {
            Name = txtName.Text,
            Phone = txtPhone.Text,
            Email = txtEmail.Text,
            Address = txtAddress.Text
        };
        contactBLL.AddContact(contact);
        LoadContacts();
    }
    private void btnUpdate_Click(object sender, EventArgs e)
    {
        if (dataGridView1.SelectedRows.Count > 0)
        {
            Contact contact = new Contact
            {
                ContactID = (int)dataGridView1.SelectedRows[0].Cells["ContactID"].Value,
                Name = txtName.Text,
                Phone = txtPhone.Text,
                Email = txtEmail.Text,
                Address = txtAddress.Text
            };
            contactBLL.UpdateContact(contact);
            LoadContacts();
        }
    }
    private void btnDelete_Click(object sender, EventArgs e)
    {
        if (dataGridView1.SelectedRows.Count > 0)
        {
            int contactID = (int)dataGridView1.SelectedRows[0].Cells["ContactID"].Value;
            contactBLL.DeleteContact(contactID);
            LoadContacts();
        }
    }
    private void btnSearch_Click(object sender, EventArgs e)
    {
        string searchText = txtSearch.Text;
        var contacts = contactBLL.GetContacts().Where(c => c.Name.Contains(searchText)).ToList();
        dataGridView1.DataSource = contacts;
    }
    private void btnExport_Click(object sender, EventArgs e)
    {
        SaveFileDialog saveFileDialog = new SaveFileDialog();
        saveFileDialog.Filter = "CSV文件|*.csv";
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            using (StreamWriter sw = new StreamWriter(saveFileDialog.FileName))
            {
                var contacts = contactBLL.GetContacts();
                sw.WriteLine("Name,Phone,Email,Address");
                foreach (var contact in contacts)
                {
                    sw.WriteLine($"{contact.Name},{contact.Phone},{contact.Email},{contact.Address}");
                }
            }
        }
    }
}
用户输入联系人信息后,点击“添加”按钮,系统将调用ContactBLL的AddContact方法,将联系人信息保存到数据库中,并刷新DataGridView显示。
用户在DataGridView中选择要删除的联系人,点击“删除”按钮,系统将调用ContactBLL的DeleteContact方法,从数据库中删除该联系人,并刷新DataGridView显示。
用户在DataGridView中选择要修改的联系人,修改相关信息后,点击“修改”按钮,系统将调用ContactBLL的UpdateContact方法,更新数据库中的联系人信息,并刷新DataGridView显示。
用户在搜索框中输入查询条件,点击“查询”按钮,系统将调用ContactBLL的GetContacts方法,过滤出符合条件的联系人,并在DataGridView中显示。
用户点击“导出”按钮,系统将弹出保存文件对话框,用户选择保存路径后,系统将联系人信息导出为CSV文件。
在完成功能实现后,需要对系统进行全面的测试,确保各项功能正常运行。测试内容包括:
在测试过程中,如果发现任何问题,应及时进行调试和修复。
通过本文的学习,我们成功实现了一个基于C#和Windows Forms的窗体通讯录系统。该系统具备添加、删除、修改、查询和导出联系人信息的功能,能够满足基本的通讯录管理需求。未来,我们可以进一步扩展系统功能,如增加分组管理、导入联系人、数据备份与恢复等,以提升系统的实用性和用户体验。
希望本文能为读者在C#窗体应用程序开发方面提供有益的参考和帮助。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。