摄影网站的建设的论文,wordpress 做论坛,网站设计概述,wordpress升级带验证前言#xff1a;在大多数高校内#xff0c;都是通过设计一个通讯录管理系统来作为c语言课程设计#xff0c;通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来#xff0c;可以很好的锻炼学生的编程思维#xff0c;本文旨在为通讯录管理系统的设计提供思路和… 前言在大多数高校内都是通过设计一个通讯录管理系统来作为c语言课程设计通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来可以很好的锻炼学生的编程思维本文旨在为通讯录管理系统的设计提供思路和示例讲解并且将如何用代码实现进行了完整的展示 目录
一.大体的框架
主函数初步设计
联系人的数据结构设计
菜单目录
二.初始化通讯录内容
三.增加联系人
四.删除联系人信息
五.查询联系人信息
六.修改联系人的信息
完整代码
Contct.h
Contact.cpp
test.cpp 一.大体的框架 我们分为 3 个文件来设计 Contact.h 包含头文件的声明对函数的声明以及宏的申明Contact.cpp 通讯录管理系统中具体每一个函数的实现test.cpp 主函数根据用户的选择进行调用相应的函数 主函数初步设计 主函数中我们用 do...while... 来完成用户持续使用通讯录管理系统的需求当用户不想再使用通讯录后只要输入 0 就可以结束 do...while... 循环从而结束整个程序 后续编程中我们只需要对各个输入的函数进行补充就可以了同时在枚举类型 options 中从上往下是从 0 开始的赋值这样更方便我们理解阅读增强了程序的可读性
//枚举增加程序的可读性
enum options
{EXIT,ADD,DEL,SEACH,MODIFY,SHOW
};int main()
{int input 0;//创建通讯录Contact con;//初始化通讯录InitContact(con);do{menu();printf(请输入你的选择 );scanf(%d, input);switch (input){//增加联系人信息case ADD:break;//删除联系人信息case DEL:break;//查找某个联系人的信息case SEACH:break;//修改某个联系人的信息case MODIFY:break;//展示通讯录内的每一个联系人的信息case SHOW:break;//退出通讯录管理系统case EXIT:printf(通讯录已退出\n);break;//预防非法输入default:printf(输入错误请重新输入\n);break;}}while(input);return 0;
}
联系人的数据结构设计 使用俩个结构体来完成我们设计的需求一个结构体 PeopleInformation 用来保存每一个用户的各种信息另一个结构体 Contact 用来保存整个通讯录的信息而在通讯录的信息中就得包含每一个用户的信息因此我们将 PeopleInformation结构体 嵌套在 结构体Contact 中 使用宏定义来方便我们后续修改调整数据大小同时也可以增加程序的可读性
#define Name_Max 20
#define Tel_Number 12
#define Sex_Max 5
#define Address_Max 30
#define Contact_Max 100//联系人结构体
typedef struct PeopleInformation
{char name[Name_Max];char telnumber[Tel_Number];int age;char sex[Sex_Max];char address[Address_Max];
}PeoInfor;//通讯录结构体
typedef struct Contact
{PeoInfor data[Contact_Max];//存放联系人结构体int size;//记录当前通讯录中有多少个联系人
}Contact;
菜单目录
剩下的就只有根据我们的菜单目录来设计每一个函数的具体实现了
void menu()
{printf(-----------------------------\n);printf(--- 1.添加联系人 -----\n);printf(--- 2.删除联系人 -----\n);printf(--- 3.查找联系人 -----\n);printf(--- 4.修改联系人信息 -----\n);printf(--- 5.显示全部信息 -----\n);printf(--- 0.退出通讯录 -----\n);printf(-----------------------------\n);
}
二.初始化通讯录内容
为了方便我们将通讯录中每一个人的全部信息置 0
void InitContact(Contact* cp)
{//判断非空assert(cp);cp-size 0;memset(cp-date, 0, sizeof(cp-date));
}
三.增加联系人 在增加之前先进行判断首先要判断传入的指针非空其次要判断当前情况下通讯录是否已经满了如果满了就告诉用户通讯录已满如果没有满再进行添加新的联系人 接下来分别使用指针进行访问输入就可以了这里我们通过添加联系人姓名进行举例讲解 首先我们添加联系人的函数拿到的参数是一个指针指向通讯录结构体这个结构体中有俩个成员一是我们要存放的数据二是当前结构体有多少个联系人那我们就需要利用这个指针在访问我们要存放是数据所以是 cp-data 这样的操作使我们访问到了通讯录结构体的数据数组然后我再根据数组的下标来访问每一个单独的联系人的数据 在这里利用通讯录结构体中的第二个成员 cp-size 来帮助我们访问到数据数组中单个联系人的内容在用 “ . ” 访问单个联系人的每一条成员变量从而进行赋值操作 void AddContact(Contact* cp)
{//判断非空assert(cp);//判断未满if (cp-size Contact_Max){printf(通讯录已满无法再添加新的联系人\n);return;}printf(请输入要添加的联系人的姓名\n);scanf(%s, cp-data[cp-size].name);printf(请输入要添加的联系人的电话号\n);scanf(%s, cp-data[cp-size].telnumber);printf(请输入要添加的联系人的年龄\n);scanf(%d, (cp-data[cp-size].age));printf(请输入要添加的联系人的性别\n);scanf(%s, cp-data[cp-size].sex);printf(请输入要添加的联系人的住址\n);scanf(%s, cp-data[cp-size].address);cp;printf(添加成功\n);
}
四.删除联系人信息 删除联系人之前我们首先需要做的就是查询到联系人只有找到联系人后才能完成删除的工作因此我们先封装一个函数通过联系人的姓名进行查找对整个结构体数组遍历然后使用 strcmp 函数来比较用户输入的名字和我们要查找的名字这样就可以找出联系人并且返回数组的下标如果没有找到就返回 -1
int FindPeople(Contact* cp, char name[])
{assert(cp);for (int i 0; i cp-size; i){if (strcmp(cp-data[i].name, name) 0){return i;}}return -1;
}找到要删除的元素的位置后我们就将整个数组从后往前覆盖这样就达到了删除联系人的信息的目的
void DelContact(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空无需删除\n);return;}printf(请输入选择删除的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要删除的联系人不存在\n);return;}for (int i ret; i cp-size; i){cp-data[i] cp-data[i 1];}cp-size--;printf(删除成功\n);
}
五.查询联系人信息
查询在刚才查找到的基础上进行打印输出就可以了
void SeachPeople(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空\n);return;}printf(请输入选择查找的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要查找的联系人不存在\n);return;}//名字 年龄 性别 电话 地址//xxx xxx xxx xxx xxxprintf(%-10s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);//打印个人的信息printf(%-20s%-5d%-5s%-12s%-30s\n, cp-data[ret].name, cp-data[ret].age, cp-data[ret].sex, cp-data[ret].telnumber, cp-data[ret].address);
}
六.修改联系人的信息
大体思路也和上面一样先找到联系人的在数组中的位置然后再进行修改
void ModifyContact(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空\n);return;}printf(请输入选择修改的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要修改的联系人信息不存在\n);return;}printf(请输入要修改的联系人的姓名\n);scanf(%s, cp-data[ret].name);printf(请输入要修改的联系人的电话号\n);scanf(%s, cp-data[ret].telnumber);printf(请输入要修改的联系人的年龄\n);scanf(%d, (cp-data[ret].age));printf(请输入要修改的联系人的性别\n);scanf(%s, cp-data[ret].sex);printf(请输入要修改的联系人的住址\n);scanf(%s, cp-data[ret].address);printf(修改成功\n);
}完整代码
Contct.h
#pragma once
#includestdio.h
#includeassert.h
#includestring.h#define Name_Max 20
#define Tel_Number 12
#define Sex_Max 5
#define Address_Max 30
#define Contact_Max 100//联系人结构体
typedef struct PeopleInformation
{char name[Name_Max];char telnumber[Tel_Number];int age;char sex[Sex_Max];char address[Address_Max];
}PeoInfor;//通讯录结构体
typedef struct Contact
{PeoInfor data[Contact_Max];//结构体数组存放联系人结构体int size;//记录当前通讯录中有多少个联系人
}Contact;//目录
void menu();//初始化通讯录
void InitContact(Contact* cp);//增加联系人
void AddContact(Contact* cp);//删除联系人
void DelContact(Contact* cp);//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[]);//展示全部通讯录信息
void ShowContact(const Contact* cp);//查询联系人
void SeachPeople(Contact* cp);//修改联系人信息
void ModifyContact(Contact* cp);
Contact.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include Contact.hvoid menu()
{printf(\n);printf(-----------------------------\n);printf(--- 1.添加联系人 -----\n);printf(--- 2.删除联系人 -----\n);printf(--- 3.查找联系人 -----\n);printf(--- 4.修改联系人信息 -----\n);printf(--- 5.显示全部信息 -----\n);printf(--- 0.退出通讯录 -----\n);printf(-----------------------------\n);
}//初始化通讯录
void InitContact(Contact* cp)
{//判断非空assert(cp);cp-size 0;memset(cp-data, 0, sizeof(cp-data));
}//增加联系人
void AddContact(Contact* cp)
{//判断非空assert(cp);//判断未满if (cp-size Contact_Max){printf(通讯录已满无法再添加新的联系人\n);return;}printf(请输入要添加的联系人的姓名\n);scanf(%s, cp-data[cp-size].name);printf(请输入要添加的联系人的电话号\n);scanf(%s, cp-data[cp-size].telnumber);printf(请输入要添加的联系人的年龄\n);scanf(%d, (cp-data[cp-size].age));printf(请输入要添加的联系人的性别\n);scanf(%s, cp-data[cp-size].sex);printf(请输入要添加的联系人的住址\n);scanf(%s, cp-data[cp-size].address);cp-size;printf(添加成功\n);
}//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[])
{assert(cp);for (int i 0; i cp-size; i){if (strcmp(cp-data[i].name, name) 0){return i;}}return -1;
}//删除联系人
void DelContact(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空无需删除\n);return;}printf(请输入选择删除的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要删除的联系人不存在\n);return;}for (int i ret; i cp-size-1 ; i){cp-data[i] cp-data[i 1];}cp-size--;printf(删除成功\n);
}//查询联系人
void SeachPeople(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空\n);return;}printf(请输入选择查找的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要查找的联系人不存在\n);return;}//名字 年龄 性别 电话 地址//xxx xxx xxx xxx xxxprintf(%-10s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);//打印个人的信息printf(%-10s%-5d%-5s%-12s%-30s\n, cp-data[ret].name, cp-data[ret].age, cp-data[ret].sex, cp-data[ret].telnumber, cp-data[ret].address);
}//展示全部通讯录信息
void ShowContact(const Contact* cp)
{assert(cp);if (cp-size 0){printf(通讯录为空\n);return;}//名字 年龄 性别 电话 地址//xxx xxx xxx xxx xxxprintf(%-10s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);for (int i 0; i cp-size; i){//打印每个人的信息printf(%-10s%-5d%-5s%-12s%-30s\n,cp-data[i].name, cp-data[i].age, cp-data[i].sex, cp-data[i].telnumber, cp-data[i].address);}
}//修改联系人信息
void ModifyContact(Contact* cp)
{assert(cp);char name[Name_Max];if (cp-size 0){printf(通讯录为空\n);return;}printf(请输入选择修改的联系人的姓名\n);scanf(%s, name);int ret FindPeople(cp, name);if (ret -1){printf(要修改的联系人信息不存在\n);return;}printf(请输入要修改的联系人的姓名\n);scanf(%s, cp-data[ret].name);printf(请输入要修改的联系人的电话号\n);scanf(%s, cp-data[ret].telnumber);printf(请输入要修改的联系人的年龄\n);scanf(%d, (cp-data[ret].age));printf(请输入要修改的联系人的性别\n);scanf(%s, cp-data[ret].sex);printf(请输入要修改的联系人的住址\n);scanf(%s, cp-data[ret].address);printf(修改成功\n);
}test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include Contact.h//枚举增加程序的可读性
enum options
{EXIT,ADD,DEL,SEACH,MODIFY,SHOW
};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 SEACH:SeachPeople(con);break;//修改某个联系人的信息case MODIFY:ModifyContact(con);break;//展示通讯录内的每一个联系人的信息case SHOW:ShowContact(con);break;//退出通讯录管理系统case EXIT:printf(通讯录已退出\n);break;//预防非法输入default:printf(输入错误请重新输入\n);break;}}while(input);return 0;
} 本次的分享就到此为止了本文不涉及到文件操作下篇文章笔者将为大家带来如何通过文件操作将我们的通讯录防止在文件中以便我们多次重复打开和操作如有错误欢迎积极指出感谢您的支持