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