c語言實現動態通信錄

c語言實現動態通信錄

一、實現動態開闢內存windows

二、實現簡單的增刪查改、清空、保存等功能3d

contact.h文件

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _CONTACT__H_
#define _CONTACT__H_

#define name_MAX 20
#define Sex_MAX 10
#define Tele_MAX 12
#define Addr_MAX 20
#define member_MAX 2
#define DEFAULT_ADD 2
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>

typedef struct Stu
{
	char name[name_MAX];
	int age;
	char Sex[Sex_MAX];
	char Tele[Tele_MAX];
	char Addr[Addr_MAX];
}Stu,*pStu;

typedef struct Contact
{
   pStu con;
   int count;
   int capacity;
}Contact,*pContact;

void InitContact( pContact pcon );
void ADD_contact(pContact pcon);
void DEL_contact(pContact pcon);
void SHOW_contact(pContact pcon);
void EMPTY_contact(pContact pcon);
void SEARCH_contact(pContact pcon);
void MODIFY_contact(pContact pcon);
void SORT_contact(pContact pcon);
void EXIT_Contact(pContact pcon);
void cheickCapacity(pContact pcon);
void Read_Contact(pContact pcon);
void Save_Contact(pContact pcon);

#endif

contact.c文件

#include "contact.h"

void cheickCapacity(pContact pcon)
{
	if(pcon->count == pcon->capacity)
     {
		pStu pre = (pStu)realloc(pcon->con,(pcon->capacity+DEFAULT_ADD)*sizeof(Stu));
	    if(pre!=NULL)  
        {  
		 pcon->con = pre;   
         pcon->capacity = pcon->capacity + DEFAULT_ADD; 
        }  
		printf("增容成功\n");
     }
}


void Read_Contact(pContact pcon)
{   
	Stu temp;
	int i = 0;
	FILE * pfread = fopen("test.txt","r");
	if(pfread == NULL)
	{
	 perror("fopen");
	 return ;
	}
	while(1)
	{
	  fread(&temp,sizeof(Stu),1,pfread);
	  if(feof(pfread)!=0)//feof檢測文件是否結束,文件結束返回非0值,不然返回0
	  {
	     break;
	  }	 
	  cheickCapacity(pcon);
	  pcon->con[pcon->count++] = temp; 
	 }	
	fclose(pfread);
}

void InitContact(pContact pcon)
{   
	pcon->con = (pStu)malloc(member_MAX*sizeof(Stu));
	if(pcon->con==NULL)  
	{  
		printf("out of memery");  
		exit(EXIT_FAILURE);  
	}  
	pcon->count = 0;
	pcon->capacity = member_MAX;
	memset(pcon->con,0,member_MAX*sizeof(Stu));
	Read_Contact(pcon);
}



void ADD_contact(pContact pcon)
{  
	  cheickCapacity(pcon);
      printf("請輸入姓名:>");
	  scanf("%s",(pcon->con+pcon->count)->name);
	  printf("請輸入年齡:>");
	  scanf("%d",&(pcon->con+pcon->count)->age);
	  printf("請輸入性別:>");
	  scanf("%s",(pcon->con+pcon->count)->Sex);
      printf("請輸入電話:>");
	  scanf("%s",(pcon->con+pcon->count)->Tele);
      printf("請輸入地址:>");
	  scanf("%s",(pcon->con+pcon->count)->Addr);
	  pcon->count++;
	  system("cls");
}

static int Find_member(pContact pcon,char name[name_MAX])
{
  int i = 0;
  for(i=0;i<pcon->count;i++)
  {
    if(strcmp((pcon->con+i)->name,name) == 0)
	{
		return i;
	}
  }
  return -1;
}

void DEL_contact(pContact pcon)
{
	char name[name_MAX] = {0};
	int temp = 0;
	int i = 0;
	printf("請輸入您要刪除的姓名:>");
	scanf("%s",name);
    temp = Find_member(pcon,name);
	if(temp!=-1)
	{
	  for(i=temp;i<pcon->count;i++)
	  {
	    pcon->con[i] = pcon->con[i+1];
		pcon->count--;
	  }	
      printf("刪除成功!");
	}
	else
	{
	  printf("您所刪除的人不存在!\n");
	}
    system("cls");
}
void SHOW_contact(pContact pcon)
{ 
	int i = 0;
    printf("姓名\t年齡\t性別\t電話\t\t住址\n");
	for(i=0;i<pcon->count;i++)
	{
		printf("%s\t%d\t%s\t%s\t\t%s\n",(pcon->con+i)->name,
		                                    (pcon->con+i)->age,
											(pcon->con+i)->Sex,
											(pcon->con+i)->Tele,
											(pcon->con+i)->Addr );
	}

}
void EMPTY_contact(pContact pcon)
{
  pcon->count = 0;
}

void SEARCH_contact(pContact pcon)
{ 
	char name[name_MAX] = {0};
	int temp = 0;
	printf("請輸入您要查找的姓名:>");
	scanf("%s",name);
    temp = Find_member(pcon,name);
	if(temp != -1)
     {
	  printf("%12s\t%3d\t%5s\t%12s\t%10s\n",(pcon->con+temp)->name,
		                                    (pcon->con+temp)->age,
											(pcon->con+temp)->Sex,
											(pcon->con+temp)->Tele,
											(pcon->con+temp)->Addr );
	 }
	else
	{
	  printf("您所查找的人不存在。\n");
	}
	system("cls");
}

void MODIFY_contact(pContact pcon)
{   
	char name[name_MAX] = {0};
	int temp = 0;
	printf("請輸入您所要更改信息的姓名:>");
	scanf("%s",name);
	temp  = Find_member(pcon,name);
	if(temp != -1)
	{
	  printf("請輸入要更改的姓名:>");
	  scanf("%s",(pcon->con+temp)->name );
	  printf("請輸入要更改的年齡:>");
	  scanf("%d",&(pcon->con+temp)->age);
	  printf("請輸入要更改的性別:>");
	  scanf("%s",(pcon->con+temp)->Sex);
      printf("請輸入要更改的電話:>");
	  scanf("%s",(pcon->con+temp)->Tele);
      printf("請輸入要更改的地址:>");
	  scanf("%s",(pcon->con+temp)->Addr);
	  printf("更改爲功!");
	}
	else
	{
	  printf("您要更改的人不存在。\n");
	}
   system("cls");
}

void SORT_contact(pContact pcon)
{
	Stu str;
	int i = 0;
	int j = 0;
	for(i=0;i<pcon->count-1;i++)
	{   
		for(j=0;j<pcon->count-1;j++)
		{
			if(strcmp(pcon->con[j].name,pcon->con[j+1].name)>0)
		    {
			   str = pcon->con[j];
			   pcon->con[j] = pcon->con[j+1];
			   pcon->con[j+1] = str;
		    }
		}
	}
	system("cls");
}

void Save_Contact(pContact pcon)
{ 
  FILE* pfwrite = fopen("test.txt","w");
  int i = 0; 
  if(pfwrite == NULL)
  {
    perror("Save");
	return;
  }
  for(i=0;i<pcon->count;i++)
  {
    fwrite(pcon->con+i,sizeof(Stu),1,pfwrite);
  } 
  fclose(pfwrite);
}

void EXIT_Contact(pContact pcon)  
{   
	Save_Contact(pcon);
    free(pcon->con);  
    pcon->con = NULL; 
	pcon->capacity = 0;
	pcon->count = 0;
  
}

test.c文件

#include "contact.h"
#include <conio.h>
#include <windows.h>

void mnue()
{
  printf("**************************************\n");
  printf("**             1.增長               **\n");
  printf("**             2.刪除               **\n");
  printf("**             3.查找               **\n");
  printf("**             4.更改               **\n");
  printf("**             5.顯示               **\n");
  printf("**             6.排序               **\n");
  printf("**             7.清空               **\n");
  printf("**             0.退出               **\n");
  printf("**************************************\n");

}

enum Option
{
  EXIT,
  ADD,
  DEL,
  SEARCH,
  MODIFY,
  SHOW,
  SORT,
  EMPTY,
};

void test()
{   
	int input = 0;
	Contact my_con;
    InitContact(&my_con);
	do
	{ 
	  mnue();	 	  
	  printf("請選擇:>");
	  scanf("%d",&input);
	  switch(input)
	  {
	    case ADD:
			ADD_contact(&my_con);
		  break;
	    case DEL:
			DEL_contact(&my_con);
		  break;
	    case SEARCH:
			SEARCH_contact(&my_con);
		  break;
		case MODIFY:
             MODIFY_contact(&my_con);
		  break;
	    case SHOW:
			SHOW_contact(&my_con);
		  break;
	    case SORT:
			SORT_contact(&my_con);
		  break;
	    case EMPTY :
			EMPTY_contact(&my_con);
		  break;
	    case EXIT:
			EXIT_Contact(&my_con);
		  break;
	    default:
		  printf("輸入錯誤!請從新輸入:>\n");
		  break;
	  }	 
	}while(input);
}

int main()
{
  test(); 
  return 0;
}
相關文章
相關標籤/搜索