当前位置: 首页 > news >正文

常州网站建设公司价位北京网站建设的价格

常州网站建设公司价位,北京网站建设的价格,shopex 网站搬家,php购物商城前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的#xff0c;如果对动态顺序表不熟悉#xff0c;可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g#xff0c;这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录#xff0c;可以打开这个链接阅读http:…前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的如果对动态顺序表不熟悉可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录可以打开这个链接阅读http://t.csdnimg.cn/iC4a6 代码最终的效果图 现在我来带大家实现一下~~ Contact.h 在创建通讯录的时候我们需要定义一个结构体来保存用户信息。 #define MAX_NAME 20 #define MAX_GENDER 10 #define MAX_TELE 20 #define MAX_ADDR 50typedef struct PeopleInformation {char name[MAX_NAME];char gender[MAX_GENDER];int age;char tele[MAX_TELE];char addr[MAX_ADDR]; }PeoInfo;由于后续的函数实现是通讯录基于顺序表来实现的所以我们的通讯录需要使用到顺序表的一些接口函数为了凸显通讯的特点我们可以使用contact来重新定义顺序表的名字这里使用前置声明。 typedef struct SeqList contact;我们实现通讯录是基于顺序表所以我们在顺序表添加Contact.h这个头文件。 由于上面我们提到要使用contact来重新定义顺序表的名字我们不能直接使用SL是因为我们的Contact.h是没有包含SeqList.h的而且也不能包含两个头文件是不能相互包含的否则会发生冲突编译器会报错由于没有包含SeqList.h,所以只能使用struct SeqList来进行外置声明。 通讯录函数的实现 初始化和导入上回的数据 如果上次的通讯录是由数据的我们可以导入进来这里使用了文件操作函数。 void PushContact(contact* con) {FILE* pf fopen(contact.txt, rb);if (pf NULL){printf(未导入上次的通讯录的数据\n);return;}int i 0;int ret 0;while (1){SLCheckCapacity(con);ret fread(con-data[i], sizeof(PeoInfo), 1, pf);if (ret 0){break;}con-size;i;}fclose(pf);pf NULL; }我们在进行初始化的时候进行初始化再导入上次通讯录的数据。 void InitContact(contact* con) {SLInit(con);PushContact(con); }销毁和保存数据 在销毁通讯录将内存的通讯录数据清空之前我们可以将内存中储存的数据先保留在文件中方便下次使用。 void DestroyContact(contact* con) {SaveContact(con);SLDestroy(con); }还是要使用文件操作函数来保留数据 void SaveContact(contact* con) {FILE* pf fopen(contact.txt, wb);if (pf NULL){perror(fopen);return;}int i 0;for (i 0; i con-size; i){fwrite(con-data[i], sizeof(PeoInfo), 1, pf);}fclose(pf);pf NULL;printf(已保存好通讯录\n); }添加数据 顺序表有三个插入函数大家可以自由发挥这里我调用了尾插函数。 void AddContact(contact* con) {PeoInfo tmp;printf(请输入添加人的姓名);scanf(%s, tmp.name);printf(请输入添加人的性别);scanf(%s, tmp.gender);printf(请输入添加人的年龄);scanf(%d, tmp.age);printf(请输入添加人的电话);scanf(%s, tmp.tele);printf(请输入添加人的地址);scanf(%s, tmp.addr);//采用尾插SLPushBack(con, tmp);printf(添加成功\n); }删除数据 顺序表有三个删除函数大家可以自由发挥这里我调用了尾删函数。 void DelContact(contact* con) {//采用尾删SLPopBack(con);printf(删除成功\n); }展示数据 void ShowContact(contact* con) {assert(con);int i 0;if (con-size 0){printf(通讯录为空\n);return;}printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址);for (i 0; i con-size; i){printf(%s %s %d %s %s\n, con-data[i].name, con-data[i].gender, con-data[i].age,con-data[i].tele, con-data[i].addr);}printf(\n); }这里我先判断了一下通讯录是否有数据有我才打印没有我就提示一下。 查找数据 这里的通讯录结构体包含姓名、性别、年龄、电话和地址我这里是通过姓名来查找的这里大家可以自由发挥。 要注意姓名查找是字符串进行比较需要调用strcmp函数也就是需要用到string.h这个头文件需要包含一下这个头文件。 void FindContact(contact* con) {char name[MAX_NAME];printf(输入你要查找的姓名);scanf(%s, name);int find SLFind(con, name);if (find 0){printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址);printf(%s %s %d %s %s\n, con-data[find].name,con-data[find].gender,con-data[find].age,con-data[find].tele,con-data[find].addr);}else{printf(查无此人\n);}printf(\n); }修改数据 这里的修改数据我是先通过查找你要修改的名字找到对应的数据再进行修改这里大家也可以自由发挥。 void ModifyContact(contact* con) {char name[MAX_NAME];printf(输入你要修改的姓名);scanf(%s, name);int find SLFind(con, name);if (find 0){printf(此人不存在\n);return;}printf(请输修改人的姓名);scanf(%s, con-data[find].name);printf(请输入修改人的性别);scanf(%s, con-data[find].gender);printf(请输入修改人的年龄);scanf(%d, con-data[find].age);printf(请输入修改人的电话);scanf(%s, con-data[find].tele);printf(请输入修改人的地址);scanf(%s, con-data[find].addr);printf(修改成功\n); }菜单实现 写完上述程序之后我们就可以进行封装了我们可以写一个简易的小菜单来提供选择让用户自行使用。 void menu() {printf(*********** 欢迎来到通讯录 ***********\n);printf(*********** 1.增加联系人 2.删除联系人 ***********\n);printf(*********** 3.查找联系人 4.修改联系人 ***********\n);printf(*********** 5.展示通讯录 0.退出通讯录 ***********\n);printf(*******************************************************\n); }接着我们来实现主程序实现通讯录这个小程序 int main() {int option 0;contact peo;InitContact(peo);do{menu();printf(请选择);scanf(%d, option);switch (option){case 1:AddContact(peo);break;case 2:DelContact(peo);break;case 3:FindContact(peo);break;case 4:ModifyContact(peo);break;case 5:ShowContact(peo);break;case 0:printf(退出通讯录\n);DestroyContact(peo);break;default:printf(输入错误\n);break;}} while (option);return 0; }最终是代码 Contact.h #pragma once#define MAX_NAME 20 #define MAX_GENDER 10 #define MAX_TELE 20 #define MAX_ADDR 50typedef struct PeopleInformation {char name[MAX_NAME];char gender[MAX_GENDER];int age;char tele[MAX_TELE];char addr[MAX_ADDR]; }PeoInfo;//前置声明 typedef struct SeqList contact;//初始化通讯录 void InitContact(contact* con);//添加通讯录数据 void AddContact(contact* con);//删除通讯录数据 void DelContact(contact* con);//展示通讯录数据 void ShowContact(contact* con);//查找通讯录数据 void FindContact(contact* con);//修改通讯录数据 void ModifyContact(contact* con);//销毁通讯录数据 void DestroyContact(contact* con);//保存通讯录的数据 void SaveContact(contact* con);//导入上次的通讯录的数据 void PushContact(contact* con);SeqList.h #pragma once#include stdio.h #include stdlib.h #include assert.h #include Contact.h #include string.htypedef PeoInfo SLDataType; #define MAX_CAPACITY 4typedef struct SeqList {SLDataType* data;int size;int capacity; }SL;void SLInit(SL* ps);//顺序表初始化 void SLDestroy(SL* ps);//顺序表销毁//插入 void SLPushBack(SL* ps, SLDataType x);//尾插//删除 void SLPopBack(SL* ps);//尾删//扩容 void SLCheckCapacity(SL* ps);//查找 int SLFind(SL* ps, char* x);Contact.c #include SeqList.h//初始化通讯录 void InitContact(contact* con) {SLInit(con);PushContact(con); }//销毁通讯录数据 void DestroyContact(contact* con) {SaveContact(con);SLDestroy(con); }//添加通讯录数据 void AddContact(contact* con) {PeoInfo tmp;printf(请输入添加人的姓名);scanf(%s, tmp.name);printf(请输入添加人的性别);scanf(%s, tmp.gender);printf(请输入添加人的年龄);scanf(%d, tmp.age);printf(请输入添加人的电话);scanf(%s, tmp.tele);printf(请输入添加人的地址);scanf(%s, tmp.addr);//采用尾插SLPushBack(con, tmp);printf(添加成功\n); }//展示通讯录数据 void ShowContact(contact* con) {assert(con);int i 0;if (con-size 0){printf(通讯录为空\n);return;}printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址);for (i 0; i con-size; i){printf(%s %s %d %s %s\n, con-data[i].name, con-data[i].gender, con-data[i].age,con-data[i].tele, con-data[i].addr);}printf(\n); }//删除通讯录数据 void DelContact(contact* con) {//采用尾删SLPopBack(con);printf(删除成功\n); }//查找通讯录数据 void FindContact(contact* con) {char name[MAX_NAME];printf(输入你要查找的姓名);scanf(%s, name);int find SLFind(con, name);if (find 0){printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址);printf(%s %s %d %s %s\n, con-data[find].name,con-data[find].gender,con-data[find].age,con-data[find].tele,con-data[find].addr);}else{printf(查无此人\n);}printf(\n); }//修改通讯录数据 void ModifyContact(contact* con) {char name[MAX_NAME];printf(输入你要修改的姓名);scanf(%s, name);int find SLFind(con, name);if (find 0){printf(此人不存在\n);return;}printf(请输修改人的姓名);scanf(%s, con-data[find].name);printf(请输入修改人的性别);scanf(%s, con-data[find].gender);printf(请输入修改人的年龄);scanf(%d, con-data[find].age);printf(请输入修改人的电话);scanf(%s, con-data[find].tele);printf(请输入修改人的地址);scanf(%s, con-data[find].addr);printf(修改成功\n); }//保存通讯录的数据 void SaveContact(contact* con) {FILE* pf fopen(contact.txt, wb);if (pf NULL){perror(fopen);return;}int i 0;for (i 0; i con-size; i){fwrite(con-data[i], sizeof(PeoInfo), 1, pf);}fclose(pf);pf NULL;printf(已保存好通讯录\n); }//导入上次的通讯录的数据 void PushContact(contact* con) {FILE* pf fopen(contact.txt, rb);if (pf NULL){printf(未导入上次的通讯录的数据\n);return;}int i 0;int ret 0;while (1){SLCheckCapacity(con);ret fread(con-data[i], sizeof(PeoInfo), 1, pf);if (ret 0){break;}con-size;i;}fclose(pf);pf NULL; }SeqList.c #includeSeqList.hvoid SLInit(SL* ps)//顺序表初始化 {ps-data NULL;ps-size ps-capacity 0; }void SLDestroy(SL* ps)//顺序表销毁 {assert(ps);free(ps-data);ps-data NULL;ps-size ps-capacity 0; }//插入 void SLPushBack(SL* ps, SLDataType x)//尾插 {assert(ps);SLCheckCapacity(ps);ps-data[ps-size] x; }//删除 void SLPopBack(SL* ps)//尾删 {assert(ps);assert(ps-size);ps-size--; }//扩容 void SLCheckCapacity(SL* ps) {assert(ps);if (ps-size ps-capacity){int newcapacity ps-capacity 0 ? MAX_CAPACITY : ps-capacity * 2;SLDataType* tmp (SLDataType*)realloc(ps-data, newcapacity * sizeof(SLDataType));if (tmp NULL){perror(realloc fail);exit(1);}ps-data tmp;ps-capacity newcapacity;} }//查找 int SLFind(SL* ps, char* x) {assert(ps);int i 0;for (i 0; i ps-size; i){if (strcmp(ps-data[i].name, x) 0){return i;}}return -1; }test.c(主程序的实现) #includeSeqList.hvoid menu() {printf(*********** 欢迎来到通讯录 ***********\n);printf(*********** 1.增加联系人 2.删除联系人 ***********\n);printf(*********** 3.查找联系人 4.修改联系人 ***********\n);printf(*********** 5.展示通讯录 0.退出通讯录 ***********\n);printf(*******************************************************\n); }int main() {int option 0;contact peo;InitContact(peo);do{menu();printf(请选择);scanf(%d, option);switch (option){case 1:AddContact(peo);break;case 2:DelContact(peo);break;case 3:FindContact(peo);break;case 4:ModifyContact(peo);break;case 5:ShowContact(peo);break;case 0:printf(退出通讯录\n);DestroyContact(peo);break;default:printf(输入错误\n);break;}} while (option);return 0; }
http://www.zqtcl.cn/news/919254/

相关文章:

  • 网站是生成静态好还是动态好怎么找到域名做的那个网站
  • 婚纱网站页面设计上海商地网站建设公司
  • 模板手机网站建设多少钱百度搜索词排名
  • 怎么学做网站住房和城乡建设部网站一级建造师
  • 政务公开网惠州seo推广公司
  • 建设英文商城网站网站开发工具选择
  • 沈阳市浑南区城乡建设局网站淄博哪里有网站建设平台
  • 做不锈钢管网站口碑好的定制网站建设提供商
  • 做网站推广销售wordpress 随机页面
  • 陈坤做直播在哪个网站如何在建设银行网站预约纪念币
  • 如何做网站么新网站一天做多少外链
  • 用家用路由器ip做网站营销策略方案
  • 学历教育网站建设网页前端是什么
  • 相同网站名网站县区分站点建设
  • 医疗器械网站建设方案南京网站制作系统
  • 小网站托管费用企查宝企业查询
  • 专门做特卖的网站是什么外国炫酷网站网址
  • 学习网站的建设wordpress批量拿shell
  • 中企动力做的网站推软件
  • 北京财优化沧州seo公司
  • 收到网站代码后怎么做啥是东莞网站优化推广
  • 重庆商城网站开发网站建设中英版
  • 免费企业网站开发给酒吧做网站
  • 想用自己电脑做服务器做个网站吗网站制作工作室哪家比较好
  • 这样建立网站vs2008做网站
  • 做网站创业故事好看大方的企业网站源码.net
  • 做家常菜哪个网站最好香蜜湖附近网站建设
  • 网站index.php被修改seo网络推广经理招聘
  • 南京做网站联系南京乐识网站建设培训福州
  • 比较冷门的视频网站做搬运网站建设 分析