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

手机网站开发教程视频小说网页设计代码模板

手机网站开发教程视频,小说网页设计代码模板,户型图在哪个网站找,大连微信公众号开发公司文章目录 前言通讯录要求利用顺序表的现有功能代码呈现 前言 这篇文章实现的通讯录利用了笔者上一篇写的有关顺序表的应用 https://blog.csdn.net/2301_77954967/article/details/137360029?spm1001.2014.3001.5502#xff0c;需要用的朋友自行复制 通讯录要求 1)至少能够… 文章目录 前言通讯录要求利用顺序表的现有功能代码呈现 前言 这篇文章实现的通讯录利用了笔者上一篇写的有关顺序表的应用 https://blog.csdn.net/2301_77954967/article/details/137360029?spm1001.2014.3001.5502需要用的朋友自行复制 通讯录要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系人信息 8)能够保存信息用于下次读取 利用顺序表的现有功能 我们现在contact.h的头文件里建立如下结构体 #define NAME_MAX 100 #define GENDER_MAX 10 //male female #define TEL_MAX 20 #define ADDR_MAX 100//定义联系人数据结构 //姓名 性别 年龄 电话 地址 typedef struct personInfo {char name[NAME_MAX];char gender[GENDER_MAX];int age;char tel[TEL_MAX];char addr[ADDR_MAX]; }peoInfo;我们可以把这个通讯录中的每个人的信息看成一个顺序表中每一个数组的数据这样一来就只需要将这里的类型名 peoInfo 给重命名成 SLDataType 就行了需要注意的是这里是两个头文件不仅需要放在同一目录下还需要在 SeqList.h 文件里附加上 Contact.h 的头文件名 #includeContact.htypedef peoInfo SLDataType;//将proInfo改成SLDataTypetypedef struct SeqList {SLDataType* arr;int size;//有效数据个数int capacity;//空间大小 }SL; 再然后如果后续的功能名仍用 SL 来命名会有些模糊但是两个头文件之间不能互相引用那么这里我们可以回到 Contact.h 里进行前置声明 typedef struct SeqList Contact;//前置声明用顺序表里第一个创立的结构体名SeqList而不是SL这样一来就是要进行方案功能的实现就行了开始工作做好了后面就会简单很多 //初始化通讯录 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); 假设我们上面几个方法都已经完善并测验好了我们需要思考的如何使这些数据进行保存方便下一次读取这里就需要用到文件了 这里我们选择用二进制文件的方式读取和写入原因是这里我们利用了 peoInfo 这个现有的结构体和 SLPushBack 这个现有的方法不需要以文本文件格式化的形式读入文件再花费功夫去调整文本文件的格式 代码呈现 Contact.h #pragma once//同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件而不是指内容相同的两个文件#define _CRT_SECURE_NO_WARNINGS 1 #pragma warning(disable:6031) #includestdio.h #includestdlib.h #includeassert.h#define NAME_MAX 100 #define GENDER_MAX 10 //male female #define TEL_MAX 20 #define ADDR_MAX 100//定义联系人数据结构 //姓名 性别 年龄 电话 地址 typedef struct personInfo {char name[NAME_MAX];char gender[GENDER_MAX];int age;char tel[TEL_MAX];char addr[ADDR_MAX]; }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 LoadContact(Contact* con);//写入 void SaveContact(Contact* con); SeqList.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #pragma warning(disable:6031) #includestdio.h #includestdlib.h #includeassert.h#includeContact.h//头文件之间不能互相包含typedef peoInfo SLDataType;//将proInfo改成SLDataTypetypedef struct SeqList {SLDataType* arr;int size;//有效数据个数int capacity;//空间大小 }SL;//typedef struct SeqList SL;//将这个顺序表的类型名简化成SL//顺序表初始化 void SLInit(SL* ps); //顺序表的销毁 void SLDestory(SL* ps);//尾部插入 void SLPushBack(SL* ps, SLDataType x); //头部插入 void SLPushFront(SL* ps, SLDataType x);//尾部删除 void SLPopBack(SL* ps); //头部删除 void SLPopFront(SL* ps);//扩容 void SLCheckCapacity(SL* ps); //打印 void SLPrint(SL s);//在指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x); //删除指定位置的数据 void SLErase(SL* ps, int pos);//查找 int SLFind(SL* ps, SLDataType x); Contact.c #includeContact.h #includeSeqList.h//初始化通讯录 void InitContact(Contact* con) {//实际上要进行的是顺序表的初始化//con-arr NULL;//con-capacity con-size 0;SLInit(con);LoadContact(con); }//销毁通讯录数据 void DestroyContact(Contact* con) {SaveContact(con);SLDestory(con); }//添加通讯录数据 void AddContact(Contact* con) {//获取用户输入的内容一个结构体peoInfo info;printf(请输入要添加的联系人姓名\n);scanf(%s, info.name);printf(请输入要添加的联系人性别\n);scanf(%s, info.gender);printf(请输入要添加的联系人年龄\n);scanf(%d, info.age);//数组名即首元素的地址所以不用取地址创建时字符是以数组的形式创建的printf(请输入要添加的联系人电话\n);scanf(%s, info.tel);printf(请输入要添加的联系人地址\n);scanf(%s, info.addr);//往通讯录中添加联系人数据SLPushBack(con, info);//顺序表中已有功能的复用 }//查找通讯录数据依靠名字 FindByName(Contact* con, char name[]) {for (int i 0; i con-size; i){if (0 strcmp(con-arr[i].name, name)){//找到了return i;}}//没有找到return -1; }//通讯录删除数据 void DelContact(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 ShowContact(Contact* con) {//打印表头printf(%5s %5s %5s %5s %5s\n, 姓名, 性别, 年龄, 电话, 地址);//遍历通讯录按照格式打印每个联系人数据for (int i 0; i con-size; i){printf(%5s %5s %5d %5s %5s\n,con-arr[i].name,con-arr[i].gender,con-arr[i].age,con-arr[i].tel,con-arr[i].addr);} }//修改通讯录数据 void ModifyContact(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 FindContact(Contact* con) {char name[NAME_MAX];printf(请输入要查找的联系人\n);scanf(%s, name);int find FindByName(con,name);if (find 0){printf(要查找的联系人数据不存在\n);return;}printf(%5s %5s %5s %5s %5s\n, 姓名, 性别, 年龄, 电话, 地址);printf(%5s %5s %5d %5s %5s\n,con-arr[find].name,con-arr[find].gender,con-arr[find].age,con-arr[find].tel,con-arr[find].addr);}//利用文件保存数据 //读取 void LoadContact(Contact* con) {FILE* pf fopen(contact.txt, rb);if (pf NULL){perror(fopen error!\n);return;}//循环读取文件数据peoInfo info;while (fread(info, sizeof(peoInfo), 1, pf)){SLPushBack(con, info);}fclose(pf);pf NULL;printf(历史数据写入成功!\n); }//写入 void SaveContact(Contact* con) {FILE* pf fopen(contact.txt, wb);if (pf NULL){perror(fopen error!\n);return;}for (int i 0; i con-size; i){fwrite(con-arr i, sizeof(peoInfo), 1, pf);}fclose(pf);pf NULL;printf(通讯录数据保存成功!\n); }SeqList.c #includeSeqList.h//初始化顺序表 void SLInit(SL* ps) {ps-arr NULL;ps-size ps-capacity 0;}//顺序表的销毁 void SLDestory(SL* ps) {if (ps-arr){free(ps-arr);}ps-arr NULL;ps-size ps-capacity 0; }//扩容 void SLCheckCapacity(SL* ps) {//插入数据前看看空间够不够if (ps-size ps-capacity){//扩容申请空间int newCapacity ps-capacity 0 ? 4 : 2 * ps-capacity;//三目表达式SLDataType* tmp (SLDataType*)realloc(ps-arr, newCapacity * 2 * sizeof(SLDataType));if (tmp NULL){perror(realloc fail!);exit(1);}//空间申请成功ps-arr tmp;ps-capacity newCapacity;} }//打印 void SLPrint(SL s) {for (int i 0; i s.size; i){printf(%d , s.arr[i]);}printf(\n); }//在尾部插入 void SLPushBack(SL* ps, SLDataType x) {//温柔的解决方式//if(ps NULL)//{// return 0;//}assert(ps);////扩容SLCheckCapacity(ps);//ps-arr[ps-size] x;//ps-size;ps-arr[ps-size] x; }//头插 void SLPushFront(SL* ps, SLDataType x) {//扩容SLCheckCapacity(ps);//先将顺序表中已有的数据整体往后移动一位for (int i ps-size; i 0; i--){ps-arr[i] ps-arr[i - 1];}ps-arr[0] x;ps-size; }//尾部删除 void SLPopBack(SL* ps) {assert(ps);assert(ps-size);//顺序表不为空--ps-size; }//头部删除 void SLPopFront(SL* ps) {assert(ps);assert(ps-size);//顺序表不为空//数据整体王前移动一位for (int i 0; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];}ps-size--; }//在指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);//扩容判断空间够不够SLCheckCapacity(ps);//让pos之后及其自身往后移动一位for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1];}ps-size;ps-arr[pos] x; }//删除指定位置的数据 void SLErase(SL* ps, int pos) {assert(ps);assert(pos 0 pos ps-size);for (int i pos; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];}ps-size--; }//查找 //int SLFind(SL* ps, SLDataType x) //{ // assert(ps); // for (int i 0; i ps-size; i) // { // if (ps-arr[i] x) // { // return i; // } // } // return -1; //} test.c #includeContact.h #includeSeqList.h通讯录测试 //void ContactTest01() //{ // Contact con;//创建通讯录对象 // InitContact(con); // // //测试添加数据功能 // AddContact(con); // AddContact(con); // // //测试删除数据功能 // DelContact(con); // // //测试打印功能 // ShowContact(con); // // //销毁通讯录数据 // DestroyContact(con); // //} // //int main1() //{ // ContactTest01(); // return 0; //}void menu() {printf(*******************通讯录******************\n);printf(*****1.增加联系人 ****** 2.删除联系人****\n);printf(*****3.修改联系人 ****** 4.查找联系人****\n);printf(*****5.展示联系人 ****** 0. 退 出 ****\n);printf(*******************************************\n); } int main() {int op -1;Contact con;InitContact(con);do{menu();printf(请选择您的操作\n);scanf(%d, op);//要根据对应的op执行不同的操作switch (op){case 1:AddContact(con);break;case 2:DelContact(con);break;case 3:ModifyContact(con);break;case 4:FindContact(con);break;case 5:ShowContact(con);break;case 0:op 0;printf(退出通讯录中......\n);break;default:printf(选择错误!请重新选择\n);break;}}while(op ! 0);printf(退出成功\n);DestroyContact(con);return 0; }
http://www.pierceye.com/news/695254/

相关文章:

  • 河南广告制作公司网站西班牙语网站设计公司哪家好
  • 做业务一般要注册哪些网站wordpress prepare
  • wordpress 鼠标经过seo网站内容优化有哪些
  • 单页网站制作视频教程深圳有哪些软件外包公司
  • 嘉兴电子商务网站建设wordpress如何添加页面子目录
  • 教育在线网站怎样做直播seo网站推广怎样
  • 响应式的网站建设一个多少钱百度域名解析
  • 东莞做网站卓诚网络免费大数据分析网站
  • 网站用什么图片格式好seo学徒招聘
  • 地区网站建设网站用户反馈
  • 网站备案背景幕布下载成都最好的seo外包
  • 荆州 商务 网站建设郑州网站建设灵秀
  • 重庆市建筑工程信息官方网站注册号域名后如何建设公司网站
  • 江门网站建设junke100深圳小企业网站建设设计制作
  • 个人域名能做网站吗江苏外贸型网站制作
  • 文登区做网站的公司琴行网站开发学术论文
  • 嵌入式网站开发学习百度seo优化收费标准
  • 网站评价及优化分析报告湖南省邵阳建设局网站
  • 网站推广是做什么的深圳市住房建设与保障局官方网站
  • qq群推广网站lamp网站开发制作
  • ui网站界面设计广州省建设监理协会网站
  • 网站界面设计教程宁波正规网站seo公司
  • 网站建设与管理中专上海注册公司注册地址
  • 清溪网站建设怎么用wordpress打开网站
  • 网站稳定性不好的原因wordpress仿站维护
  • 银行管理系统网站建设最专业的医疗网站建设
  • 网站应该怎么做住建官网查询
  • 建设网站类型条形码生成器在线制作图片
  • 邯郸广告公司网站建设seo排名怎么做
  • 大眼睛网站建设做艺术品的网站