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

网站建设需要多久苏州网站建设智能 乐云践新

网站建设需要多久,苏州网站建设智能 乐云践新,wordpress手机版如何设置,港南网站建设目录定义结构体基础操作部分文件操作部分定义结构体 我们要做一个通讯录#xff0c;里面的信息有一个人的名字#xff0c;年龄#xff0c;性别#xff0c;地址和电话号 对于姓名#xff0c;年龄等字符串#xff0c;为了日后方便调整其长度#xff0c;需要预定义一下它… 目录定义结构体基础操作部分文件操作部分定义结构体 我们要做一个通讯录里面的信息有一个人的名字年龄性别地址和电话号 对于姓名年龄等字符串为了日后方便调整其长度需要预定义一下它们的长度 #define MAX 100 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12 #define DEFAULT_SIZE 3 #define INC_SIZE 2接着定义这个结构体 typedef struct Peo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }Peo;既然我们要写出一个通讯录这个通讯录中就必须可以容纳许多人的信息所以需要定义一个Peo类型的数组 //定义一个长度为100的Peo类型的数组 Peo contact[MAX] {0};然后我们发现我们还需要有一个变量记录当前通讯录中有多少人的数据所以定义一个int size 0 可是接下来的各个操作函数中我们则需要传这个数组和记录长度的这个变量仿佛它们2个一直都是“捆绑”在一起的 所以我们可以再定义一个结构体将记录信息的数组和size写到这个结构体中 typedef struct Contact {//静态版本Peo data[MAX];int size; }Contact;接下来我们发现这样写只能存放一定数量的信息如果想存放更多的信息就需要不断的更改预处理中MAX的值如果给MAX的值赋给一个很大很大的数则大多时候大部分的空间都是空闲着的都被浪费了 所以我们定义一个可以动态开辟空间的一个结构体需要多少开辟多少 typedef struct Contact {//动态版本Peo* data;//指向存放人的信息int size;//当前已经存放信息的个数int capacity;//当前通讯录最大容量 }Contact;基础操作部分 我们可以先写一个目录 void 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);}接着再写一个函数用来定义一个通讯录和选择各种操作 在switch语句中为了方便知道每个case都是什么操作我们可以定义一个枚举 enum Choose1 {EXIT1,ADD,DEL,SEARCH,MODIFY,SHOW,SORT };void contact() {Contact con;int input 0;do{menu();printf(请输入你的选择\n);scanf(%d, input);switch (input){case ADD:break;case DEL:break;case SEARCH:break;case MODIFY:break;case SHOW:break;case SORT:break;case EXIT1:printf(退出程序\n);exit(0);default:printf(选择错误\n);break;}} while (input); }初始化 我们定义了一个通讯录后需要进行初始化可以开辟一个默认大小的空间这个默认大小是我们在预处理时定义的 void InitContact(Contact* con) {assert(con);con-size 0;Peo* ptr (Peo*)calloc(DEFAULT_SIZE,sizeof(Peo));if (ptr NULL){perror(InitContact::calloc);return;}con-data ptr;con-capacity DEFAULT_SIZE; }增加操作 因为这个是动态版本的通讯录所以我们每次增加数据都需查看当前存放数据的空间是否是满的 所以我们可以单独定义一个增容函数 void check_capacity(Contact* con) {assert(con);if (con-capacity con-size){//增容Peo* ptr (Peo*)realloc(con-data, (INC_SIZE con-capacity) * sizeof(Peo));if (ptr NULL){perror(check_capacity:realloc);return;}con-data ptr;con-capacity INC_SIZE;} }void AddContact(Contact* con) {assert(con);check_capacity(con);if (con-size MAX){printf(已满无法添加);return;}printf(请输入姓名\n);scanf(%s, con-data[con-size].name);printf(请输入性别\n);scanf(%s, con-data[con-size].sex);printf(请输入年龄\n);scanf(%d, con-data[con-size].age);printf(请输入地址\n);scanf(%s, con-data[con-size].addr);printf(请输入电话\n);scanf(%s, con-data[con-size].tele);con-size;printf(\n); }展现操作这个函数是打印当前通讯录中所有的数据 void ShowContact(Contact* con) {assert(con);if (con-size 0){printf(现在0人无法显示信息\n);return;}printf(%-10s\t%-5s\t%-5s\t%-20s\t%-12s\n, 名字, 年龄, 性别, 地址, 电话);for (int i 0; i con-size; i){printf(%-10s\t%-5d\t%-5s\t%-20s\t%-12s\n, con-data[i].name, con-data[i].age, con-data[i].sex, con-data[i].addr, con-data[i].tele);}printf(\n); }在后续的查找函数和删除函数都是通过姓名查找到对应的信息再进行其余操作所以我们可以单独定义一个通过姓名查找函数 通过姓名查找如果查找到了返回下标否则返回-1 int FindByName(const Contact* con,char* find_name) {assert(con);for (int i 0; i con-size; i){if (strcmp(find_name, con-data[i].name) 0){return i;}}return -1; }删除操作 先通过前面的FindByName函数找到要删除的人的信息再进行删除操作 void DelByName(Contact* con) {assert(con);if (con-size0){printf(目前人数为0无法进行删除操做\n);return;}printf(输入你想要删除的人的名字);char del_name[NAME_MAX];scanf(%s, del_name);int pos FindByName(con, del_name);if (pos -1){printf(找不到此人\n);return; }for (int i pos; i con-size - 1; i){con-data[i] con-data[i 1];}con-size--;printf(删除成功\n); }查询操作 void SearchByName(const Contact* con) {assert(con);if (con-size 0){printf(目前0人无法查询\n); return;}printf(输入你想要找的人的名字);char find_name[NAME_MAX];scanf(%s, find_name);int ret FindByName(con, find_name);if (ret -1){printf(找不到此人\n);return;}else{printf(找到了!\n);printf(他\\她的信息如下:\n);//打印信息printf(姓名%s\t年龄%d\t性别%s\t地址:%s\t电话%s\n, con-data[ret].name, con-data[ret].age, con-data[ret].sex, con-data[ret].addr, con-data[ret].tele);}printf(\n); }修改操作 通过FindByName函数找到要修改信息的下标之后进行修改函数 void ModifyContact(Contact* con) {assert(con);if (con-size 0){printf(目前0人无法修改\n);return;}printf(输入你想要修改人的名字);char modify_name[NAME_MAX];scanf(%s, modify_name);int pos FindByName(con, modify_name);if (pos -1){printf(找不到此人\n);return;}else{printf(请输入新的姓名\n);scanf(%s, con-data[pos].name);printf(请输入新的性别\n);scanf(%s, con-data[pos].sex);printf(请输入新的年龄\n);scanf(%d, con-data[pos].age);printf(请输入新的地址\n);scanf(%s, con-data[pos].addr);printf(请输入新的电话\n);scanf(%s, con-data[pos].tele);}}排序操作 这里的排序是通过C语言自带的qsort函数进行的排序不做过多介绍 int CmpName(const void* e1, const void* e2) {return strcmp(((Peo*)e1)-name, ((Peo*)e2)-name); }int CmpAge(const void* e1, const void* e2) {return ((Peo*)e1)-age - ((Peo*)e2)-age; }void SortByAge(Contact* con) {assert(con);qsort(con-data, con-size, sizeof(con-data[0]), CmpAge);printf(按年龄排序:\n);ShowContact(con); }void SortByName(Contact* con) {assert(con);qsort(con-data, con-size, sizeof(con-data[0]), CmpName);printf(按姓名排序:\n);ShowContact(con);} 销毁操作 因为这个通讯录中存放数据的空间是动态开辟到堆区的所以需要我们通过free函数将动态开辟的空间销毁归还给操作系统 void DestroyContact(Contact* con) {assert(con);free(con-data);con-data NULL;con-size 0;con-capacity 0;con NULL; }文件操作部分 每次运行依次程序最后都要将程序中的数据存放到文件中 因为结构体中有许多不同的类型所以这里选择用二进制文件存放数据 void SaveContact(Contact* con) {assert(con);FILE* pf fopen(contact.txt, wb);if (pf NULL){perror(SaveContact);return;}else{int i 0;for (i 0; i con-size; i){fwrite(con-data i, sizeof(Peo), 1, pf);}fclose(pf);pf NULL;printf(保存成功\n);} }每次运行程序都需要将文件中的数据读取出来到程序中便于对这些信息进行一系列操作 void LoadContact(Contact* con) {//读数据//1打开文件FILE* pf fopen(contact.txt, rb);if (pf NULL){perror(LoadContact);return;}else{//2.读数据Peo tmp { 0 };int i 0;while (fread(tmp, sizeof(Peo), 1, pf)){//增容check_capacity(con);con-data[i] tmp;con-size;i;}fclose(pf);pf NULL;} }全部代码 头文件Contact.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include stdio.h #include string.h #include assert.h #include stdlib.h #include errno.h #define MAX 100 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12 #define DEFAULT_SIZE 3 #define INC_SIZE 2typedef struct Peo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }Peo;typedef struct Contact {//静态版本/*Peo data[MAX];int size;*///动态版本Peo* data;//指向存放人的信息int size;//当前已经存放信息的个数int capacity;//当前通讯录最大容量 }Contact;void InitContact(Contact* con);void AddContact(Contact* con);void ShowContact(Contact* con);void DelByName(Contact* con);int FindByName(const Contact* con, char* find_name);void SearchByName(const Contact* con);void ModifyContact(Contact* con);int CmpName(const void* e1, const void* e2);int CmpAge(const void* e1, const void* e2);void SortByAge(const Contact* con);void SortByName(const Contact* con);void ClearAllContact(Contact* con);void DestroyContact(Contact* con);void SaveContact(Contact* con);void LoadContact(Contact* con);ContactList.c #define _CRT_SECURE_NO_WARNINGS 1 #include ContactList.h//静态版本 //void InitContact(Contact* con) //{ // assert(con); // con-size 0; // memset(con-data, 0, sizeof(con-data)); //}//动态版本 void InitContact(Contact* con) {assert(con);con-size 0;Peo* ptr (Peo*)calloc(DEFAULT_SIZE,sizeof(Peo));if (ptr NULL){perror(InitContact::calloc);return;}con-data ptr;con-capacity DEFAULT_SIZE;//加载文件信息到通讯录LoadContact(con); }//静态版本 //void AddContact(Contact* con) //{ // assert(con); // if (con-size MAX) // { // printf(已满无法添加); // return; // } // // // printf(请输入姓名\n); // scanf(%s, con-data[con-size].name); // printf(请输入性别\n); // scanf(%s, con-data[con-size].sex); // printf(请输入年龄\n); // scanf(%d, con-data[con-size].age); // printf(请输入地址\n); // scanf(%s, con-data[con-size].addr); // printf(请输入电话\n); // scanf(%s, con-data[con-size].tele); // con-size; // printf(\n); //}//动态版本 void check_capacity(Contact* con) {assert(con);if (con-capacity con-size){//增容Peo* ptr (Peo*)realloc(con-data, (INC_SIZE con-capacity) * sizeof(Peo));if (ptr NULL){perror(check_capacity:realloc);return;}con-data ptr;con-capacity INC_SIZE;} } void AddContact(Contact* con) {assert(con);check_capacity(con);if (con-size MAX){printf(已满无法添加);return;}printf(请输入姓名\n);scanf(%s, con-data[con-size].name);printf(请输入性别\n);scanf(%s, con-data[con-size].sex);printf(请输入年龄\n);scanf(%d, con-data[con-size].age);printf(请输入地址\n);scanf(%s, con-data[con-size].addr);printf(请输入电话\n);scanf(%s, con-data[con-size].tele);con-size;printf(\n); }void ShowContact(Contact* con) {assert(con);if (con-size 0){printf(现在0人无法显示信息\n);return;}printf(%-10s\t%-5s\t%-5s\t%-20s\t%-12s\n, 名字, 年龄, 性别, 地址, 电话);for (int i 0; i con-size; i){printf(%-10s\t%-5d\t%-5s\t%-20s\t%-12s\n, con-data[i].name, con-data[i].age, con-data[i].sex, con-data[i].addr, con-data[i].tele);}printf(\n); }int FindByName(const Contact* con,char* find_name) {assert(con);for (int i 0; i con-size; i){if (strcmp(find_name, con-data[i].name) 0){return i;}}return -1; }void DelByName(Contact* con) {assert(con);if (con-size0){printf(目前人数为0无法进行删除操做\n);return;}printf(输入你想要删除的人的名字);char del_name[NAME_MAX];scanf(%s, del_name);int pos FindByName(con, del_name);if (pos -1){printf(找不到此人\n);return; }for (int i pos; i con-size - 1; i){con-data[i] con-data[i 1];}con-size--;printf(删除成功\n); }void SearchByName(const Contact* con) {assert(con);if (con-size 0){printf(目前0人无法查询\n); return;}printf(输入你想要找的人的名字);char find_name[NAME_MAX];scanf(%s, find_name);int ret FindByName(con, find_name);if (ret -1){printf(找不到此人\n);return;}else{printf(找到了!\n);printf(他\\她的信息如下:\n);//打印信息printf(姓名%s\t年龄%d\t性别%s\t地址:%s\t电话%s\n, con-data[ret].name, con-data[ret].age, con-data[ret].sex, con-data[ret].addr, con-data[ret].tele);}printf(\n); }void ModifyContact(Contact* con) {assert(con);if (con-size 0){printf(目前0人无法修改\n);return;}printf(输入你想要修改人的名字);char modify_name[NAME_MAX];scanf(%s, modify_name);int pos FindByName(con, modify_name);if (pos -1){printf(找不到此人\n);return;}else{printf(请输入新的姓名\n);scanf(%s, con-data[pos].name);printf(请输入新的性别\n);scanf(%s, con-data[pos].sex);printf(请输入新的年龄\n);scanf(%d, con-data[pos].age);printf(请输入新的地址\n);scanf(%s, con-data[pos].addr);printf(请输入新的电话\n);scanf(%s, con-data[pos].tele);}}int CmpName(const void* e1, const void* e2) {return strcmp(((Peo*)e1)-name, ((Peo*)e2)-name); }int CmpAge(const void* e1, const void* e2) {return ((Peo*)e1)-age - ((Peo*)e2)-age; }void SortByAge(Contact* con) {assert(con);qsort(con-data, con-size, sizeof(con-data[0]), CmpAge);printf(按年龄排序:\n);ShowContact(con); }void SortByName(Contact* con) {assert(con);qsort(con-data, con-size, sizeof(con-data[0]), CmpName);printf(按姓名排序:\n);ShowContact(con);}void ClearAllContact(Contact* con) {assert(con);memset(con-data, 0, sizeof(con-data));con-size 0; }void DestroyContact(Contact* con) {assert(con);free(con-data);con-data NULL;con-size 0;con-capacity 0;con NULL; }void SaveContact(Contact* con) {assert(con);FILE* pf fopen(contact.txt, wb);if (pf NULL){perror(SaveContact);return;}else{int i 0;for (i 0; i con-size; i){fwrite(con-data i, sizeof(Peo), 1, pf);}fclose(pf);pf NULL;printf(保存成功\n);} }void LoadContact(Contact* con) {//读数据//1打开文件FILE* pf fopen(contact.txt, rb);if (pf NULL){perror(LoadContact);return;}else{//2.读数据Peo tmp { 0 };int i 0;while (fread(tmp, sizeof(Peo), 1, pf)){//增容check_capacity(con);con-data[i] tmp;con-size;i;}fclose(pf);pf NULL;} }tset.c #define _CRT_SECURE_NO_WARNINGS 1 #include ContactList.h #include stdio.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 Choose1 {EXIT1,ADD,DEL,SEARCH,MODIFY,SHOW,SORT };enum Choose2 {EXIT2,SHORTBYNAME,SHORTBYAGE };void Sort(Contact* con) {assert(con);printf(请选择排序方式\n);printf(1.按姓名排序(升序)\n);printf(2.按年龄排序(升序)\n);printf(0.退出排序\n);printf(\n);int choose 0;do{printf(请输入你的选择\n);scanf(%d, choose);switch (choose){case SHORTBYNAME:SortByName(con);break;case SHORTBYAGE:SortByAge(con);break;case EXIT2:printf(退出排序\n);break;default:printf(输入错误请重新输入\n);break;}} while (choose);} void contact() {Contact con;InitContact(con);int input 0;do{menu();printf(请输入你的选择\n);scanf(%d, input);switch (input){case ADD:AddContact(con);break;case DEL:DelByName(con);break;case SEARCH:SearchByName(con);break;case MODIFY:ModifyContact(con);break;case SHOW:ShowContact(con);break;case SORT:Sort(con);break;case EXIT1:SaveContact(con);DestroyContact(con);printf(退出程序\n);exit(0);default:printf(选择错误\n);break;}} while (input); } int main() {contact();return 0; }
http://www.hkea.cn/news/14272682/

相关文章:

  • 广州企业建设网站云南手机网站建设
  • html网站设计范例自适应网站建设专家
  • 优化网站排名推荐公司优的网站建设明细报价表
  • 为国外的公司提供网站建设 维护网站建设时间计划书
  • 提升网站流量建筑师培训
  • 途牛网网站是哪家公司做的服装网站建设开题报告
  • 有产品做推广 选哪个 网站百度怎么做广告推广
  • 官方微网站泰安互联网公司
  • 网站开发公司成本是什么深圳正规燃气公司一览表
  • 网站功能需求分析文档交流平台网站怎么做
  • 大庆市建设网站网站建设合同 模板 下载
  • 做直播网站找哪个展馆设计论文
  • 建设通招标网站怎么评价网站做的好坏
  • 网站班级文化建设大连网站制作公司费用多少
  • 做网站链接要多少钱wordpress隐私页
  • 网站数据库空间大小设计师培训心得体会
  • 手机网站 备案异次元wordpress模板
  • 惠州网站建设领头wordpress 回收站在哪
  • 网站设计步骤的教学设计吉林长春火车站官网
  • 计算机网站怎么做四川最新情况最新消息今天
  • 建设网站需申请什么互联网的推广
  • 重庆茶叶网站建设百度关键词快速优化
  • 网站怎么做营销网站建设上传与发布流程
  • 普通电脑怎么做网站服务器优惠券网站怎样做
  • 北京哪有建网站公司或个人的网站开发如何模块化
  • 2017网站开发语言惠州 家具 网站上线
  • 电脑登录不了建设银行网站wordpress json接口
  • 免费网站建设平台北京建设高端网站的
  • 网站设计平台 动易国外网站建设设计欣赏
  • 苏州网站制作设计宁夏建设厅网站旧版