📄 vc++phonetext.txt
字号:
cin.getline(findstr,sizeof(findstr));
if(strlen(findstr)<sizeof(findstr)-1)
{
if(strlen(findstr) == 0)
continue;
while(next_entry != NULL)
{
if(stricmp(next_entry->name,"") != 0)
{
id++;
if(stricmp(next_entry->name,findstr) == 0)
break;
}
next_entry = next_entry->next;
}
if(next_entry == NULL)
{
cout<<endl<<"没有您要找的姓名."<<endl;
break;
}
else
{
if(!Info_Mod_Del(id))
{
cout<<endl;
return;
}
else
break;
}
}
else
{
Rest_Eat();
continue;
}
}
}
else if(ch == 'T' || ch == 't')
{
while(1)
{
cout<<endl<<"请输入您要查找的电话号码,退出请按Q:";
othercount = 0;
next_entry = head;
id = 0;
cin.getline(findstr,sizeof(findstr));
if(strlen(findstr)<sizeof(findstr)-1)
{
if(strlen(findstr) == 0)
continue;
if(stricmp(findstr,"Q") == 0)
{
cout<<endl;
return;
}
cout<<endl;
cout<<setw(80)<<setfill('=')<<"=";
while(next_entry != NULL)
{
if(stricmp(next_entry->tel,"") != 0)
{
id++;
if(stricmp(next_entry->tel,findstr) == 0)
{
ids[othercount] = id;
othercount++;
cout<<id<<"."<<next_entry->name<<"(电话号码:"<<next_entry->tel<<")"<<endl;
}
}
next_entry = next_entry->next;
}
cout<<setw(80)<<setfill('=')<<"=";
if(othercount == 0)
{
cout<<"没有您要找的电话号码."<<endl;
break;
}
else
{
cout<<"共检索到"<<othercount<<"个您要找的电话号码."<<endl;
while(1)
{
cout<<endl<<"查看详情请输入相应的序号,返回请按R,退出请按Q:";
cin.getline(num,sizeof(num));
if(strlen(num) < sizeof(num)-1)
{
if(strlen(num) == 0)
continue;
if(stricmp(num,"R") == 0)
break;
if(stricmp(num,"Q") == 0)
{
cout<<endl;
return;
}
for(i=0;i<strlen(num);i++)
{
if(num[i] >= '0' && num[i] <= '9')
continue;
else
break;
}
if(i == strlen(num))
{
for(i=0;i<othercount;i++)
{
if((unsigned int)atol(num) == ids[i])
break;
}
if(i == othercount)
continue;
else
{
if(!Info_Mod_Del(ids[i]))
{
cout<<endl;
return;
}
else
break;
}
}
}
else
{
Rest_Eat();
continue;
}
}
}
}
else
{
Rest_Eat();
continue;
}
}
}
else if(ch == 'Q' || ch == 'q')
{
cout<<endl;
return;
}
else
continue;
}
}
//===============================================================================================
//电话本内容信息修改或删除函数
bool Tel_Book::Info_Mod_Del(unsigned int id)
{
unsigned int i;
char ch;
Person_Info *next_entry = head;
for(i=1;i<=id;)
{
if(stricmp(next_entry->name,"") != 0)
i++;
if(i<=id)
next_entry=next_entry->next;
}
Info_Detail(*next_entry);
while(1)
{
cout<<endl<<"修改请按相应的数字键,删除请按D,返回请按R,退出请按Q:";
cin.get(ch);
if(ch == '\n')
continue;
if(Rest_Eat())
continue;
if(ch == 'R' || ch == 'r')
return true;
else if(ch == 'Q' || ch =='q')
return false;
else if(ch >= '1' && ch <= '9')
{
Info_Add_Mod(ch,false,*next_entry);
if(Dat_Mod_Del(id,*next_entry,0))
{
Info_Detail(*next_entry);
cout<<"修改成功.";
continue;
}
else
{
cout<<endl<<"数据文件读取失败."<<endl;
return false;
}
}
else if(ch == 'D' || ch == 'd')
{
if(Dat_Mod_Del(id,*next_entry,1))
{
cout<<endl<<"删除成功."<<endl;
return true;
}
else
{
cout<<endl<<"数据文件读取失败."<<endl;
return false;
}
}
}
}
//===============================================================================================
//数据修改,删除函数
bool Tel_Book::Dat_Mod_Del(unsigned int id,Person_Info &tempstruct,bool mod_or_del)
{
fstream outfile;
Person_Info empstruct;
Person_Info *next_entry = head;
Struct_Clr(empstruct);
char tempchar;
char nowtime[30];
unsigned int i;
unsigned int j;
outfile.open(datstr,ios::out|ios::in|ios::binary|ios::ate);
if(!outfile)
{
return false;
}
for(i=1,j=0;i<=id;j++)
{
if(stricmp(next_entry->name,"") != 0)
i++;
if(i<=id)
next_entry = next_entry->next;
}
outfile.seekp((unsigned long)(j-1)*structsize);
if(mod_or_del)
{
for(i=0;i<structsize;i++)
{
tempchar = ((char *) &empstruct)[i] ^ datcode;
outfile.put(tempchar);
}
count--;
strcpy(next_entry->name,"");
}
else
{
System_Time(nowtime);
strcpy(tempstruct.modtime,nowtime);
for(i=0;i<structsize;i++)
{
tempchar = ((char *) &tempstruct)[i] ^ datcode;
outfile.put(tempchar);
}
}
outfile.close();
return true;
}
//===============================================================================================
//电话本内容信息排序函数
void Tel_Book::Info_Order()
{
char orderstr[4];
char ch;
if(count == 0)
{
cout<<endl<<"您的电话本里没有任何记录."<<endl<<endl;
return;
}
else if(count == 1)
{
cout<<endl<<"您的电话本里只有一个记录."<<endl<<endl;
return;
}
while(1)
{
cout<<endl<<"排序将导致数据文件重写,建议您先备份.您真的要这样做吗?(Y/N)";
cin.get(ch);
if(ch == '\n')
continue;
if(Rest_Eat())
continue;
if(ch == 'Y' || ch == 'y')
break;
if(ch == 'N' || ch == 'n')
{
cout<<endl;
return;
}
}
cout<<endl<<setw(80)<<setfill('=')<<"=";
cout<<"按 姓 名 音序顺序排列,请输入NI"<<endl;
cout<<"按 姓 名 音序倒序排列,请输入ND"<<endl;
cout<<"按 电话号码 顺序排列,请输入TI"<<endl;
cout<<"按 电话号码 倒序排列,请输入TD"<<endl;
cout<<"按 修改时间 顺序排列,请输入MI"<<endl;
cout<<"按 修改时间 倒序排列,请输入MD"<<endl;
cout<<"退出请按Q"<<endl;
cout<<setw(80)<<setfill('=')<<"=";
while(1)
{
cout<<endl<<"请输入排序方式:";
cin.getline(orderstr,sizeof(orderstr));
if(strlen(orderstr) < sizeof(orderstr)-1)
{
if(stricmp(orderstr,"Q") == 0)
{
cout<<endl;
return;
}
else
{
if(Dat_Order(orderstr))
{
cout<<endl<<"排序成功."<<endl<<endl;
break;
}
else
continue;
}
}
}
}
//===============================================================================================
//数据排序函数
bool Tel_Book::Dat_Order(char str[])
{
Person_Info *p1 = NULL;
Person_Info *p2 = NULL;
Person_Info *pend=tail;
//*******************************************************************************************
//按音序顺序排列
if(stricmp(str,"NI") == 0)
{
while(1)
{
p1 = head;
p2 = head->next;
while(1)
{
if(stricmp(p1->name,p2->name)>0)
{
if(p1 == head && p2 != tail)
{
p1->next = p2->next;
p2->prv = NULL;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
head = p2;
}
else if(p2 == tail && p1 != head)
{
p1->next = NULL;
p2->prv = p1->prv;
p1->prv->next = p2;
p1->prv = p2;
p2->next = p1;
tail = p1;
}
else if(p1 == head && p2 == tail)
{
p1->next = NULL;
p2->prv = NULL;
p1->prv = p2;
p2->next = p1;
head = p2;
tail = p1;
}
else
{
p1->next = p2->next;
p2->prv = p1->prv;
p1->prv->next = p2;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
}
p2 = p1->next;
}
else
{
p1 = p2;
p2 = p1->next;
}
if(p1 == pend || p1->prv == pend)
break;
}
if(p1 == pend)
pend = pend->prv;
if(pend == head)
{
if(Dat_Rewrite())
return true;
else
{
cout<<endl<<"数据文件读取失败."<<endl<<endl;
return false;
}
}
}
}
//*******************************************************************************************
//按音序倒序排列
else if(stricmp(str,"ND") == 0)
{
while(1)
{
p1 = head;
p2 = head->next;
while(1)
{
if(stricmp(p1->name,p2->name)<0)
{
if(p1 == head && p2 != tail)
{
p1->next = p2->next;
p2->prv = NULL;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
head = p2;
}
else if(p2 == tail && p1 != head)
{
p1->next = NULL;
p2->prv = p1->prv;
p1->prv->next = p2;
p1->prv = p2;
p2->next = p1;
tail = p1;
}
else if(p1 == head && p2 == tail)
{
p1->next = NULL;
p2->prv = NULL;
p1->prv = p2;
p2->next = p1;
head = p2;
tail = p1;
}
else
{
p1->next = p2->next;
p2->prv = p1->prv;
p1->prv->next = p2;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
}
p2 = p1->next;
}
else
{
p1 = p2;
p2 = p1->next;
}
if(p1 == pend || p1->prv == pend)
break;
}
if(p1 == pend)
pend = pend->prv;
if(pend == head)
{
if(Dat_Rewrite())
return true;
else
{
cout<<endl<<"数据文件读取失败."<<endl<<endl;
return false;
}
}
}
}
//********************************************************************************************
//按电话号码顺序排列
else if(stricmp(str,"TI") == 0)
{
while(1)
{
p1 = head;
p2 = head->next;
while(1)
{
if(stricmp(p1->tel,p2->tel)>0)
{
if(p1 == head && p2 != tail)
{
p1->next = p2->next;
p2->prv = NULL;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
head = p2;
}
else if(p2 == tail && p1 != head)
{
p1->next = NULL;
p2->prv = p1->prv;
p1->prv->next = p2;
p1->prv = p2;
p2->next = p1;
tail = p1;
}
else if(p1 == head && p2 == tail)
{
p1->next = NULL;
p2->prv = NULL;
p1->prv = p2;
p2->next = p1;
head = p2;
tail = p1;
}
else
{
p1->next = p2->next;
p2->prv = p1->prv;
p1->prv->next = p2;
p2->next->prv = p1;
p1->prv = p2;
p2->next = p1;
}
p2 = p1->next;
}
else
{
p1 = p2;
p2 = p1->next;
}
if(p1 == pend || p1->prv == pend)
break;
}
if(p1 == pend)
pend = pend->prv;
if(pend == head)
{
if(Dat_Rewrite())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -