本文实例为大家分享了C++使用链表存储实现通讯录功能管理的具体代码,供大家参考,具体内容如下
简介
这是第二周老师给的一个小项目要求实现基本通讯录功能,有数据的增删改查,包含插入时间的能力。
代码详情
头文件
#include#include #include //system功能调用 #include //使用本地系统API获取插入时间 #include
基本存储结构体
typedef struct info{ string number; string date; string name; string adress; string birthday; }A; typedef struct LNode{ A data; struct LNode *next; }LNode,*LinkList;
链表数据初始化
用前插法插入数据
int InitList(LinkList &L){ //初始化链表 L = new LNode; L->next = NULL; return OK; } int ListInsert(LinkList &L,string name,string adress,string birthday,string date,string number){ //考虑使用数组来赋值 LinkList p; p= new LNode; p->data.name = name; p->data.adress = adress; p->data.date = date; p->data.birthday = birthday; p->data.number = number; p->next = L->next; L->next = p; return OK; }
本地WindowsAPI调用插入时间
SYSTEMTIME sys; GetLocalTime( &sys ); string y = doubleToString(sys.wYear); string m = doubleToString(sys.wMonth); string d = doubleToString(sys.wDay); string ymd = y+"-"+m+"-"+d;
因为获取的是一个double值,您得对其时间强制类型转换
string doubleToString(double num) { //强制类型转换 double强制转换为string类型 stringstream ss; string str; ss << num; ss >> str; return str; }
数据查询功能
LinkList SearchElemChar(LinkList L,int i,string e){ //思路,传递参数1,2,3,4,eg 1代表name,再分不同的方法在链表内循环查找操作 if (i == 1){ //查名字 while(L!= NULL){ if(L->data.name == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout << "未查到数据!"<data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"<
完整案例
//乐公第二周项目 实现基本通讯录存储结构 //基础链表存储数据 #include#include #include //system功能调用 #include //使用本地系统API获取插入时间 #include #define ERROR 0 #define OK 1 using namespace std; typedef int ElemType; /*定义表元素的类型*/ //结构体文件 typedef struct info{ string number; string date; string name; string adress; string birthday; }A; typedef struct LNode{ A data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ //初始化链表 L = new LNode; L->next = NULL; return OK; } int ListInsert(LinkList &L,string name,string adress,string birthday,string date,string number){ //考虑使用数组来赋值 LinkList p; p= new LNode; p->data.name = name; p->data.adress = adress; p->data.date = date; p->data.birthday = birthday; p->data.number = number; p->next = L->next; L->next = p; return OK; } //查找元素 (难题需要解决) LinkList SearchElemChar(LinkList L,int i,string e){ //思路,传递参数1,2,3,4,eg 1代表name,再分不同的方法在链表内循环查找操作 if (i == 1){ //查名字 while(L!= NULL){ if(L->data.name == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout << "未查到数据!"< data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到数据!"< data.name == e){ return P; }else{ P = L; L = L->next; } } if(L = NULL){ return L; } } int ShowMenu(){ //主菜单 int a; cout<<"------欢迎您使用乐公通讯录系统!------"<< endl; cout <<"-----请根据功能输入对应的序号--------" < > a; return a; } string doubleToString(double num) { //强制类型转换 double强制转换为string类型 stringstream ss; string str; ss << num; ss >> str; return str; } void foreachelem(LinkList L){ if(L->next == NULL){ cout<<"通讯录里还没有联系人,快去新建一下吧~"< next!=NULL){ L=L->next; cout<< "联系人姓名:" << L->data.name < data.number< data.adress < data.birthday < data.date < next!=NULL){ L=L->next; if(L->data.name==name)return 0; } return 1; } int main(){ int i; LinkList L; InitList(L); while(i!=6){ i = ShowMenu(); if(i ==1){ cout << "您选择了:新建联系人" < > name; SYSTEMTIME sys; GetLocalTime( &sys ); string y = doubleToString(sys.wYear); string m = doubleToString(sys.wMonth); string d = doubleToString(sys.wDay); string ymd = y+"-"+m+"-"+d; int repeat = serachsamename(L,name); if(repeat == 0){ cout << "联系人姓名重复,请删除旧联系人或更改姓名!" << endl; }else{ cout << "请输入联系人电话:"; cin >> number; if(number.size()!=11){ cout << "手机号输入有误,请大于11位!" << endl; }else{ cout << "请输入联系人生日:"; cin >> birthday; cout << "请输入联系人地址:"; cin >> adress; cout << "联系人于" << ymd; int ok; ok = ListInsert(L,name,adress,birthday,ymd,number); if(ok == 1){ cout << "日新建成功!" << endl; }else{ cout << "新建失败!" << endl; } } } system("pause"); system("cls"); }else if(i==2){ cout << "您选择了:遍历联系人" < > name; LinkList B; B = SearchElemChar(L,1,name); if(B){ system("cls"); cout << "联系人查找成功!姓名:" << B->data.name << endl; int select; cout <<"---------修改姓名请输入1---------" << endl; cout <<"---------修改电话请输入2---------" << endl; cout <<"---------修改生日请输入3---------" << endl; cout <<"---------修改地址请输入4---------" << endl; cout <<"请根据序号输入对象的选项修改:" ; cin >> select; switch(select){ case 1: { string name; cout <<"请输入新姓名:"; cin >> name; B->data.name = name; cout <<"修改完成!" << endl; break; } case 2: { string number; cout <<"请输入新电话:"; cin >> number; if(number.size()!=11){ cout << "手机号输入有误,请大于11位!" << endl; }else{ B->data.number = number; cout <<"修改完成!" << endl; } break; } case 3:{ string birthday; cout <<"请输入新生日:"; cin >> birthday; B->data.birthday = birthday; cout <<"修改完成!" << endl; break; } case 4:{ string adress; cout <<"请输入新地址:"; cin >> adress; B->data.adress = adress; cout <<"修改完成!" << endl; break; } default:cout <<"序号输入错误,请重新输入!"< > select; switch(select){ case 1:{ cout <<"请输入要查询的联系人姓名:" ; string name; cin >> name; LinkList B; B = SearchElemChar(L,1,name); if(B){ cout<<"查询成功!"<< endl; cout<<"联系人姓名:"<< B->data.name << endl; cout<<"联系人电话:"<< B->data.number << endl; cout<<"联系人生日:"<< B->data.birthday << endl; cout<<"联系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查询失败!请重新输入!"<< endl; } break; } case 2: { cout <<"请输入要查询的联系人电话:" ; string number; cin >> number; LinkList B; B = SearchElemChar(L,5,number); if(B){ cout<<"查询成功!"<< endl; cout<<"联系人姓名:"<< B->data.name << endl; cout<<"联系人电话:"<< B->data.number << endl; cout<<"联系人生日:"<< B->data.birthday << endl; cout<<"联系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查询失败!请重新输入!"<< endl; } break; } case 3:{ cout <<"请输入要查询的联系人生日:" ; string bd; cin >> bd; LinkList B; B = SearchElemChar(L,2,bd); if(B){ cout<<"查询成功!"<< endl; cout<<"联系人姓名:"<< B->data.name << endl; cout<<"联系人电话:"<< B->data.number << endl; cout<<"联系人生日:"<< B->data.birthday << endl; cout<<"联系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查询失败!请重新输入!"<< endl; } break; } case 4:{ cout <<"请输入要查询的联系人地址:" ; string ad; cin >> ad; LinkList B; B = SearchElemChar(L,3,ad); if(B){ cout<<"查询成功!"<< endl; cout<<"联系人姓名:"<< B->data.name << endl; cout<<"联系人电话:"<< B->data.number << endl; cout<<"联系人生日:"<< B->data.birthday << endl; cout<<"联系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查询失败!请重新输入!"<< endl; } break; break; } default:cout <<"序号输入错误,请重新输入!"< > name; LinkList D,P; P = SearchElemBefore(L,name); if(P){ D = P->next; P->next = D->next; delete D; //释放结点数据 cout << "删除成功!" <
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。