📄 vc++phonetext.txt
字号:
return true;
else
{
cout<<endl<<"数据文件读取失败."<<endl<<endl;
return false;
}
}
}
}
//********************************************************************************************
//按电话号码倒序排列
else if(stricmp(str,"TD") == 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())
return true;
else
{
cout<<endl<<"数据文件读取失败."<<endl<<endl;
return false;
}
}
}
}
//*******************************************************************************************
//按修改时间顺序排列
else if(stricmp(str,"MI") == 0)
{
while(1)
{
p1 = head;
p2 = head->next;
while(1)
{
if(stricmp(p1->modtime,p2->modtime)>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,"MD") == 0)
{
while(1)
{
p1 = head;
p2 = head->next;
while(1)
{
if(stricmp(p1->modtime,p2->modtime)<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
return false;
}
//===============================================================================================
//数据重写函数
bool Tel_Book::Dat_Rewrite()
{
fstream outfile;
Person_Info *next_entry = head;
Person_Info *temp_entry = NULL;
char tempchar;
unsigned int i;
outfile.open(datstr,ios::out|ios::binary);
if(!outfile)
return false;
while(next_entry != NULL)
{
if(stricmp(next_entry->name,"") != 0)
{
for(i=0;i<structsize;i++)
{
tempchar = ((char *) next_entry)[i] ^ datcode;
outfile.put(tempchar);
}
next_entry = next_entry->next;
}
else
{
temp_entry = next_entry;
next_entry = next_entry->next;
if(temp_entry == head && head != tail)
{
head = temp_entry->next;
head->prv = NULL;
temp_entry->prv = NULL;
temp_entry->next = NULL;
delete temp_entry;
temp_entry = NULL;
}
else if(temp_entry == tail && head != tail)
{
tail = temp_entry->prv;
tail->next = NULL;
temp_entry->prv = NULL;
temp_entry->next = NULL;
delete temp_entry;
temp_entry = NULL;
}
else if(head == tail)
{
temp_entry->prv = NULL;
temp_entry->next = NULL;
head = tail = NULL;
delete temp_entry;
temp_entry = NULL;
}
else
{
temp_entry->prv->next = temp_entry->next;
temp_entry->next->prv = temp_entry->prv;
temp_entry->prv = NULL;
temp_entry->next = NULL;
delete temp_entry;
temp_entry = NULL;
}
}
}
outfile.close();
return true;
}
//===============================================================================================
//电话本内容信息重写函数
void Tel_Book::Info_Rewrite()
{
char ch;
if(head == NULL)
{
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;
else if(ch == 'N' || ch == 'n')
{
cout<<endl;
return;
}
else
continue;
}
if(Dat_Rewrite())
{
cout<<endl<<"数据压缩成功."<<endl<<endl;
return;
}
else
{
cout<<endl<<"数据文件读取失败."<<endl<<endl;
return;
}
}
//===============================================================================================
//电话本内容信息显示函数
void Tel_Book::Info_Display(char ch)
{
unsigned int i = 0;
Person_Info * next_entry = head;
unsigned int j;
cout<<endl<<setw(80)<<setfill('=')<<"=";
switch(ch)
{
case 'N':
case 'n':
while(next_entry != NULL)
{
if(stricmp(next_entry->name,"") != 0)
{
i++;
cout <<i<<".";
if(i>=1 && i<=9)
j=0;
else if(i>=10 && i<= 99)
j=1;
else if(i>=100 && i<=999)
j=2;
else if(i>1000 && i<=9999)
j=3;
else if(i>10000 && i<=99999)
j=4;
else
j=0;
cout << setw(14-j)<<setfill(' ')<<setiosflags(ios::left)<<next_entry->name;
}
next_entry = next_entry->next;
}
break;
case 'T':
case 't':
while(next_entry != NULL)
{
if(stricmp(next_entry->name,"") != 0)
{
i++;
cout <<i<<".";
if(i>=1 && i<=9)
j=0;
else if(i>=10 && i<= 99)
j=1;
else if(i>=100 && i<=999)
j=2;
else if(i>1000 && i<=9999)
j=3;
else if(i>10000 && i<=99999)
j=4;
else
j=0;
cout << setw(14-j)<<setfill(' ')<<setiosflags(ios::left)<<next_entry->tel;
}
next_entry = next_entry->next;
}
break;
default:
break;
}
cout<<endl<<setw(80)<<setfill('=')<<"=";
}
//===============================================================================================
//电话本内容信息操作函数
bool Tel_Book::Info_List_Op(char ch)
{
unsigned int i = 0;
unsigned int id;
char num[10];
char tempnum[10];
Info_Display(ch);
while(1)
{
cout <<endl<<"查看或修改内容请输入相应的序号,直接删除请在序号后加D,返回请按R,退出请按Q:";
cin.getline(num,sizeof(num));
if(strlen(num) < sizeof(num) - 1)
{
if(stricmp(num,"R") == 0)
return true;
else if(stricmp(num,"Q") == 0)
return false;
else
{
for(i=0;i<strlen(num);i++)
{
if(num[i] >= '0' && num[i] <= '9')
continue;
else
break;
}
if(i == strlen(num))
{
id = (unsigned int)atol(num);
if(id>=1 && id<=count)
{
if(!Info_Mod_Del(id))
return false;
else
{
if(count != 0)
{
Info_Display(ch);
continue;
}
else
{
cout<<endl<<"您的电话本里没有任何记录."<<endl;
return false;
}
}
}
}
else if(i == strlen(num)-1 && (num[strlen(num)-1] == 'D' || num[strlen(num)-1] == 'd'))
{
for(i=0;i<strlen(num)-1;i++)
tempnum[i]=num[i];
id = (unsigned int)atol(tempnum);
if(id>=1 && id<=count)
{
if(Dat_Mod_Del(id,*head,1))
{
cout<<endl<<"删除成功."<<endl;
if(count != 0)
{
Info_Display(ch);
continue;
}
else
{
cout<<endl<<"您的电话本里没有任何记录."<<endl;
return false;
}
}
else
return false;
}
else
continue;
}
else
continue;
}
}
else
{
Rest_Eat();
continue;
}
}
}
//===============================================================================================
//电话本内容信息查看函数
void Tel_Book::Info_List()
{
char ch;
if(head != NULL && count != 0)
{
cout<<endl<<"您的电话本里共有"<<count<<"个名单:"<<endl;
while(1)
{
cout<<endl<<setw(80)<<setfill('=')<<"=";
cout<<"查看 姓 名 列表请按N"<<endl;
cout<<"查看 电话号码 列表请按T"<<endl;
cout<<"退出请按Q"<<endl;
cout<<setw(80)<<setfill('=')<<"=";
while(1)
{
cout<<endl<<"请输入命令:";
cin.get(ch);
if(ch == '\n')
continue;
if(Rest_Eat())
{
cout<<endl<<"输入错误."<<endl;
continue;
}
if(ch != 'N' && ch != 'n' && ch != 'T' && ch != 't'&&ch != 'Q' && ch != 'q')
continue;
break;
}
if(ch == 'Q' || ch == 'q')
{
cout<<endl;
break;
}
else
if(!Info_List_Op(ch))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -