济南移动网站制作,蒙阴县城乡建设局网站,修改WordPress文章发布模板,illustrator 学习网站我们了解顺序表之后来一个比较简单的小项目来巩固一下. 每一个函数我都进行了详细的补充, 各位可以仔细阅读。我将整个项目分为了Contact.h 、Contact.c和test.c三个文件中#xff0c;其中Contact.h用于函数声明和结构体创建#xff0c;Contact.c用于函数的实现#xff0c;t… 我们了解顺序表之后来一个比较简单的小项目来巩固一下. 每一个函数我都进行了详细的补充, 各位可以仔细阅读。我将整个项目分为了Contact.h 、Contact.c和test.c三个文件中其中Contact.h用于函数声明和结构体创建Contact.c用于函数的实现test.c用于测试代码。
Contact.h
#pragma once
#includestdio.h
#includeassert.h
#includestdlib.h#define NAME_MAX 20
#define GENDER_MAX 10
#define TELE_MAX 20
#define ADDR_MAX 100//定义通讯录结构体
typedef struct peopleInfo
{char name[NAME_MAX];char gender[GENDER_MAX];int age;char tele[TELE_MAX];char addr[ADDR_MAX];
}peoInfo;
//改名为通讯录
typedef peoInfo Contact;//改名便于整体替换类型
typedef peoInfo sqDataType;
//定义顺序表
struct SeqList
{sqDataType* arr;int size;int capacity;
};
//缩写改名
typedef struct SeqList SQL;/*000000000000000000000000000000000000000000000000000000000000000000000000000000000000*///顺序表初始化
void SQLInit(SQL* ps);//检查容量函数
void check_capacity(SQL* ps);//顺序表尾插函数
void TailInsert(SQL* ps, sqDataType info);//任意位置删除联系人
void SQLDelete(SQL* ps, int pos, sqDataType info);//任意位置修改顺序表元素
void SQLModify(SQL* ps, int find);
/*0000000000000000000000000000000000000000000000000000000000000000000000000000000000*/
//初始化通讯录
void ContactInit(Contact* pcon);//增加联系人
void ContactAdd(Contact* pcon);//查找联系人
int Contactsearch(SQL* ps);//修改联系人
void ContactModify(SQL* ps);//删除联系人
void ContactDel(Contact* pcon);//文件保存联系人
void KeepFile(Contact* pcon);//显示通讯录
void ContactShow(SQL* ps);//销毁通讯录
void ContactDestroy(SQL* ps);
Contact.c
#define _CRT_SECURE_NO_WARNINGS
#includeContact.h
//改名联系人信息为通讯录
typedef peoInfo Contact;//顺序表初始化
void SQLInit(SQL* ps)
{assert(ps);ps-arr NULL;ps-capacity ps-size 0;
}//检查容量函数
void check_capacity(SQL* ps)
{assert(ps);//三目操作符巧妙开辟空间int newcapacity (ps-capacity 0) ? 1 : (2 * ps-capacity);//相等的情况if (ps-size ps-capacity){sqDataType* pa (sqDataType*)realloc(ps-arr, sizeof(sqDataType) * newcapacity);if (pa NULL){perror(realloc);return;}ps-arr pa;printf(扩容成功\n);}
}//顺序表尾插函数
void TailInsert(SQL* ps, sqDataType info)
{assert(ps info);//判断是否需要扩容check_capacity(ps);//插入联系人信息ps-arr[ps-size] info;ps-size;printf(添加成功\n);
}//任意位置删除顺序表元素
void SQLDelete(SQL* ps, int pos)
{//检验指针有效性和pos的有效性assert(ps pos 0 pos ps-size);//pos后的元素全部向前一位for (int i pos; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];ps-size--;}printf(删除成功\n);
}//任意位置修改顺序表元素
void SQLModify(SQL* ps, int pos)
{//创建临时结构体变量peoInfo info;//输入联系人信息printf(请输入联系人姓名:);scanf(%s, info.name);printf(请输入联系人性别:);scanf(%s, info.gender);printf(请输入联系人年龄:);scanf(%s, info.age);printf(请输入联系人电话:);scanf(%s, info.tele);printf(请输入联系人地址:);scanf(%s, info.addr);//修改元素信息ps-arr[pos] info;
}/************************************************************************************************************************/
//初始化通讯录
void ContactInit(Contact* pcon)
{//其实就是初始化顺序表因为顺序表的底层就是数组SQLInit(pcon);//扩容check_capacity(pcon);
}//增加联系人
void ContactAdd(Contact* pcon)
{ //断言assert(pcon);//创建临时联系人结构体peoInfo info;//输入联系人信息printf(请输入联系人姓名:);scanf(%s, info.name);printf(请输入联系人性别:);scanf(%s, info.gender);printf(请输入联系人年龄:);scanf(%d, info.age);printf(请输入联系人电话:);scanf(%s, info.tele);printf(请输入联系人地址:);scanf(%s, info.addr);//尾插函数插入顺序表TailInsert(pcon,info);
}//查找联系人
int Contactsearch(SQL* ps)//在顺序表中查找
{char name[NAME_MAX];printf(请输入联系人姓名:);scanf(%s, name);//遍历顺序表查找联系人for (int i 0; i ps-size; i){if (strcmp(ps-arr[i].name, name) 0){//找到了return i;}}//没找到return -1;
}//修改联系人信息
void ContactModify(SQL* ps)
{//想要修改联系人前提是要先找到联系人int find Contactsearch(ps);if (find 0){printf(未找到该联系人\n);return;}//修改顺序表中的该元素SQLModify(ps,find);
}//删除联系人
void ContactDel(SQL* ps)
{//想要删除联系人前提是要先找到联系人int find Contactsearch(ps);if (find 0){printf(未找到该联系人\n);return;}//删除顺序表的该元素SQLDelete(ps, find);
}//文件保存联系人
void KeepFile(SQL* ps)
{//打开文件FILE* pf fopen(C:\\编程\\2024\\continue\\ContactProject_4_7\\ContactProject_4_7\\contact.txt, w);if (pf NULL){perror(fopen);return;}//读入文件char arr[100000];for (int i 0; i ps-size; i){fprintf(pf, %s %s %d %s %s\n, ps-arr[i].name, ps-arr[i].gender, ps-arr[i].age, ps-arr[i].tele, ps-arr[i].addr);}//关闭文件fclose(pf);pf NULL;
}//显示通讯录
void ContactShow(SQL* ps)
{printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址);for (int i 0; i ps-size; i){printf(%s %s %d %s %s\n, ps-arr[i].name, ps-arr[i].gender, ps-arr[i].age, ps-arr[i].tele, ps-arr[i].addr);}
}//销毁通讯录
void ContactDestroy(SQL* ps)
{if (ps-arr ! NULL){free(ps-arr);ps-arr NULL;}ps-capacity ps-size 0;printf(通讯录已销毁\n);
}
test.c
#define _CRT_SECURE_NO_WARNINGS
#includeContact.h
//改名为通讯录
typedef peoInfo Contact;void menu()
{printf(**************************------通讯录-----******************************\n);printf(************** 1、Add 2、Delete *****************\n);printf(************** 3、Search 4、Modify *****************\n);printf(************** 5、KeepFile 6、Show *****************\n);printf(************** 7、Destroy 0、Exit *****************\n);printf(*************************************************************************\n);
}int main()
{//创建结构体便量Contact con;//初始化ContactInit(con);int input 0;int ret 0;do{//菜单函数menu();printf(请选择:);scanf(%d, input);switch (input){case 1://增ContactAdd(con);break;case 2://删ContactDel(con);break;case 3://查ret Contactsearch(con);if (ret 0){printf(未找到该联系人\n);}else{//显示联系人信息ContactShow(con);}break;case 4://改ContactModify(con);break;case 5://文件操作KeepFile(con);break;case 6://显示通讯录ContactShow(con);break;case 7://销毁通讯录ContactDestroy(con);break;case 0://退出printf(退出通讯录\n);break;default:printf(选择错误请重新选择\n);break;}} while (input);return 0;
}