第一:使用结构体数组存储联系人信息
#include
#include
#include
#include
#include
#include
using namespace std;
typedef struct person{
char name[25];
char qq[25];
char num[25];
}person;
//添加一个联系人信息
void add(person *p, int *count)
{
int falg = 0;
printf("请输入姓名:\n");
scanf("%s", (*(p + *count)).name);
printf("请输入QQ号:\n");
scanf("%s", (*(p + *count)).qq);
printf("请输入电话号码:\n");
scanf("%s", (*(p + *count)).num);
*count += 1;
printf("联系人信息已添加!\n");
}
//显示电话本
void show(person *p, int *count)
{
int i = 0;
printf("共有%d个联系人信息:\n", *count);
printf("===============================\n");
printf("No. 姓名 QQ号 联系电话\n");
if(*count != 0)
{
for(i = 0; i < *count; i++)
{
printf("-----------------------------------\n");
printf("%d", i + 1);
printf(" %s", (*(p + i)).name);
printf(" %s", (*(p + i)).qq);
printf(" %s\n", (*(p + i)).num);
}
printf("===============================\n");
}
else
{
printf("电话簿内无内容!\n");
}
}
//删除一个联系人
void del(person *p, int *count)
{
int k, kk;
printf("请输入要删除的编号:");
scanf("%d", &k);
if(k > *count || k < 1) {
printf("序号输入错误,请重新输入!");
goto error;
}
kk = k - 1;
while (kk <= *count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的
{
*(p + kk) = *(p + kk + 1);
kk++;
}
*count -= 1;
error: printf("\n");
}
//查找联系人
void sea(person *p, int *count)
{
int i = 0;
int flag = 0;
char mz[10];
printf("请输入要查找的用户名:");
scanf("%s", mz);
printf("===============================\n");
printf("No. 姓名 QQ号 联系电话\n");
for (i = 0; i < *count; i++)
{
if (!strcmp(mz, (*(p + i)).name))
{
printf("----------------------------------\n");
printf("%d", i + 1);
printf(" %s", (*(p + i)).name);
printf(" %s", (*(p + i)).qq);
printf(" %s\n", (*(p + i)).num);
flag = 1;
printf("===============================\n");
break;
}
}
if(flag == 0)
printf("无联系人信息!\n");
}
//修改联系人信息
void change(person *p, int *count)
{
int k, kk;
printf("请输入要修改的编号:\n");
scanf("%d", &k);
if(k > *count || k < 1) {
printf("序号输入错误,请重新输入!");
goto error;
}
kk = k - 1;
printf("请输入姓名:");
scanf("%s", (*(p + kk)).name);
printf("请输入QQ号:");
scanf("%s", (*(p + kk)).qq);
printf("请输入电话号码:");
scanf("%s", (*(p + kk)).num);
printf("第%d个人的信息已修改\n", k);
error:printf("\n");
}
int main(){
person tel[105];
person *p = tel;
int count = 0, n;
while(1) {
printf(" ****菜单**** \n");
printf("--------------------\n");
printf(" 1.添加联系人 \n");
printf(" 2.删除联系人 \n");
printf(" 3.显示电话本 \n");
printf(" 4.查找联系人 \n");
printf(" 5.修改联系人 \n");
printf(" 0.退出系统 \n");
printf("--------------------\n");
printf("请选择要进行的操作(0~5)");
scanf("%d", &n);
if(n == 0) break;
if(n == 1)
add(p, &count);
if(n == 2){
show(p, &count);
del(p, &count);
}
if(n == 3)
show(p, &count);
if(n == 4)
sea(p, &count);
if(n == 5) {
show(p, &count);
change(p, &count);
}
if(n == 0)
break;
}
}
第二:存储到本地文件中
#include
#include
#include
#include
#include
#include
using namespace std;
typedef struct person{
char name[25];
char qq[25];
char num[25];
}person;
//存入到文件中
void write(person p[105], int count) {
int i;
FILE * fp;
char ans[30];
puts("写入到文件!");
puts("请输入所写入的文件名:");
scanf("%s", ans);
if((fp = fopen(ans, "wb")) == NULL) {
printf("\n文件打开失败!\n");
}
fwrite(&count, sizeof(count), 1, fp);
for(i = 0; i < count; i++) fwrite(&p[i], sizeof(person), 1, fp);
fclose(fp);
}
//从文件中读取
int read(person p[105], int count) {
FILE *fp;
int i;
int n = 0;
char ans[30];
puts("读入到文件!");
puts("请输入所读入的文件名:");
scanf("%s", ans);
fp = fopen(ans, "rb");
if(fp == NULL) {
printf("\n通讯录文件不存在!\n");
}
fread(&n, sizeof(n), 1, fp);
for(i = count; i < count + n; i++) fread(&p[i], sizeof(person), 1, fp);
printf("已从文件中成功读取%d条联系人信息!\n", n);
return n;
}
//添加一个联系人信息
void add(person *p, int *count)
{
int falg = 0;
printf("请输入姓名:\n");
scanf("%s", (*(p + *count)).name);
printf("请输入QQ号:\n");
scanf("%s", (*(p + *count)).qq);
printf("请输入电话号码:\n");
scanf("%s", (*(p + *count)).num);
*count += 1;
printf("联系人信息已添加!\n");
}
//显示电话本
void show(person *p, int *count)
{
int i = 0;
printf("共有%d个联系人信息:\n", *count);
printf("===============================\n");
printf("No. 姓名 QQ号 联系电话\n");
if(*count != 0)
{
for(i = 0; i < *count; i++)
{
printf("-----------------------------------\n");
printf("%d", i + 1);
printf(" %s", (*(p + i)).name);
printf(" %s", (*(p + i)).qq);
printf(" %s\n", (*(p + i)).num);
}
printf("===============================\n");
}
else
{
printf("电话簿内无内容!\n");
}
}
//删除一个联系人
int del(person *p, int *count)
{
show(p, count);
int k, kk;
printf("请输入要删除的编号:");
scanf("%d", &k);
if(k > *count || k < 1) {
printf("序号输入错误,请重新输入!");
return 0;
}
kk = k - 1;
while (kk <= *count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的
{
*(p + kk) = *(p + kk + 1);
kk++;
}
*count -= 1;
}
//查找联系人
void sea(person *p, int *count)
{
int i = 0;
int flag = 0;
char mz[10];
printf("请输入要查找的用户名:");
scanf("%s", mz);
printf("===============================\n");
printf("No. 姓名 QQ号 联系电话\n");
for (i = 0; i < *count; i++)
{
if (!strcmp(mz, (*(p + i)).name))
{
printf("----------------------------------\n");
printf("%d", i + 1);
printf(" %s", (*(p + i)).name);
printf(" %s", (*(p + i)).qq);
printf(" %s\n", (*(p + i)).num);
flag = 1;
printf("===============================\n");
break;
}
}
if(flag == 0)
printf("无联系人信息!\n");
}
//修改联系人信息
int change(person *p, int *count)
{
show(p, count);
int k, kk;
printf("请输入要修改的编号:\n");
scanf("%d", &k);
if(k > *count || k < 1) {
printf("序号输入错误,请重新输入!");
return 0;
}
kk = k - 1;
printf("请输入姓名:");
scanf("%s", (*(p + kk)).name);
printf("请输入QQ号:");
scanf("%s", (*(p + kk)).qq);
printf("请输入电话号码:");
scanf("%s", (*(p + kk)).num);
printf("第%d个人的信息已修改\n", k);
}
int main(){
person tel[105];
person *p = tel;
int count = 0, n;
while(1) {
printf(" ****菜单**** \n");
printf("--------------------\n");
printf(" 1.添加联系人 \n");
printf(" 2.删除联系人 \n");
printf(" 3.显示电话本 \n");
printf(" 4.查找联系人 \n");
printf(" 5.修改联系人 \n");
printf(" 6.保存到文件 \n");
printf(" 7.从文件读取 \n");
printf(" 0.退出系统 \n");
printf("--------------------\n");
printf("请选择要进行的操作(0~7)");
scanf("%d", &n);
if(n == 0) break;
if(n == 1) add(p, &count);
if(n == 2) del(p, &count);
if(n == 3) show(p, &count);
if(n == 4) sea(p, &count);
if(n == 5) change(p, &count);
if(n == 6) write(tel, count);
if(n == 7) count = read(tel, count);
if(n == 0) break;
}
}