📄 list.cpp
字号:
#include "list.h"
//构造函数 把记事本里的信息建立单项(?)链表
CAddrList::CAddrList()
{
CAddrList::m_isempty=false; //初始化为 非空的通讯录
m_ischain=false;
head=NULL;
}
void CAddrList::addmem()
{
char ch;
FILE *fp;
if(this->m_isempty)
{
if((fp=fopen("myaddrlist.txt","w"))==NULL)
{
cout<<"增加成员时文件打开失败!"<<endl;
return;
}
}
//fseek(fp,0,SEEK_END);
do
{
do
{
system("cls");
cout<<endl;
cout<<endl;
cout<<endl;
cout<<" ╔════════════════════╗"<<endl;
cout<<" ║ 这里可以添加通讯录的成员 ║"<<endl;
cout<<" ╔════════════════════╗"<<endl;
cout<<" ║ a.开始录入 b.查看说明 c.返回 ║"<<endl;
cout<<" ║ 如果你是第一次使用建议你看一下说明 ║"<<endl;
cout<<" ╚════════════════════╝"<<endl;
cin>>ch;
switch(ch)
{
case 'a':
case 'A':
break;
case 'b':
case 'B':
cout<<endl;
cout<<" ╔════════════════════╗"<<endl;
cout<<" ║ 1.如果没有某一项信息请填写“无” ║"<<endl;
cout<<" ║ 或者自己知道代表“无”的标记 ║"<<endl;
cout<<" ║ 2.生日的填写格式 (month/day) ║"<<endl;
cout<<" ║ 3.名字的长度最好不要超过3个 ║"<<endl;
cout<<" ║ 4.性别的长度最好不要超过3个 ║"<<endl;
cout<<" ║ 5.假如你加了信息,请正确退出程序 ║"<<endl;
cout<<" ║ 6.任意键继续增添功能... ║"<<endl;
cout<<" ╚════════════════════╝"<<endl;
system("pause>nul");
break;
case 'c':
case 'C':
if(this->m_isempty) fclose(fp);
return;
break;
default:
break;
}
}while(ch!='a' || ch!='a');
Person p;
//p=(Person*)malloc(sizeof(Person));
cout<<"请输入名字:"; cin>>p.name;
cout<<"请输入性别(M/W):"; cin>>p.sex;
cout<<"请输入手机号码:"; cin>>p.mobile;
cout<<"请输入座机号码:"; cin>>p.telph;
cout<<"请输入电子邮件:"; cin>>p.email;
cout<<"请输入邮政编号:"; cin>>p.postalcode;
cout<<"请输入家庭住址:"; cin>>p.homeaddr;
cout<<"请输入工作地址:"; cin>>p.workaddr;
cout<<"请输入 QQ 号码:"; cin>>p.qq;
cout<<"请输入对方生日:"; cin>>p.birthday;
if(this->m_isempty)
{
fwrite(&p,sizeof(Person),1,fp);
this->m_isempty=false;
fclose(fp);
}
//把新成员插到最前
if(m_ischain)
{
chain *pc;
pc=(chain*)malloc(sizeof(chain));
pc->pnext=head;
pc->info=p;
this->head=pc;
}
else
{
//建立链表
this->createchain();
}
}while(cout<<"继续添加吗?(Y/N)...",cin>>ch,(ch=='Y' || ch=='y'));
//this->save();
/* //测试
if((fp=fopen("myaddrlist.txt","r+"))==NULL)
{
cout<<"增加成员时文件打开失败!"<<endl;
return;
}
Person myPer;
fread(&myPer,sizeof(Person),1,fp);
cout<<myPer.name;
fclose(fp);
*/
}
void CAddrList::display()
{
cout<<"\t姓 名\t\t性 别\t\t 手 机 \t\t家庭住址"<<endl;
cout<<"\t════════════════════════════════"<<endl;
chain *temp;
temp=NULL;
if(m_ischain)
{
temp=this->head;
while(temp!=NULL)
{
cout<<"\t"
<<temp->info.name<<"\t\t"
<<temp->info.sex<<"\t\t"
<<temp->info.mobile<<"\t\t"
<<temp->info.homeaddr<<endl;
temp=temp->pnext;
}
}
cout<<"\t════════════════════════════════"<<endl;
}
void CAddrList::query()
{
if(!this->m_ischain)
{
cout<<"通讯录为空!任意键返回..."<<endl;
system("pause>nul");
return;
}
char get;
char getchs[20];
do
{
system("cls");
cout<<" ╔══════════╗"<<endl;
cout<<" ║ 选择查找方式 ║"<<endl;
cout<<" ╚══════════╝"<<endl;
cout<<" ║a.姓名 d.手机║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║b.性别 e.邮编║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║c.座机 f.返回║"<<endl;
cout<<" ╚══════════╝"<<endl;
cin>>get;
switch(get)
{
case 'a':
case 'A':
cout<<"请输入姓名:";
cin>>getchs;
gettell(1,getchs);
break;
case 'b':
case 'B':
cout<<"请输入性别:";
cin>>getchs;
gettell(2,getchs);
break;
case 'c':
case 'C':
cout<<"请输入座机号:";
cin>>getchs;
gettell(3,getchs);
break;
case 'd':
case 'D':
cout<<"请输入手机号:";
cin>>getchs;
gettell(4,getchs);
break;
case 'e':
case 'E':
cout<<"请输入邮编:";
cin>>getchs;
gettell(5,getchs);
break;
case 'f':
case 'F':
return;
break;
}//switch
}while(cout<<"继续查询吗?(Y/N):",cin>>get,(get=='Y' || get=='y'));
}
void CAddrList::remove()
{
if(!this->m_ischain)
{
cout<<"通讯录为空!任意键返回主菜单..."<<endl;
system("pause>nul");
return;
}
char get;
char getname[15];
chain *temp,*pre;
do
{
pre=temp=this->head;
system("cls");
this->display();
cout<<" 返回主菜单(BACK)"<<endl;
cout<<" 你要删除谁的记录(输入姓名):";
cin>>getname;
if(strcmp(getname,"back")==0 || strcmp(getname,"BACK")==0) return;
while(temp!=NULL)
{
if(strcmp(getname,temp->info.name)==0)
{
if(cout<<"真的要删除?(Y/N):",cin>>get,(get=='Y' || get=='y'))
{
if(temp==head)//如果为第一个结点
{
this->head=temp->pnext;
free(temp);
}
else if(temp->pnext==NULL)//最后一个节点
{
pre->pnext=NULL;
free(temp);
}
else//一般结点
{
pre->pnext=temp->pnext;
free(temp);
}
break;//删除一个节点后跳出循环
}
}
pre=temp;
temp=temp->pnext;
}
}while(cout<<"继续删除吗?(Y/N):",cin>>get,(get=='Y' || get=='y'));
}
void CAddrList::rework()
{
char get;
char getname[10];
chain *temp;
if(this->head==NULL)
{
cout<<"通讯录为空!任意键返回..."<<endl;
system("pause>nul");
return;
}
while(1)
{
label:
system("cls");
this->display();
cout<<" 返回主菜单(BACK)"<<endl;
cout<<"确定要修改?(Y/N):";
cin>>get;
if(get=='N' || get=='n') return;
cout<<"输入你要修改的人的名字:";
cin>>getname;
if(strcmp(getname,"BACK")==0 || strcmp(getname,"back")==0) return;
temp=head;
while(temp!=NULL)
{
if(strcmp(getname,temp->info.name) == 0)
{
do
{
system("cls");
cout<<" ╔══════════╗"<<endl;
cout<<" ║ 选择修改项目 ║"<<endl;
cout<<" ╚══════════╝"<<endl;
cout<<" ║a.姓名 f.Q Q ║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║b.性别 g.mail║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║c.座机 h.邮编║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║d.手机 i.地址║"<<endl;
cout<<" ║ ║"<<endl;
cout<<" ║e.生日 j.返回║"<<endl;
cout<<" ╚══════════╝"<<endl;
cin>>get;
switch(get)
{
case 'a':
case 'A':
cout<<"新姓名:"; cin>>temp->info.name;
break;
case 'b':
case 'B':
cout<<"新性别:"; cin>>temp->info.sex;
break;
case 'c':
case 'C':
cout<<"新座机:"; cin>>temp->info.telph;
break;
case 'd':
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -