当前位置:文档之家› 人员通讯录教材1、问题描述编写一个简单的通讯录管理程序。通讯录记

人员通讯录教材1、问题描述编写一个简单的通讯录管理程序。通讯录记

Person(); void set_item(char*name,char*province,char*city,char*street,char*phone_num,int postaddr); friend ostream& operator << (ostream& stream, Person& p); void modify_item(Item it);
Node temp;
do { temp=new element;
} while(!temp);
if(name1==0)//若姓名为空则提示用户输入信息 {
char*name1=new char[20]; char*province1=new char[20]; char*city1=new char[20]; char*street1=new char[20]; char*phone_num1=new char[20]; cout<<"姓名 省份 城市 街道 电话号码 邮政编码\n"; cin>>name1>>province1>>city1>>street1>>phone_num1>>postaddr1; temp->p.set_item(name1,province1,city1,street1,phone_num1,postaddr1); temp->next=head; head=temp; delete name1; delete province1; delete city1; delete street1; delete phone_num1; return;
人员通讯录
1、问题描述
编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电 话号码,邮政编码等四项。
程序应提供的基本管理功能有: 1)添加:即增加一个人的记录到通讯录中。 2)显示:即在屏幕上显示所有通讯录中的人员信息,应能分屏显示。 3)存储:即将通讯录信息保存到一个文件中。 4)装入:即将文件中的信息读入程序。 5)查询:可根据姓名查找某人的相关信息,若找到显示其心目、地址、电话号码和邮 政编码。 6)修改:可修改一个人的除姓名外其他信息。
� 方法三: 程序创建一个 Person 类,表示通讯录的每条记录,将每条记录的指针存储在 STL 中的 list 容器中。 所使用知识点为:类,文件流操作,运算符重载(>>),STL 中的容器和迭代器,字 符串操作。 1) void inputfromfile(char*file_name,list<Person*> &list2)//从文件读入通讯录 2) void outputtoscreen(list<Person*> list3)//输出通讯录到屏幕 3) void insertfromscreen(list<Person*> &list2,char*file_name)//从屏幕读入时将一条记
};
//phonebook.cpp #include<cstdlib> #include<cstring> #include<iomanip> #include<fstream> #include<conio.h> #include"person.h" using namespace std; static int stn=0;
录插入到文件末端 4) int search(char* name,list<Person*> &list2)//输入姓名,从已有通讯录查找 5) int modify(char* name,list<Person*> &list2)//修改已有记录,可逐项修改 Main 函数进行流程控制
3、示例程序 方法一:
strcpy(m_province,province); strcpy(m_city,city); strcpy(m_street,street); strcpy(m_phone_num,phone_num); m_postaddr=postaddr;
}
void Phonebook::add_person(char*name1,char*province1,char*city1,char*street1,char*phone_num1,int postaddr1) {
next=0; } };
typedef element* Node;
class Phonebook { public:
Node head; public:
Phonebook() { head=NULL;
} void add_person(char*name1=0,char*province1=0,char*city1=0,char*street1=0,char*phone_num=0,int
if(m_city!=0) delete m_city;
if(m_street!=0) delete m_street;
if(m_phone_num!=0) delete m_phone_num;
}
void Person::modify_item(Item it) {
char * item; switch(it) { case It_name:
系人,则再让用户选择要修改的联系人,选好联系人后可选择不同的项进行修改 Phbok 类中 move_to_head 函数用于将链表中的节点移至链首,center 函数用于提供用户
操作接口。 main 函数实现创建通讯录、编辑通讯录和退出程序三个功能。
� 方法二: 程序中使用结构 contactData 存储通讯录中单条记录的信息(一个联系人的所有信息), 构造类 contact 表示通讯录,contact 中用一个数组 std::vector<contactData> cData 表示通讯录, 在 contact 中定义相关操作,从而实现通讯录功能,如: private: bool parse( std::string str ); void FindName(); void FindGroup(); void findOption(); public:
~Person();
public: char* m_name; char* m_province; char* m_city; char* m_street; char* m_phone_num; unsigned long m_postaddr;
};
struct element {
Person p; element* next; element() {
Person::Person() {
m_name=0; m_province=0; m_city=0; m_street=0; m_phone_num=0; m_postaddr=0; }
Pdelete m_name;
if(m_province!=0) delete m_province;
contact(); bool OpenFile( std::string fileName ); bool SaveAs( std::string fileName ); bool Add(); bool Delete(); bool Find(); bool Print(); bool Clear(); int size(); 应用程序中包含 Main 函数和菜单选择函数 Option。 该程序还对通讯录进行了一些扩展,如对通讯录里的成员进行分组,如:家人、朋友、 同事及其他。
注意:测试数据中应考虑到人员可以同名的情况。
2、问题解析 � 方法一: 程序中使用自定义类 Person 存储通讯录中单条记录的信息(一个联系人的所有信息),
Phbok 类表示通讯录,通讯录存储在无头节点的链表中,链表节点为结构体 element。 所使用知识点为:类,枚举类型,文件流操作,运算符重载(>>),链表,字符串操
postadd=0); void save_to_file(char*file_name=0); Node search(Node start,char* name,int &count,int ndo=0,int mshow=1); void display(); void load_from_file(char*file_name=0); void modify_person(char* name); void move_to_head(Node moved); void opt_center(); ~Phonebook();
item=m_name; break; case It_province: item=m_province; break; case It_city: item=m_city; break; case It_street: item=m_street; break; case It_phone_num: item=m_phone_num; break; default: item=NULL; }; if(!item) return; char * temp = new char[20]; cin>>temp; if(item!=0) delete item; item=new char[strlen(temp)+1]; strcpy(item,temp); delete temp; }
//person.h #include<iostream> #include<fstream> using namespace std;
enum Item {
It_name, It_province, It_city, It_street, It_phone_num, It_postaddr };
相关主题