C++通讯录1.0

历时一天,终于把通讯录写好了。

项目要求:

编写一个通讯录管理程序。
有一已存在的通讯录文件,数据内容为各联系人信息。
每个联系人信息的组成部分为:
姓名、电话号码和住址
等个人基本信息,
并假设已有两个联系人。
并假设已有两个联系人。 ()输出联系人:打开通讯录文件并显示其中的数据;
()添加联系人;
()查找联系人:利用字符串函数,按“姓名”查找;
()修改联系人:可以修改该联系人的任一个信息;
()保存到文件:将操作结果保存到已存在的通讯录文件;
()用子函数实现各个子功能。

通讯录的

核心类:VAdressBook

数据库:SQLite

编程语言:C++

                 常用函数:sprintf

                 常用SQLiteAPI函数:sqlite3_exec

还存在技术问题:重命问题(在翻译完SQLite高级教程后可解决)

未使用UI(计划使用wxWidgets或Java的图形库 或 SDL)

还存在的程序设计问题:使用了简单工厂设计模式,扩展性不佳,维护性不佳。(重构代码)

现在的皱形效果图为:

 #include"sqlite3.h"
#include<cstdlib>
#include<cstdio>
#include<iostream>
#include <cstdio> using namespace std;
/*
格式化输出命令
sqlite>.header on
sqlite>.mode column
sqlite>.timer on
*/ static int callback(void *data, int argc, char **argv, char **azColName){
int i;
for(i=; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return ;
} class VAdressBook
{
public:
virtual bool Display_ContactPerson()=;
virtual bool Add_ContactPerson()=;
virtual bool Find_ContactPerson()=;
virtual bool Change_ContactPerson()=;
//virtual bool SaveToText_ContactPerson()=0;
//virtual VAdressBook(){};
}; class AdressBook :public VAdressBook
{
private:
sqlite3 *db;
int rc;
char *ErrorMsg;
string sql;
string m_strName;
string m_strAdress;
int m_iTelNum; public:
AdressBook();
bool Display_ContactPerson();
bool Add_ContactPerson();
bool Find_ContactPerson();
bool Change_ContactPerson();
//bool SaveToText_ContactPerson();
virtual ~AdressBook()
{
sqlite3_close(db);
}
};
AdressBook::AdressBook()
{
ErrorMsg=;
rc = sqlite3_open("adressbook.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit();
}
else
{
cout<<"Opened database successfully\n"<<endl;;
}
/*** Create SQL statement ***/
/*** 姓名、电话号码和住址 ***/
sql = "CREATE TABLE adress(" \
"NAME TEXT NOT NULL," \
"TELNUM INT NOT NULL," \
"ADRESS CHAR(100) );"; /* Execute SQL statement */
rc = sqlite3_exec(db, sql.c_str(), , , &ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
}
else
{
cout<<"Table created successfully\n"<<endl;
} /* Create SQL statement */
sql = "INSERT INTO adress (NAME,TELNUM,ADRESS)" \
"VALUES ('WANGCHENG',18061623491,'081101-3-4');" \
"INSERT INTO adress (NAME,TELNUM,ADRESS)" \
"VALUES ('LIYUAN',18061623492,'081101-3-3');"; /* Execute SQL statement */
rc = sqlite3_exec(db, sql.c_str(),, , &ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
sqlite3_free(ErrorMsg);
}else
{
cout<<"Records created successfully\n"<<endl;;
}
} bool AdressBook::Display_ContactPerson()
{ /* Create SQL statement */
sql = "SELECT * FROM adress";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql.c_str(), callback, , &ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
sqlite3_free(ErrorMsg);
return false;
}
else
{
cout<<"Operation done successfully\n"<<endl;;
return true;
}
}
bool AdressBook::Add_ContactPerson()
{ cout<<"please input Name,Contact phone number,Adress"<<endl;
cin>>m_strName>>m_iTelNum>>m_strAdress;
sprintf((char *)sql.data(),"INSERT INTO adress VALUES(\'%s\',%d,\'%s\');",(const char *)m_strName.c_str(),m_iTelNum,(const char *)m_strAdress.c_str()); rc = sqlite3_exec(db, sql.c_str(),, , &ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
sqlite3_free(ErrorMsg);
return false;
}else
{
cout<<"Records created successfully\n"<<endl;
return true;
}
} bool AdressBook::Find_ContactPerson()
{
cout<<"please input Name you want find"<<endl;
cin>>m_strName;
sprintf((char *)sql.data(),"SELECT * FROM adress WHERE NAME Like \'%%%s%%\';",(const char *)m_strName.c_str());
rc=sqlite3_exec(db,sql.c_str(),callback,,&ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
sqlite3_free(ErrorMsg);
return false;
}
else
{
cout<<"Operation done successfully\n"<<endl;
return true;
}
}
bool AdressBook::Change_ContactPerson()
{
int flag=;
string strTemp;
cout<<"please input name to To change Information"<<endl;
cin>>m_strName;
do
{
cout<<"please input 一个数字:\n"\
"1:Name\n" \
"2:TelNum\n"\
"3:Adress"<<endl;
cin>>flag;
}
while(>flag||flag>); switch(flag)
{
case :
cin>>strTemp;
sprintf((char *)sql.data(),"UPDATE adress set NAME=\'%s\' WHERE NAME LIKE \'%%%s%%\';",(const char *)strTemp.c_str(),(const char *)m_strName.c_str());
break;
case :
cin>>m_iTelNum;
sprintf((char *)sql.data(),"UPDATE adress set TELNUM=\'%d\' WHERE NAME LIKE \'%%%s%%\';",m_iTelNum,(const char *)m_strName.c_str());
break;
case :
cin>>strTemp;
sprintf((char *)sql.data(),"UPDATE adress set ADRESS=\'%s\' WHERE NAME LIKE \'%%%s%%\';",(const char *)strTemp.c_str(),(const char *)m_strName.c_str());
break;
default:cout<<"input error,please restart input"<<endl; }
rc=sqlite3_exec(db,sql.c_str(),callback,,&ErrorMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", ErrorMsg);
sqlite3_free(ErrorMsg);
return false;
}
else
{
cout<<"Operation done successfully\n"<<endl;
return true;
}
return true; }
 #include "VAdressBook.h"

 int main()
{
AdressBook test;
int userchoice;
while(true)
{
do{
cout<<"****************WELCOME USE FDA 通录讯***************"<<endl;
cout<<"* 1. Display All *"<<endl;
cout<<"* 2. Add Contact *"<<endl;
cout<<"* 3. Change Contact *"<<endl;
cout<<"* 4 Find Contact *"<<endl;
cout<<"*****************************************************"<<endl;
cin>>userchoice;
}while(userchoice<||userchoice>);
switch(userchoice)
{
case :test.Display_ContactPerson();
break;
case :test.Add_ContactPerson();
break;
case :test.Change_ContactPerson();
break;
case :test.Find_ContactPerson();
break;
}
}
return ;
}

想改进这个项目的,请持续关注FDA—orangebook.

C++通讯录的更多相关文章

  1. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  2. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  3. android 通讯录实现

    最近项目需要,于是自己实现了一个带导航栏的通讯录,上代码! 一.数据准备 (1)bean: public class Friend { private String remark; private S ...

  4. IOS学习之-私人通讯录

    通过一段时间IOS的学习完成了一个简单的应用,"私人通讯录". 运行效果如下图: 1.登录页 2.通讯录列表 3.添加 4.编辑 5.删除 6.注销 总视图结构如下图: 总结本程序 ...

  5. C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

    在上篇随笔<C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理>介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理.成员管理.标签管理三个部分,本篇主要介绍成员的管 ...

  6. C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理

    前面一篇随笔企业号的一些基础信息,以及介绍如何配置企业号的回调方式实现和企业号服务器进行沟通的桥梁.本篇主要还是继续介绍企业号的开发工作的开展,介绍微信企业号通讯录管理开发功能,介绍其中组织机构里面如 ...

  7. 一个App完成入门篇(六)- 完成通讯录页面

    第五章和第六章间隔时间有点长,对不起大家了.下面继续. 本节教程将要教会大家如何加载本地通讯录. 导入项目 导入通讯录 自定义js模块 发送和订阅page消息 将要学习的demo效果图如下所示 1. ...

  8. iOS中通讯录的开发

    通讯录开发主要是获取用户手机中的联系人,进而可以在应用中添加好友 一 .如何访问通讯录 (1)在iOS9之前,有两个框架可以访问用户的通讯录 AddressBookUI.framework: 提供了联 ...

  9. js做通讯录的索引滑动显示效果和滑动显示锚点效果

    只做实现..完全没考虑性能优化.所以我实现了以后特别卡. 第一个是在通讯录右边的索引条上进行滑动,滑动到相应字母就跳转到相应字母的锚点上. 思路:监听touchmove事件,获取clientX和cli ...

  10. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

随机推荐

  1. SpringMVC数据绑定一(基本类型、数组和对象(简单对象、层级对象、多参数对象))

    一.int和Integer类型 如:参数为int类型的请求 @Controller public class TestController { @RequestMapping(value=" ...

  2. spring使用过程中遇到的问题

    1.出现这样的错误:The type org.springframework.core.NestedRuntimeException cannot be resolved. It is indirec ...

  3. 3.4-3.6 Hive Storage Format

    一.file format ORCFile在HDP 2:更好的压缩,更好的性能: https://zh.hortonworks.com/blog/orcfile-in-hdp-2-better-com ...

  4. [工作笔记]JDK版本不同导致的SSL异常

    前言 遇到这个问题得说一下笔者的开发环境,笔者所在公司,平时开发用的web容器是jboss,使用的JDK是oracle的JDK,但是测试和生产环境用的是WAS,JDK用的是IBM的JDK,由于项目的不 ...

  5. 徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  6. vue.eslintrc.js常用配置

    vue.eslintrc.js module.exports = { root: true, env: { node: true }, extends: [ "plugin:vue/esse ...

  7. 算法学习--Day8

    今天重拾算法复习. 今天学习了两个类型的算法——并查集与最小生成树(MST) 简单记录一下并查集的大致内容. 一.并查集的内容大致作用为查找当前图中的点有几个集合. 该算法起到查询分组的情况.通过给定 ...

  8. opengl VAO ,VBO

    A Vertex Array Object (VAO) is an object which contains one or more Vertex Buffer Objects and is des ...

  9. css 所有选择器 实例与总结

    目录 什么是选择器? 选择器都有那些呢? 标签选择器 ID选择器 类选择器 后代选择器 子代选择器 组合选择器 交集选择器 相邻兄弟选择器 通用兄弟选择器 属性选择器 伪类选择器 什么是选择器? 在c ...

  10. 测试 | 单元测试工具 | JUnit

    http://junit.sourceforge.net/javadoc/org/junit/Assert.html 使用: 新建测试类: 在预测试的类上点击右键--->NEW--->Ju ...