需求
制作一个电子通讯录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、家庭住址、公司电话。
模块
 主界面:主要显示软件功能。
A) 添加好友信息。                                   //  id为唯一标识
B) 列表好友信息。(包含排序功能)
C) 搜索好友
D) 删除好友//按姓名查找,如有重名全部列出,让用户选择

E )修改好友信息//按id查找,修改信息

F)退出

运行时会从数据库中读取数据,增删改查也会执行相关的数据库函数

需要加头文件:#include <sqlite3.h>

在数据库中状态

基本结构体

typedef struct tongxun
{
char id[20];        //编号
char name[30];//姓名
char num[20]; //手机号码
char zhuzhi[100];//住址
char tel[20]; //家庭电话
struct tongxun * next;//下一条信息地址
}T;

查找并从数据库中读取数据

T * create()        //创建链表并如果已有数据赋值
{sqlite3 * database;T* head;head=(T*)malloc(SIZE);if(head==NULL){printf("error\n");return NULL;}head->next=NULL;//打开表int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return NULL;}printf("打开成功\n");//创建数据库表基本结构char *errmsg = NULL;char *sql = "create table if not exists message(id TEXT,name TEXT,num TEXT,zhuzhi TEXT,tel TEXT,primary  key(id))";ret = sqlite3_exec(database, sql, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return NULL;}printf("创建成功\n");// 3、char ***resultp: char *resultp[] = {"id", "name", "sex", "age", "1", "zhang", "M", "12","2".....};// 4、nrow: 多少行数据// 5、ncolumn: 多少列数据char **resultp = NULL;int nrow, ncolumn;char *buf="select * from message";ret = sqlite3_get_table(database, buf, &resultp, &nrow, &ncolumn, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return NULL;}    printf("select成功\n"); int i;printf ("nrow = %d, ncolumn = %d\n", nrow, ncolumn);count11=nrow;if(nrow==0){sqlite3_free_table(resultp);//    释放// 关闭数据库sqlite3_close(database);return head;}T* p1,*p;for(i=ncolumn;i<(nrow+1)*ncolumn;i=i+ncolumn){if(i%ncolumn==0){    p1=head;while(p1->next){p1=p1->next;}}p=(T*)malloc(sizeof(T));p->next=NULL;strcpy(p->id,resultp[i]);strcpy(p->name,resultp[i+1]);   strcpy(p->num,resultp[i+2]);strcpy(p->zhuzhi,resultp[i+3]);     strcpy(p->tel,resultp[i+4]);p1->next=p;             }sqlite3_free_table(resultp);//     释放// 关闭数据库sqlite3_close(database);return head;
}

添加数据

 sqlite3 * database; // 打开数据库int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return ;}char *errmsg = NULL;char buf[100];memset(buf,0,100);sprintf (buf, "insert into message values('%s', '%s', '%s', '%s','%s')", p->id,p-> name, p->num, p->zhuzhi,p->tel);ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return ;}// 关闭数据库sqlite3_close(database);        

删除数据

sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
    printf ("打开数据库失败\n");return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"delete from message where name = '%s'",name);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{printf ("数据库操作失败:%s\n", errmsg);return ;
}
// 关闭数据库
sqlite3_close(database);



更新数据:
void update(T* head)
{char str[128];int n;printf("输入你想修改的好友id号:");memset(str,0,128);scanf("%s",str);if(count11==0){printf("您没有好友,无需修改\n");return;}T* p;  //链表遍历,找到就提前退出p=head;p=head->next;while(p){if(strcmp(p->id,str)==0)break;p=p->next;             }if(p==NULL)    //没找到,提示用户{printf("您没有此好友\n");return;}//屏幕打印输出用户需要修改的好友原来信息printf("此好友信息为\n");printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->id,p->name,p->num,p->zhuzhi,p->tel);while(1){printf(" 1.修改姓名输入\n");printf(" 2.修改手机号码\n");printf(" 3.修改家庭住址\n");printf(" 4.修改家庭电话\n");printf(" 5.不修改了\n");scanf("%d",&n);if(n==1)         //修改此好友姓名{printf("请输入修改后的姓名:");memset(str,0,128);scanf("%s",str);strcpy(p->name,str);sqlite3 * database; // 打开数据库int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return ;}char *errmsg = NULL;char buf[100];memset(buf,0,100);sprintf(buf,"update message set name = '%s' where id = '%s';",str,p->id);ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return ;}// 关闭数据库sqlite3_close(database);printf("姓名修改成功\n");}else if(n==2)         //修改此好友手机号码{printf("请输入修改后的号码:");memset(str,0,128);scanf("%s",str);strcpy(p->num,str);sqlite3 * database;    // 打开数据库int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return ;}char *errmsg = NULL;char buf[100];memset(buf,0,100);sprintf(buf,"update message set num = '%s' where id = '%s';",p->num,p->id);ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return ;}// 关闭数据库sqlite3_close(database);printf("手机号码修改成功\n");}else if(n==3)          //修改此好友家庭住址{printf("请输入修改后的住址:");memset(str,0,128);scanf("%s",str);strcpy(p->zhuzhi,str);sqlite3 * database; // 打开数据库int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return ;}char *errmsg = NULL;char buf[100];memset(buf,0,100);sprintf(buf,"update message set zhuzhi = '%s' where id = '%s';",p->zhuzhi,p->id);ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return ;}// 关闭数据库sqlite3_close(database);printf("家庭住址修改成功\n");}else if(n==4)            //修改此好友家庭电话{printf("请输入修改后的电话:");memset(str,0,128);scanf("%s",str);strcpy(p->tel,str);sqlite3 * database;    // 打开数据库int ret = sqlite3_open("tongxunlu.db", &database);if (ret != SQLITE_OK){printf ("打开数据库失败\n");return ;}char *errmsg = NULL;char buf[100];memset(buf,0,100);sprintf(buf,"update message set tel = '%s' where id = '%s';",p->tel,p->id);ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);if (ret != SQLITE_OK){printf ("数据库操作失败:%s\n", errmsg);return ;}// 关闭数据库sqlite3_close(database);printf("家庭电话修改成功\n");}else if(n==5)          //退出return;}}

还需改进,我会继续努力,谢谢.

电子通讯录(数据库版存储)相关推荐

  1. CMU 15-445 数据库课程第三课文字版 - 存储1

    熟肉视频地址: CMU数据库管理系统课程[熟肉]3.数据库存储结构1(上) CMU数据库管理系统课程[熟肉]3.数据库存储结构1(下) 1. 课程大纲 这门课主要是关于如何开发一个功能全面的数据库管理 ...

  2. 基于JAVA的电子通讯录+源码+毕业设计+课程设计

    源码地址:JAVA+SQL+电子通讯录+源码+毕业设计 随着信息时代的到来,人们越来越注重通讯方式的快捷性和高效性.在这样的背景下,电子通讯录应运而生,成为人们生活中不可或缺的工具.在这篇文章中,我们 ...

  3. 基于SpringBoot+Redis的JAVA+SQL电子通讯录系统

    基于SpringBoot+Redis的JAVA+SQL电子通讯录系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善 代码已经上传 ...

  4. 在mysql中如何保存表格_图数据库如何存储电子表格?

    有辛使用图数据库做过一次,复杂的关系系统,就我个人目前的了解用图数据库做电子表格还是不太适用的,也许mongodb更为合适. mongodb中可以使用document为做电子表格,互相之前的关系也可以 ...

  5. vivo数据库与存储平台的建设和探索

    作者:vivo互联网数据库团队-Xiao Bo 本文根据Xiao Bo老师在"2021 vivo开发者大会"现场演讲内容整理而成.公众号回复[2021VDC]获取互联网技术分会场议 ...

  6. python获取数据库用户名密码_在数据库中存储用户和密码

    我正在创建一个用户+密码的软件.认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件.在 用户必须按原样存储,如有可能,无需修改.在auth之后,只要软件还在运行,用户和密码都会 ...

  7. android studio数据库存储数据,如何使用API​​ 23在android studio中的数据库中存储数据?...

    大多数时候我不会发布任何内容,因为我可以在其他帖子中找到我需要的所有内容,但是现在我已经有几天了,您如何在数据库中存储任何内容?这是我的Java代码如何使用API​​ 23在android studi ...

  8. 将数据库服务器的文件D 改名为,MySQL如何更改数据库数据存储目录详解

    前言 MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤.话不多说了,一起来看看吧 ...

  9. Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?

    转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布 ...

  10. 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?

    背景: 前段时间在百度经验看到一篇文章<如何在电脑右下角显示你(爱人)的名字>,之前也听过这个小技巧,但没真正动手设置过.所以出于好奇就实践了一下. 设置完成后的效果例如以下.右下角的时间 ...

最新文章

  1. libtorchWindows中的使用
  2. 【InfoQ大咖说直播回放】老司机聊程序员的职场道路选择
  3. go语言json解析的坑 注意事项
  4. linux网络设置与基础服务命令(ifconfig、hostname、route、netstat、ss、ping、traceroute、nslookup、route)
  5. Cookie详解整理
  6. 排列、组合问题(递归)
  7. springboot实现单点登录_什么是单点登录,php是如何实现单点登录的
  8. [转载] 七龙珠第一部——第003话 龟仙人的筋斗云
  9. 05-不是内部或外部命令,也不是可运行的程序或批处理文件
  10. Python3爬取豆瓣图书Top250并写入txt文件当中
  11. Druid实用笔记001---Druid 介绍及配置
  12. 计算机网络 第一章 计算机网络体系结构
  13. 智能一代云平台(二十二):多租户方案比较Hibernate、EclipseLink、Mybatis+Mycat
  14. HEVC与VP9编码效率对比
  15. ubuntu scp ssh 22: connection refused
  16. 临时切换淘宝源下载包
  17. 7号信令: TUP与ISUP的区别
  18. 笔记本打印时出现打印机出现异常配置问题_笔记本电脑连接共享打印机出现错误怎么办...
  19. 爱恨情仇——Kobe悖论终结篇
  20. 屏幕尺寸、分辨率、像素、PPT解释及其关系

热门文章

  1. 最强大脑记忆曲线(4)——关于项目中的全局变量
  2. 推荐英语学习几本好书
  3. vue学习日记(流水账
  4. 返利网的制作思路与原理
  5. ps2改usb接口_如何将PS2接口键盘、鼠标改成USB接口
  6. [渝粤教育] 徐州工业职业技术学院 橡胶原材料 参考 资料
  7. python基础项目 --爬取金山词霸翻译功能
  8. 绝妙一招 教你如何拍出烟雾缥缈的作品
  9. 产品思维30讲(梁宁)-- 整体
  10. 小程序增加 文章 / 新闻 / 资讯 / 动态 功能,支持用户投稿