通讯录的每一条信息包括姓名、单位、固定电话、移动手机、
分类(如同事、朋友、同学、家人等)、EMAIL、QQ 等。
#include"stdio.h"
#include"stdlib.h"
#define Max 100
#define SIZE 12
void showMenu()//菜单功能
{
printf("\t*************************\n") ;
printf("\t***** 1、添加联系人 *****\n") ;
printf("\t***** 2、显示联系人 *****\n") ;
printf("\t***** 3、姓名查找人 *****\n") ;
printf("\t***** 4、学号查找人 *****\n") ;
printf("\t***** 5、修改联系人 *****\n") ;
printf("\t***** 6、删除联系人 *****\n") ;
printf("\t***** 7、清空通讯录 *****\n") ;
printf("\t***** 0、退出通讯录 *****\n") ;
printf("\t*************************\n") ;
}
struct student
{
char s_Name[SIZE];//学生姓名
int s_No;//学生学号
int s_Age;//学生年龄
char s_Phone[SIZE];//电话号码
char s_Class[SIZE];//所在班级
int s_Address[SIZE];//寝室地址
};
struct studentAddressBooks
{
struct student S[Max];//创建学生通讯录数组
int s_size = 0;//记录当前学生通讯录大小
};
void addStudent(studentAddressBooks* abc)//添加联系人
{
if (abc->s_size >= Max)
{
printf("通讯录已满,添加失败\n");
}
else {
printf("添加联系人名字 :\n");
scanf_s("%s", &abc->S[abc->s_size].s_Name);
printf("联系人学号为 :\n");
scanf_s("%d",&abc->S[abc->s_size].s_No);
printf("联系人年龄为 :\n");
scanf_s("%d",&abc->S[abc->s_size].s_Age);
printf("联系人电话 :\n");
scanf_s("%s", abc->S[abc->s_size].s_Phone);
printf("联系人所在班级为:\n");
scanf_s("%s", abc->S[abc->s_size].s_Class);
printf("联系人宿舍号为 :\n");
scanf_s("%s", abc->S[abc->s_size].s_Address);
printf("添加成功\n");
//更新通讯录人数
abc->s_size++;
system("pause"); system("cls");
}
}
void showStudent(studentAddressBooks* abc)
{
if (abc->s_size == 0) printf("当前记录为空\n");
else {
for (int i = 0; i < abc->s_size; i++) {
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
}
system("pause"); system("cls");
}
int isExit1(studentAddressBooks* abc, char name[])//姓名判定通讯录是否有此人
{
for (int i = 0; i < abc->s_size; i++)
{
if (*abc->S[i].s_Name == *name) return i;
}
return -1;
}
int isExit2(studentAddressBooks* abc, int Sno)//学号判定通讯录是否有此人
{
for (int i = 0; i < abc->s_size; i++)
{
if (abc->S[i].s_No == Sno) return i;
}
return -1;
}
void nfindStudent(studentAddressBooks* abc)
{
printf("输入要查找联系人的名字:\n");
char name[SIZE]; scanf_s("%s",&name);
int i = isExit1(abc, name);
if (i != -1)
{
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void sfindStudent(studentAddressBooks* abc)
{
printf("输入要查找联系人的学号:\n");
int Sno=0; scanf_s("%d",&Sno);
int i = isExit2(abc, Sno);
if (i != -1)
{
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void modifyStudent(studentAddressBooks* abc)
{
printf("输入要修改的联系人名字\n");
char name[SIZE]; scanf_s("%s", &name);
int v = isExit1(abc, name);
if (v != -1)
{
printf("更改后联系人名字 :\n");
scanf_s("%s", &abc->S[v].s_Name);
printf("更改后联系人学号为 :\n");
scanf_s("%d", &abc->S[v].s_No);
printf("更改后联系人年龄为 :\n");
scanf_s("%d", &abc->S[v].s_Age);
printf("更改后联系人电话 :\n");
scanf_s("%s", abc->S[v].s_Phone);
printf("更改后联系人所在班级为:\n");
scanf_s("%s", abc->S[v].s_Class);
printf("更改后联系人宿舍号为 :\n");
scanf_s("%s", abc->S[v].s_Address);
printf("更改成功\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void deleteStudent(studentAddressBooks* abc)
{
if (abc->s_size == 0)
{
printf("当前记录为空\n");
}
else {
printf("输入要删除的联系人:\n");
char name[SIZE]; scanf_s("%s", &name);
int v = isExit1(abc, name);
if (v == -1) {
printf("查无此人\n");
}
else if (v != -1) {
for (int i = v; i < abc->s_size; i++)
{
abc->S[i] = abc->S[i + 1];
}
abc->s_size--;
printf("删除成功\n");
}
}
system("pause"); system("cls");
}
void clearStudent(studentAddressBooks* abc)
{
abc->s_size = 0;
printf("通讯录已清空\n");
system("pause"); system("cls");
}
int main()
{
//创建通讯录结构体变量
studentAddressBooks abc;
while (1) {
showMenu();
int select = 0;
printf("请选择你的操作:");
scanf_s("%d", &select);
switch (select)
{
case 1://添加联系人
addStudent(&abc);
break;
case 2://显示联系人
showStudent(&abc);
break;
case 3://按照姓名查找联系人
{
nfindStudent(&abc);
}
break;
case 4://按照学号查找联系人
{
sfindStudent(&abc);
}
break;
case 5://修改联系人
modifyStudent(&abc);
break;
case 6://删除联系人
{
deleteStudent(&abc);
}//case 语句 里的代码多的话就用{}括起来,不报错
break;
case 7://清空通讯录
clearStudent(&abc);
break;
case 0://退出通讯录
printf("欢迎下次使用,祝您生活愉快\n"); return 0; break;
default:
printf("请合理
把scanf_s的_s去掉
一、前言
本文将会用c语言实现一个通讯录的系统,并且存储若干人的信息,每个人的信息包括:姓名,性别,年龄,电话号码,住址。此通讯录系统的功能包括: 1.增加联系人 2.删除对应的联系人 3.查找联系人 4.修改联系人的信息 5.排序此通讯录 6.打印出通讯录每个人的信息
二、通讯录的实现
1.关于通讯录的前期准备
(1)菜单的实现
首先关于一个通讯录,建立一个菜单是很重要的,菜单能够实现和用户的交互。
因此我们需要建立一个菜单,并且菜单立马应该包括通讯录立马该有的功能,以便于用户的操作
代码如下:
void menu()
{
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");
}
效果差不都就是这样子
(2)关于联系人结构体的创建
这里我们需要利用结构体来实现实现前言中的通讯录功能以及联系人信息,我将利用两个结构体来构建我们需要的东西。
typedef struct PeoInfo
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tele[TELE_MAX];
char addr[ADDR_MAX];
}Peo;
typedef struct Contact
{
Peo con[PON_MAX];
int sz;//记录数量
}contact;
关于第一个结构体Peo是关于个人信息的存储,第二个结构体构建了 我们需要的通讯录,con来作为以第一个结构体为类型的数组,sz来记录这个结构体存储个人信息的数量。
(3)实现菜单选项的功能
我们需要根据菜单里面的选项来选择进行我们需要实现的功能,比如我们想假如一个用户信息,我们就输入1就会进行用户假如的操作,我们想退出程序我们输入0就可以退出。我选择利用枚举变量的形式来实现,讲操作变成数字,利用switch选择语句来实现各自的功能。
enum Option//利用枚举变量来定义
{
exit,//0
add,//1
del,//2
search,//3
modify,//4
sort,//5
print//6
};
void test()
{
contact con;//建立结构体
InitCon(&con);
int input = 0;
do {
menu();
scanf("%d", &input);
switch (input)
{
case add:
AddCon(&con);
break;
case del:
DelCon(&con);
break;
case search:
SearchCon(&con);
break;
case modify:
ModifyCon(&con);
break;
case sort:
SortCon(&con);
break;
case print:
PrintCon(&con);
break;
case exit:
printf("退出程序,欢迎使用!\n");
break;
default:
printf("没有找到此数字匹配的操作!!\n");
}
} while (input);
}
(4)关于全局变量的定义
为了实现这些变量,并且方便后期的处理数组大小,所以我们可以利用宏来实现这个功能
#define NAME_MAX 20//姓名的长度
#define SEX_MAX 5//性别的长度
#define TELE_MAX 12//电话号码的长度
#define ADDR_MAX 30//地址长度
#define PON_MAX 1000//通讯录的大小
https://blog.csdn.net/weixin_64448174/article/details/123958010?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-123958010-ask-7737736.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-123958010-ask-7737736.pc_feed_download_top3ask
https://blog.csdn.net/qq_47799626/article/details/122912894?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-5-122912894-ask-7737736.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-5-122912894-ask-7737736.pc_feed_download_top3ask