帮同学写了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<name<<" "<< p->sex << " "<< p->adress << " "<< p->phoneNum<< endl; p=p->next;

}

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<<"姓名:" <name <

cout<<"性别:" <sex <

cout<<"地址:" << somebody->adress <

cout<<"电话:" <phoneNum <

}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;

}

查看原文