C语言实现手机电话簿管理系统
本文实例为大家分享了C语言实现手机电话簿管理系统的具体代码,供大家参考,具体内容如下
一、任务概述(文章仅供参考)
用c设计出模拟手机通讯录管理系统,实现对手机中的通讯录进行管理
二、设计功能
查看功能:选择此功能时,列出下列三类选择。A办公类,B个人类,C商务类,当选中某类时,显示出此类中的所有数据。
增加功能:能录入新数据,一个结点包括:姓名、电话号码、分类(可选项有:A 办公类,B 个人类,C 商务类)、电子邮件。
拨号功能:能显示出通讯录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字,并伴随相应的拨号声音。
修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。
删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
三、功能展示
四、思维导图
五、程序源码
#include <stdio.h>
#include <stdlib.h>
#include <coNIO.h>
#include <string.h>
#define N 15 //最大容量为15
typedef struct //定义一个结构
{
char name[10];
char haoma[15];
char leibie[10];
char dizhi[20];
}ren;
//菜单
void menu() //目录
{
system("cls"); //清屏
printf("\n\n\n ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┃");
printf(" ┃ ┏━━━━━━━━━━┓ ┃");
printf("\n ┃ ┃ 欢迎使用手机通讯录 ┃ ┃ \n");
printf(" ┃ ┗━━━━━━━━━━┛ ┃");
printf(" ┃ ┏━━━━━━━━━━┓ ┃\n");
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(" ┃ ┃ ┃ ┃\n");
printf(" ┃ ┗━━━━━━━━━━┛ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ");
printf("\n");
printf("请选择相应的功能:");
}
//号码添加
void input()
{
FILE *fp; //定义文件指针
ren ry,s; // 定义两个ren结构体的量
if((fp=fopen("ren.dat","ab+"))==NULL)
{printf("can't open file!\n");exit(0);}
printf("\n录入格式\n姓名:\n号码:\n类别:\n邮箱:\n当输入姓名为#结束录入\n");
while(1)
{ printf("请输入姓名:");
scanf("%s",ry.name);
if(strcmp(ry.name,"#")==0) break; //如果输入#则退出添加
printf("请输入电话号码:");
scanf("%s",ry.haoma);
printf("请输入类别(A办公类B个人类C商务类):");
scanf("%s",ry.leibie);
printf("请输入邮箱地址:");
scanf("%s",ry.dizhi);
fseek(fp,0,0); //指针定位到文件开始位置
fread(&s,sizeof(ren),1,fp);
while(!feof(fp))
{ if(strcmp(s.haoma,ry.haoma)==0)
{printf("号码已经存在,不能记录.\n");break;}//遇到有相同的号码
fread(&s,sizeof(ren),1,fp);
}
if(feof(fp)) //读到自后也没有相同的号码
fwrite(&ry,sizeof(ren),1,fp); //将信息写入文件
}
fclose(fp); //关闭文件
getchar(); //接受一个输入
}
void search() //查询
{
ren ry;
FILE *fp;
char leibie[10];
system("cls");
printf("\n输入要查人员的类别: ");scanf("%s",leibie);//要查询的类别
if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);}
fread(&ry,sizeof(ren),1,fp);
if(!feof(fp))
{ printf(" 人员的信息如下:\n");
printf("说明:(A办公类B个人类C商务类)");
printf("\n%10s %15s %10s %20s \n","姓名","号码","类别","邮箱");
while(!feof(fp))
{
if(strcmp(ry.leibie,leibie)==0) //若为该类别则输出
{
printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi);
}
fread(&ry,sizeof(ren),1,fp);
}
}
else printf("查找失败!!!");
fclose(fp);
getch();
}
//修改:输入人员的姓名,查找该人员,若找到则修改该人员的信息,并显示修改前后的结果;
void modi()
{ ren ry;
FILE *fp;
char name[10];
system("cls");
if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);}
if(!feof(fp))
{printf(" 修改前全部人员的信息如下:\n");
printf("\n%10s %15s %10s %20s \n","姓名","号码","类别","邮箱");
fread(&ry,sizeof(ren),1,fp);
while(!feof(fp))
{
printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi);
fread(&ry,sizeof(ren),1,fp);
}
}
printf("\n输入要修改人员的姓名: ");scanf("%s",name);
if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);}
while(!feof(fp))
{ fread(&ry,sizeof(ren),1,fp);
if(strcmp(ry.name,name)==0)
{ printf(" 修改前人员的信息如下:\n");
printf("\n%10s %15s %10s %20s \n","姓名","号码","类别","邮箱");
printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi);
printf("\n请输入该人的号码:");scanf("%s",ry.haoma);
printf("\n类别:");scanf("%s",ry.leibie); //新信息输入
printf("\n邮箱:");scanf("%s",ry.dizhi);
break; //修改完毕退出
}
}
if(!feof(fp))
{
printf(" \n 修改后的人的信息如下:\n");
printf("\n%10s %15s %10s %20s \n","姓名","号码","类别","邮箱");
printf("%10s %15s %10s %20s \n",ry.name,ry.haoma,ry.leibie,ry.dizhi);
fseek(fp,-sizeof(ren),1); //指针向前一位定位
fwrite(&ry,sizeof(ren),1,fp);
}
else
printf("\n此人不存在,修改失败!!");
fclose(fp);
getch();
}
//删除:输入人员姓名,若该人员存在,则删除,并显示删除后余下的人员的信息
void dele()
{ ren ry[N];
FILE *fp;
char name[10];
int i,len,k=-1;
system("cls");
printf("\n输入要删除的人员姓名: ");scanf("%s",name);
i=0;
if((fp=fopen("ren.dat","rb+"))==NULL) {printf("can't open file!\n");exit(0);}
while(!feof(fp))
{ fread(&ry[i],sizeof(ren),1,fp);
if(feof(fp)) break;
if(strcmp(ry[i].name,name)==0) k=i;
i++;
}
fclose(fp);
//以下是删除后重新写文件
len=i;
if(k>=0)
{ if((fp=fopen("ren.dat","wb+"))==NULL) {printf("can't open file!\n");exit(0);}
for(i=0;i<len;i++)
{ if(i==k) continue;
fwrite(&ry[i],sizeof(ren),1,fp);
}
fclose(fp);printf("删除成功!!!\n");
}
else printf("删除失败!!!\n");
getch();
}
void bohao() //拨号
{ ren ry;
FILE *fp;
char name[10];
system("cls");
printf("\n输入要拨人员的姓名: ");scanf("%s",name);
if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);}
while(!feof(fp))
{ fread(&ry,sizeof(ren),1,fp);
if(strcmp(ry.name,name)==0)
{ printf("\n\a\a\a\a\a\a %15s\a\a\a\a\a\n",ry.haoma); //输出号码和声音
break;
}
}
if(feof(fp)) printf("拨号失败!!!");
fclose(fp);
getch();
}
//菜单选择
void choice()
{
char ch;
while(1)
{
menu();// 显示菜单
ch=getch();//选择菜单
if(ch=='0') break;
switch(ch)//判断功能项
{
case '1': input();break;
case '2':search();break;
case '3':modi();break;
case '4':dele();break;
case '5':bohao();break;
}
}
printf("\n欢迎使用!!!\n");
}
//主函数
main()
{
choice();//调用菜单选择
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章