⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc++phonetext.txt

📁 嵌入式Linux系统下的软件开发
💻 TXT
📖 第 1 页 / 共 4 页
字号:
     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 + -