机缘
接触到编程没多久便开始了博客的创作,开始的初心便是能够记录我学习编程的过程及我进步的过程,如今也是的;但有时为了博客的持续输出有点注水,不那么注重博客质量,该反省,我会努力改正。
收获
在创作当中,也让我重复的复习了一遍知识点,巩固了知识。
学会了如何总结自己的代码
收获了五百多个粉丝,虽然不知道有几个真人,但我还是感谢很高兴,谢谢关注
日常
我感觉创作博客已经成为我学习生活中的一部分,如果一个星期没写好两三篇就感觉很别扭
成就
过去写得最好的一段代码?
通讯录项目
Contact.c:
#include"SeqList(通讯录).h"
#include"Contact.h"
//通讯录的初始化
void ContactInit(Contact* con)
{
//实际上要进行的是顺序表的初始化
//顺序表的初始化已经实现好了
SLlnit(con);//指针就是地址,不用&符号
}
//通讯录的销毁
void ContactDesTroy(Contact* con)
{
SLDestroy(con);
}
//通讯录添加数据
void ContactAdd(Contact* con)
{
//获取用户输入的内容:姓名+性别+年龄+电话+地址
peoInfo info;
printf("请输入要添加的联系人姓名:\n");
scanf("%s", info.name);
printf("请输入要添加的联系人性别:\n");
scanf("%s", info.gender);
printf("请输入要添加的联系人年龄:\n");
scanf("%s", &info.age);
printf("请输入要添加的联系人电话:\n");
scanf("%s", info.tel);
printf("请输入要添加的联系人住址:\n");
scanf("%s", info.addr);
//往通讯录中添加联系人数据
SLPushBack(con, info);
printf("添加成功\n");
}
int FindByName(Contact* con, char name[])
{
for (int i = 0; i < con->size; i++)
{
if (0 == strcmp(con->arr[i].name, name))//strcmp函数两个字符串比较,相等返回0
{
//找到了
return i;
}
//没找到
return -1;
}
}
//通讯录删除数据
void ContactDel(Contact* con)
{
//要删除的数据必须要存在,才能执行删除操作
//查找
char name[NAME_MAX];
printf("请输入要删除的联系人姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要删除的联系人数据不存在\n");
return;
}
//要删除的联系人数据存在--》知道了要删除的联系人数据对应的下标
SLErase(con, find);//顺序表中指定位置删除函数
printf("删除成功\n");
}
//展示通讯录数据
void ContactShow(Contact* con)
{
//表头:姓名 性别 年龄 电话 地址
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
//遍历通讯录,按照格式打印每个联系人数据
for (int i = 0; i < con->size; i++)
{
printf("%3s %3s %3d %3s %3s\n",
con->arr[i].name,
con->arr[i].gender,
con->arr[i].age,
con->arr[i].tel,
con->arr[i].addr
);
}
}
//通讯录的修改
void ContactModify(Contact* con)
{
//要修改的联系人数据存在
char name[NAME_MAX];
printf("请输入要修改的用户姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//函数 找到要修改的联系人
if (find < 0)
{
printf("要修改的联系人数据不存在!\n");
return;
}
//修改
printf("请输入新的姓名:\n");
scanf("%s", con->arr[find].name);
printf("请输入新的性别:\n");
scanf("%s", con->arr[find].gender);
printf("请输入新的年龄:\n");
scanf("%d", &con->arr[find].age);
printf("请输入新的电话:\n");
scanf("%s", con->arr[find].tel);
printf("请输入新的住址:\n");
scanf("%s", con->arr[find].addr);
printf("修改成功!\n");
}
//通讯录查找
void ContactFind(Contact* con)
{
//11
char name[NAME_MAX];
printf("请输入要查找的联系人姓名\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要查找的联系人数据不存在!\n");
return;
}
// 姓名 性别 年龄 电话 地址
// 11 11 11 11 11
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
printf("%3s %3s %3d %3s %3s\n", //手动调整一下格式
con->arr[find].name,
con->arr[find].gender,
con->arr[find].age,
con->arr[find].tel,
con->arr[find].addr
);
}
Contact.h:
#include"SeqList(通讯录).h"
#include"Contact.h"
//通讯录的初始化
void ContactInit(Contact* con)
{
//实际上要进行的是顺序表的初始化
//顺序表的初始化已经实现好了
SLlnit(con);//指针就是地址,不用&符号
}
//通讯录的销毁
void ContactDesTroy(Contact* con)
{
SLDestroy(con);
}
//通讯录添加数据
void ContactAdd(Contact* con)
{
//获取用户输入的内容:姓名+性别+年龄+电话+地址
peoInfo info;
printf("请输入要添加的联系人姓名:\n");
scanf("%s", info.name);
printf("请输入要添加的联系人性别:\n");
scanf("%s", info.gender);
printf("请输入要添加的联系人年龄:\n");
scanf("%s", &info.age);
printf("请输入要添加的联系人电话:\n");
scanf("%s", info.tel);
printf("请输入要添加的联系人住址:\n");
scanf("%s", info.addr);
//往通讯录中添加联系人数据
SLPushBack(con, info);
printf("添加成功\n");
}
int FindByName(Contact* con, char name[])
{
for (int i = 0; i < con->size; i++)
{
if (0 == strcmp(con->arr[i].name, name))//strcmp函数两个字符串比较,相等返回0
{
//找到了
return i;
}
//没找到
return -1;
}
}
//通讯录删除数据
void ContactDel(Contact* con)
{
//要删除的数据必须要存在,才能执行删除操作
//查找
char name[NAME_MAX];
printf("请输入要删除的联系人姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要删除的联系人数据不存在\n");
return;
}
//要删除的联系人数据存在--》知道了要删除的联系人数据对应的下标
SLErase(con, find);//顺序表中指定位置删除函数
printf("删除成功\n");
}
//展示通讯录数据
void ContactShow(Contact* con)
{
//表头:姓名 性别 年龄 电话 地址
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
//遍历通讯录,按照格式打印每个联系人数据
for (int i = 0; i < con->size; i++)
{
printf("%3s %3s %3d %3s %3s\n",
con->arr[i].name,
con->arr[i].gender,
con->arr[i].age,
con->arr[i].tel,
con->arr[i].addr
);
}
}
//通讯录的修改
void ContactModify(Contact* con)
{
//要修改的联系人数据存在
char name[NAME_MAX];
printf("请输入要修改的用户姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//函数 找到要修改的联系人
if (find < 0)
{
printf("要修改的联系人数据不存在!\n");
return;
}
//修改
printf("请输入新的姓名:\n");
scanf("%s", con->arr[find].name);
printf("请输入新的性别:\n");
scanf("%s", con->arr[find].gender);
printf("请输入新的年龄:\n");
scanf("%d", &con->arr[find].age);
printf("请输入新的电话:\n");
scanf("%s", con->arr[find].tel);
printf("请输入新的住址:\n");
scanf("%s", con->arr[find].addr);
printf("修改成功!\n");
}
//通讯录查找
void ContactFind(Contact* con)
{
//11
char name[NAME_MAX];
printf("请输入要查找的联系人姓名\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要查找的联系人数据不存在!\n");
return;
}
// 姓名 性别 年龄 电话 地址
// 11 11 11 11 11
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
printf("%3s %3s %3d %3s %3s\n", //手动调整一下格式
con->arr[find].name,
con->arr[find].gender,
con->arr[find].age,
con->arr[find].tel,
con->arr[find].addr
);
}
SeqList(通讯录).c:
#include"SeqList(通讯录).h"
#include"Contact.h"
//通讯录的初始化
void ContactInit(Contact* con)
{
//实际上要进行的是顺序表的初始化
//顺序表的初始化已经实现好了
SLlnit(con);//指针就是地址,不用&符号
}
//通讯录的销毁
void ContactDesTroy(Contact* con)
{
SLDestroy(con);
}
//通讯录添加数据
void ContactAdd(Contact* con)
{
//获取用户输入的内容:姓名+性别+年龄+电话+地址
peoInfo info;
printf("请输入要添加的联系人姓名:\n");
scanf("%s", info.name);
printf("请输入要添加的联系人性别:\n");
scanf("%s", info.gender);
printf("请输入要添加的联系人年龄:\n");
scanf("%s", &info.age);
printf("请输入要添加的联系人电话:\n");
scanf("%s", info.tel);
printf("请输入要添加的联系人住址:\n");
scanf("%s", info.addr);
//往通讯录中添加联系人数据
SLPushBack(con, info);
printf("添加成功\n");
}
int FindByName(Contact* con, char name[])
{
for (int i = 0; i < con->size; i++)
{
if (0 == strcmp(con->arr[i].name, name))//strcmp函数两个字符串比较,相等返回0
{
//找到了
return i;
}
//没找到
return -1;
}
}
//通讯录删除数据
void ContactDel(Contact* con)
{
//要删除的数据必须要存在,才能执行删除操作
//查找
char name[NAME_MAX];
printf("请输入要删除的联系人姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要删除的联系人数据不存在\n");
return;
}
//要删除的联系人数据存在--》知道了要删除的联系人数据对应的下标
SLErase(con, find);//顺序表中指定位置删除函数
printf("删除成功\n");
}
//展示通讯录数据
void ContactShow(Contact* con)
{
//表头:姓名 性别 年龄 电话 地址
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
//遍历通讯录,按照格式打印每个联系人数据
for (int i = 0; i < con->size; i++)
{
printf("%3s %3s %3d %3s %3s\n",
con->arr[i].name,
con->arr[i].gender,
con->arr[i].age,
con->arr[i].tel,
con->arr[i].addr
);
}
}
//通讯录的修改
void ContactModify(Contact* con)
{
//要修改的联系人数据存在
char name[NAME_MAX];
printf("请输入要修改的用户姓名:\n");
scanf("%s", name);
int find = FindByName(con, name);//函数 找到要修改的联系人
if (find < 0)
{
printf("要修改的联系人数据不存在!\n");
return;
}
//修改
printf("请输入新的姓名:\n");
scanf("%s", con->arr[find].name);
printf("请输入新的性别:\n");
scanf("%s", con->arr[find].gender);
printf("请输入新的年龄:\n");
scanf("%d", &con->arr[find].age);
printf("请输入新的电话:\n");
scanf("%s", con->arr[find].tel);
printf("请输入新的住址:\n");
scanf("%s", con->arr[find].addr);
printf("修改成功!\n");
}
//通讯录查找
void ContactFind(Contact* con)
{
//11
char name[NAME_MAX];
printf("请输入要查找的联系人姓名\n");
scanf("%s", name);
int find = FindByName(con, name);//查找函数,返回数据下标
if (find < 0)
{
printf("要查找的联系人数据不存在!\n");
return;
}
// 姓名 性别 年龄 电话 地址
// 11 11 11 11 11
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
printf("%3s %3s %3d %3s %3s\n", //手动调整一下格式
con->arr[find].name,
con->arr[find].gender,
con->arr[find].age,
con->arr[find].tel,
con->arr[find].addr
);
}
SeqList(通讯录).h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"Contact.h"
//定义顺序表的结构
//#define N 100
静态顺序表
//struct SeqList
//{
// int arr[N];
// int size;//有效数据个数
//};
typedef peoInfo SLDataType;//顺序表存放的类型可能是int 也可能是char,所有重新起个名字,方便以后更改
//动态顺序表
typedef struct SeqList
{
SLDataType* arr;
int size;//有效数据个数
int capacity;//空间大小
}SL;
//顺序表初始化
void SLlnit(SL* ps);
//顺序表的销毁
void SLDestroy(SL* ps);
//顺序表的打印
void SLprint(SL s);
//头部插入删除/尾部插入删除
void SLPushBack(SL* ps, SLDataType x);
void SLPushFront(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPopFront(SL* ps);
//指定位置之前插入/删除数据
void SLlnsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
//查找
int SLFind(SL* ps, SLDataType x);
test.c:
#include"SeqList(通讯录).h"
//void SLTest01()//测试
//{
// SL sl;
// //初始化
// SLlnit(&sl);
// //尾插
// SLPushBack(&sl, 1);
//
// //打印顺序表
// SLprint(sl);
// //头插
// SLPushFront(&sl,1);
// SLPushFront(&sl, 2);
// SLPushFront(&sl, 3);
// SLPushFront(&sl, 4);
//
// SLprint(sl);
//
// SLPopBack(&sl);
// SLprint(sl);
//
// //测试指定位置之前插入数据
// SLlnsert(&sl, 3, 90);
// SLprint(sl);
// //删除指定位置的数据
// SLErase(&sl, 4);
// SLprint(sl);
//
// int a=SLFind(&sl, 40);
// if (a >= 0)
// {
// printf("找到了,下标是:%d\n", a);
// }
// else
// {
// printf("没找到\n");
// }
// SLDestroy(&sl);
//
//}
//测试通讯录
//void ContactTest()
//{
// Contact con;//创建的通讯录对象 实际上就是 顺序表对象 等价于SL sl
// ContactInit(&con);
// ContactAdd(&con);
// //ContactModify(&con);
// ContactShow(&con);
// ContactDesTroy(&con);
//}
void menu()
{
printf("******************通讯录******************\n");
printf("*******1.增加联系人 2.删除联系人********\n");
printf("*******3.修改联系人 4.查找联系人********\n");
printf("*******5.展示联系人 0. 退出 *********\n");
printf("******************************************\n");
}
int main()
{
//SLTest01();
//ContactTest();
int op = -1;
Contact con;//创建一个顺序表--通讯录
ContactInit(&con);//初始化
do {
menu();
printf("请选择您的操作:\n");
scanf("%d", &op);
//要根据对应的op执行不同的操作
switch (op)
{
case 1:
ContactAdd(&con);
break;
case 2:
ContactDel(&con);
break;
case 3:
ContactModify(&con);
break;
case 4:
ContactFind(&con);
break;
case 5:
ContactShow(&con);
break;
case 0:
printf("退出通讯录....\n");
break;
default:
printf("输入错误,请重新选择您的操作!\n");
break;
}
} while (op != 0);
ContactDesTroy(&con);//销毁
return 0;
}
憧憬
希望以后越来越好,希望家人身体健康,
希望能成为一名程序员