C语言:通过结构体实现通讯录的简易功能

目录

1.整体代码

2.输出:

1. 浏览

2.添加

3.查找


说明:

因为为简易版,所有只写了浏览、添加、查询的功能

下面请看代码:

1.整体代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


typedef struct Node
{
	int id;
	char* name;
	char* Tel;
	struct Node* pNext;
}List;
typedef struct PAGE
{
	int totalInfo;
	int totalpage;
	int nowpage;
	int onepageInfo;
}Page;

int g_MenuType;
int g_key;

List* GetNode();
void AddNode(List** pphead, List** ppend, List* pNode);
int GetId();
char* GetName();
char* GetTel();
void InitInfo(List** pphead, List** ppend, int n);
Page* GetPage(List* phead, int n);
void ShowInfo(List* phead, Page* pPage);
void ShowMenu(Page* pPage);
void TurnPage(List* phead, Page* pPage);
void Browse(List* phead);
List* GetInNode();
char* Getstring();
void Search(List* phead);

int main()
{
	List* phead = NULL;
	List* pend = NULL;
	InitInfo(&phead, &pend, 101);
	while (1)
	{
		printf("*************************\n");
		printf("*******1.浏览信息********\n");
		printf("*******2.添加信息********\n");
		printf("*******3.查询信息********\n");
		printf("*********q.退出**********\n");
		printf("*************************\n");
		char ch;
		scanf_s(" %c", &ch);
		switch (ch)
		{
		case '1':
			g_MenuType = 1;
			Browse(phead);
			break;
		case '2':
			AddNode(&phead, &pend, GetInNode());
			break;
		case '3':
			g_MenuType = 3;
			Search(phead);
			break;
		case 'q':
			while (phead != NULL)
			{
				List* pDel = phead;
				phead = phead->pNext;
				free(pDel);
				pDel = NULL;
			}
			return 0;
			break;
		default:
			break;
		}

	}

	return 0;
}
List* GetNode()
{
	List* ptemp = (List*)malloc(sizeof(List));
	ptemp->id = GetId();
	ptemp->name = GetName();
	ptemp->Tel = GetTel();
	ptemp->pNext = NULL;
	return ptemp;
}
void AddNode(List** pphead, List** ppend, List* pNode)
{
	if (*pphead == NULL)
	{
		*pphead = pNode;
	}
	else
	{
		(*ppend)->pNext = pNode;
	}
	*ppend = pNode;
}
int GetId()
{
	static int Id = 0;
	Id++;
	return Id;
}
char* GetName()
{
	char* str = (char*)malloc(sizeof(char) * 6);
	for (int i = 0; i < 5; i++)
	{
		str[i] = rand() % 26 + 'a';
	}
	str[5] = '\0';
	return str;
}
char* GetTel()
{
	char* str = (char*)malloc(sizeof(char) * 12);
	switch (rand() % 4)
	{
	case 0:
		strcpy_s(str, 12, "133");
		break;
	case 1:
		strcpy_s(str, 12, "155");
		break;
	case 2:
		strcpy_s(str, 12, "177");
		break;
	case 3:
		strcpy_s(str, 12, "188");
		break;
	}
	for (int i = 3; i < 11; i++)
	{
		str[i] = rand() % 10 + '0';
	}
	str[11] = '\0';
	return str;
}
void InitInfo(List** pphead, List** ppend, int n)
{
	srand((unsigned int)time(NULL));
	for (int i = 0; i < n; i++)
	{
		AddNode(pphead, ppend, GetNode());
	}
}
Page* GetPage(List* phead, int n)
{
	Page* pPage = (Page*)malloc(sizeof(Page));
	pPage->nowpage = 0;
	pPage->onepageInfo = n;
	pPage->totalInfo = 0;
	while (phead != NULL)
	{
		pPage->totalInfo++;
		phead = phead->pNext;
	}
	pPage->totalpage = (pPage->totalInfo % pPage->onepageInfo == 0) ? (pPage->totalInfo / pPage->onepageInfo) : (pPage->totalInfo / pPage->onepageInfo + 1);
	return pPage;
}
void ShowInfo(List* phead, Page* pPage)
{
	int begin = (pPage->nowpage - 1) * pPage->onepageInfo + 1;
	int end = pPage->nowpage * pPage->onepageInfo;
	int count = 0;
	while (phead != NULL)
	{
		count++;
		if (count >= begin && count <= end)
		{
			printf("%d  %s  %s\n", phead->id, phead->name, phead->Tel);
		}
		phead = phead->pNext;
	}
}
void ShowMenu(Page* pPage)
{
	switch (g_MenuType)
	{
	case 1:
		printf("当前第%d页  共%d页  共%d条  w上一页  s下一页  b返回\n", pPage->nowpage, pPage->totalpage, pPage->totalInfo);
		break;
	case 3:
		printf("当前第%d页  共%d页  共%d条  w上一页  s下一页  c重新查询  b返回\n", pPage->nowpage, pPage->totalpage, pPage->totalInfo);
		break;
	}
}
void TurnPage(List* phead, Page* pPage)
{
	char ch = 's';
	while (1)
	{
		switch (ch)
		{
		case 'w':
			if (pPage->nowpage > 1)
			{
				pPage->nowpage--;
				ShowInfo(phead, pPage);
				ShowMenu(pPage);
			}
			else
			{
				printf("按错了\n");
			}
			break;
		case 's':
			if (pPage->nowpage < pPage->totalpage)
			{
				pPage->nowpage++;
				ShowInfo(phead, pPage);
				ShowMenu(pPage);
			}
			else
			{
				printf("已经是最后一页\n");
			}
			break;
		case 'b':
			return;
			break;
		case'c':
			return;
			break;
		default:
			printf("按错了\n");
			break;
		}
		scanf_s(" %c", &ch);
		g_key = ch;
	}

}
void Browse(List* phead)
{
	Page* pPage = GetPage(phead, 10);
	TurnPage(phead, pPage);
	free(pPage);
	pPage = NULL;
}
List* GetInNode()
{
	List* ptemp = (List*)malloc(sizeof(List));
	ptemp->id = GetId();
	printf("请输入姓名:\n");
	ptemp->name = Getstring();
	printf("请输入电话:\n");
	ptemp->Tel = Getstring();
	ptemp->pNext = NULL;
	return ptemp;
}
char* Getstring()
{
	char ch;
	int size = 5;
	char* str = (char*)malloc(sizeof(char) * size);
	int count = 0;
	scanf_s(" ");
	while ((ch = getchar()) != '\n')
	{
		str[count] = ch;
		count++;
		if (count == size)
		{
			size += 5;
			str = (char*)realloc(str, size);
		}
	}
	str[count] = '\0';
	return str;
}
void Search(List* phead)
{
	List* pMark = phead;
	char* str = NULL;
	while (1)
	{
		while (1)
		{
			char ch;
			printf("请输入要查询的关键字:\n");
			str = Getstring();
			printf("a确认  其他键重新输入\n");
			scanf_s(" %c", &ch);
			if ('a' == ch)
			{
				break;
			}
			else
			{
				free(str);
				str = NULL;
			}
		}
		List* pNewhead = NULL;
		List* pNewend = NULL;
		phead = pMark;
		while (phead != NULL)
		{
			if (0 == strncmp(str, phead->name, strlen(str)) || 0 == strncmp(str, phead->Tel, strlen(str)))
			{
				List* ptemp = (List*)malloc(sizeof(List));
				ptemp->id = phead->id;
				ptemp->name = phead->name;
				ptemp->Tel = phead->Tel;
				ptemp->pNext = NULL;
				AddNode(&pNewhead, &pNewend, ptemp);
			}
			phead = phead->pNext;
		}
		Browse(pNewhead);
		while (pNewhead != NULL)
		{
			List* pDel = pNewhead;
			pNewhead = pNewhead->pNext;
			free(pDel);
			pDel = NULL;
		}
		if (g_key == 'b')
		{
			break;
		}
	}
}

2.输出:

1. 浏览

*************************
*******1.浏览信息********
*******2.添加信息********
*******3.查询信息********
*********q.退出**********
*************************
1
1  opmpf  17797220133
2  dvjok  13344710346
3  bxneu  13354415147
4  knjif  17790373600
5  jawdp  17744088807
6  bsmjz  17728639233
7  ztezw  13328052515
8  jvgfv  13361452775
9  rixhc  15557603951
10  cqvlh  17700113115
当前第1页  共11页  共101条  w上一页  s下一页  b返回
s
11  rmett  15503677781
12  myeho  15587556986
13  rkxei  15587962319
14  qrxyf  13311952996
15  fhrjz  17711806034
16  drggf  13392814168
17  qecdb  15503155656
18  cosoy  15542326612
19  swkdy  17750406137
20  kajea  15556496035
当前第2页  共11页  共101条  w上一页  s下一页  b返回
s
21  copen  13378254750
22  cvuui  18860714929
23  efptc  18825769956
24  hsmwg  18869656400
25  frfau  17716864917
26  eeomk  13328198774
27  zxqgn  18878940866
28  laemi  15577497701
29  idvgd  15587890605
30  bnkoy  13326914152
当前第3页  共11页  共101条  w上一页  s下一页  b返回
s
31  dnhck  15591856722
32  dpyit  18802587860
33  khtsz  18897784982
34  yhovv  15557495649
35  hbmjh  18859387097
36  yfffb  15548465181
37  mnjly  18882744750
38  fgcpd  15507628678
39  yszpu  18857278249
40  mhgaf  15581874319
当前第4页  共11页  共101条  w上一页  s下一页  b返回
s
41  jtari  18825559712
42  yjvnb  13374832949
43  xqppv  13342790374
44  orjrx  18815649518
45  beklp  15559712316
46  kptdo  15547256874
47  ifhvv  13373189979
48  qkglx  18875110965
49  afiou  15512067774
50  ounbf  15582949126
当前第5页  共11页  共101条  w上一页  s下一页  b返回
s
51  oossp  17758127698
52  ihfjj  18828286418
53  etmih  18846803630
54  dxgxv  13375080185
55  bxsxa  13388524622
56  jajzk  13312764710
57  blxwe  13316686582
58  nmsrv  13394597321
59  zsnjm  18899786428
60  uvfto  13336775584
当前第6页  共11页  共101条  w上一页  s下一页  b返回
s
61  caxbi  13317231826
62  kwoow  13345100893
63  dlcgk  13394706062
64  siazl  18811023518
65  qoodw  18860414224
66  inmpy  18803771441
67  xiifk  13302806218
68  nrqyi  13341863966
69  ozpus  17799557231
70  qbvmr  13353726938
当前第7页  共11页  共101条  w上一页  s下一页  b返回
s
71  nfpjp  15528283711
72  wdnjd  18806281238
73  kubdi  13324064720
74  klapk  18847620591
75  ccvel  15531087413
76  vgsnl  17793103646
77  pmmge  13395160772
78  nctmo  18879182659
79  xckji  13363408824
80  wznpb  17738521351
当前第8页  共11页  共101条  w上一页  s下一页  b返回
s
81  fzzhn  13345400450
82  xwmwq  13309305259
83  uqbgp  13390114230
84  mbyvs  17787166711
85  rvjav  15599245550
86  pupld  15555167818
87  hlqzn  17775458503
88  dsiee  15506746737
89  pukic  13345736580
90  tcaeo  15548805679
当前第9页  共11页  共101条  w上一页  s下一页  b返回
s
91  uyans  17710023173
92  umvhg  18879845919
93  hyehz  15584499084
94  xetoe  18810085383
95  gazeq  15582357856
96  fdqvj  17725115365
97  wxbjj  15585080558
98  ansbz  15580073612
99  bvccs  18862798471
100  llzly  18883117266
当前第10页  共11页  共101条  w上一页  s下一页  b返回
s
101  ngdkx  18833971326
当前第11页  共11页  共101条  w上一页  s下一页  b返回
s
已经是最后一页

2.添加

2
请输入姓名:
gg
请输入电话:
123456789



101  ngdkx  18833971326
102  gg  123456789
当前第11页  共11页  共102条  w上一页  s下一页  b返回

3.查找

3
请输入要查询的关键字:
133
a确认  其他键重新输入
a
2  dvjok  13344710346
3  bxneu  13354415147
7  ztezw  13328052515
8  jvgfv  13361452775
14  qrxyf  13311952996
16  drggf  13392814168
21  copen  13378254750
26  eeomk  13328198774
30  bnkoy  13326914152
42  yjvnb  13374832949
当前第1页  共4页  共31条  w上一页  s下一页  c重新查询  b返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值