当前位置: 首页 > article >正文

C#编写一个简易通讯录

一、需求分析

设计一个实用的通讯录小程序,由“姓名”、“电话号码”、“邮箱地址”、“QQ号码”组成。具有如下功能:

  1. 输入联系人信息,增加到通讯录中;
  2. 逐个显示通讯录中所有联系人的相关信息;
  3. 根据姓名进行查找,返回此联系人的详细信息;
  4. 删除指定姓名的联系人记录;
  5. 修改指定姓名的联系人信息;
  6. 按照姓名对联系人进行排序;
  7. 将联系人信息保存到文件中,以及从文件
    中读取所有联系人。

二、概要设计

首先,定义各个标准库函数,建立结构体数组,定义所需函数。然后,分别建立七个功能对应的七个函数,这七个函数再通过主函数调用分别得以实现。之后,设置主函数,列出功能清单,供用户做出选择,通过执行多分支选择语句——switch语句,调用其它函数。

1.功能导图:

46d9003ac1b341a5a43179caf12c53e2.png

2.结构体数组为:

typedef struct {char name[20];char phone[20];char email[20];char qq[20];}ElemType;typedef struct {ElemType* elem;int length; //长度int listsize; //容量}SqList;

3.定义所需函数:

void AddContact(SqList &L);void DisplayContacts(SqList &L);void SearchContact(SqList &L);void DeleteContact(SqList &L);void ModifyContact(SqList &L);void SortContacts(SqList &L);void SaveContacts(SqList &L);

4.运用switch语句调用函数:

switch (cmd) {case '1':AddContact(contactList); break;case '2':DisplayContacts(contactList); break;case '3':SearchContact(contactList); break;case '4':DeleteContact(contactList); break;case '5':ModifyContact(contactList); break;case '6':SortContacts(contactList); break;case '7':SaveContacts(contactList); break;}

三、详细代码

#define LIST_INIT_SIZE 100 //初始容量#define LISTINCREMENT 50 //增量typedef struct {char name[20];char phone[20];char email[20];char qq[20];}ElemType;typedef struct {ElemType* elem;int length; //长度int listsize; //容量}SqList;void AddContact(SqList &L);void DisplayContacts(SqList &L);void SearchContact(SqList &L);void DeleteContact(SqList &L);void ModifyContact(SqList &L);void SortContacts(SqList &L);void SaveContacts(SqList &L);void PrintMenu() {printf("\n********************************************\n");printf("*                                          *\n");printf("*        欢迎使用通讯录 v0.9               *\n");printf("*                                          *\n");printf("*           xxx制作                     *\n");printf("*                                          *\n");printf("* 1:增加联系人                            *\n");printf("* 2:打印联系人                            *\n");printf("* 3:查找联系人                            *\n");printf("* 4:删除联系人                            *\n");printf("* 5:修改联系人                            *\n");printf("* 6:排序                                  *\n");printf("* 7:保存                                  *\n");printf("* 0:退出                                  *\n");printf("*                                          *\n");printf("********************************************\n");}int main() {//1 + 回车//缓冲区里存2个字符char cmd;SqList contactList;InitList(contactList);do {system("CLS"); //清屏PrintMenu();printf("请输入选项:");scanf(" %c", &cmd); //" %c" %c前加空格,跳过缓冲区里可能的回车符getchar(); //吃掉“输入选项后缓冲区里的回车”switch (cmd) {case '1':AddContact(contactList); break;case '2':DisplayContacts(contactList); break;case '3':SearchContact(contactList); break;case '4':DeleteContact(contactList); break;case '5':ModifyContact(contactList); break;case '6':SortContacts(contactList); break;case '7':SaveContacts(contactList); break;}} while (cmd!='0');}void PrintContact(ElemType& e) {printf("%s %s %s %s\n", e.name, e.phone, e.email, e.qq);}void AddContact(SqList& L) {char cmd;do {ElemType e;printf("请输入联系人姓名:");scanf("%s", e.name);printf("请输入联系人电话号码:");scanf("%s", e.phone);printf("请输入联系人邮箱:");scanf("%s", e.email);printf("请输入联系人QQ:");scanf("%s", e.qq);ListInsert(L, ListLength(L) + 1, e);printf("请问您还要继续增加联系人吗?y|n");scanf(" %c", &cmd);//" %c" %c前加空格,跳过缓冲区里的回车符} while (cmd != 'n' && cmd != 'N');}void DisplayContacts(SqList& L) {ListTraverse(L, PrintContact);printf("按任意键继续...");getchar();}void SearchContact(SqList& L) {ElemType e;char x[20];char cmd;do {printf("请输入您想查找的联系人姓名:");scanf("%s", x);for (int i = 0; i < L.length; i++) {if (strcmp(L.elem[i].name, x) ==0){printf("name:%s phone:%s email:%s qq:%s\n", L.elem[i].name, L.elem[i].phone, L.elem[i].email, L.elem[i].qq);}else {printf("输入有误!\n");}}printf("请问您还要继续查找联系人吗?y|n");scanf(" %c", &cmd);//" %c" %c前加空格,跳过缓冲区里的回车符} while (cmd != 'n' && cmd != 'N');}void DeleteContact(SqList & L) {ElemType e;char x[20];char cmd;do {printf("请输入您想删除的联系人姓名:");scanf("%s", x);for (int i = 0; i < L.length; i++) {if (strcmp(L.elem[i].name , x)==0) {for (int j = i; j < L.length; j++) {strcpy(L.elem[j].name , L.elem[j + 1].name);strcpy(L.elem[j].phone ,L.elem[j + 1].phone);strcpy(L.elem[j].email , L.elem[j+1].email);strcpy(L.elem[j].qq , L.elem[j + 1].qq);--L.length;printf("操作成功\n");}}else {printf("输入有误!\n");}}printf("请问您还要继续删除联系人吗?y|n");scanf(" %c", &cmd);//" %c" %c前加空格,跳过缓冲区里的回车符} while (cmd != 'n' && cmd != 'N');}void ModifyContact(SqList& L){ElemType e;int j;char x[20];char cmd;do {printf("请输入您要修改信息的联系人姓名:");scanf("%s", x);for (int i = 0; i < L.length; i++) {if (strcmp(L.elem[i].name, x) == 0) {printf("联系人原信息为:name:%s phone:%s email:%s qq:%s\n", L.elem[i].name, L.elem[i].phone, L.elem[i].email, L.elem[i].qq);printf("请输入您想修改的选项:");printf("* 1:name                            *\n");printf("* 2:phone                            *\n");printf("* 3:email                           *\n");printf("* 4:qq                            *\n");scanf("%s", &j);switch (j) {case '1':scanf("%s", L.elem[i].name); break;case '2':scanf("%s", L.elem[i].phone); break;case '3':scanf("%s", L.elem[i].email); break;case '4':scanf("%s", L.elem[i].qq); break;}printf("操作成功\n");}else {printf("输入有误!\n");}}printf("请问您还要继续修改联系人吗?y|n");scanf(" %c", &cmd);//" %c" %c前加空格,跳过缓冲区里的回车符} while (cmd != 'n' && cmd != 'N');}void SortContacts(SqList& L) {ElemType e;char x1[20], x2[20], x3[20], x4[20];char cmd;printf("按联系人姓名进行排序");for (int i = 0; i < L.length; i++) {for (int j = 0; j < L.length - 1; j++) {if (strcmp(L.elem[j].name, L.elem[j + 1].name) > 0){strcpy(x1, L.elem[j].name);strcpy(x2, L.elem[j].phone);strcpy(x3, L.elem[j].email);strcpy(x4, L.elem[j].qq);strcpy(L.elem[j].name, L.elem[j + 1].name);strcpy(L.elem[j].phone, L.elem[j + 1].phone);strcpy(L.elem[j].email, L.elem[j + 1].email);strcpy(L.elem[j].qq, L.elem[j + 1].qq);strcpy(L.elem[j + 1].name, x1);strcpy(L.elem[j + 1].phone, x2);strcpy(L.elem[j + 1].email, x3);strcpy(L.elem[j + 1].qq, x4);}}  printf("name:%s phone:%s email:%s qq:%s\n", L.elem[i].name, L.elem[i].phone, L.elem[i].email, L.elem[i].qq);       }system("pause");}void SaveContacts(SqList & L) {FILE* fp;if ((fp = fopen("d:\\Users\\mljy\\Desktop\\ContactList\\ContactList.txt", "v")) == NULL){printf("文件打开失败!\n");exit(0);}for (int i = 0; i < L.length; i++) {fprintf(fp,"%s %s %s %s\n", L.elem[i].name, L.elem[i].phone, L.elem[i].email, L.elem[i].qq);printf("保存成功!\n");}if (fclose(fp)) {printf("操作错误!\n");exit(0);}getchar();}

四、调试分析

程序运行如下:

f2a9011c5da34ac4839e2f7885fb75ee.png

97039a1745ea4b8bba09c78690ab5a12.png

5ac5d410deda4e8681821ee6e1ed9312.png

a2cfe2b67aee44878c3412b7ec70e295.png

f74144f79a5a403bac2de02925af22dd.png

19efe4370a204ea8b9930717b2794ccf.png

b1b19daaa3c74b45b20c69d3ee29708d.png

http://www.lryc.cn/news/2416780.html

相关文章:

  • ActiveX开发详解
  • 硬盘写入缓存
  • 证券交易系统设计与开发
  • java 正则 规则_Java基础-正则表达式(Regular Expression)语法规则简介
  • 大数的运算(详细思路+代码)
  • 利用模板导出文件(一)之XLSTransformer导出excel文件
  • 手动脱UPX 壳实战
  • 剖析 ADO.NET 批处理更新(深入研究数据访问)
  • 集成solr复盘
  • 分享88个ASP整站程序源码,总有一款适合您
  • form表单—2种提交方式
  • Win7系统提示找不到MSVCRTD.DLL文件的解决办法
  • MaskedTextBox
  • 缓存背后的智慧:旁路、读写穿透和写回三种策略全面解析
  • CSS——滤镜(filter )
  • 关于Loadlibrary 失败-找不到指定模块126错误
  • DAS~~
  • ThinkPHP6+Layui自定义分页样式
  • 博客搜索引擎列举|博客搜索引擎的浅比较
  • 多线程开发实战:Java实现多线程四种方式及相关方法原理
  • 端口详解及如何开起端口关闭端口
  • C语言之多线程编程
  • plsql学习笔记
  • MFC窗口之间的消息传递
  • Robot之Setting table部分
  • 从Java角度看区块链实践系列3——P2P网络:区块链P2P网络拓扑结构的演变史
  • 高并发高流量网站架构
  • 史上最简单易懂的 简析utf-8编码
  • C语言实战-贪吃蛇
  • 沟通CTBS物流行业远程接入解决方案