通讯录管理系统

最近在写面向对象的课程设计我的程序测试一直是混乱的,不知道为什么,求解答,题目要求是这样的

1.      通讯录管理

问题描述

编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。

基本要求

程序应提供的基本管理功能有:

(1)       添加:即增加一个人的记录到通信录中

(2)       显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。

(3)       存储:即将通讯录信息保存在一个文件中。//8章

(4)       装入:即将文件中的信息读入程序。

(5)       查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。

(6)       修改:可修改一个人的除姓名外其它信息。

测试数据

程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。

实现提示

程序可用一个单向链表来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个类Cperson来实现,作为链表的值指针指向这些Cperson类对象,通过链表的遍历可以操作这些数据。


#include<iostream>

#include<string>
#include<cstdlib>
#include<iomanip>
#include<fstream>
using namespace std;
class Cperson
{
public:
void set()
{
cin>>name>>addr>>tel>>post;
}
void sign(Cperson &s)
{
   s.name=name;
   s.addr=addr;
   s.tel=tel;
   s.post=post;
}
string getname()
{
   return name;
}
void revise()
{
   cout<<"请输入要修改内容:"<<endl;
        cout<<"地址\t\t电话号码\t邮政编码"<<endl;
cin>>addr>>tel>>post;
     cout<<"修改成功"<<endl;
}
void disp()
{
   cout<<name<<"\t"<<addr<<"\t"<<tel<<"\t"<<post<<endl;
}
private:
string name;
string addr;
int tel;
int post;
};


struct List
{
Cperson mem;
List *next;
};
void memory(List *p)
{
List *t;
Cperson s;
ofstream output("address.txt",ios::binary);
    if(!output)
    {
        cout<<"File cannot be opened."<<endl;
        return;
    }
 t=p->next;
    while(t)
    {
    t->mem.sign(s);
    output.write((char*)&s,sizeof(Cperson));
    t=t->next;
    }
    output.close();
free(t);
}
void set(List *p)
{
    
    List *t;
    int n;
    cout<<"请输入联系人的个数:";
    cin>>n;
    cout<<"名字\t地址\t\t\t电话号码\t邮政编码"<<endl;
   
        for(int i=0;i<n;i++)
        {
        t=(struct List*)malloc(sizeof(struct List));
        t->mem.set();
        t->next=p->next;
        p->next=t;
       
    }
    t=p->next;
    
      while(t)
      {
      t->mem.disp();
      t=t->next;
      }
    free(t);
}
void insert(List *p)
{
List *t;
cout<<"请输入联系人的信息:";
        t=(struct List*)malloc(sizeof(struct List));
        cout<<"名字\t地址\t\t电话号码\t邮政编码"<<endl;
        t->mem.set();
        t->next=p->next;
        p->next=t;
        t=p->next;
      while(t)
      {
      t->mem.disp();
      t=t->next;
      }
}


void che(List *p)
{
string na,nb;
    List *t;
    t=p->next;
    cout<<"请输入您要查找联系人的名字:";
    cin>>na;
    while(t)
    {
     nb=t->mem.getname();
    if(na==nb) 
        {
    cout<<"输出结果:"<<endl;
    cout<<"名字\t地址\t电话号码\t\t邮政编码"<<endl;
    t->mem.disp();
    }
    t=t->next;
    
    }
free(t);
}
void rev(List *p)
{
    string na,nb;
    cout<<"请输入您要修改联系人的名字:";
    cin>>na;
    List *t;
    t=p->next;


    while(t)
    {
    nb=t->mem.getname();
        if(na==nb) {t->mem.revise();break;}
        t=t->next;
    }
    if(t==NULL) cout<<"找不到该联系人"<<endl;
    
    cout<<"输出结果:"<<endl;
    cout<<"名字\t地址\t电话号码\t邮政编码"<<endl;
    t=p->next;
    while(t)
    {
        t->mem.disp();
        t=t->next;
    }
    free(t);
}
void dis(List *p)
{
memory(p);
    Cperson s;
    ifstream input("address.txt",ios::binary);
    if(!input)
    {
        cout<<"File cannot be opened."<<endl;
        return;
    }
    cout<<"通讯录中所有联系人的信息:"<<endl;
        cout<<"名字\t地址\t电话号码\t邮政编码"<<endl;
             input.read((char*)&s,sizeof(Cperson));
        while(input)
        {
            s.disp();
            input.read((char*)&s,sizeof(Cperson));
        }
        input.close();
}
int main()
{
List *per;
per=(struct List*)malloc(sizeof(struct List));
per->next=NULL;
int sel;
while(1){
    cout<<"\n\n";
cout<<"\t\t**************通讯录管理系统***************"<<endl;
cout<<endl;
cout<<"\t\t1:添加联系人到通讯录   2:输出所有联系人数据"<<endl;
cout<<"\t\t3:按名字查询信息    4:修改已有联系人的信息"<<endl;
cout<<"\t\t 5:插入新的联系人                6:退出系统"<<endl;
cout<<"\t\t*******************************************"<<endl;
cout<<"请输入你的选择:";
cin>>sel;
switch(sel)
{
    case 1:
    {
    set(per);break;
    }
    case 2:
    {
    dis(per);break;
    }
    case 3:
    {
    che(per);break;
    }
    case 4:
    {
    rev(per);break;
    }
    case 5:
    {
    insert(per);break;
    }
    case 6:exit(1);
}
}List *t=per;
while(per->next!=NULL)
{
    t=per;
    per=t->next;
    free(t);
}
free(per);


return 0;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值