简单的网站开发的软件常德网站建设要点
2026/4/15 9:50:31 网站建设 项目流程
简单的网站开发的软件,常德网站建设要点,网站建设培训哪里好,泰安网红餐厅#x1f525;小龙报#xff1a;个人主页 #x1f3ac;作者简介#xff1a;C研发#xff0c;嵌入式#xff0c;机器人等方向学习者 ❄️个人专栏#xff1a;《C语言》《【初阶】数据结构与算法》 ✨ 永远相信美好的事情即将发生 文章目录前言一、通讯录框架Test.c二、通讯…小龙报个人主页作者简介C研发嵌入式机器人等方向学习者❄️个人专栏《C语言》《【初阶】数据结构与算法》✨永远相信美好的事情即将发生文章目录前言一、通讯录框架Test.c二、通讯录2.1 Contacts.h2.2 Contacts.c三、底层逻辑3.1 SeqList.h3.2 SeqList.c四、基于顺序表的通讯录实现效果4.1 添加4.2 删除4.3 修改4.4 查找4.5 展示总结与每日励志前言本文聚焦C语言顺序表的实战应用从零搭建功能完整的通讯录系统。通过封装顺序表的增删改查核心逻辑实现联系人的添加、删除、修改、查找与展示功能兼顾内存动态扩容与安全销毁机制。代码遵循模块化设计思想清晰划分接口层与底层逻辑既适合巩固数据结构基础也为新手提供可直接复用的实战案例助力快速掌握多文件编程与结构化开发思维许多大学C语言期末大作业就是这个希望能给小伙伴们一些启发。一、通讯录框架Test.c#includeseqlist.h#includeContacts.hvoidmenu(){printf(******************通讯录******************\n);printf(*******1.增加联系人 2.删除联系人********\n);printf(*******3.修改联系人 4.查找联系人********\n);printf(*******5.展示联系人 0. 退出 *********\n);printf(******************************************\n);}intmain(){intop;Contactss;SLInit(s);do{menu();printf(请输入你的选择);scanf(%d,op);switch(op){case1:ContactsAdd(s);break;case2:ContactsDel(s);break;case3:ContactsModify(s);break;case4:ContactsFind(s);break;case5:ContactsShow(s);break;case0:printf(退出通讯录....\n);break;default:printf(输入错误请重新选择您的操作\n);break;}}while(op);ContactsDestory(s);return0;}二、通讯录2.1 Contacts.h#definemax_name 20#definemax_gender 20#definemax_tel 30#definemax_addr 50//姓名 性别 年龄 电话 地址typedefstructPersonalInfor{charname[max_name];chargender[max_gender];intage;chartel[max_tel];charaddr[max_addr];}peoInfo;typedefstructSeqListContacts;//通讯录的初始化和销毁voidContactsInit(Contacts*ps);//通讯录的销毁voidContactsDestory(Contacts*ps);//通讯录的打印voidContactsShow(Contacts*ps);//通讯录的插入voidContactsAdd(Contacts*ps);//通讯录的删除voidContactsDel(Contacts*ps);//通讯录的查找voidContactsFind(Contacts*ps);//通讯录的修改voidContactsFind(Contacts*ps);注意1为什么要typedef struct SeqList Contacts;这么写答前置声明因为在SeqList.h和Contacts.h里互相包含头文件会编译错误所以这么写。前置声明前向声明前置声明只是告诉编译器 “这个类型存在”但如果要实际使用这个类型比如访问成员、创建非指针变量、调用相关函数就必须要有完整的定义。2为什么不能typedef SL Contacts这么写答因为在Contacts.h里面并没有包含SeqList.h这个头文件所以无法识别SL是什么它只认识 int、struct XXX 这类 “基础标识”不认识自定义的别名。2.2 Contacts.c本质底层依赖顺序表的实现逻辑。#includeSeqList.h#includeContacts.h//初始化voidContactsInit(Contacts*ps){SLInit(ps);}//销毁voidContactsDestory(Contacts*ps){SLDestory(ps);}//打印voidContactsShow(Contacts*ps){SLPrint(ps);}//插入voidContactsAdd(Contacts*ps){peoInfoinfo;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(ps,info);}//删除intFindName(Contacts*ps,char*str){for(inti0;ips-size;i){if(strcmp(ps-a[i].name,str)0)returni;}return-1;}voidContactsDel(Contacts*ps){//要删除的数据必须要存在才能执行删除操作//查找charname[30];printf(请输入要删除的数据的姓名\n);scanf(%s,name);intfindFindName(ps,name);if(find-1){printf(此数据已删除或未有此数据\n);return;}SLErase(ps,find);printf(删除成功\n);}//通讯录的查找voidContactsFind(Contacts*ps){charname[max_name];printf(请输入要查找的数据的姓名\n);scanf(%s,name);intfindFindName(ps,name);if(find-1){printf(此数据已删除或未有此数据\n);return;}printf(姓名: %s 性别 : %s 年龄 : %d 电话 : %s 地址 : %s\n,ps-a[find].name,ps-a[find].gender,ps-a[find].age,ps-a[find].tel,ps-a[find].addr);}//修改voidContactsModify(Contacts*ps){//通讯录不为空if(ps-size0){printf(当前通讯录为空\n);return;}//要修改的联系人数据存在charname[max_name];printf(请输入要修改的用户姓名\n);scanf(%s,name);intfindFindName(ps,name);if(find0){printf(要修改的联系人数据不存在\n);return;}else{//直接修改printf(请输入新的姓名\n);scanf(%s,ps-a[find].name);printf(请输入新的性别\n);scanf(%s,ps-a[find].gender);printf(请输入新的年龄\n);scanf(%d,ps-a[find].age);printf(请输入新的电话\n);scanf(%s,ps-a[find].tel);printf(请输入新的住址\n);scanf(%s,ps-a[find].addr);printf(修改成功\n);}}三、底层逻辑3.1 SeqList.h#include stdio.h#include assert.h#include stdlib.h#includeContacts.htypedefpeoInfoSLDateType;typedefstructSeqList{SLDateType*a;//存储数据intsize;//有效数据个数intcapacity;//空间容量}SL;voidSLInit(SL*ps);//初始化voidSLDestory(SL*ps);//销毁voidSLPrint(SL*ps);//打印//插入部分voidSLPushBack(SL*ps,SLDateTypex);//尾插//删除部分voidSLPopback(SL*ps);//尾删voidSLPopFront(SL*ps);//头删voidSLErase(SL*ps,intpos);//任意位置删除3.2 SeqList.c#includeseqlist.h#includeContacts.h//初始化voidSLInit(SL*ps){ps-aNULL;ps-sizeps-capacity0;}//销毁voidSLDestory(SL*ps){if(ps-a){free(ps-a);ps-aNULL;}ps-sizeps-capacity0;}//打印voidSLPrint(SL*ps){for(inti0;ips-size;i)printf(姓名:%s 性别:%s 年龄:%d 电话:%s 地址:%s\n,ps-a[i].name,ps-a[i].gender,ps-a[i].age,ps-a[i].tel,ps-a[i].addr);}//检查是否需要扩容voidCheckCapacity(SL*ps){intnewcapacityps-capacity0?4:ps-capacity*2;SLDateType*temprealloc(ps-a,newcapacity*sizeof(SLDateType));if(tempNULL){printf(开辟失败\n);exit(-1);}ps-atemp;ps-capacitynewcapacity;}//尾插voidSLPushBack(SL*ps,SLDateTypex){assert(ps);if(ps-sizeps-capacity)CheckCapacity(ps);ps-a[ps-size]x;}//任意位置删除voidSLErase(SL*ps,intpos){assert(ps);assert(pos0posps-size);for(intipos1;ips-size;i)ps-a[i-1]ps-a[i];ps-size--;}四、基于顺序表的通讯录实现效果4.1 添加4.2 删除4.3 修改4.4 查找4.5 展示总结与每日励志✨本文基于C语言顺序表实现通讯录管理系统包含添加、删除、修改、查找和展示联系人功能。通过模块化设计将底层顺序表操作与通讯录业务逻辑分离使用动态内存管理实现扩容机制。代码采用多文件结构包含测试框架、通讯录接口和顺序表实现三部分完整展示了数据结构的实际应用。系统具有以下特点1支持联系人信息的完整CRUD操作2采用类型封装解决头文件循环引用问题3提供内存安全保证4交互式菜单界面。该实现既可作为数据结构学习案例也适用于C语言课程实践项目。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询