C++通讯录

扫码查看

C++通讯录1.0

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

项目要求:

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

通讯录的

核心类:VAdressBook

数据库:SQLite

编程语言:C++

                 常用函数:sprintf

                 常用SQLiteAPI函数:sqlite3_exec

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

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

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

现在的皱形效果图为:

C++通讯录-LMLPHP

C++通讯录-LMLPHP

C++通讯录-LMLPHP

C++通讯录-LMLPHP

C++通讯录-LMLPHP

 #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.

05-23 05:42
查看更多