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

📄 vc++phonetext.txt

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