<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C++使用連結串列儲存實現通訊錄功能管理的具體程式碼,供大家參考,具體內容如下
這是第二週老師給的一個小專案要求實現基本通訊錄功能,有資料的增刪改查,包含插入時間的能力。
標頭檔案
#include <iostream> #include <string> #include<malloc.h> //system功能呼叫 #include <windows.h> //使用本地系統API獲取插入時間 #include <sstream>
基本儲存結構體
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 << "未查到資料!"<<endl; } }else if(i == 2){//查生日 while(L!= NULL){ if(L->data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } else if(i == 3){//查地址 while(L!= NULL){ if(L->data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } }else if(i == 4){//查時間 while(L!= NULL){ if(L->data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } else if(i == 5){//查電話 while(L!= NULL){ if(L->data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } }
完整案例
//樂公第二週專案 實現基本通訊錄儲存結構 //基礎連結串列儲存資料 #include <iostream> #include <string> #include<malloc.h> //system功能呼叫 #include <windows.h> //使用本地系統API獲取插入時間 #include <sstream> #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 << "未查到資料!"<<endl; } }else if(i == 2){//查生日 while(L!= NULL){ if(L->data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } else if(i == 3){//查地址 while(L!= NULL){ if(L->data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } }else if(i == 4){//查時間 while(L!= NULL){ if(L->data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } else if(i == 5){//查電話 while(L!= NULL){ if(L->data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到資料!"<<endl; } } } LinkList SearchElemBefore(LinkList L,string e){ //刪除結點必須返回前個結點的地址,這裡查詢前個結點 LinkList P; while(L!= NULL){ if(L->data.name == e){ return P; }else{ P = L; L = L->next; } } if(L = NULL){ return L; } } int ShowMenu(){ //主選單 int a; cout<<"------歡迎您使用樂公通訊錄系統!------"<< endl; cout <<"-----請根據功能輸入對應的序號--------" <<endl; cout <<"-----------1.新建聯絡人--------------" <<endl; cout <<"--------2.檢視所有聯絡人-------------" <<endl; cout <<"--------3.修改選定聯絡人-------------" <<endl; cout <<"--------4.查詢選定聯絡人-------------" <<endl; cout <<"--------5.刪除選定聯絡人-------------" <<endl; cout <<"------------6.退出系統---------------" <<endl; cout << "請您輸入序號並按回車進入:" ; cin >> 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<<"通訊錄裡還沒有聯絡人,快去新建一下吧~"<<endl; }else{ while(L->next!=NULL){ L=L->next; cout<< "聯絡人姓名:" << L->data.name <<endl; cout<< "聯絡人電話:" << L->data.number<<endl; cout<< "聯絡人地址:" << L->data.adress <<endl; cout<< "聯絡人生日:" << L->data.birthday <<endl; cout<< "錄入時間:" << L->data.date <<endl; } cout<< "n"; } //system("pause"); } int serachsamename(LinkList L,string name){ //查詢是否存在姓名相同的聯絡人 while(L->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 << "您選擇了:新建聯絡人" <<endl; string number; string date; string time; string name; string adress; string birthday; cout << "請輸入聯絡人姓名:"; cin >> 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 << "您選擇了:遍歷聯絡人" <<endl; foreachelem(L); system("pause"); system("cls"); }else if(i==3){ cout << "您選擇了:修改選定聯絡人" <<endl; cout <<"請輸入要修改的聯絡人姓名:" ; string name; cin >> 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 <<"序號輸入錯誤,請重新輸入!"<<endl; } }else{ cout << "未查詢到聯絡人!請重新輸入!" << endl; } system("pause"); system("cls"); }else if(i==4){ system("cls"); cout << "您選擇了:查詢選定聯絡人" <<endl; cout <<"---------根據姓名查詢請輸入1---------" << endl; cout <<"---------根據電話查詢請輸入2---------" << endl; cout <<"---------根據生日查詢請輸入3---------" << endl; cout <<"---------根據地址查詢請輸入4---------" << endl; int select; cout <<"請根據序號輸入物件的進行查詢:" ; cin >> 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 <<"序號輸入錯誤,請重新輸入!"<<endl; } system("pause"); system("cls"); }else if(i==5){ cout << "您選擇了:刪除聯絡人" <<endl; string name; cout << "請輸入聯絡人姓名:" <<endl; cin >> name; LinkList D,P; P = SearchElemBefore(L,name); if(P){ D = P->next; P->next = D->next; delete D; //釋放結點資料 cout << "刪除成功!" <<endl; }else{ cout<<"查詢失敗!未找到指定聯絡人!"<< endl; } system("pause"); system("cls"); }else if(i==6){ cout << "系統已退出,歡迎下次使用!" <<endl; } else{ cout <<"輸入異常,請重新選擇輸入!" <<endl; system("pause"); system("cls"); } } return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45