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

网站建设禁止性规定个性个人网站

网站建设禁止性规定,个性个人网站,连云港建设厅官方网站,男科医院治疗一次2000元文章目录前言#xff1a;一.动态管理思想1.通讯录结构体声明发生变化2.通讯录结构体初始化发生变化3.通讯录能够动态增容4.通讯录销毁数据二.优化通讯录可持续读写信息1.保存通讯录中的信息到文件中2.加载文件信息到通讯录中三.源码1.text.c2.contact.c3.contact.h前言#x… 文章目录前言一.动态管理思想1.通讯录结构体声明发生变化2.通讯录结构体初始化发生变化3.通讯录能够动态增容4.通讯录销毁数据二.优化通讯录可持续读写信息1.保存通讯录中的信息到文件中2.加载文件信息到通讯录中三.源码1.text.c2.contact.c3.contact.h前言 1.0版本–静态通讯录 在上一个静态版本中我们在使用的时候会发现有诸多不便比如通讯录可以存放的信息总量是固定不变的比如当我们打开通讯录写入数据后保存再打开时上一次写入的数据消失不见了本篇将详细讲解如何使用动态内存管理和文件操作解决这两个问题 一.动态管理思想 1.通讯录结构体声明发生变化 首先在静态通讯录中结构体的大小是固定好的比如有20个空间我们就没法存放30个人的信息但是只存放3个人的信息那又太浪费了。所以我们让通讯录结构体一开始只有3个空间满了后就增容2个空间这样可以提高空间利用率需要用到动态内存管理 原来1.0静态版本 #define MAX 100 #define NAME_MAX 20 #define SEX_MAX 10 #define ADDRESS_MAX 30 #define TELEPHONE_MAX 12//定义一个结构体类型这里存放人的信息 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char address[ADDRESS_MAX];char telephone[TELEPHONE_MAX]; }PeoInfo; //所有人的都放到这里 typedef struct Contact {PeoInfo data[MAX];int size; }Contact;现在2.0动态版本 #define MAX 100 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12#define DEFAULT_SZ 3 #define INC_SZ 2//人的信息 typedef struct PeoInfo {char name[NAME_MAX]; //姓名int age; //年龄char sex[SEX_MAX]; //性别char addr[ADDR_MAX]; //住址char tele[TELE_MAX]; //电话号码 }PeoInfo;typedef struct Contact {PeoInfo* data; //指向存放人的信息的空间int sz; //当前已经放的信息的个数int capacity; //当前通讯录的最大容量 }Contact;解析原来的data[MAX]数组存放信息其大小MAX是固定的现在通讯录随时会增容故要改为指针指向每个人的信息sz值随着通讯录中的人数动态增长 2.通讯录结构体初始化发生变化 为每个结构体动态分配内存空间 //初始化通讯录 void InitContact(Contact* pc) {assert(pc);PeoInfo* ptr (PeoInfo*)calloc(DEFAULT_SIZE, sizeof(PeoInfo));if (ptr NULL){perror(InitContact::calloc);return;}pc-data ptr;pc-size 0;pc-capacity DEFAULT_SIZE; }3.通讯录能够动态增容 对静态通讯录来说满了就不能继续添加了。 我们为解决这一问题给动态通讯录封装一个增容函数以实现动态扩容 //检查当前通讯录的容量 //sz满了才增加容量不满就没必要增加 void check_capacity(Contact* pc) {if (pc-sz pc-capacity){//增加容量PeoInfo* ptr (PeoInfo*)realloc(pc-data, (pc-capacity INC_SZ) * sizeof(PeoInfo));if (ptr NULL){perror(check_capacity::realloc);return;}pc-data ptr;pc-capacity INC_SZ;printf(增容成功\n);} }解析只有当sz(即当前存在通信录中的人数等于当前最大容量capaciity即存满了的时候才扩容我们定义INC_SZ为每次再增加多少容量。 4.通讯录销毁数据 由于现在的内存空间都是动态分配的所以数据也都在堆区上那么每次关闭通讯录的时候都要释放内存也就是销毁通讯录以防止内存泄漏 //销毁通讯录 void DestoryContact(Contact* pc) {free(pc-data);pc-data NULL;pc-capacity 0;pc-size 0;pc NULL; }二.优化通讯录可持续读写信息 前面提到静态版本中当我们打开通讯录写入数据后保存再打开时上一次写入的数据消失不见了为解决这个问题我们将每次输入到通讯录的信息保存的文件里这样再打开程序的时候上次的数据仍然存在 1.保存通讯录中的信息到文件中 //保存通讯录中的信息到文件中 void SaveContact(Contact* pc) {//写数据//1, 打开文件FILE* pf fopen(contact.txt, wb);if (NULL pf){perror(SaveContact);}else{//写数据int i 0;for (i 0; i pc-sz; i){fwrite(pc-data i, sizeof(PeoInfo), 1, pf);}fclose(pf);pf NULL;printf(保存成功\n);} } 2.加载文件信息到通讯录中 再次打开通讯录需要从文件中读数据 //加载文件信息到通讯录 void LoadContact(Contact* pc) {//读数据//1. 打开文件FILE* pf fopen(contact.txt, rb);if (pf NULL){perror(LoadContact);}else{//2. 读数据PeoInfo tmp { 0 };int i 0;while (fread(tmp, sizeof(PeoInfo), 1, pf)){//需不需要增容check_capacity(pc);pc-data[i] tmp;pc-sz;i;}fclose(pf);pf NULL;} } 三.源码 1.text.c #define _CRT_SECURE_NO_WARNINGS 1#include contatc.hvoid menu() {printf(********************\n);printf(****1.add 2.del****\n);printf(****3.search 4.modify****\n);printf(****5.show 6.sort****\n);printf(****0.exit ****\n);printf(********************\n); } enum Option {EXIT,//0ADD, //1DEL, //2SEARCH,MODIFY,SHOW,SORT }; int main() {int input 0;Contact con;InitContact(con);do{menu();printf(请选择:);scanf(%d, input);switch (input){case ADD:AddContact(con);break;case DEL:DelContact(con);break;case SEARCH:SearchContact(con);break;case MODIFY:ModifyContact(con);break;case SHOW:ShowContact(con);break;case SORT:ShowContact(con);break;case EXIT:SaveContact(con);DestroyContact(con);printf(推出通讯录\n);break;default:printf(选择错误\n);break;}} while (input);return 0; }2.contact.c #define _CRT_SECURE_NO_WARNINGS 1 #include contact.h//初始化通讯录 void InitContact(Contact* pc) {assert(pc);pc-sz 0;PeoInfo* ptr (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo));if (ptr NULL){perror(InitContact::calloc);return;}pc-data ptr;pc-capacity DEFAULT_SZ;//加载文件信息到通讯录LoadContact(pc); }//销毁通讯录 void DestroyContact(Contact* pc) {free(pc-data);pc-data NULL;pc-capacity 0;pc-sz 0;pc NULL; }//检查当前通讯录的容量 void check_capacity(Contact* pc) {if (pc-sz pc-capacity){//增加容量PeoInfo* ptr (PeoInfo*)realloc(pc-data, (pc-capacity INC_SZ) * sizeof(PeoInfo));if (ptr NULL){perror(check_capacity::realloc);return;}pc-data ptr;pc-capacity INC_SZ;printf(增容成功\n);} }//增加联系人 void AddContact(Contact* pc) {assert(pc);check_capacity(pc);//增加一个人的信息printf(请输入名字:);scanf(%s, pc-data[pc-sz].name);printf(请输入年龄:);scanf(%d, (pc-data[pc-sz].age));printf(请输入性别:);scanf(%s, pc-data[pc-sz].sex);printf(请输入地址:);scanf(%s, pc-data[pc-sz].addr);printf(请输入电话:);scanf(%s, pc-data[pc-sz].tele);pc-sz; }//显示通讯录中的信息 void ShowContact(const Contact* pc) {assert(pc);int i 0;printf(%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n, 名字, 年龄, 性别, 地址, 电话);for (i 0; i pc-sz; i){printf(%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n, pc-data[i].name,pc-data[i].age,pc-data[i].sex,pc-data[i].addr,pc-data[i].tele);} }//根据名字查找信息 int FindByName(const Contact* pc, char name[]) {assert(pc);int i 0;for (i 0; i pc-sz; i){if (strcmp(pc-data[i].name, name) 0){return i;}}return -1; }//删除指定联系人 void DelContact(Contact* pc) {assert(pc);char name[NAME_MAX] { 0 };if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//删除//找到要删除的人printf(请输入要删除的人的名字:);scanf(%s, name);int ret FindByName(pc, name);if (-1 ret){printf(要删除的人不存在\n);return;}int i 0;//删除for (i ret; i pc-sz - 1; i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n); }//查找指定联系人 void SearchContact(const Contact* pc) {assert(pc);char name[NAME_MAX] { 0 };printf(请输入要查找人的名字:);scanf(%s, name);int pos FindByName(pc, name);if (-1 pos){printf(要查找的人不存在\n);return;}//打印信息printf(%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n, 名字, 年龄, 性别, 地址, 电话);printf(%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n, pc-data[pos].name,pc-data[pos].age,pc-data[pos].sex,pc-data[pos].addr,pc-data[pos].tele); }//修改指定联系人 void ModifyContact(Contact* pc) {assert(pc);char name[NAME_MAX] { 0 };printf(请输入要修改人的名字:);scanf(%s, name);int pos FindByName(pc, name);if (-1 pos){printf(要修改的人不存在\n);return;}printf(请输入名字:);scanf(%s, pc-data[pos].name);printf(请输入年龄:);scanf(%d, (pc-data[pos].age));printf(请输入性别:);scanf(%s, pc-data[pos].sex);printf(请输入地址:);scanf(%s, pc-data[pos].addr);printf(请输入电话:);scanf(%s, pc-data[pos].tele);printf(修改完成\n); }//保存通讯录中的信息到文件中 void SaveContact(Contact* pc) {//写数据//1, 打开文件FILE* pf fopen(contact.txt, wb);if (NULL pf){perror(SaveContact);}else{//写数据int i 0;for (i 0; i pc-sz; i){fwrite(pc-data i, sizeof(PeoInfo), 1, pf);}fclose(pf);pf NULL;printf(保存成功\n);} }//加载文件信息到通讯录 void LoadContact(Contact* pc) {//读数据//1. 打开文件FILE* pf fopen(contact.txt, rb);if (pf NULL){perror(LoadContact);}else{//2. 读数据PeoInfo tmp { 0 };int i 0;while (fread(tmp, sizeof(PeoInfo), 1, pf)){//增容check_capacity(pc);pc-data[i] tmp;pc-sz;i;}fclose(pf);pf NULL;} }3.contact.h #pragma once #include stdio.h #include string.h #include assert.h #include stdlib.h#define MAX 100 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12#define DEFAULT_SZ 3 #define INC_SZ 2//人的信息 typedef struct PeoInfo {char name[NAME_MAX]; //姓名int age; //年龄char sex[SEX_MAX]; //性别char addr[ADDR_MAX]; //住址char tele[TELE_MAX]; //电话号码 }PeoInfo;typedef struct Contact {PeoInfo* data; //指向存放人的信息的空间int sz; //当前已经放的信息的个数int capacity; //当前通讯录的最大容量 }Contact;//初始化通讯录 void InitContact(Contact* pc);//销毁通讯录 void DestroyContact(Contact* pc);//增加联系人 void AddContact(Contact* pc);//删除指定联系人 void DelContact(Contact* pc);//显示通讯录中的信息 void ShowContact(const Contact* pc);//查找指定联系人 void SearchContact(const Contact* pc);//修改指定联系人 void ModifyContact(Contact* pc);//保存通讯录中的信息到文件中 void SaveContact(Contact* pc);//加载文件信息到通讯录 void LoadContact(Contact* pc);本篇到此结束码文不易还请多多支持哦
http://www.dnsts.com.cn/news/166002.html

相关文章:

  • 做各国民宿租赁的网站住建部官网资质查询
  • 零售网站模板新手可以自己学做网站设计吗
  • phpcms 怎么做视频网站wordpress更换网址
  • 福州建设公司网站网站图片宽度
  • 门户网站建设和推广wordpress简单投稿
  • 长春网站建设新格石家庄今天又发现一例
  • 怎样查网站用什么程序做的如何建立一家公司网站
  • asp.net 网站开发项目化教程互联网最好的公司
  • 做网站怎么申请百度推广公司logo设计免费生成图片
  • 如何查看网站是否开启gzip寻找网络公司做公司网站升级改版
  • 国内做轮胎网站哪家好wordpress 酒业模板
  • dede网站制作教程seo课程心得体会
  • 门户网站 cms做网站基础教程
  • 东营优化网站搭建一个网站的具体步骤
  • 做的网站怎么上传到网上运行沈阳营销型网站建设
  • 成都专业网站推广个人推广app的妙招
  • 佛山网站制作哪家好哈尔滨网站优化公司
  • 南京明辉建设集团网站seo快排
  • 新网站的建设方案微信里我的微站是怎么弄的
  • 单页面网站制作教程专业网页设计费用
  • 网站建设方案推销淮安市工程造价信息网
  • 湖南做网站 磐石网络引领seo是搜索引擎吗
  • 世界网站设计公司推荐
  • 正定县建设局 网站wordpress怎么禁止评论
  • 平台网站怎么推广wordpress可折叠菜单
  • 网站被屏蔽怎么访问如何开一个网站
  • 网站开发网页设计北京师范大学出版社网站建设360元起全包
  • 哪个网站做五金冲压的建设电子商务网站市场分析
  • dedecms的网站系统设计结论关键词搜索趋势
  • 网页广告设计培训百度搜索关键词排名优化技术