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

双河市网站建设_网站建设公司_建站流程_seo优化

网站正在建设中 模板,网络营销方案,优设网app安卓下载,网站开发课程教学目标一、. 基于动态顺序表实现通讯录 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.ihoyoo.com/news/47985.html

相关文章:

  • 东莞建设工程质量网站网站建设阿里云
  • 网站备案帐号找回app下载地址
  • 网站需求分析模板东莞市凤岗建设局网站
  • 整站seoseo优化做推广最好的网站是哪个
  • 网站图片代码怎么做的杭州网站 建设
  • 虚拟机主机网站建设的几个步骤在线做爰a视频网站
  • 西宁网站建设高端龙岩做网站公司
  • 电商网站设计企业WordPress 整合源码
  • 儋州网站建设制作淮安网站建设 淮安网站制作
  • 怎么给网站加友情链接2017年网站设计趋势
  • 本地建设网站软件下载胶州哪家公司做网站
  • 鄂州网站建设推广报价制作灯笼的手工做法视频
  • 长沙培训网站制作北京到安阳防疫政策
  • wordpress临时关站网站后台管理系统多少钱
  • 专门做二手书的网站动易的网站系统
  • wordpress 检索插件安卓优化大师老版本
  • 甘肃路桥建设集团有限公司官方网站php网站开发工资多少钱
  • 政务网站建设目标和核心功能seo排名优化收费
  • 阳谷建网站网站做友情链接
  • 邵阳网站建设的话术汽车保险网站
  • 公司网站怎么推广周口集团网站建设
  • 上饶市住房和城乡建设局网站职业技能培训
  • 微网站服务器如何免费注册自己的网站
  • 深圳比较大的做网站设计公司百度网盘官网
  • 东莞做网站-南城信科免费建立网站的平台
  • 苏州网站建设哪家技术好苏州网站建设设计制作公司
  • 营销型网站建设标准互联网软件开发是什么工作
  • 淮安网站网页设计wordpress物流主题
  • 什么网站可以做项目广告软文是什么意思
  • 公司网站建设的视频网站有必要使用伪静态么