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

📄 顺序表嵌入式1班-很好很强大-通讯录.c

📁 通讯录 简单的用数据结构弄的通讯录 可以修改 改善成比较好的程序
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  SIZE   100

typedef struct
{
    char name[10];//姓名 
    char address[20];//地址 
    int no;//电话号码 
}list;   
typedef  struct sss 
{
    list  data[SIZE];   
    int  length;   //记录输入数据 
}SeqList; 
SeqList *L;




void save()
{   
    FILE *fp;
    int  i;
    if((fp=fopen("txl.txt","wb"))==NULL)
    {    printf("cannot open file\n");
	return;
    }
    
    if(fwrite(L,sizeof(struct sss),1,fp)!=1)
        printf("file write error\n");
	printf("文件保存成功!\n");
    fclose(fp);
}


void open()
{   FILE *fp;
     int  i=0;
     if((fp=fopen("txl.txt","rb"))==NULL)
     {    printf("cannot open file\n");
	  return;
     }

     fread(L,sizeof(struct sss),1,fp);
	
	 printf("文件打开成功!\n");
     fclose(fp);
}



//选择菜单
int menu_select()
{

	int choice;

	printf("|******************** 通讯录 ******************|\n");
	printf("|----------------------------------------------|\n");
	printf("|                    主菜单项                  |\n");
	printf("|----------------------------------------------|\n");
	printf("|          1-----输入     2-----追加           |\n");
	printf("|          3-----查询     4-----删除           |\n");
	printf("|          5-----修改     6-----输出           |\n");
	printf("|          6-----输出     7-----保存           |\n");
    printf("|          8-----打开     0-----退出           |\n");
	printf("|----------------------------------------------|\n");
	printf("请输入菜单项数字(0~8):");
	do
	{
		scanf("%d",&choice);
	}while(choice<0||choice>8);
	
	return choice;
}

//初始化
SeqList *init_SeqList()
{  
     L=(SeqList *)malloc(sizeof(SeqList));
     L->length=0;  
     return L;
}

void a()
{
    int i=0;
	int j=0;
	int k=0;
	int choice=0;

	for(i=0;i<80;i++)
	{
		for(j=0;j<=i;j++)
			printf(">");
		if(i<79)
			system("cls");
	}
	for(k=0;k<50;k++)
	{
		printf("            \n");
		printf("        * *   * *\n");
		printf("       *    *    *\n");
		printf("       *         *\n");
		printf("        *       *\n");
		printf("          *   *\n");
		printf("            *   \n");
		system("cls");
		for(i=0;i<10;i++)
			;
	}
	system("cls");
	for(i=0;i<60;i++)
	{	

		for(j=0;j<i;j++)
			printf(" ");
		printf("**     **   **     **\n");
		for(j=0;j<i;j++)
			printf(" ");
		printf("**     **   **     **\n");
		for(j=0;j<i;j++)
			printf(" ");
		printf("*********   *********\n");
		for(j=0;j<i;j++)
			printf(" ");
		printf("**     **   **     **\n");
		for(j=0;j<i;j++)
			printf(" ");
		printf("**     **   **     **\n");
		if(i<59)
			system("cls");
	}
	
}
//输入功能
SeqList *append_SeqList()
{
	int i;
	for(i=0;i<SIZE;i++)
	{
		printf("请输入姓名以@结束\n");
		scanf("%s",L->data[L->length].name);
		if(L->data[L->length].name[0]=='@')
		{
			break;
		}
       else
       {    
    		printf("请输入地址\n");
    		scanf("%s",L->data[L->length].address);
    		printf("电话号码\n");
    		scanf("%d",&L->data[L->length].no);
		}		
		L->length++;
	}
	return L;
}

//插入功能
SeqList  *Insert_SeqList()
{
	int j,i;
	int no;
	char name[10],address[30];
	printf("请输入要插入的位置\n");
	scanf("%d",&i);
	if (L->length>=SIZE)
	{ 
	  	printf("表满");/*表空间已满,不能插入 */
		return L;
	}
	if (i<1 || i>L->length+1)/*检查插入位置的正确性*/
	{ 
		 printf("位置错");
		 return L;
	}
	for(j=L->length-1;j>=i-1;j--)
	{
		L->data[j+1]=L->data[j]; /* 结点移动 */
	}

	printf("请输入姓名\n");
	scanf("%s",name);
 	strcpy(L->data[i-1].name,name);
 	printf("请输入地址\n");
	scanf("%s",address);
 	strcpy(L->data[i-1].address,address);
    printf("请输入电话号码\n");
	scanf("%d",&no);
    L->data[i-1].no=no;    
	printf("插入成功\n"); 
   L->length++;
	return L;
} 

//删除功能
SeqList *Delete_SeqList()  
{
	int  j,i,no,x;
	char c;
	printf("请输入要删除的电话号码 \n");
	scanf("%d",&no);
	for(j=0;j<L->length;j++)
	{
		if(L->data[j].no==no) /*检查空表及删除位置的合法性*/
		{
			i=j;
            printf("你确定要删除这项吗?(y/n)");                       
    		fflush(stdin);
    		c=getchar();
    		if(c=='n')
    		{
    			printf("此项删除被取消!\n");
    			return 0;
    		}
    		if(c=='y')
    		{
                for(j=i;j<=L->length;j++)
            	{
            		L->data[j-1]=L->data[j]; /*向上移动*/
            	}
            	printf("删除成功\n");
           }   	
			break;
        }
        else
        {
             if(j==L->length-1)
                {
                    printf("对不起!没有找到你要删除的信息!\n");
                    break;
                }
                else
                {
                    continue;
                }   
        }         
   }	
	
	L->length--;    
	return L;        /*删除成功*/
}

//查找功能
SeqList *Location_SeqList()
{  
	int j,m;
	char name[10];
	printf("请输入要查找的姓名\n");
    scanf("%s",name);
	for(j=0;j<L->length;j++)
	{
		if(strcmp(name,L->data[j].name)==0)
		{
			printf("姓名\t%s\n",L->data[j].name);
			printf("地址\t%s\n",L->data[j].address);
			printf("电话\t%d\n",L->data[j].no);
			break;
		}
		else
		{
			m++;
		}
		if(m==L->length-1)
		{
			printf("no\n");
		}
	}
	return L;
}
int ml()
{
     int i;
     printf("|****************修改选项子菜单****************|\n");
     printf("|----------------------------------------------|\n");
     printf("|               1--修改姓名                    |\n");
     printf("|               2--修改地址                    |\n");
     printf("|               3--只修电话                    |\n");
     printf("|               0--退出修改                    |\n");
     printf("|----------------------------------------------|\n");
     printf("请输入菜单项目0~3:");
     do
     {
          scanf("%d",&i);
     }	
     while (i<0||i>3);
     return i;
}

//修改
SeqList *modify()
{
    char name[10],a[10];
    char address[30],b[10];
    char c;
    int no,j,n;
    

    while(1)
    {
        switch(ml())
        {
            case 0:
                return;
            case 1:
    			printf("请输入你要修改的姓名\n");
    			scanf("%s",name);
    			for(j=0;j<L->length;j++)
    			{
    				if(strcmp(name,L->data[j].name)==0)
    				{
    					printf("你确定要修改这项吗?(y/n)");                       
            			fflush(stdin);
            			c=getchar();
            			if(c=='n')
            			{
            				printf("此项修改被取消!\n");
            				return 0;
            			}
            			if(c=='y')
            			{
    						printf("请输入修改后的姓名\n");
    						scanf("%s",a);
    						strcpy(L->data[j].name,a);
    					}   	
    				   printf("恭喜您!信息已修改!\n");
            		}
        		} 
    			break;
        	case 2:
    			printf("请输入你要修改的地址\n");
    			scanf("%s",address);
    			for(j=0;j<L->length;j++)
    			{
    				if(strcmp(address,L->data[j].address)==0)
    				{
    					printf("你确定要修改这项吗?(y/n)");                       
            			fflush(stdin);
            			c=getchar();
            			if(c=='n')
            			{
            				printf("此项修改被取消!\n");
            				return 0;
            			}
            			if(c=='y')
            			{
    						printf("请输入修改后的地址\n");
    						scanf("%s",b);
    						strcpy(L->data[j].address,b);
    					}   	
    				   printf("恭喜您!信息已修改!\n");
            		}
        		} 
    			break;
            case 3:	
    			printf("请输入你要修改的电话\n");
    			scanf("%d",&no);
    			for(j=0;j<L->length;j++)
    			{
    				if(no==L->data[j].no)
    				{
    					printf("你确定要修改这项吗?(y/n)");                       
            			fflush(stdin);
            			c=getchar();
            			if(c=='n')
            			{
            				printf("此项修改被取消!\n");
            				return 0;
            			}
            			if(c=='y')
            			{
    						printf("请输入修改后的电话\n");           
    						scanf("%d",&n);
    						L->data[j].no=n;
   						}    
    				   printf("恭喜您!信息已修改!\n");
            		}
        		} 
    			break;
    	}
	}	
	return L;
}

//输出功能
SeqList *out_SeqList()
{
	int i;
	printf("姓名\t地址\t电话\t\n");
	for(i=0;i<L->length;i++)
	{
		printf("%s\t",L->data[i].name);
		printf("%s\t",L->data[i].address);
		printf("%d\t",L->data[i].no);
		printf("\n");
	}
	return L;
}

//主函数
int main()
{
    SeqList *L=NULL;
	L=init_SeqList(L);
    a();
    printf("\n\t\t     欢迎光临!\n\n");

	while(1)
	{
		switch (menu_select())
		{ 
			case 0:
				exit (0);
			case 1:
				append_SeqList(L);
				break;
			case 2:
				Insert_SeqList(L);
				break;
			case 3:
				Location_SeqList(L);
				break;
			case 4:
				Delete_SeqList(L); 
				break;
			case 6:
				out_SeqList(L);
				break;
            case 5:
	             modify(L);
	             break;
            case 7:
                save(L);
                break;
            case 8:
                open(L);
                break;
				    
		}
	}
}

⌨️ 快捷键说明

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