C++实现简单通讯录
本文实例为大家分享了C++实现简单通讯录的具体代码,供大家参考,具体内容如下
说明:
1程序中运用到两个类,一个是Person类,另一个是List类。前者存储用户信息,后者主要用于操作,如增删改查等。但由于本程序中没有涉及到太复杂的功能,用户信息可以由一个简单的结构体表示,但是为了以后拓展方便,和达到学习运算符重载的目的,还是使用了类。
2List类中的Reflush()方法用户刷新文件内容,即每次修改了vector后要将最新内容写入到文件。因此增删改操作中都要调用该操作,这种方法在数据库开发中常用到,以小见大。
3 setout()方法设置字符左对齐,便于美观。另外std::cout.width(15)设置输出字符域宽度,只对下一次输出有效。
4判断文本文件是否为空还有另一种方法,即string类中的empty()方法,但为了读取方便没有采用。
5其实对于通讯录的操作只是在类内的vector容器中进行,只有最后刷新的时候同步到磁盘文件中。
6一些函数中设置多个返回值有利于判断操作的情况。
Person.h与cpp文件:
#ifndefPERSON_H_ #definePERSON_H_ #includeclassPerson { public: std::stringname; std::stringtel; public: Person(); ~Person(); intoperator==(constPerson&p);//重载==运算符,本程序中并没有用到 private: }; #endif//!PERSON_H_
#include"Person.h" Person::Person() { } Person::~Person() { } intPerson::operator==(constPerson&p) { if(this->name==p.name) { if(this->tel==p.tel) return0; else return-1; } else return-2; }
List.h文件:
#ifndefLIST_H_ #defineLIST_H_ #include#include"Person.h" classList { public: List(); ~List(); voidShowfile();//显示通讯录 intReadfile();//从磁盘读取文件 voidAdd(); voidReflush();//刷新数据,即重新写入磁盘 voidDel(); voidSearch(); private: std::vector myfile; }; inlinevoidsetout();//输出格式控制 #endif
List.cpp文件:
#include"List.h" #include#include #include List::List() { } List::~List() { } voidsetout()//输出格式控制,即左对齐 { std::cout.setf(std::ios_base::left,std::ios_base::adjustfield); } voidList::Showfile() { std::vector ::iteratoriter; setout(); for(iter=this->myfile.begin();iter!=this->myfile.end();iter++) { std::cout.width(15);//字域宽度为15 std::cout< name; std::cout.width(15); std::cout< tel<<"\n"; } } intList::Readfile() { std::fstreamreadfile("mylist.txt"); introws=0; if(readfile)//如果文件存在 { std::cout<<"*******Telephonebook********\n"; std::cout<<"name:"<<"\t\t"<<"phone:"<<"\n"; Personp; if(!(readfile>>p.name>>p.tel))//如果第一次读取为空 { std::cout<<"\tNULL\n"; return1; } myfile.push_back(p); rows++; while(readfile>>p.name>>p.tel)//读取后存入vector容器中 { rows++; myfile.push_back(p); } this->Showfile(); std::cout<<"Total:\t"< ::iteratoriter; setout(); for(iter=this->myfile.begin();iter!=this->myfile.end();iter++) { outfile.width(15); outfile< name; outfile.width(15); outfile< tel<<"\n"; } outfile.close(); } voidList::Add() { Personp; std::cout<<"pleaseinputthename:\n"; std::cin>>p.name; std::cout<<"pleaseinputthephone\n"; std::cin>>p.tel; std::cout<<"sucessfullycreated!\n"; myfile.push_back(p); this->Reflush(); } voidList::Del() { if(myfile.empty()) { std::cout<<"noinfotodel!\n"; return; } std::stringname; std::cout<<"pleaseinputthenameyouwantyoudel:\n"; std::cin>>name; std::vector ::iteratoriter; for(iter=this->myfile.begin();iter!=this->myfile.end();) { if(iter->name==name) { myfile.erase(iter);//删除对应项 std::cout<<"sucessfullydelete!\n"; this->Reflush(); return; } else ++iter; } std::cout<<"noinfomatches!\n"; } voidList::Search() { std::stringname; std::cout<<"pleaseinputthenameyouwanttosearch:\n"; std::cin>>name; std::vector ::iteratoriter; for(iter=this->myfile.begin();iter!=this->myfile.end();iter++) { if(name==iter->name) { std::cout< name<<"\t\t"< tel<<"\n"; return; } } std::cout<<"noinfomatches!\n"; }
main文件:
//contact.cpp:定义控制台应用程序的入口点。 // #include"stdafx.h" #include"List.h" #include#include usingnamespacestd; intMenu() { intnum; cout<<"********************"< >num; returnnum; } int_tmain(intargc,_TCHAR*argv[]) { Listmylist; mylist.Readfile(); intnum=Menu(); boolflags=1; while(flags) { switch(num) { case1: mylist.Add(); break; case2: mylist.Del(); break; case3: mylist.Search(); break; case4: mylist.Showfile(); break; case5: cout<<"Bye.\n"; return0; default: cout<<"没有该选项请重输!\n"; break; } cout<<"请输入选项:\n"; cin>>num; } system("pause"); return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。