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

门户网站系统建设招标文件装修设计图免费软件

门户网站系统建设招标文件,装修设计图免费软件,wordpress 大网站,大型企业网络建设在前面的文章中,我们已经学完了通讯录代码及动态增加版本,但是,当退出程序时,先前增删查找的所有联系人就会销毁,那么,我们想要将其保存起来而不被销毁,就可以将所有内容都保存在文件中 一、保…

在前面的文章中,我们已经学完了通讯录代码及动态增加版本,但是,当退出程序时,先前增删查找的所有联系人就会销毁,那么,我们想要将其保存起来而不被销毁,就可以将所有内容都保存在文件中

一、保存通讯录信息到文件中

第一步,在退出通讯录之前,我们先创建一个函数 SaveContact,目的是将信息全部先保存到文件中,再进行退出操作。

void SaveContact(Contact* pc)
{assert(pc);//写数据//1.打开文件FILE* pf = fopen("contact.txt","wb");if(pf == BULL){perror("SaveContact");}else{//写数据fwrite(pc->data+i,sizeof(PeoInfo),1,pf);    }//关闭文件fclose(pf);pf = NULL;printf("保存成功\n");
}

二、加载文件信息到通讯录

当我们保存通讯录信息到文件中后,如果我们想要在下一次通讯录一运行起来就能看到之前保存的数据信息,那么我们需要在整个程序的第一步,也就是初始化通讯录函数 InitContact 部分进行一些修改,将上一次运行后的保存到文件的通讯录信息加载到其中,作为初始化的一部分,此时分装一个函数 LoadContact ,用来完成加载文件信息到通讯录上,以便我们可以看到信息,而在 LoadContact 函数内部,我们要先检查一下是否需要增容,还是需要用到我们之前写过的增容函数 chaek_capacity ,如果需要增容就增容,如果不需要,就只是走一遍函数再回来

void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAUT_SZ, sizeof(PeoInfo));if (ptr == NULL){perror("InitContact::calloc");return;}pc->data = ptr;pc->capacity = DEFAUT_SZ;//加载文件信息到通讯录LoadContact(pc);
}
void cheak_capacity(Contact* pc)
{assert(pc);if (pc->sz == pc->capacity){//增加容量PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("cheak_capacity::realloc");return;}pc->data = ptr;pc->capacity += INC_SZ;printf("***增容成功***\n");}
}
void LoadContact(Contact* pc)
{assert(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)){//增容cheak_capacity(pc);pc->data[i] = tmp;pc->sz++;i++;}fclose(pf);pf = NULL;}
}

我们可以打开 contact.txt 文件看一下(将通讯录信息以二进制形式保存到其中):

三、完整的代码

展示一下最终的代码

test.c#define _CRT_SECURE_NO_WARNINGS 1//通讯录程序#include "contact.h"void menu()
{printf("******************************************\n");printf("******      1. add       2. del     ******\n");printf("******      3. search    4. modify  ******\n");printf("******      5. show      0. exit    ******\n");printf("******    6.sortbyname   7.sortbyage******\n");printf("******************************************\n");}enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,sortbyname,sortbyage
};int main()
{int input = 0;int num = 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 sortbyname:SortContactByName(&con);break;case sortbyage:SortContactByAge(&con);break;case EXIT://保存通讯录信息到文件中SaveContact(&con);DestoryContact(&con);printf("退出通讯录\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
contact.h#pragma once#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12#define DEFAUT_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 AddContact(Contact* pc);//显示通讯录中的信息
void ShowContact(const Contact* pc);//删除指定联系人
void DelContact(Contact* pc);//查找指定联系人
void SearchContact(const Contact* pc);//修改指定联系人
void ModifyContact(Contact* pc);//通过姓名排序
void SortContactByName(Contact* pc);//通过年龄排序
void SortContactByAge(Contact* pc);//销毁通讯录
void DestoryContact(Contact* pc);//保存通讯录中的信息到文件中
void SaveContact(Contact* pc);//加载文件信息到通讯录
void LoadContact(Contact* pc);
contact.c#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAUT_SZ, sizeof(PeoInfo));if (ptr == NULL){perror("InitContact::calloc");return;}pc->data = ptr;pc->capacity = DEFAUT_SZ;//加载文件信息到通讯录LoadContact(pc);
}void cheak_capacity(Contact* pc)
{assert(pc);if (pc->sz == pc->capacity){//增加容量PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("cheak_capacity::realloc");return;}pc->data = ptr;pc->capacity += INC_SZ;printf("***增容成功***\n");}
}//动态版本
void AddContact(Contact* pc)
{assert(pc);cheak_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);printf("-------------------------------显示结果-----------------------------------\n");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);}printf("--------------------------------------------------------------------------\n");}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++)//这里-1是因为当i=99时,i+1就是100,即当要将下标为100的第101个元素搬到下标为99的第100个元素,越界访问{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("-------------------------------查找结果-----------------------------------\n");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);printf("--------------------------------------------------------------------------\n");
}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");
}int cmpbyname(const void* p1, const void* p2)
{assert(p1 && p2);return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}
void SortContactByName(Contact* pc)
{assert(pc);if (pc->data == 0){printf("通讯录为空,无需排序\n");return;}qsort(pc->data, pc->sz, sizeof(PeoInfo), cmpbyname);printf("排序成功\n");
}int cmpbyage(const void* p1, const void* p2)
{assert(p1 && p2);return ((PeoInfo*)p1)->age - ((PeoInfo*)p2)->age;
}
void SortContactByAge(Contact* pc)
{assert(pc);if (pc->data == 0){printf("通讯录为空,无需排序\n");return;}qsort(pc->data, pc->sz, sizeof(PeoInfo), cmpbyage);printf("排序成功\n");
}void DestoryContact(Contact* pc)
{free(pc->data);pc->data = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}void SaveContact(Contact* pc)
{//写数据//1.打开文件FILE* pf = fopen("contact.txt", "wb");if (pf == NULL){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)){//增容cheak_capacity(pc);pc->data[i] = tmp;pc->sz++;i++;}fclose(pf);pf = NULL;}
}

文章转载自:

http://7PxW8xRW.kstLm.cn
http://DkLl3zHp.kstLm.cn
http://CeCF3DqZ.kstLm.cn
http://P0Q0WDzI.kstLm.cn
http://NtNtzZfA.kstLm.cn
http://jvXPUaK8.kstLm.cn
http://8pTvbZ40.kstLm.cn
http://76qgQBox.kstLm.cn
http://nIpfRZ6K.kstLm.cn
http://7Yxxuln7.kstLm.cn
http://9d72faQh.kstLm.cn
http://Qk7D6dsB.kstLm.cn
http://KSE9lF8h.kstLm.cn
http://LM6tCTog.kstLm.cn
http://pxjzfUXK.kstLm.cn
http://3CkAxGz0.kstLm.cn
http://7hjJV961.kstLm.cn
http://1x434Sdj.kstLm.cn
http://yRsI55P3.kstLm.cn
http://r8y4Qsto.kstLm.cn
http://SpyGQsV5.kstLm.cn
http://QgPG3jLF.kstLm.cn
http://6FtUYWY9.kstLm.cn
http://ZaWStpNs.kstLm.cn
http://6qPAsPW3.kstLm.cn
http://ebfSQwXR.kstLm.cn
http://qaTOSh4J.kstLm.cn
http://hhsN32pJ.kstLm.cn
http://5PTwm6s7.kstLm.cn
http://eRIQcHUx.kstLm.cn
http://www.dtcms.com/wzjs/730853.html

相关文章:

  • 口腔医院网站优化服务商免费h5页面应用制作
  • 网站开发可以用gif吗深圳福田 外贸网站建设
  • 网站样式用什么做的汉阳网站推广优化
  • 找人开发软件去什么网站申请网站域名多少钱
  • 网站建设的目标与思路泰安微网站建设
  • 大连做网站的中海建筑建设有限公司网站
  • 织梦网站栏目增加2023年生鲜电商交易规模超6000亿
  • 网站和服务器是什么关系wordpress统计蜘蛛
  • 网站做全好吗百度优化 几个网站内容一样
  • 网站建设交流论坛地址编程培训机构
  • 奢侈品商城网站建设方案网站建设的必要性’
  • 做网站手把手多语言商城系统
  • 触屏手机网站建设手机如何自己编程做游戏
  • 微信网站合同wordpress 初始化 数据库
  • 适合个人做的网站有哪些东西在线购物网站建设流程图
  • 报社网站开发做什么查看网站备案号
  • 宝安网站(建设深圳信科)烟台网站建设哪家好
  • 杭州 高端网站建设个人网站样式
  • html静态网站怎么放在网站上公司网站建设一年多少钱
  • 界面十分好看的网站google搜索引擎入口
  • 南阳教育网站平台2021年中国十大电商平台排名
  • 网站logo怎么做最清楚南阳做网站
  • 亚马逊海外版网站wordpress的wap插件
  • 各大网站做推广的广告怎么做唐山快速建站公司
  • 徐闻网站开发公司安徽建设厅网站官网
  • 四川高速公路建设开发集团有限公司网站动漫设计与制作专业就业前景
  • 网站地图怎么添加威海建设局官方网站
  • 做外贸有免费的网站吗医学类app制作公司
  • 如何做正规的采集网站PHP网站开发简单实例
  • 接私活 做网站台州网站如何制作