通讯录——数据结构课设
帮同学写了n多课设,认为蛮简单。没怎么在意,这又花20min帮人写了一个,决定发在博客上,以后有谁要类似的就直接给个链接, ;-) 机智的窝
任务要求:
题目描写叙述:通讯录的基本属性包含编号、姓名、性别、住址、联系电话等。要求实现最主要的功能模块例如以下:
(1)通讯录的建立;该模块主要完毕将数据存储工作。
记录能够从文本文件里读入。也能够从键盘逐条输入记 录。
(2)通讯录查询;用户能够依照联系人的姓名或电话号码查询。若查到。则显示该记录的信息。否则,显示查找 失败的提示信息。
(3)通讯录的维护;实现对记录的改动、删除、插入和排序等操作。
(4)通讯录的输出;实现屏幕显示和将记录信息写入文本文件里
功能要求及说明:
(1)使用菜单选择操作,具有友好的人机交互提示和显示,方便用户输入及查看程序执行过程、结果。
(2)程序能够依据用户的选择多次执行,直到用户选择退出;
(3)对于执行解决这个问题的步骤(比如从键盘输入的数据、输出到显示器的结果),除了可以在显示器上显示以 外。可以将处理后的结果用文件的方式保存到outfile.txt文件里。
事实上就是对链表的一些操作了,以下直接贴代码吧:
#include <iostream> #include <cstdio> #include <string> #include <fstream> using namespace std; typedef struct Node{ //联系人节点信息 string name; string sex; string adress; string phoneNum; struct Node * next; Node(Node * p = NULL ){ next= p;} Node(const string &na,const string &se,const string &ad,const string &ph, Node * p = NULL){ name = na; sex= se; adress = ad; phoneNum =ph; next= p; } }Person; class phonePage{ public : phonePage(){ //构造函数。 Head = new Person(); } //为新插入的联系人创建节点 Person *creatP(string na, string se, string ad,string ph){ Person *tmp= new Person(na,se,ad,ph); return tmp; } //为新插入的联系人创建节点 Person *creatP(){ Person *tmp= new Person(); cout<<"输入联系人的姓名:"; cin>> tmp->name; cout<<"输入联系人的性别:"; cin>> tmp->sex; cout<<"输入联系人的地址:"; cin>> tmp->adress; cout<<"输入联系人的号码:"; cin>> tmp->phoneNum; tmp->next= NULL; return tmp; } //文件读取联系人 void addPfromFile(){ ifstream ins; string na,se,ad,ph; ins.open("input.txt"); Person * newP; Person *inse; while(ins>>na>> se>> ad >> ph ){ newP= creatP(na,se,ad,ph); inse = findLast(); inse->next = newP; } cout<< "导入联系人完成"<<endl; ins.close(); } //查找插入联系人的位置 Person *findLast(){ Person *p = Head; while( p->next !=NULL ) p=p->next; return p; } //键盘录入联系人信息 void addPformKb(){ Person * newP =creatP(); newP->next = Head->next; Head->next = newP; } //将全部联系人信息写到output.txt void WtoFile(){ ofstream outs; outs.open("output.txt"); Person *p = Head->next; while(p != NULL ){ outs<<p->name<<" "<< p->sex << " "<< p->adress << " "<< p->phoneNum<< endl; p=p->next; } outs.close(); } //改动联系人信息 void resetPerson(Person *someP){ if(someP == NULL ){ cout<<"查无此人"<<endl; }else{ cout<<"要改动的联系人为."<<endl; printP(someP); cout<< "又一次输入该联系人的信息."<<endl; cout<<"输入联系人的姓名:"; cin>> someP->name; cout<<"输入联系人的性别:"; cin>> someP->sex; cout<<"输入联系人的地址:"; cin>> someP->adress; cout<<"输入联系人的号码:"; cin>> someP->phoneNum; cout<<"改动成功."<<endl; } } //查找须要删除的联系人。并返回其前一节点的指针 Person * findFrontDelP(){ Person * q= Head; Person * p =Head->next; int cho; string str; cout<<"输入要删除的联系的信息"<<endl; cout<<"1:按姓名查找."<<endl; cout<<"2:按号码查找."<<endl; cout<<"输入选择:"; cin>> cho; if(cho == 1 ) cout<< "输入联系人姓名:"; else if(cho == 2 ) cout<< "输入联系人号码:"; else{ cout<< "选择输入有误."<<endl; return NULL; } cin>> str; while( p!=NULL ){ if(cho == 1 ){ if(p->name == str ) break; }else{ if(p->phoneNum == str ) break; } p=p->next; q=q->next; } if(p!=NULL ) return q; return NULL; } //删除某人 void delP(){ Person * someP= findFrontDelP(); if( someP == NULL ){ cout<< "联系人不存在."<<endl; }else{ cout<<"要删除的联系人为:"<<endl; printP(someP->next); char suredel; cout<< "是否确定删除:"<<endl; cout<<"Y:确定删除."<<endl; cout<<"N:放弃."<<endl; cout<<"输入选项:"; cin>> suredel; if(suredel == 'Y' || suredel == 'y'){ Person * del = someP->next; someP->next = someP->next->next; delete del; WtoFile(); } } } //查找联系人,并返回该节点指针 Person *findP(){ Person *p =Head->next; int cho; string str; cout<<"1:按姓名查找."<<endl; cout<<"2:按号码查找."<<endl; cout<<"输入选择:"; cin>> cho; if(cho == 1 ) cout<< "输入联系人姓名:"; else if(cho == 2 ) cout<< "输入联系人号码:"; else{ cout<< "选择输入有误."<<endl; return NULL; } cin>> str; while(p!=NULL){ if(cho == 1 ){ if(p->name == str ) break; }else{ if(p->phoneNum == str ) break; } p=p->next; } if(p == NULL ) return NULL; return p; } //打印全部联系人 void printAll(){ Person *someP= Head->next; int num=0; if(someP == NULL ) cout<< "通讯录为空"<<endl; while(someP != NULL ){ cout<< ++num<< " :"<<endl; printP(someP); someP= someP->next; } } //输出查找到的联系人 void printP(Person *somebody){ if(somebody !=NULL ){ cout<<"姓名:" <<somebody->name <<endl; cout<<"性别:" <<somebody->sex <<endl; cout<<"地址:" << somebody->adress <<endl; cout<<"电话:" <<somebody->phoneNum <<endl; }else{ cout<< "查无此人"<<endl; } } private: Person * Head; }; int mnue(){ int cho; cout<<"------------------------"<<endl; cout << " 田茂茂通讯录 " << endl; cout<<"功能菜单:"<<endl; cout<<"1:通讯录的建立"<<endl; cout<<"2:通讯录查询"<<endl; cout<<"3:通讯录的维护"<<endl; cout<<"4:通讯录的输出"<<endl; cout<<"5:退出"<<endl; cout<<"输入选择:"; cin>> cho; while(cho<1 || cho > 5){ cout<<"输入有误,从新输入."<<endl; cout<<"输入选择:"; cin>>cho; } return cho; } int main() { phonePage *tml = new phonePage(); int cho; while( cho =mnue()){ if(cho == 1){ int tmp; cout<<"1:文件里导入通讯录"<<endl; cout<<"2:键盘录入"<<endl; cout<<"输入选项:"; cin>>tmp; if(tmp == 1){ tml->addPfromFile(); }else if(tmp == 2){ tml->addPformKb(); }else{ cout<<"输入有误."<<endl; } }else if(cho == 2){ tml->printP( tml->findP() ); }else if(cho == 3){ int tmp; cout<<"1:改动"<<endl; cout<<"2:删除"<<endl; cout<<"3:查找"<<endl; cout<<"输入选项:"; cin>> tmp; if(tmp == 1){ tml->resetPerson( tml->findP() ); }else if(tmp == 2){ tml->delP(); }else if(tmp == 3){ tml->printP( tml->findP() ) ; }else{ cout<<"输入有误."<<endl; } }else if(cho == 4){ cout<<"你的通讯录例如以下:"<<endl; tml->printAll(); tml->WtoFile(); }else{ break; } } return 0; }