最近在写面向对象的课程设计我的程序测试一直是混乱的,不知道为什么,求解答,题目要求是这样的
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;
}