📄 电话号码管理.cpp
字号:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<iomanip.h>
#include<string.h>
#include<stdlib.h>
struct friend_node //结构体类型定义,包括:姓、名和电话号码
{
char last_name[20];
char first_name[15];
char phone_num[12];
friend_node * next;
friend_node * last;
};
class list
{
friend_node * head_ptr; //链头指针
friend_node * end_ptr; //链尾结点
friend_node * current_ptr; //用于指明当前在链表中的位置
public:
list()
{ head_ptr=end_ptr=current_ptr=NULL; }
~list();
void load_record_from_file();
void add_record_to_file();
void changephone_num();
void handle_choise(int);
void insert_node(friend_node *);
void add_record();
void display_list();
void delete_record();
void search_by_name();
void search_by_lastname();
void help_me();
};
void getchar()
{
cout<<"\n\n按任意键继续."<<endl;
getch();
}
int choice,n;
void main()
{
cout<<"THIS FILE WAS WRITTEN BY HUANG KUN."<<endl<<endl;
cout<<"欢迎来到电话簿管理系统!"<<endl;
getchar();
list l1;
l1.load_record_from_file();
do
{
system("cls");
cout<<"1-添加记录"<<endl;
cout<<"2-显示所有记录"<<endl;
cout<<"3-查找记录"<<endl;
cout<<"4-删除记录"<<endl;
cout<<"5-帮助"<<endl;
cout<<"6-修改记录"<<endl;
cout<<"7-退出系统"<<endl;
cout<<"请选择:";
cin>>choice;
l1.handle_choise(choice);
}while(choice!=7);
}
void list::add_record()
{
system("cls");
friend_node * ptr=new friend_node;
cin.ignore(20,'\n');
cout<<"姓:";
cin.getline(ptr->last_name,20);
cout<<"名:";
cin.getline(ptr->first_name,15);
cout<<"电话号码:";
cin.getline(ptr->phone_num,12);
ptr->last=ptr->next=NULL;
if(head_ptr==NULL) head_ptr=end_ptr=ptr;
else
{
end_ptr->next=ptr;
ptr->last=end_ptr;
end_ptr=ptr;
}
}
void list::add_record_to_file()
{
ofstream outfile;
outfile.open("friend.dat",ios::in);
if(&outfile)
{
current_ptr=head_ptr;
while(current_ptr)
{
outfile<<current_ptr->last_name<<endl;
outfile<<current_ptr->first_name<<endl;
outfile<<current_ptr->phone_num<<endl;
current_ptr=current_ptr->next;
}
outfile<<"END OF FILE"<<endl;
outfile.close();
}
else cout<<"写入失败"<<endl;
}
void list::changephone_num()
{
cin.ignore(20,'\n');
char lastname[20],firstname[15];
cout<<"姓:";
cin.getline(lastname,20);
cout<<"名:";
cin.getline(firstname,15);
current_ptr=head_ptr;
while((current_ptr!=0)&&((strcmp(current_ptr->last_name,lastname)!=0)||(strcmp(current_ptr->first_name,firstname)!=0)))
current_ptr=current_ptr->next;
if(current_ptr)
{
cout<<"\n\n姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
cout<<"电话:"<<current_ptr->phone_num<<endl;
do
{
cout<<"\n1,修改姓 2,修改名 3,修改电话号码 4,退出"<<endl;
cin>>n;
switch(n)
{
case 1:
cin.ignore(20,'\n');
cout<<"姓:";
cin.getline(current_ptr->first_name,15);
break;
case 2:
cin.ignore(20,'\n');
cout<<"名:";
cin.getline(current_ptr->last_name,20);
break;
case 3:
cin.ignore(20,'\n');
cout<<"电话号码:";
cin.getline(current_ptr->phone_num,20);
break;
}
}while(n!=4);
}
else cout<<"没有该记录!"<<endl;
}
void list::delete_record()
{
char lastname[20],firstname[15];
n=0;
friend_node * ptr;
cin.ignore(20,'\n');
cout<<"请输入姓:";
cin.getline(lastname,20);
cout<<"请输入名:";
cin.getline(firstname,15);
ptr=head_ptr;
if(ptr)
{
while((ptr!=0)&&((strcmp(ptr->last_name,lastname)!=0)||(strcmp(ptr->first_name,firstname)!=0)))
ptr=ptr->next;
if(ptr)
{
if(ptr->last) ptr->last->next=ptr->next;
else head_ptr=ptr->next;
if(ptr->next) ptr->next->last=ptr->last;
else end_ptr=ptr->last;
delete ptr;
n++;
}
}
if(n) cout<<"成功!"<<endl;
else cout<<"无点可删!"<<endl;
getchar();
}
list::~list()
{
while(head_ptr)
{
current_ptr=head_ptr;
head_ptr=head_ptr->next;
delete current_ptr;
}
}
void list::load_record_from_file()
{
friend_node * new_record;
fstream infile;
n=0;
infile.open("friend.dat",ios::in);
if(&infile)
{
do
{
new_record=new friend_node;
if(new_record)
{
infile.get(new_record->last_name,20);
infile.ignore(20,'\n');
if((strcmp(new_record->last_name,""))&&(strcmp(new_record->last_name,"END OF FILE")))
{
infile.get(new_record->first_name,15);
infile.ignore(20,'\n');
infile.get(new_record->phone_num,12);
infile.ignore(20,'\n');
insert_node(new_record);
}
else n=1;
}
else
{
cout<<"读取失败!"<<endl;
delete new_record;
n=1;
}
}while(n==0);
infile.close();
}
cout<<"读取完毕!"<<endl;
}
void list::display_list()
{
int count=0;
system("cls");
cout<<"每次显示几个记录?";
cin>>n;
cin.ignore(20,'\n');
system("cls");
current_ptr=head_ptr;
while(current_ptr)
{
cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
cout<<"电话:"<<current_ptr->phone_num<<endl<<endl;
current_ptr=current_ptr->next;
count++;
if(count%n==0)
{
getchar();
system("cls");
}
}
cout<<"没有数据!"<<endl;
getchar();
}
void list::handle_choise(int a)
{
switch(a)
{
case 1:add_record(); break;
case 2:display_list(); break;
case 3:
cout<<"1 按姓查找,2 按姓名查找。";
cin>>n;
if(n==1) search_by_lastname();
if(n==2) search_by_name();
break;
case 4:delete_record(); break;
case 5:help_me(); break;
case 6:changephone_num(); break;
case 7:add_record_to_file(); break;
}
}
void list::insert_node(friend_node * a)
{
a->last=a->next=0;
if(head_ptr==0) head_ptr=end_ptr=a;
else
{
a->last=end_ptr;
end_ptr->next=a;
end_ptr=a;
}
}
void list::help_me()
{
do{
system("cls");
cout<<"欢迎来到帮助系统,请选择:"<<endl;
cout<<"1,我的记录怎么了?"<<endl;
cout<<"2,如何清除所有记录?"<<endl;
cout<<"3,何时会有新版本?"<<endl;
cout<<"4,新版本会增加什么功能?"<<endl;
cout<<"5,离开。"<<endl;
cin>>n;
switch(n)
{
case 1:
system("cls");
cout<<"在目录里查找文件Friends.dat;"<<endl;
cout<<"如果不存在则将一个文件该为Friends.dat;"<<endl;
getchar();
break;
case 2:
system("cls");
cout<<"删除文件Friends.dat;"<<endl;
getchar();
break;
case 3:
system("cls");
cout<<"等我有时间。"<<endl;
getchar();
break;
case 4:
system("cls");
cout<<"我希望增加如下功能:"<<endl;
cout<<"多个用户及增加密码;"<<endl;
cout<<"加密功能"<<endl;
cout<<"删除所有记录的指令;"<<endl;
cout<<"病毒预防系统;"<<endl;
getchar();
break;
}
}while(n!=5);
}
void list::search_by_lastname()
{
system("cls");
char lastname[20];
n=0;
cin.ignore(20,'\n');
cout<<"姓:";
cin.getline(lastname,20);
current_ptr=head_ptr;
while(current_ptr)
{
if(strcmp(current_ptr->last_name,lastname)==0)
{
cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
cout<<"电话号码:"<<current_ptr->phone_num<<endl;
n++;
}
current_ptr=current_ptr->next;
}
cout<<"共找到"<<n<<"个记录。"<<endl;
getchar();
}
void list::search_by_name()
{
system("cls");
char lastname[20],firstname[15];
n=0;
cin.ignore(20,'\n');
cout<<"姓:";
cin.getline(lastname,20);
cout<<"名:";
cin.getline(firstname,15);
current_ptr=head_ptr;
if(current_ptr)
{
while(current_ptr&&(strcmp(current_ptr->last_name,lastname)||strcmp(current_ptr->first_name,firstname)))
current_ptr=current_ptr->next;
if(current_ptr)
{
cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
cout<<"电话号码:"<<current_ptr->phone_num<<endl;
n++;
}
}
if(n) cout<<"成功!"<<endl;
else cout<<"找不到!"<<endl;
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -