初学者C语言开发–通讯录(Clion版)
声明:学习过程
总体结果预览
一:总体思维
- 菜单显示,选项卡设置
- 功能大体规划:添加,显示,删除,查找,修改,清空,退出
- 添加:输入联系人资料并且加入通讯录
- 显示:运行显示通讯录所有联系人资料
- 删除:删除某一联系人
- 查找:查找联系人并且将信息显示
- 清空:清空通讯录所有联系人
- 退出:退出程序
二:代码分析实现
结构体
两个结构体,一个联系人,一个通讯录
通讯录里面存储有联系人
联系人有属性,姓名,性别,年龄,电话,地址
struct Person{
char m_name[10];
int m_sex;
int m_age;
char m_phone[20];
char m_addr[20];
};
struct Addressbooks{
//联系人数组
struct Person personArray[MAX];
//当前联系人个数
int size;
};
主函数
创建结构体变量,初始化通讯录人数为0
循环显示主菜单界面
switch根据输入选择调用函数(具体实现通讯录功能)
调用函数通过地址传参可以通过形参修改实参
int main(){
//创建一个通讯录结构体变量
struct Addressbooks abs;
abs.size=0;
int select=0;
while(1){
showMenu();
char name[10];
scanf("%d",&select);
switch (select) {
case 1:
addPerson(&abs);//利用地址传递可以修改实参
break;
case 2:
showPerson(&abs);
break;
case 3:
deletePerson(&abs);
break;
case 4:
findPerson(&abs);
break;
case 5:
modifyPerson(&abs);
break;
case 6:
clearPerson(&abs);
break;
case 0:
printf("欢迎下次使用\n");
return 0;
default:
break;
}
}
}
菜单显示界面
void showMenu(){
printf("***********\n");
printf("1、添加联系人\n");
printf("2、显示联系人\n");
printf("3、删除联系人\n");
printf("4、查找联系人\n");
printf("5、修改联系人\n");
printf("6、清空联系人\n");
printf("0、退出通讯录\n");
printf("***********\n");
}
添加联系人
参数为指针,通讯录
所有信息添加到通讯录的联系人数组中,size表示大小
c语言的字符串赋值:strcpy(被赋值,原值)
void addPerson(struct Addressbooks * abs){
//判断通讯录是否满
if(abs->size==MAX){
printf("通讯录已满,无法添加\n");
return;
}
else{
//添加具体
//姓名
char name[10];
printf("请输入姓名:");
scanf("%s",name);
strcpy(abs->personArray[abs->size].m_name, name);
//性别
printf("请输入性别(1为男,2为女):");
int sex=0;
while(1){
scanf("%d",&sex);
if(sex==1||sex==2){
abs->personArray[abs->size].m_sex=sex;
break;
}
printf("输入不服规范,请重新输入:");
}
//年龄
printf("请输入年龄:");
int age;
scanf("%d",&age);
abs->personArray[abs->size].m_age=age;
//电话
printf("请输入电话:");
char phone[20];
scanf("%s",phone);
strcpy(abs->personArray[abs->size].m_phone,phone);
//地址
printf("请输入地址:");
char addr[20];
scanf("%s",addr);
strcpy(abs->personArray[abs->size].m_addr,addr);
//通讯录人数
abs->size++;
printf("添加成功!\n");
// system("pause");
// system("cls");
}
}
显示联系人
注意性别显示,如果等于1就显示男,不等于1就显示女
void showPerson(struct Addressbooks * abs){
//判断通讯录人数
if(abs->size==0){
printf("通讯录人数为空\n");
}
else {
for(int i=0;i<abs->size;i++){
printf("姓名:%s\t",abs->personArray[i].m_name);
printf("性别:%s\t",abs->personArray[i].m_sex==1?"男":"女");
printf("年龄:%d\t",abs->personArray[i].m_age);
printf("电话:%s\t",abs->personArray[i].m_phone);
printf("住址:%s\n",abs->personArray[i].m_addr);
}
}
// system("cls");
// system("pause");
}
判断联系人是否存在(后续需要用到)
遍历数组,如果查找到则返回下标,未查找到则返回-1
C语言的判断字符串:strcmp(字符串1,字符串2)如果相同则返回0
(不能用=,这是赋值)
int isExist(struct Addressbooks * abs,char name[10]){
for(int i=0;i<abs->size;i++){
if(strcmp(abs->personArray[i].m_name,name)==0){
return i;
}
}
return -1;
}
删除联系人
判断联系人是否在通讯录内
删除逻辑:将其后所有内容都向前走一格(下标加1),最后再size-1
void deletePerson(struct Addressbooks * abs){
printf("请输入你要删除的联系人:");
char name[10];
scanf("%s",name);
int ret=isExist(abs,name);
// printf("%d",ret);
if(ret!=-1){
for(int i=ret;i<abs->size;i++){
abs->personArray[i]=abs->personArray[i+1];
}
abs->size--;
printf("删除成功!\n");
}
else {
printf("查无此人!\n");
}
}
查找联系人
判断是否存在
通过判断的返回值(该返回值为下标),输出下标(ret)对应的联系人
void findPerson(struct Addressbooks * abs){
printf("请输入您要查找的联系人:");
char name[10];
scanf("%s",name);
int ret= isExist(abs,name);
if(ret!=-1){
printf("姓名:%s\t",abs->personArray[ret].m_name);
printf("性别:%s\t",abs->personArray[ret].m_sex==1?"男":"女");
printf("年龄:%d\t",abs->personArray[ret].m_age);
printf("电话:%s\t",abs->personArray[ret].m_phone);
printf("住址:%s\n",abs->personArray[ret].m_addr);
}
else {
printf("查无此人\n");
}
}
修改联系人
判断是否存在
对其所有内容进行修改
void modifyPerson(struct Addressbooks * abs){
printf("请输入你要修改的联系人:");
char name[10];
scanf("%s",name);
int ret= isExist(abs,name);
if(ret!=-1){
printf("请输入姓名:");
char modifyname[10];
scanf("%s",modifyname);
strcpy(abs->personArray[ret].m_name,modifyname);
printf("请输入性别(1为男,2为女):");
int modifysex=0;
while(1){
scanf("%d",&modifysex);
if(modifysex==1||modifysex==2){
abs->personArray[ret].m_sex=modifysex;
break;
}
printf("输入有误,请重新输入\n");
}
printf("请输入年龄:");
int modifyage;
scanf("%d",&modifyage);
abs->personArray[ret].m_age=modifyage;
printf("请输入电话:");
char phone[20];
scanf("%s",phone);
strcpy(abs->personArray[ret].m_phone,phone);
printf("请输入地址:");
char addr[20];
scanf("%s",addr);
strcpy(abs->personArray[ret].m_addr,addr);
}
else{
printf("查无此人!\n");
}
}
清空通讯录
简单逻辑,下表直接归0
void clearPerson(struct Addressbooks * abs){
abs->size=0;
printf("通讯录人已清空!\n");
}
三:下面是完整代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 20
struct Person{
char m_name[10];
int m_sex;
int m_age;
char m_phone[20];
char m_addr[20];
};
struct Addressbooks{
//联系人数组
struct Person personArray[MAX];
//当前联系人个数
int size;
};
void addPerson(struct Addressbooks * abs){
//判断通讯录是否满
if(abs->size==MAX){
printf("通讯录已满,无法添加\n");
return;
}
else{
//添加具体
//姓名
char name[10];
printf("请输入姓名:");
scanf("%s",name);
strcpy(abs->personArray[abs->size].m_name, name);
//性别
printf("请输入性别(1为男,2为女):");
int sex=0;
while(1){
scanf("%d",&sex);
if(sex==1||sex==2){
abs->personArray[abs->size].m_sex=sex;
break;
}
printf("输入不服规范,请重新输入:");
}
//年龄
printf("请输入年龄:");
int age;
scanf("%d",&age);
abs->personArray[abs->size].m_age=age;
//电话
printf("请输入电话:");
char phone[20];
scanf("%s",phone);
strcpy(abs->personArray[abs->size].m_phone,phone);
//地址
printf("请输入地址:");
char addr[20];
scanf("%s",addr);
strcpy(abs->personArray[abs->size].m_addr,addr);
//通讯录人数
abs->size++;
printf("添加成功!\n");
// system("pause");
// system("cls");
}
}
void showPerson(struct Addressbooks * abs){
//判断通讯录人数
if(abs->size==0){
printf("通讯录人数为空\n");
}
else {
for(int i=0;i<abs->size;i++){
printf("姓名:%s\t",abs->personArray[i].m_name);
printf("性别:%s\t",abs->personArray[i].m_sex==1?"男":"女");
printf("年龄:%d\t",abs->personArray[i].m_age);
printf("电话:%s\t",abs->personArray[i].m_phone);
printf("住址:%s\n",abs->personArray[i].m_addr);
}
}
// system("cls");
// system("pause");
}
int isExist(struct Addressbooks * abs,char name[10]){
for(int i=0;i<abs->size;i++){
if(strcmp(abs->personArray[i].m_name,name)==0){
return i;
}
}
return -1;
}
void deletePerson(struct Addressbooks * abs){
printf("请输入你要删除的联系人:");
char name[10];
scanf("%s",name);
int ret=isExist(abs,name);
// printf("%d",ret);
if(ret!=-1){
for(int i=ret;i<abs->size;i++){
abs->personArray[i]=abs->personArray[i+1];
}
abs->size--;
printf("删除成功!\n");
}
else {
printf("查无此人!\n");
}
}
void findPerson(struct Addressbooks * abs){
printf("请输入您要查找的联系人:");
char name[10];
scanf("%s",name);
int ret= isExist(abs,name);
if(ret!=-1){
printf("姓名:%s\t",abs->personArray[ret].m_name);
printf("性别:%s\t",abs->personArray[ret].m_sex==1?"男":"女");
printf("年龄:%d\t",abs->personArray[ret].m_age);
printf("电话:%s\t",abs->personArray[ret].m_phone);
printf("住址:%s\n",abs->personArray[ret].m_addr);
}
else {
printf("查无此人\n");
}
}
void modifyPerson(struct Addressbooks * abs){
printf("请输入你要修改的联系人:");
char name[10];
scanf("%s",name);
int ret= isExist(abs,name);
if(ret!=-1){
printf("请输入姓名:");
char modifyname[10];
scanf("%s",modifyname);
strcpy(abs->personArray[ret].m_name,modifyname);
printf("请输入性别(1为男,2为女):");
int modifysex=0;
while(1){
scanf("%d",&modifysex);
if(modifysex==1||modifysex==2){
abs->personArray[ret].m_sex=modifysex;
break;
}
printf("输入有误,请重新输入\n");
}
printf("请输入年龄:");
int modifyage;
scanf("%d",&modifyage);
abs->personArray[ret].m_age=modifyage;
printf("请输入电话:");
char phone[20];
scanf("%s",phone);
strcpy(abs->personArray[ret].m_phone,phone);
printf("请输入地址:");
char addr[20];
scanf("%s",addr);
strcpy(abs->personArray[ret].m_addr,addr);
}
else{
printf("查无此人!\n");
}
}
void clearPerson(struct Addressbooks * abs){
abs->size=0;
printf("通讯录人已清空!\n");
}
void showMenu(){
printf("***********\n");
printf("1、添加联系人\n");
printf("2、显示联系人\n");
printf("3、删除联系人\n");
printf("4、查找联系人\n");
printf("5、修改联系人\n");
printf("6、清空联系人\n");
printf("0、退出通讯录\n");
printf("***********\n");
}
int main(){
//创建一个通讯录结构体变量
struct Addressbooks abs;
abs.size=0;
int select=0;
while(1){
showMenu();
char name[10];
scanf("%d",&select);
switch (select) {
case 1:
addPerson(&abs);//利用地址传递可以修改实参
break;
case 2:
showPerson(&abs);
break;
case 3:
deletePerson(&abs);
break;
case 4:
findPerson(&abs);
break;
case 5:
modifyPerson(&abs);
break;
case 6:
clearPerson(&abs);
break;
case 0:
printf("欢迎下次使用\n");
return 0;
default:
break;
}
}
}
//
// Created by 30358 on 2024/7/31.
//