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

📄 addressitem.cpp

📁 四种排序算法的C++语言实现
💻 CPP
字号:

			//system("cls")			清屏
#include   "AddressItem.h"
#include    "iostream.h"
#include    "fstream.h"
#include    "String.h"



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

FuncSet::FuncSet()
{

}

FuncSet::~FuncSet()
{

}

int FuncSet::menu_select()
{
	char s[80];   
    int c;   
  
    getchar();   /*读入任意字符*/   
    system("cls");   /*清屏*/   

    cout<<"                ********************MENU*********************\n\n";   
    cout<<"                           0.   Enter   record\n";   
	cout<<"                           1.   Show   the   file\n";   
    cout<<"                           2.   Search   record   on   name\n";   
    cout<<"                           3.   Delete   a   record\n";   
    cout<<"                           4.   add   record   \n";   
    cout<<"                           5.   Save   the   file\n";   
    cout<<"                           6.   Load   the   file\n";   
    cout<<"                           7.   Quick   seek   record\n";   
    cout<<"                           8.   Quit\n";   
    cout<<"********************************************************************************\n";   
    do{   
           cout<<"\n   Enter   you   choice(0~11):";   /*提示输入选项*/   
           cin>>s;   /*输入选择项*/   
           c=atoi(s);   /*将输入的字符串转化为整型数*/   
       }while(c<0 || c>11);   /*选择项不在0~11之间重输*/   
   return c;   /*返回选择项,主程序根据该数调用相应的函数*/   

}   

int FuncSet::enter(AddressItem *t)   
{   
        int   i,n;   
        system("cls");   /*清屏*/   
        cout<<"\nplease input record`s num:  \n";   /*提示信息*/   
        cin>>n;   /*输入记录数*/   
        cout<<"please nput record: \n";   /*提示输入记录*/   
        cout<<"--------------------------------------------------------------------------------\n";   
        for(i=0;i<n;i++)   
        {   
			cout<<"请输入记录编号"<<endl;
			cin>>t[i].ID;
			t[i].ID[3] = '\0';
			cin>>t[i].name;
			t[i].name[10] = '\0';
			cin>>t[i].tele;
			t[i].tele[10] = '\0';
			cin>>t[i].add;
			t[i].add[20] = '\0';
			cin>>t[i].birthdate ;
			t[i].birthdate[20] = '\0';

            cout<<"--------------------------------------------------------------------------------\n";   
        }   
        return   n;     /*返回记录条数*/   
}   
 
int FuncSet::add(AddressItem *t,int n)
{   
        AddressItem   temp;     /*新插入记录信息*/   
        int i,j;   
        char s[20];   /*确定插入在哪个记录之前*/   
        printf("please   input   record\n");   
     
        printf("-------------------------------------------------------\n");   
        cin>>temp.ID;  
		cin>>temp.name;
		cin>>temp.tele; 
		cin>>temp.add;
		cin>>temp.birthdate ;   
        printf("------------------------------------------------\n");   
        printf("please   input   locate   name   \n");   
        scanf("%s",s);   /*输入插入位置的姓名*/   
        i=find(t,n,s);     /*调用find,确定插入位置*/   
        for(j=n-1;j>=i;j--)       /*从最后一个结点开始向后移动一条*/   
        {   
              strcpy(t[j+1].name,t[j].name);   /*当前记录的姓名拷贝到后一条*/   
              strcpy(t[j+1].ID,t[j].ID);       /*当前记录的单位拷贝到后一条*/   
              strcpy(t[j+1].tele,t[j].tele);   /*当前记录的电话拷贝到后一条*/
			  strcpy(t[j+1].add,t[j].add);
			  strcpy(t[j+1].birthdate,t[j].birthdate);
        }   
        strcpy(t[i].name,temp.name);   /*将新插入记录的姓名拷贝到第i个位置*/   
        strcpy(t[i].ID,temp.ID);   /*将新插入记录的单位拷贝到第i个位置*/   
        strcpy(t[i].tele,temp.tele);   /*将新插入记录的电话拷贝到第i个位置*/ 
		strcpy(t[i].add,temp.add);
		strcpy(t[i].birthdate,temp.birthdate );
        n++;       /*记录数加1*/   
        return   n;   /*返回记录数*/   
}   

void FuncSet::show(AddressItem *t,int n)
{   
        int   i;   
        system("cls");   
        cout<<"\n\n*******************ADDRESS******************\n";   
        cout<<"------------------------------------------------\n";   
        for(i=0;i<n;i++)   
			cout<<"姓名"<<t[i].name<<"  "<<"编号"<<t[i].ID<<"  "<<"电话"<<t[i].tele<<"  "<<"地址"<<t[i].add<<"	"<<"生日"<<t[i].birthdate<<endl;   
        if( (i+1)%10==0 )       /*判断输出是否达到10条记录*/   
        {   
              cout<<"Press   any   key   continue...\n";   /*提示信息*/   
              //getchar();     /*压任意键继续*/   
        }   
        cout<<"************************end*******************\n";   
}  

int FuncSet::find(AddressItem *t,int n,char *s)
{   
        int   i;   
        for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/   
        {   
              if(strcmp(s,t[i].name)==0)     /*记录中的姓名和待比较的姓名是否相等*/   
              return   i;       /*相等,则返回该记录的下标号,程序提前结结束*/   
        }   
        return   i;     /*返回i值*/   
}   

int FuncSet::del(AddressItem *t,int n)
{   
        char   s[20];     /*要删除记录的姓名*/   
        int   ch=0;   
        int   i,j;   
        printf("please   deleted   name\n");   /*提示信息*/   
        scanf("%s",s);/*输入姓名*/   
        i=find(t,n,s);   /*调用find函数*/   
        if(i>n-1)     /*如果i>n-1超过了数组的长度*/   
              printf("no   found   not   deleted\n");   /*显示没找到要删除的记录*/   
        else   
        {   
              printf("Are   you   sure   delete   it(1/0)\n");     /*确认是否要删除*/   
              scanf("%d",&ch);     /*输入一个整数0或1*/   
              if(ch==1)     /*如果确认删除整数为1*/   
              {   
    for(j=i+1;j<n;j++)     /*删除该记录,实际后续记录前移*/   
    {   
          strcpy(t[j-1].name,t[j].name);   /*将后一条记录的姓名拷贝到前一条*/   
          strcpy(t[j-1].ID,t[j].ID);   /*将后一条记录的单位拷贝到前一条*/   
          strcpy(t[j-1].tele,t[j].tele);   /*将后一条记录的电话拷贝到前一条*/
		  strcpy(t[j-1].add,t[j].add);
		  strcpy(t[j-1].birthdate,t[j].birthdate);
    }   
    n--;     /*记录数减1*/   
              }   
        }   
        return   n;     /*返回记录数*/   
} 
 

int FuncSet::load(AddressItem *t)
{   
        int   i,n; 
		AddressItem temp;
        //ofstream fout("record.txt");   /*指向文件的指针*/ 
		ifstream fin("record.txt");
        if(!fin)/*打开文件*/   
        {   
              printf("can   not   open   file\n");     /*不能打开*/   
              exit(1);     /*退出*/   
        }
		
        fin>>n;  /*读入记录数*/ 
		
        for(i=0;i<n;i++)
		{
			
			//fin.read((char*)&t[i],sizeof(AddressItem));
			//fin.read((char*)&temp,sizeof(AddressItem));
		//	fin.read(t[i].ID,3);
		//	fin.read(t[i].tele,10);
			
			fin.read(t[i].name,sizeof(t[i].name));
			fin.read(t[i].ID,sizeof(t[i].ID));
			fin.read(t[i].tele,sizeof(t[i].tele));
			fin.read(t[i].add,sizeof(t[i].add));
			fin.read(t[i].birthdate,sizeof(t[i].birthdate));
			
			cout<<t[i].name<<endl;
			cout<<t[i].tele ;
		}	
            //fin>>t[i].name>>t[i].tele>>t[i].add>>t[i].birthdate>>t[i].ID ;  
			// fscanf(fp,"%20s%10s%40s%20s%4s",t[i].name,t[i].tele,t[i].add,t[i].birthdate,t[i].ID);   /*按格式读入记录*/   
        //fout.close();
		fin.close ();/*关闭文件*/   
        printf("You   have   success   read   data   from   file!!!\n");   /*显示保存成功*/   
        return   n;   /*返回记录数*/   
}

void FuncSet::qseek (AddressItem *t,int n)
{   
        char   s[20];   
        int   l,r,m;   
        printf("\nPlease     sort   before   qseek!\n");   /*提示确认在查找之前,记录是否已排序*/   
        printf("please   enter     name   for   qseek\n");   /*提示输入*/   
        scanf("%s",s);   /*输入待查找的姓名*/   
        l=0;r=n-1;     /*设置左边界与右边界的初值*/   
        while(l<=r)   /*当左边界<=右边界时*/   
        {   
              m=(l+r)/2;   /*计算中间位置*/   
              if(strcmp(t[m].name,s)==0)   /*与中间结点姓名字段做比较判是否相等*/   
              {   
 //   print(t[m]);   /*如果相等,则调用print函数显示记录信息*/   
					return   ;   /*返回*/   
              }   
              if(strcmp(t[m].name,s)<0)     /*如果中间结点小*/   
				 l=m+1;     /*修改左边界*/   
              else   
				 r=m-1;   /*否则,中间结点大,修改右边界*/   
        }   
        if(l>r)       /*如果左边界大于右边界时*/   
              printf("not   found\n");   /*显示没找到*/   
}

void FuncSet::save(AddressItem *t,int   n)
{   
        int   i;   
       // FILE   *fp;     /*指向文件的指针*/   
        ofstream fout("record.txt");
		if(!fout)     /*打开文件,并判断打开是否正常*/   
        {   
              cout<<"can   not   open   file\n";/*没打开*/   
              exit(1);     /*退出*/   
        }   
        cout<<"\nSaving   file\n";   /*输出提示信息*/   
        fout<<n;     /*将记录数写入文件*/   
        fout<<"\r\n";     /*将换行符号写入文件*/   
        for(i=0;i<n;i++)   
        {   
            fout.write((char *)&t[i].name,sizeof(t[i].name));
			fout.write((char *)&t[i].ID,sizeof(t[i].ID));
			fout.write((char *)&t[i].tele,sizeof(t[i].tele));
			fout.write((char *)&t[i].add,sizeof(t[i].add));
			fout.write((char *)&t[i].birthdate,sizeof(t[i].birthdate));
			//fout<<t[i].name<<t[i].ID<<t[i].tele<<t[i].add<<t[i].birthdate; 
			//fout<<t[i].name<<t[i].add<<t[i].tele<<t[i].birthdate<<t[i].ID;
			//fout<<"\r\n";
			//fprintf(fp,"%-20s%-40s%-10s%-20s%-4s",t[i].name,t[i].add,t[i].tele,t[i].birthdate,t[i].ID);/*格式写入记录*/   
              //fprintf(fp,"\r\n");   /*将换行符号写入文件*/   
        }   
        fout.close(); /*关闭文件*/   
        cout<<"****save   success***\n";   /*显示保存成功*/   
}  
 
void FuncSet::search(AddressItem *t,int n)
{   
        char   s[20];       /*保存待查找姓名字符串*/   
        int   i;       /*保存查找到结点的序号*/   
        system("cls");       /*清屏*/   
        printf("please   search   name\n");   
        cin>>s;   /*输入待查找姓名*/   
        i=find(t,n,s);   /*调用find函数,得到一个整数*/   
        if(i>n-1)     /*如果整数i值大于n-1,说明没找到*/   
              printf("not   found\n");   
        else   
              cout<<t[i].tele<<endl;//print(t[i]);     /*找到,调用显示函数显示记录*/   
}   
  /*显示指定的一条记录*/   



void main()
{
    int length;     //保存记录长度   
    system("cls");     //清屏  
	FuncSet func;
	cout<<"                   ********欢迎使用通讯录管理系统********"<<endl;
	cout<<"按任意键进入管理菜单......."<<endl;
    while(1)//无限循环
    {   
        switch(func.menu_select())       //调用主菜单函数,返回值整数作开关语句的条件   
        {   
			case 0:length=func.enter(address);
				break;   //输入记录   
			case 1:func.show(address,length);
				break;   //显示全部记录  
			case 2:func.search(address,length);
				break;   //查找记录   
			case 3:length=func.del(address,length);
				break;   //删除记录  
			case 4:length=func.add(address,length);    
				break;   //插入记录   
			case   5:func.save(address,length);
				break;   //保存文件   
			case   6:length=func.load(address);   
				break;   //读文件      
			case   7:func.qseek(address,length);
				break;   //快速查找记录     
			case   8:exit(0);   //如返回值为11则程序结束
			default:
				break;
		}   
	}   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -