目录
一 代码搭建:
使用vs2019编译器进行编译
test.c文件实现整个框架,tcl.c文件实现整个游戏的具体功能,tcl.h文件实现整个游戏需要的声明和头文件
二 代码思路:
从现在基本流行的通信录中 发现几个必备的信息
1.对联系人的 增 删 改 查
2.显示所有联系人
3.以姓名 对通讯录 进行排序
三 代码实现:
1.框架搭建:
基本框架:用do while()实现通讯录的循环,确保实现增删改查显示的一直进行;menu()菜单函数;switch 进行项目的选择 ;联系人 通讯录的创建
2 菜单实现:
编写一个简单的menu()函数,进行菜单的简单实现
3:联系人创建 通讯录创建:
1.定义一个结构体变量 创建一个联系人结构体(包含了 联系人 姓名 性别 年龄 电话 地址);
2. 利用联系人结构体 创建通讯录(里面包含了一个联系人结构体变量 指针 和定义 联系人数量的sz 和内存容量 )
四 通讯录各种函数 实现:
1.初始化函数:
通讯录 开始 首先对通信录进行初始化 用 malloc 先开辟 三个联系人变量空间 然后把容量定义为三 联系人数量置为 0;
2. 添加联系人:
添加联系人 首先考虑内存空间是否充足 (当联系人 数量 和容量 相同时 realloc 进行 扩容) 扩容 以保证 内存空间不会 过度浪费 和不会存不下当前内容
然后开始在通讯录中添加 联系人
添加成功 sz+1;
3. 显示联系人:
先对 通讯录 进行检查 如果 sz ==0 说明 通讯录中还没有内容
如果不相等 则显示通讯录内容
4.删除联系人:
先输入 联系人 姓名 然后自我遍历找到 姓名所在位置 进行联系人删除
删除成功 sz-1;
5.修改联系人:
对联系人内容 进行 修改 原理同删除 先请用户输入 想要修改联系人姓名 然后找到姓名所在位置
对联系人进行修改
6.查找联系人:
用户输入联系人姓名 按姓名进行查找 找到 在屏幕打印联系人信息 找不到 提示用户
7.按姓名对联系人进行排序:
使用冒泡排序 按姓名 大小 对联系人进行排序
8. 退出通讯录:
退出通讯录 容量和联系人数量置空,用 free对开辟的空间进行释放
五.整体代码
1.tcl.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"txl.h"
//初始化通讯录
void CshTxl(struct TXL* t)
{
t->L = (struct LXR*) malloc(3 * sizeof(struct LXR));
t->sz = 0;
t->rongliang = 3;
}
//添加联系人
void TJlxr(struct TXL* t)
{
if (t->sz == t->rongliang)
{
struct LXR *ptr =(struct LXR*) realloc(t->L, (t->rongliang + 2) * sizeof(struct LXR));
if (ptr != NULL)
{
t->L = ptr;
t->rongliang += 2;
}
printf("增容成功\n");
}
printf("请输入联系人姓名:");
scanf("%s", t->L[t->sz].name);
printf("请输入联系人性别:");
scanf("%s", t->L[t->sz].sex);
printf("请输入联系人电话:");
scanf("%s", t->L[t->sz].dianhua);
printf("请输入联系人住址:");
scanf("%s", t->L[t->sz].zhuzhi);
printf("请输入联系人年龄:");
scanf("%d", &t->L[t->sz].nianling);
t->sz++;
}
void XSlxr(struct TXL* t)
{
int i = 0;
if (t->sz == 0)
{
printf("抱歉 您的通讯录里面还没有人\n");
return;
}
for (i = 0;i < t->sz;i++)
{
printf("%-9s %-9s %-9s %-9s %-9s \n", "姓名", "性别", "年龄", "电话", "住址");
printf("%-9s %-9s %-9d %-9s %-9s \n",t->L[i].name,
t->L[i].sex,
t->L[i].nianling,
t->L[i].dianhua,
t->L[i].zhuzhi
);
}
}
void SClxr(struct TXL* t)
{
printf("请输入您要删除人的姓名\n");
char name2[30];
scanf("%s", &name2);
int i = 0;
for (i = 0;i < t->sz;i++)
{
int j = i;
if (strcmp(name2, t->L[i].name) == 0)
{
for (j = i;j < t->sz;j++)
{
t->L[j] = t->L[j + 1];
}
}
}
t->sz -= 1;
printf("删除成功\n");
}
void CZlxr(struct TXL* t)
{
printf("请输入您要查找的姓名\n");
char name1[30];
scanf("%s", &name1);
int i = 0;
for (i = 0;i < t->sz;i++)
{
if (strcmp(t->L[i].name, name1) == 0)
{
printf("%-9s %-9s %-9s %-9s %-9s \n", "姓名", "性别", "年龄", "电话", "住址");
printf("%-9s %-9s %-9d %-9s %-9s \n", t->L[i].name,
t->L[i].sex,
t->L[i].nianling,
t->L[i].dianhua,
t->L[i].zhuzhi
);
break;
}
if (i == t->sz)
printf("没有叫做 %s 的联系人\n", name1);
}
}
void XZlxr(struct TXL* t)
{
printf("请输入您要修改的联系人姓名\n");
char name[20];
scanf("%s", &name);
int i = 0;
for (i = 0;i < t->sz;i++)
{
if (strcmp(t->L[i].name, name) == 0)
{
printf("请进行 您的修改\n");
printf("请输入联系人姓名:");
scanf("%s", t->L[i].name);
printf("请输入联系人性别:");
scanf("%s", t->L[i].sex);
printf("请输入联系人年龄:");
scanf("%d", &t->L[i].nianling);
printf("请输入联系人电话:");
scanf("%s", t->L[i].dianhua);
printf("请输入联系人住址:");
scanf("%s", t->L[i].zhuzhi);
printf("修改成功\n");
break;
}
}
}
void PXlxr(struct TXL* t)
{
if (t->sz <= 0) {
printf("通讯录中没有联系人,请添加!\n");
}
int i = 0;
int j = 0;
for (i = 0; i < t->sz - 1; i++)
{
for (j = 0; j < t->sz - i - 1; j++)
{
if (strcmp(t->L[j].name, (t->L[j + 1]).name) > 0)
{
struct LXR tmp;
tmp = t->L[j];
t->L[j] = t->L[j + 1];
t->L[j + 1] = tmp;
}
}
printf("排序成功!\n");
}
}
void TCtxl(struct TXL* t)
{
free(t->L);
t->L = NULL;
t->rongliang = 0;
t->sz = 0;
}
2.test.c
#include"txl.h"
void menu()
{
printf("*******1.添加联系人 2.删除指定联系人***********\n");
printf("*******3.查找联系人 4.修改指定联系人***********\n");
printf("*******5.显示联系人 6.清空所有联系人***********\n");
printf("*******7.以名字进行排序 0.退出***********\n");
}
int main()
{
int input = 0;
//创建一个通讯录结构体】
struct TXL t;
//初始化通讯录
CshTxl(&t);
do
{
menu();
printf("请输入您要选择的项目\n");
scanf("%d", &input);
switch (input)
{
case 1:
TJlxr(&t);
break;
case 2:
SClxr(&t);
break;
case 3:
CZlxr(&t);
break;
case 4:
XZlxr(&t);
break;
case 5:
XSlxr(&t);
break;
case 6:
CshTxl(&t);
break;
case 7:
PXlxr(&t);
break;
case 0:
TCtxl(&t);
break;
default:
printf("您的选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
3.tcl.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct LXR
{
char name[20];
char sex[5];
int nianling;
char dianhua[20];
char zhuzhi[30];
};
//静态版本
//struct TXL
//{
// struct LXR L[MAX];
// int sz;
//};
//
//动态内存通讯录
struct TXL
{
struct LXR* L;
int sz;
int rongliang;
};
//初始化通讯录
void CshTxl(struct TXL* t);
//添加联系人
void TJlxr(struct TXL* t);
//显示联系人
void XSlxr(struct TXL*t);
//删除联系人
void SClxr(struct TXL*t);
//查找联系人
void CZlxr(struct TXL* t);
//修改联系人
void XZlxr(struct TXL *t);
//排序联系人
void PXlxr(struct TXL *t);
//退出通讯录
void TCtxl(struct TXL* t);
六.总结
整体代码思路大概已经呈现
有什么错误 希望同志们指出
有什么不懂的 随时可以私信评论我
如果对您有所帮助 请一件三连 感谢您的帮助。