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

临沂360网站建设推广seo岗位

临沂360网站建设推广,seo岗位,沧州南皮手机网站建设,asp网站可以做移动端网站么1. 通讯录的功能 1. contach.c 1. 初始化通讯录 2. 添加通讯录数据 3. 删除通讯录数据 4. 展示通讯录数据 5. 查找通讯录数据 6. 修改通讯录数据 7. 销毁通讯录数据 2. SList.c 1. 尾插 2. 删除指定节点 3. 销毁链表 2. 通讯录的定义 1. contach.h 创建一个结构体&#xff…

1.  通讯录的功能

1. contach.c

1. 初始化通讯录

2. 添加通讯录数据

3. 删除通讯录数据

4. 展示通讯录数据

5. 查找通讯录数据

6. 修改通讯录数据

7. 销毁通讯录数据

2. SList.c

1. 尾插

2. 删除指定节点

3. 销毁链表

2. 通讯录的定义

1. contach.h

创建一个结构体,存储联系人数据

//前置声明
typedef struct SListNode contact;//用户数据
typedef struct PersonInfo
{char name[NAME_MAX];char sex[SEX_MAX];int age;char tel[TEL_MAX];char addr[ADDR_MAX];
}PeoInfo;

2. SList.h

创建一个结构体包含两个成员,一个成员存储联系人数据,一个成员存储下一个结点的地址(当下一个节点为空时保存的地址为NULL)

typedef PeoInfo SLTDataType;
struct SListNode
{SLTDataType data;struct SListNode* next;
};

3. 通讯录功能实现

1. contach.c

 查找通讯录中名字相同的联系人

contact* FindName(contact* con, char name[]) {assert(con);while (con) {if (strcmp(con->data.name, name) == 0) {return con;}con = con->next;}return NULL;
}

1. 初始化通讯录

//将contact.text文件中的数据导入到通讯录链表中
void LoadContact(contact** con) {FILE* pf = fopen("contact.txt", "rb");//打开一个存放通讯录的二进制文件,只读if (pf == NULL) {perror("文件打开失败");return;}PeoInfo ps;//循环读取文件数据while (fread(&ps, sizeof(ps), 1, pf)) {SLTPushBack(con, ps);}printf("历史数据导入通讯录成功\n");fclose(pf);//关闭文件
}
//初始化通讯录
void InitContact(contact** con) {LoadContact(con);printf("通讯录初始化完成\n");
}

2. 添加通讯录数据

void AddContact(contact** con) {PeoInfo ps;printf("请输入姓名:");scanf("%s", ps.name);printf("请输入性别:");scanf("%s", ps.sex);printf("请输入年龄:");scanf("%d", &ps.age);printf("请输入电话:");scanf("%s", ps.tel);printf("请输入地址:");scanf("%s", ps.addr);SLTPushBack(con, ps);//因为SLTPushBack的第一个参数是 contact** con
}

3. 删除通讯录数据

void DelContact(contact** con) {char name[NAME_MAX];printf("输入要删除的姓名:");scanf("%s", name);contact* pos = FindName(*con, name);if (pos) {SLTErase(con, pos);printf("删除成功\n");}else {printf("该联系人不存在,无法删除\n");}
}

4. 展示通讯录数据

void ShowContact(contact* con) {while (con) {printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s\n",con->data.name,con->data.sex,con->data.age,con->data.tel,con->data.addr);con = con->next;}
}

5. 查找通讯录数据

void FindContact(contact* con) {char name[NAME_MAX];printf("输入要查找的姓名:");scanf("%s", name);contact* pos=FindName(con, name);if (pos) {printf("找到了\n");printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s\n",pos->data.name,pos->data.sex,pos->data.age,pos->data.tel,pos->data.addr);}else {printf("该联系人不存在\n");}
}

6. 修改通讯录数据

void ModifyContact(contact** con) {char name[NAME_MAX];printf("请输入要修改的姓名:");scanf("%s", name);contact* pos = FindName(*con, name);if (pos) {printf("请输入修改的姓名:");scanf("%s", pos->data.name);printf("请输入修改的性别:");scanf("%s", pos->data.sex);printf("请输入修改的年龄:");scanf("%d", &pos->data.age);printf("请输入修改的电话:");scanf("%s", pos->data.tel);printf("请输入修改的地址:");scanf("%s", pos->data.addr);}else {printf("该联系人不存在,无法修改\n");}
}

7. 销毁通讯录数据

void SaveContact(contact* con) {assert(con);FILE* pf = fopen("contact.txt", "wb");if (pf == NULL) {perror("fopen fail\n");return;}while (con) {fwrite(&(con->data), sizeof(con->data), 1, pf);con = con->next;}printf("通讯录保存成功\n");fclose(pf);
}
//销毁通讯录数据
void DestroyContact(contact** con) {SaveContact(*con);//销毁通讯录数据SListDesTroy(con);
}

2. SList.c

创建节点

SLTNode* BuyNode(SLTDataType x) {SLTNode* node = (SLTNode*)malloc(sizeof(SLTNode));//如果创建失败if (node == NULL) {perror("malloc fail!\n");exit(1);}node->data = x;node->next = NULL;return node;//返回该节点
}

1. 尾插

//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x) {assert(pphead);//pphead不为空SLTNode* node = BuyNode(x);//创建新节点//如果链表为空if (*pphead == NULL) {*pphead = node;//新节点为头节点return;}//找尾SLTNode* cur = *pphead;while (cur->next) {cur = cur->next;}cur->next = node;//将新节点进行尾插
}

2. 删除指定节点

 //删除pos
void SLTErase(SLTNode** pphead, SLTNode* pos) {assert(pphead);assert(pos);//检测pos节点不为空,如果pos节点不为空,那么该链表也不为空//如果pos==头节点if (*pphead == pos) {//        SLTNode *del = *pphead;//        *pphead = (*pphead)->next;//        free(del);//        del = NULL;SLTPopFront(pphead);//头删return;}//找pos的前一个节点SLTNode* prev = *pphead;while (prev->next) {if (prev->next == pos) {break;}prev = prev->next;}prev->next = pos->next;//删除pos节点free(pos);//释放pos节点//    pos = NULL;//没有存在的必要
}

3. 销毁链表

void SListDesTroy(SLTNode** pphead) {SLTNode* pointer = NULL;while (*pphead) {pointer = *pphead;*pphead = (*pphead)->next;free(pointer);pointer = NULL;}
}

4. 完整代码展示

1. contach.h

#pragma once
#define NAME_MAX 100
#define SEX_MAX 4
#define TEL_MAX 11
#define ADDR_MAX 100//前置声明
typedef struct SListNode contact;//用户数据
typedef struct PersonInfo
{char name[NAME_MAX];char sex[SEX_MAX];int age;char tel[TEL_MAX];char addr[ADDR_MAX];
}PeoInfo;//初始化通讯录
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);

2. SList.h

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include "contach.h"
typedef PeoInfo SLTDataType;
struct SListNode
{SLTDataType data;struct SListNode* next;
};
typedef struct SListNode SLTNode;
//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x);
//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//销毁链表
void SListDesTroy(SLTNode** pphead);

3. contach.c

#include "contach.h"
#include "SList.h"
//将contact.text文件中的数据导入到通讯录链表中
void LoadContact(contact** con) {FILE* pf = fopen("contact.txt", "rb");//打开一个存放通讯录的二进制文件,只读if (pf == NULL) {perror("文件打开失败");return;}PeoInfo ps;//循环读取文件数据while (fread(&ps, sizeof(ps), 1, pf)) {SLTPushBack(con, ps);}printf("历史数据导入通讯录成功\n");fclose(pf);//关闭文件
}
//初始化通讯录
void InitContact(contact** con) {LoadContact(con);printf("通讯录初始化完成\n");
}
//展示通讯录数据
void ShowContact(contact* con) {while (con) {printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s\n",con->data.name,con->data.sex,con->data.age,con->data.tel,con->data.addr);con = con->next;}
}
//添加通讯录数据(尾插)
void AddContact(contact** con) {PeoInfo ps;printf("请输入姓名:");scanf("%s", ps.name);printf("请输入性别:");scanf("%s", ps.sex);printf("请输入年龄:");scanf("%d", &ps.age);printf("请输入电话:");scanf("%s", ps.tel);printf("请输入地址:");scanf("%s", ps.addr);SLTPushBack(con, ps);//因为SLTPushBack的第一个参数是 contact** con
}//查找通讯录中名字相同的数据
contact* FindName(contact* con, char name[]) {assert(con);while (con) {if (strcmp(con->data.name, name) == 0) {return con;}con = con->next;}return NULL;
}
//删除通讯录数据
void DelContact(contact** con) {char name[NAME_MAX];printf("输入要删除的姓名:");scanf("%s", name);contact* pos = FindName(*con, name);if (pos) {SLTErase(con, pos);printf("删除成功\n");}else {printf("该联系人不存在,无法删除\n");}
}
//查找通讯录数据
void FindContact(contact* con) {char name[NAME_MAX];printf("输入要查找的姓名:");scanf("%s", name);contact* pos=FindName(con, name);if (pos) {printf("找到了\n");printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s\n",pos->data.name,pos->data.sex,pos->data.age,pos->data.tel,pos->data.addr);}else {printf("该联系人不存在\n");}
}
//修改通讯录数据
void ModifyContact(contact** con) {char name[NAME_MAX];printf("请输入要修改的姓名:");scanf("%s", name);contact* pos = FindName(*con, name);if (pos) {printf("请输入修改的姓名:");scanf("%s", pos->data.name);printf("请输入修改的性别:");scanf("%s", pos->data.sex);printf("请输入修改的年龄:");scanf("%d", &pos->data.age);printf("请输入修改的电话:");scanf("%s", pos->data.tel);printf("请输入修改的地址:");scanf("%s", pos->data.addr);}else {printf("该联系人不存在,无法修改\n");}
}
//将通讯录保存到contact.txt文件中
void SaveContact(contact* con) {assert(con);FILE* pf = fopen("contact.txt", "wb");if (pf == NULL) {perror("fopen fail\n");return;}while (con) {fwrite(&(con->data), sizeof(con->data), 1, pf);con = con->next;}printf("通讯录保存成功\n");fclose(pf);
}
//销毁通讯录数据
void DestroyContact(contact** con) {SaveContact(*con);//销毁通讯录数据SListDesTroy(con);
}

4. SList.c

//创建节点
SLTNode* BuyNode(SLTDataType x) {SLTNode* node = (SLTNode*)malloc(sizeof(SLTNode));//如果创建失败if (node == NULL) {perror("malloc fail!\n");exit(1);}node->data = x;node->next = NULL;return node;//返回该节点
}
//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x) {assert(pphead);//pphead不为空SLTNode* node = BuyNode(x);//创建新节点//如果链表为空if (*pphead == NULL) {*pphead = node;//新节点为头节点return;}//找尾SLTNode* cur = *pphead;while (cur->next) {cur = cur->next;}cur->next = node;//将新节点进行尾插
}
// 删除pos
void SLTErase(SLTNode** pphead, SLTNode* pos) {assert(pphead);assert(pos);//检测pos节点不为空,如果pos节点不为空,那么该链表也不为空//如果pos==头节点if (*pphead == pos) {//        SLTNode *del = *pphead;//        *pphead = (*pphead)->next;//        free(del);//        del = NULL;SLTPopFront(pphead);//头删return;}//找pos的前一个节点SLTNode* prev = *pphead;while (prev->next) {if (prev->next == pos) {break;}prev = prev->next;}prev->next = pos->next;//删除pos节点free(pos);//释放pos节点//    pos = NULL;//没有存在的必要
}
//销毁链表
void SListDesTroy(SLTNode** pphead) {SLTNode* pointer = NULL;while (*pphead) {pointer = *pphead;*pphead = (*pphead)->next;free(pointer);pointer = NULL;}
}

5. text.c

#include "contach.h"
#include "SList.h"
void Realize(void) {contact* con = NULL;//初始化通讯录InitContact(con);//添加通讯录数据AddContact(&con);AddContact(&con);AddContact(&con);//删除通讯录数据DelContact(&con);//查找通讯录数据FindContact(con);//修改通讯录数据ModifyContact(&con);//展示通讯录数据ShowContact(con);//销毁通讯录数据DestroyContact(&con);
}
int main() {Realize();return 0;
}

http://www.dtcms.com/wzjs/295744.html

相关文章:

  • 网站开发的常用流程淘宝运营培训机构
  • 电子商务网站建设课设网站网站外包
  • html5网站源码宁波seo公司排名榜
  • 电子商务网站建设公司企业新网站seo推广
  • 网站和其他系统对接怎么做2022最新热点事件及点评
  • 企业网站建设流程概述重庆森林为什么叫这个名字
  • 沈阳做网站的公司推荐品牌推广的意义
  • 优惠券网站怎样做2023年7月最新新闻摘抄
  • 自适应网站如何做mip网页永久免费个人网站申请注册
  • 网站建设需求问卷谷歌chrome
  • 深圳布吉网站建设站长素材音效网
  • 丹阳网站建设报价深圳广告策划公司
  • c 做网站怎么发布账号权重查询
  • 网页设计与网站建设考试答案淘宝运营培训机构
  • 自己建立独立域名的网站怎么做seo免费教程
  • 石家庄做网站网络公司海外推广运营
  • 做网站用什么语言seo网站诊断顾问
  • 北京网站建设 云智互联最新新闻热点素材
  • 遵义网站建设制作公司新闻最新消息
  • 网站开发网页前置开发友情链接英文
  • 网站建设业务范围可以访问境外的浏览器
  • 动态网站和静态网站的区别网络营销服务外包
  • 素材网站设计模板上海谷歌seo推广公司
  • 洪梅网站建设怎么创建网站快捷方式
  • 网站制作容易吗怎么样深圳最新消息
  • 手机网站跳转代码网络营销推广公司
  • 网站的优势与不足成都seo网络优化公司
  • 百度网站的网址网上销售推广方案
  • 木材模板.网站集合竞价口诀背熟6句
  • 做微电网的公司网站如何自己建网站