1. 程式人生 > >Linuxc基礎 十六

Linuxc基礎 十六

今天我寫了一個簡易的通訊錄。
程式碼

#include <stdio.h>
#include <string.h>
struct Data
{
	int id;
	char name[10];
	long phone;
	char a[100];
	char b[50];


};
int  my_rand(struct Data te[] )//產生隨機數
{

	int sum1;
	srand(time(NULL));
	int i;
	
	for (i = 0; i < 5; i++)
    {
        te[i].id= rand()%10; 
		
		
	}
	
	sum1=te[0].id;
	
	for(i = 1 ;i < 5; i++)
	{
		if(te[i].id!=te[i+1].id)
		{
			sum1=sum1*10+te[i].id;//將陣列轉為整形
			//printf("%d\n",sum1);
		}
		else
		{
			break;
		}
	}
	
	return sum1;
}

void my_add(struct Data te[],int *length)//新增聯絡人函式
{
	int i;
	int hg=my_rand(te);//呼叫隨機數
	int p1=*length;
	printf("1.請新增聯絡人\n");
	printf("2.輸入ID:%d\n",hg);	
	
	printf("3.請輸入號碼: \n");
	scanf("%lu",&te[p1].phone);
	
	printf("4.請輸入姓名: \n");
	scanf("%s",te[p1].name);
	
	p1 ++;
	for(i=0;i<p1;i++)
	{
		te[i].id=hg;//將隨機數儲存到te陣列中
	
	}
	*length=p1;

}
void my_show(struct Data te[],int *length)//顯示聯絡人
{
	int p2=*length;
	int i;
	
	for(i=0;i<p2;i++)
	{
			
		printf("%d\t",te[i].id);
		printf("%s\t",te[i].name);
		printf("%lu\n",te[i].phone);
		printf("------------------\n");
		printf("聯絡人數:%d\n",p2);
		printf("------------------\n");
		
		*length=p2;		
	}	

}
void my_delete(struct Data te[],int *length)//刪除聯絡人函式
{
	int i;
	int p3=*length;
	int cd=0;
	
	printf("進入選項\n");
	printf("請輸入1或0\n");
	
	scanf("%d",&cd);

	if(cd == 1 )//輸入1時進行下面的操作
	{
		printf("請輸入你要刪除的姓名:\n");
		scanf("%s",te[i].name);
					
		for(i=0;i<p3;i++)
		{			
			strcpy(te[i].a,te[i].name);//將name陣列的內容複製到a陣列			
		}
			p3 --;
	}
	else if(cd == 0)
	{
		printf("請輸入你要刪除的號碼:\n");
		scanf("%lu",&te[i].phone);
		for(i=0;i<p3;i++)
		{
						
			sprintf(te[i].b,"%lu",te[i].phone);//將長整型轉換成字串陣列
			strcpy(te[i].a,te[i].b);//將b陣列的內容複製到a陣列
						
		}
		p3 --;
	}
	*length=p3;
			


}
int my_find(struct Data te[],int *length)//查詢函式
{
	
	int i;
	int p4=*length;
	int fd=0;
	char ret[20];
	long gp;
	
	printf("進入選項\n");
	printf("請輸入1或0\n");
	
	scanf("%d",&fd);
	
	if(fd == 1)
	{
		printf("請輸入你要查詢的姓名\n");
		scanf("%s",ret);
						
		for(i=0;i<p4;i++)
		{
					
								
			if(strcmp(ret,te[i].name)==0)//比交陣列ret與陣列name的內容,如果是0則相等,如果是小於0則陣列ret小於陣列name,如果是大於0則陣列ret大於陣列name
			{
				printf("%d\t",te[i].id);
				printf("%s\t",te[i].name);
				printf("%lu\n",te[i].phone);
				return i;
			}
						
		}
	}
				
	else if(fd == 0)
	{
		printf("請輸入你要查詢的號碼\n");
		scanf("%lu",&gp);
						
		for(i=0;i<p4;i++)
		{
						
			if(gp==te[i].phone)
			{
				printf("%d\t",te[i].id);
				printf("%s\t",te[i].name);
				printf("%lu\n",te[i].phone);

				return i;		
			}
					
		}
					
					
	}
	*length=p4;
	return -1;

}
int my_change(struct Data te[],int *length)//修改函式
{
	int p5=*length;
	int ret=my_find(te,&p5);
	if(ret !=-1)
	{	
		printf("%d\t",te[ret].id);
			
		printf("請修改姓名\n");
		scanf("%s",te[ret].name);
		printf("%s\t",te[ret].name);//修改後的名字
			
		printf("請修改號碼\n");
		scanf("%lu",&te[ret].phone);
		printf("%lu\n",te[ret].phone);//修改後的號碼
	}
	
	else
	{
		printf("error\n");
	}
	*length=p5;
	return 0;
}
int main()
{
	int i;
	struct Data te[10]={0};
	int count=0;
	int length=0;
	
	
	while(1)
	{	
		printf("1.請輸入\n");
		printf("2.請顯示\n");
		printf("3.請刪除\n");
		printf("4.請查詢\n");
		printf("5.請修改\n");
		scanf("%d",&count);
	
		switch(count)
		{	
			case 1:				
				my_add(te,&length);	//呼叫輸入函式
				break;
			case 2:	
				my_show(te,&length);//呼叫顯示函式
				break;
			case 3:
				my_delete(te,&length);//呼叫刪除函式
				break;
			case 4:
				my_find(te,&length);//呼叫查詢函式		
				break;
			
			case 5:
				 my_change(te,&length);//呼叫修改函式
				 break;
			default:
				printf("error\n");
				break;
		}		
	}
	return 0;
}