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

赤城县城乡建设局网站文创网站建设

赤城县城乡建设局网站,文创网站建设,芜湖企业网站制作,旅游网站系统一、. 基于动态顺序表实现通讯录 1.1 功能要求 1#xff09;⾄少能够存储100个⼈的通讯信息 2#xff09;能够保存⽤⼾信息#xff1a;名字、性别、年龄、电话、地址等 3#xff09;增加联系⼈信息 4#xff09;删除指定联系⼈ 5#xff09;查找制定联系⼈ 6⾄少能够存储100个⼈的通讯信息 2能够保存⽤⼾信息名字、性别、年龄、电话、地址等 3增加联系⼈信息 4删除指定联系⼈ 5查找制定联系⼈ 6修改指定联系⼈ 7显⽰联系⼈信息 1.2   思路分析 我们之前创建的顺序表可以实现连续存储数据类型可以为整型、字符等但无论是哪种类型存储信息都比较单一但是通讯录存储信息比较多有联系人姓名、性别、年龄等所以我们把一个联系人的所有信息作为一个整体存储到顺序表原来我们写的是整型作为数据存储每个数组元素空间现在转化通讯录把一个人的所有信息打包变为结构体然后存储到数组元素元素的空间然后基于顺序表实现通讯录功能。 1.3 通讯录的实现 因为我们是基于顺序表实现通讯录先将顺序表写好 1.3.1 顺序表 1.3.1.1  SeqList.h #define _CRT_SECURE_NO_WARNINGS #includestdlib.h //#includeContact.h #define NAME_MAX 100 #define SEX_MAX 10 #define TEL_MAX 15 #define ADDR_AMX 20 struct ContactInfo {char name[NAME_MAX];char sex[SEX_MAX];int age;char tel[TEL_MAX];char addr[ADDR_AMX]; }; typedef struct ContactInfo SLDateType; typedef struct SeqList {SLDateType* a;int size;//空间有效数据int capacity;//空间大小 }SL;//初始化和销毁 void SLInit(SL* ps); void SLDestory(SL* ps);//尾插和头插 void SLPushBack(SL* ps, SLDateType x); void SLPushFront(SL* ps, SLDateType x); //void SLPrint(SL* ps);//头删和尾删 void SLPopBack(SL* ps); void SLPopFront(SL* ps);//在指定位置之前插入 void SLInsert(SL* ps, int pos, SLDateType x); //删除指定位置 void SLDel(SL* ps, int pos); 注这里值得注意的是我们将通讯信息结构体定义在SeqList.h中然后重命名后面的顺序表结构也是这样那为什么不把通讯信息结构体定义在Contact.h,然后再SeqList.h中包含Contact.h对typedef struct ContactInfo  SLDateType 这样看似没问题实际会造成重命名的问题所以我们字书时要规范。 输出结果 1.3.1.2  SeqList.c #define _CRT_SECURE_NO_WARNINGS #include SeqList.h #includestdio.h #includeassert.h #includestdbool.h void SLInit(SL* ps) {ps-a NULL;ps-size ps-capacity 0; } void SLDestory(SL* ps) {if (ps-a)free(ps-a);ps-a NULL;ps-size ps-capacity 0; } int SLCheckCapacity(SL* ps) {assert(ps);int newcapacity ps-capacity 0 ? 4 : ps-capacity * 2;if (ps-size ps-capacity)//进行扩容{SLDateType* ret (SLDateType*)realloc(ps-a, newcapacity * sizeof(SLDateType));if (ret NULL){perror(realloc fail:);return 1;}ps-a ret;ps-capacity newcapacity;} }void SLPushBack(SL* ps, SLDateType x)//1.若空间足够进行插入 2.若空间不够进行扩容以1.5或2倍原来大小进行扩容 {assert(ps);SLCheckCapacity(ps);ps-a[ps-size] x;ps-size; } //void SLPrint(SL* ps) //{ // assert(ps); // for (size_t i 0; i ps-size; i) // { // printf(%d , ps-a[i]); // } // printf(\n); //} void SLPushFront(SL* ps, SLDateType x) {assert(ps);SLCheckCapacity(ps);for (size_t i ps-size; i 0; i--){ps-a[i] ps-a[i-1];}ps-a[0] x;ps-size; }bool SLIsEmpty(SL * ps)//若返回值为假则有数据反之则无 {assert(ps);return ps-size 0; } void SLPopBack(SL* ps) {assert(ps);//还需要判断是否有数据assert(!SLIsEmpty(ps));ps-size--; } void SLPopFront(SL* ps) {assert(ps);//还需要判断是否有数据assert(!SLIsEmpty(ps));for (size_t i 0; i ps-size-1; i){ps-a[i] ps-a[i 1];}ps-size--; }// 在指定位置之前插入 void SLInsert(SL* ps, int pos, SLDateType x) {assert(ps);SLCheckCapacity(ps);//防止越界访问assert(pos 0 pos ps-size);//端点位置为头插和尾插for (size_t i ps-size; i pos; i--){ps-a[i] ps-a[i - 1];}ps-a[pos] x;ps-size; } //删除指定位置 void SLDel(SL* ps, int pos) {assert(ps);assert(!SLIsEmpty(ps));assert(pos 0 pos ps-size);//端点位置为头删和尾删for (size_t i pos; i ps-size-1; i){ps-a[i] ps-a[i 1];}ps-size--; } 1.3.2  通讯录的初始化销毁 1.3.2.1 Contact.h #define _CRT_SECURE_NO_WARNINGStypedef struct ContactInfo CInfo; typedef struct SeqList Contact;//将顺序表重命名为通讯录(这里只是声明无需包含Seqlist.h)//通讯录的初始化和销毁 void ContactInit(Contact* con); void ContactDestroy(Contact* con);注这里没有包含SeqList.h,为什么可以重定义结构体和顺序表呢 因为这里我们只是声明没有使用当在text.c使用时它就会将Contact.h的CInfo和Contact 展开。 1.3.2.2 Contact.c #define _CRT_SECURE_NO_WARNINGS #includeContact.h #includeSeqList.h #include stdlib.h #includestdio.h #includeassert.h void ContactInit(Contact* con) {SLInit(con); } void ContactDestroy(Contact* con) {SLDestory(con); } 这里直接借用顺序表实现 1.3.3   通讯录的添加删除 1.3.3.1 Contact.h //通讯录的初始化和销毁 void ContactInit(Contact* con); void ContactDestroy(Contact* con); 1.3.3.2 Contact.c void ContactAdd(Contact* con) {assert(con);CInfo info;printf(请输入姓名\n);scanf(%s, info.name);printf(请输入性别\n);scanf(%s, info.sex);printf(请输入年龄\n);scanf(%d, info.age);printf(请输入电话号码\n);scanf(%s, info.tel);printf(请输入地址\n);scanf(%s, info.addr);//将数据进行尾插SLPushBack(con,info);} int FindByName(Contact* con,char name[]) {for (int i 0; i con-size; i){if (strcmp(con-a[i].name, name)0){return i;}}return -1; }void ContactDel(Contact* con) {assert(con);char name[NAME_MAX];printf(需要删除的姓名\n);scanf(%s, name);//先查找该信息位置int retFindByName(con,name);if (ret 0){printf(没找到该联系人\n);return 1;}SLDel(con, ret);//删除指定位置 }注 info.name这个是数组名所以不用取地址 1.3.4  查看通讯录  1.3.4.1 Contact.h //查看通讯录 void ContactShow(Contact* con); 1.3.4.2  Contact.c void ContactShow(Contact* con) {assert(con);assert(con-a);printf(%-4s%-4s%-4s%-4s%-4s\n, 姓名, 性别, 年龄, 电话, 住址);for (int i 0; i con-size;i){printf(%-4s %-4s %-4d%-4s%-4s\n,con-a[i].name, con-a[i].sex, con-a[i].age, con-a[i].tel, con-a[i].addr);} }1.3.5  修改通讯录 1.3.5.1 Contact.h //修改通讯录 void ContactChange(Contact* con);1.3.5.2 Contact.c void ContactChange(Contact* con) {assert(con);char name[NAME_MAX];printf(需要修改的姓名\n);scanf(%s,name);//先查找该信息位置int ret FindByName(con, name);if (ret 0){printf(没找到该联系人\n);return 1;}printf(请输入修改的姓名\n);scanf(%s,con-a[ret].name);printf(请输入修改的性别\n);scanf(%s, con-a[ret].sex);printf(请输入修改的年龄\n);scanf(%d, con-a[ret].age);printf(请输入修改的电话号码\n);scanf(%s, con-a[ret].tel);printf(请输入修改的地址\n);scanf(%s, con-a[ret].addr);printf(修改成功\n);} 1.3.6 查找指定联系人  1.3.6.1 Contact.h //查找指定联系人 void ContactFind(Contact* con); 1.3.6.2 Contact.c void ContactFind(Contact* con) {assert(con);char name[NAME_MAX];printf(需要查找的姓名\n);scanf(%s, name);//先查找该信息位置int ret FindByName(con, name);if (ret 0){printf(没找到该联系人\n);return 1;}printf(%-4s%-4s%-4d%-4s%-4s\n,con-a[ret].name, con-a[ret].sex, con-a[ret].age, con-a[ret].tel, con-a[ret].addr); } 1.3.7 菜单界面 为方便调用通讯录的各种功能我们做一个菜单界面 1.3.7 .1 text.c void menu() { printf(****************** 通讯录 **********************\n);printf(*** 1.添加联系人 2.删除联系人 ******\n);printf(*** 3.修改通讯录 4.查看指定联系人 ******\n);printf(*** 5.查看通讯录 0.退出通讯录 ******\n);printf(*****************************************************\n);} int main() {int n -1;Contact con;ContactInit(con);do{menu();printf(请输入你的选择\n);scanf(%d, n);switch (n){case 1:ContactAdd(con);break;case 2:ContactDel(con);break;case 3:ContactChange(con);break;case 4:ContactFind(con);break;case 5:ContactShow(con);break;case 0:break;default:printf(输入错误请从新输入\n);break;}}while (n);ContactDestroy(con);return 0; } 1.3.8  测试界面
http://www.hkea.cn/news/14333659/

相关文章:

  • 吴江企业网站建设佛山网签查询系统
  • 天津设计师网站大全wordpress文字怎么做超级链接
  • 我想做直播网站该怎么做巅云建站
  • 学生作业网站wordpress门户网站
  • 家私网站栏目和功能需求策划权威网站发布平台
  • 国内网站备案流程网站开发技术网站
  • h5网站架设电子商务网站建设情况
  • 做阀门网站电话wordpress添加底部漂浮栏菜单
  • 网站的建设步骤wordpress多语言包
  • 自建网站平台的页面功能做网站站长开通vip
  • 城乡建设部网官方网站做seo需要用到什么软件
  • 九寨沟网站开发的背景wordpress主题如何开发
  • 崇左网站建设公司河北省建设厅网站网上建设大厅
  • 支付网站建设会计分录天元建设集团有限公司是国企还是央企
  • 山西建站大专毕业设计怎么做
  • 正能量网站免费下载腾虎网络广州网站建设
  • 广州做公司网站的公司有哪些电子商务网站建设与管理基础
  • 做国外订单的网站网站没收录要怎么做
  • 广州网站排名优化费用平面设计论坛
  • 怎样做网站公司的销售江门市做网站
  • 网站建设大忌wordpress注册模板下载
  • 网站开发的概念桥东网站建设
  • 广东三网合一网站建设报价html5响应式网站开发教程
  • 白沙的网站建设window主机用wordpress
  • 网站开发维护需要哪些人手机编程app
  • 网站建设 18556502558济宁网站建设流程
  • 已经有备案的公司网站 还能不能加网站wordpress后台仪表盘
  • 门户网站开发建设技术win7 iis 网站
  • 佛山市南海区城乡建设局网站优秀网页 网站
  • 有谁做彩票网站深圳工程建设交易中心网