基于C# winform的简易通讯录课设

2019年6月27日 Jerry 7340 2023年11月23日

一个简单的C#小课设——通讯录软件。软件基于winform平台,数据存储采用的文本文件,可以实现联系人信息的增删改查,列表显示。

一、功能实现

实现一个简单的通讯录软件,要求实现联系人的增删改查,列表显示,联系人信息读取、存储。

二、数据结构

一个联系人结构体,保存联系人相关信息:姓名、城市、号码1、号码2、Email地址。一个全局的结构体数组,用于联系人信息的存储、处理。

//联系人结构体
public struct persion_S
{
    public string name; //联系人姓名
    public string city; //联系人籍贯
    public string num;  //联系人号码1
    public string num2;  //联系人号码2
    public string email;  //联系人Email
}
// 全局联系人数组
public static persion_S[] g_persion = new persion_S[MAX_NUM];

三、界面展示

  • 软件主页,启动过程中自动读取文本文档,将结果进行分析存储于全局数组。

通讯录主页

  • 联系人查询,可以根据ID、姓名、城市进行查询过滤

查询联系人

  • 新增联系人,弹出界面填写信息点击添加即可

新增联系人

  • 修改联系人,选择要修改的联系人,修改后保存,每次只能修改一位

修改联系人

  • 删除联系人,勾选要删除的联系人点击删除,确认即可

删除联系人

  • 保存退出,点击保存退出后即可存储数据

保存联系人

四、主要代码片段

  • 读写文件
//读取文件
public static void read_file()
{
    StreamReader sr = File.OpenText(@"通讯录.txt");
    string nextLine;
    while ((nextLine = sr.ReadLine()) != null)
    {
        string[] after = nextLine.Split(new char[] { '^' });

        int ret = insert(after[0], after[1], after[2], after[3], after[4]);
        if (ret == -1)
        {
            Console.WriteLine("写入失败!");
        }
    }
    sr.Close();
}

//写入文件
public static void write_file()
{
    int i;
    FileInfo myFile = new FileInfo(@"通讯录.txt");
    StreamWriter sw = myFile.CreateText();

    for (i = 0; i < persion.g_index; i++)
    {
        string line = g_persion[i].name + '^' + g_persion[i].city + '^' + 
            g_persion[i].num + '^' + g_persion[i].num2 + '^' + g_persion[i].email;
        Console.WriteLine(line);
        sw.WriteLine(line); 
    }
    sw.Close();
}
  • listView的操作
//添加列  
listView1.Columns.Add("ID", 40, HorizontalAlignment.Left);
listView1.Columns.Add("姓名", 100, HorizontalAlignment.Left);
listView1.Columns.Add("城市", 100, HorizontalAlignment.Left);
listView1.Columns.Add("号码1", 120, HorizontalAlignment.Left);
listView1.Columns.Add("号码2", 120, HorizontalAlignment.Left);
listView1.Columns.Add("Email", 120, HorizontalAlignment.Left);

//添加行
ListViewItem item = new ListViewItem();
item.Text = Convert.ToString(i);
item.SubItems.Add(persion.g_persion[i].name);
item.SubItems.Add(persion.g_persion[i].city);
item.SubItems.Add(persion.g_persion[i].num);
item.SubItems.Add(persion.g_persion[i].num2);
item.SubItems.Add(persion.g_persion[i].email);
listView1.BeginUpdate();
listView1.Items.Add(item);
listView1.EndUpdate();  

//清空行
listView1.Items.Clear();

//获取选中行数及内容
int count = listView1.CheckedItems.Count;

for (i = 0; i < count; i++)
{
    listView1.CheckedItems[i].SubItems[0].Text;
}
  • 数据插入函数
public static int insert(string name, string city, string num, string num2, string email)
{
    if (g_index + 1 > MAX_NUM)
    {
        return -1;
    }
    g_persion[g_index].name = name;
    g_persion[g_index].city = city;
    g_persion[g_index].num = num;
    g_persion[g_index].num2 = num2;
    g_persion[g_index].email = email;
    g_index++;
    return g_index;
}
  • 数据删除函数
public static void del_one(int index)
{
    int i;
    for (i = index; i < g_index; i++)
    {
        g_persion[i] = g_persion[i + 1];
    }
    g_index--;
}

public static void del_arr(ArrayList d)
{
    int k = 0;
    for (k = 0; k < d.Count; k++)
    {
        int index = (int)d[k];
        del_one(index);
    }
}
  • 数据查询函数
//按照姓名查询
public static int query_by_name(string name)
{ 
    int i = 0;
    for (i = 0; i < g_index; i++)
    {
        if (g_persion[i].name == name)
        {
            return i;
        }
    }
    return -1;
}

//按照城市查询
public static ArrayList query_by_city(string name)
{
    int i = 0;
    ArrayList ret = new ArrayList();
    for (i = 0; i < g_index; i++)
    {
        if (g_persion[i].city == name)
        {
            ret.Add(i);
        }
    }
    ret.TrimToSize();
    return ret;
}
  • 数据修改函数
public static void modify(int index, string name, string city, 
            string num, string num2, string email)
{
    g_persion[index].name = name;
    g_persion[index].city = city;
    g_persion[index].num = num;
    g_persion[index].num2 = num2;
    g_persion[index].email = email;
}

原创文章,转载请注明出处: https://jerrycoding.com/article/address-book-cshap

微信
jerry微信赞助
支付宝
jerry支付宝赞助

您尚未登录,暂时无法评论。请先 登录 或者 注册

0 人参与 | 0 条评论

每日一句 (From ONE)
宇宙茫茫,连我们所在的星球都不能确定自己的确切坐标,因为群星正在不断迁徙。我们的生活也难以恒定不变,人生无法彩排,剧本草稿不经修改直接上演,难免状况百出。也许曾经相信的如今怀疑,也许今日相聚,明日便会离散,一切变幻无常,无常才是常态。
本周日,ONE和你关注那些意料之外的故事。
微信扫码

扫一扫关注我

关于本站