用C语言. 编写一个“通讯录管理系统”程序

用C语言.编写一个“通讯录管理系统”程序,通讯录信息包括姓名、工作单位、电话号码、QQ号码、等信息。通讯录信息用磁盘文件保存,要求程序包括如下功能。1.可以输入追加联系人... 用C语言.
编写一个“通讯录管理系统”程序,通讯录信息包括姓名、工作单位、电话号码、QQ号码、等信息。通讯录信息用磁盘文件保存,要求程序包括如下功能。

1. 可以输入追加联系人记录。

2. 可以浏览通讯录信息。

3. 可以查找某人信息。

4. 可以删除某人信息。

5. 可以修改某人信息。

6. 显示主功能菜单,供用户自由选择。

越简单越好!有分加哦!!
每条语句都要注释!
展开
 我来答
WANGXIUXIU2010
2010-11-29 · TA获得超过2724个赞
知道小有建树答主
回答量:224
采纳率:50%
帮助的人:184万
展开全部
可以的话请采纳。

#include <string.h>
#include <stdio.h>
#include<stdlib.h>
int cntAddr=0,i,j;
char in[12];
const char * strFmt="\n%d\t%s\t%s\t%s\t%s\n";
typedef struct ADDRESSD {
int ID;
char name[12];
char workPlace[12];
char teleOff[12];
char teleHome[12];
}ADDRESS;
ADDRESS addrTmp[100],adTmp;
int load(ADDRESS adr[]){
FILE *fp;
if((fp=fopen("c:\\txl.txt","r"))!=NULL){
cntAddr=0;
while(!feof(fp)){
fscanf(fp,"%d %s %s %s %s ",&(adr[cntAddr].ID),adr[cntAddr].name,adr[cntAddr].workPlace,adr[cntAddr].teleOff,adr[cntAddr].teleHome);
++cntAddr;
}
}
fclose(fp);
return cntAddr;
};
void list(ADDRESS addr[],int length){
for(i=0;i<length;++i)printf(strFmt,addr[i].ID,addr[i].name,addr[i].workPlace,addr[i].teleOff,addr[i].teleHome);
}
void display(ADDRESS addr[]){
for(i=0;i<cntAddr;++i)addrTmp[i]=addr[i];
for(i=0;i<cntAddr-1;++i)for(j=i+1;j<cntAddr;++j)if(addrTmp[i].ID>addrTmp[j].ID){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<cntAddr;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
}
void namesort(ADDRESS addr[],int length){
for(i=0;i<length;++i)addrTmp[i]=addr[i];
for(i=0;i<length-1;++i)for(j=i+1;j<length;++j)if(strcmp(addrTmp[i].name,addrTmp[j].name)>0){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<length;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
};
void save(ADDRESS adr[],int length){
FILE *fp;
fp=fopen("c:\\txl.txt","w");
for(i=0;i<cntAddr;++i)fprintf(fp,"%d %s %s %s %s ",adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
fclose(fp);
};
void unitssort(ADDRESS addr[],int length){
for(i=0;i<length;++i)addrTmp[i]=addr[i];
for(i=0;i<length-1;++i)for(j=i+1;j<length;++j)if(strcmp(addrTmp[i].workPlace,addrTmp[j].workPlace)>0){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<length;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
};
void namesearch(ADDRESS addr[],int length){
printf("请输入姓名:\n");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(addr[i].name,in)==0)printf(strFmt,addr[i].ID,addr[i].name,addr[i].workPlace,addr[i].teleOff,addr[i].teleHome);
};
void unitssearch(ADDRESS adr[],int length){
printf("请输入工作单位:\n");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].workPlace,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
void officenumbersearch(ADDRESS adr[],int length){
printf("请输入办公电话:\n");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].teleOff,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
void homenumbersearch(ADDRESS adr[],int length){
printf("请输入家庭电话:\n");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].teleHome,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
int delet(ADDRESS adr[],int length){
printf("要修改第几条记录:\n");
scanf("%d",&j);
for(i=j;i<length-1;++i)adr[i]=adr[i+1];
return --length;
};
void rewrite(ADDRESS adr[],int length){
printf("要修改第几条记录:\n");
scanf("%d",&j);
printf("请输入ID:\n");
scanf("%d",&i);
adr[j].ID=i;
printf("请输入姓名:\n");
scanf("%s",in);
strcpy(adr[j].name,in);
printf("请输入工作单位:\n");
scanf("%s",in);
strcpy(adr[j].workPlace,in);
printf("请输入办公电话:\n");
scanf("%s",in);
strcpy(adr[j].teleOff,in);
printf("请输入家庭电话:\n");
scanf("%s",in);
strcpy(adr[j].teleHome,in);
};
int add(ADDRESS adr[],int length){
printf("请输入ID:\n");
scanf("%d",&i);
adr[length].ID=i;
printf("请输入姓名:\n");
scanf("%s",in);
strcpy(adr[length].name,in);
printf("请输入工作单位:\n");
scanf("%s",in);
strcpy(adr[length].workPlace,in);
printf("请输入办公电话:\n");
scanf("%s",in);
strcpy(adr[length].teleOff,in);
printf("请输入家庭电话:\n");
scanf("%s",in);
strcpy(adr[length].teleHome,in);
return ++cntAddr;
};
void copy(){
FILE *fp,*fc;
printf("请输入新文件名(路径中的反斜杠用\\表示)\n");
scanf("%s",&in);
if((fp=fopen("c:\\txl.txt","r"))!=NULL){
fc=fopen(in,"w");
while(!feof(fp)){
fscanf(fp,"%d %s %s %s %s ",&(adTmp.ID),adTmp.name,adTmp.workPlace,adTmp.teleOff,adTmp.teleHome);
fprintf(fc,"%d %s %s %s %s ",adTmp.ID,adTmp.name,adTmp.workPlace,adTmp.teleOff,adTmp.teleHome);
}
fclose(fc);
}
fclose(fp);
};
int enter(ADDRESS adr[]){
cntAddr=0;
printf("请按次序输入数据,结束按CTRL+z:\n");
while(1){
printf("请输入ID:\n");
if(scanf("%d",&i)==EOF)break;
adr[cntAddr].ID=i;
printf("请输入姓名:\n");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].name,in);
printf("请输入工作单位:\n");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].workPlace,in);
printf("请输入办公电话:\n");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].teleOff,in);
printf("请输入家庭电话:\n");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].teleHome,in);
++cntAddr;
}
return cntAddr;
};
void showpaixu(ADDRESS adr[],int length)
{
int choice;
menu1:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 全部显示通讯录信息\n\n");
printf(" 2. 按序号显示通讯录信息\n\n");
printf(" 3. 按姓名排序\n\n");
printf(" 4. 按工作单位排序\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~4)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1:
list(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*显示全部记录*/
case 2:
display(adr);
printf(" 请按任意键返回...\n");
system("pause");break; /*按序号显示记录*/
case 3:
namesort(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按姓名排序*/
case 4:
unitssort(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按工作单位排序*/
case 0: return;
}
goto menu1;
}
/*通讯录信息查找功能*/
void chazhao(ADDRESS adr[],int length)
{
int choice;
menu2:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 通过姓名查找\n\n");
printf(" 2. 通过工作单位查找\n\n");
printf(" 3. 通过办公电话查找\n\n");
printf(" 4. 通过家庭电话查找\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~4)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1:
namesearch(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按姓名查找记录*/
case 2:
unitssearch(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按工作单位查找记录*/
case 3:
officenumbersearch(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按办公电话查找记录*/
case 4:
homenumbersearch(adr,length);
printf(" 请按任意键返回...\n");
system("pause");
break; /*按住宅电话查找记录*/
case 0: return;
}
goto menu2;
}
/*通讯录信息变更功能*/
void biangeng(ADDRESS adr[],int length)
{
int choice;
menu3:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 删除记录\n\n");
printf(" 2. 修改记录\n\n");
printf(" 3. 添加记录\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~3)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1:
length=delet(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break; /*删除记录*/
case 2:
rewrite(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break; /*修改记录*/
case 3:
length=add(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break; /*插入记录*/
case 0: return;
}
goto menu3;
}

int wenjian(ADDRESS adr[],int length)
{
int choice;
menu4:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 导入文件到通讯录\n\n");
printf(" 2. 把当前文件复制到新文件上\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~2)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
printf("您已经成功的导入文件到通讯录!\n");
printf(" 请按任意键返回...\n");
system("pause");break;
case 2: copy();
printf("复制成功!\n");
printf(" 请按任意键返回...\n");
system("pause");break;
case 0: return length;
}
goto menu4;
}
/*关于*/
void about()
{
system("color 87");
system("cls");
printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");
printf(" *****************************************\n\n\n");
printf(" 版权所有(C) 2009-2010 DIY软件\n\n\n");
printf(" 制作人:西北民族大学计算机科学与信息09级计算机3班 王元波\n\n\n");
printf(" *****************************************\n\n\n");
printf(" 请按任意键返回主菜单...");
system("pause");
}
/******主函数开始*******/
void main()
{
int choice;
int length; /*保存记录长度*/
ADDRESS adr[100] ; /*定义结构体数组*/
menu:
system("color f9");
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 请选择以下通讯录管理功能:\n\n");
printf(" 1. 通讯录信息输入\n\n");
printf(" 2. 通讯录信息浏览及排序\n\n");
printf(" 3. 通讯录信息查询\n\n");
printf(" 4. 通讯录信息更改\n\n");
printf(" 5. 通讯录及文件操作\n\n");
printf(" 6. 关于通讯录信息管理系统\n\n");
printf(" 0. 退出通讯录管理系统\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~6)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=enter(adr);
save(adr,length);
printf("\n 请按任意键返回...\n");
system("pause");break;/*输入记录*/
case 2: showpaixu(adr,length);break;
case 3: chazhao(adr,length);break;
case 4: biangeng(adr,length);break;
case 5: length=wenjian(adr,length);break;
case 6: about();break;/*关于*/
case 0: return; /*如返回值为则程序结束*/
}
goto menu;
}
thkdeep
推荐于2016-10-19 · TA获得超过144个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:94.7万
展开全部
#include<stdio.h>
#include<string.h>
#include<windows.h>

#define M 500

struct Man //定义结构体
{
char Name[8]; //名字
char Depart[20]; //工作单位
char QQ[10]; //QQ号码
char Email[30]; //邮箱
};

void text(); //相当于主函数
void text1(); //菜单输出
char text2(); //开始的版权信息输出
int Delete(Man Man[], int Size);//删除信息
void Display(Man man[]); //显示所有记录
void getch();
int Insert(Man Man[], int Size); //插入模块
void Modify(Man Man[], int Size); //修改模块
int S_asname(Man Man[], int Size, int n); //查找信息
void S_asqq(Man Man[], int Size); //按QQ查找模块
int Save(Man Man[], int Size); //把数据写入文件
int Scan(Man Man[]); //从文本中读取数据

void main() //主函数
{
text(); //(这边纯属蛋疼,最多加长系统运行时间)
}

void text() //相当于主函数
{
Man man[M]; //500人的结构体数组
char control=0; //菜单选择控制变量
int size=0; //保存当前已有的记录
if ( text2() ) //这边可不要if,直接调用text2,显示版权信息。
{
size=Scan(man); //判断文件是否存在
while(1) //菜单生成
{
text1(); //菜单显示
scanf(
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f27200e
2018-07-26 · TA获得超过2.6万个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:6.2万
展开全部

实现一个通讯录管理系统;

通讯录管理系统可以用来存储1000个人的信息,每个人的信息包括: 
姓名、性别、年龄、电话、住址

**提供方法: 
1. 添加联系人信息 
2. 删除指定联系人信息 
3. 查找指定联系人信息 
4. 修改指定联系人信息 
5. 显示所有联系人信息 
6. 清空所有联系人 
7. 以名字排序所有联系人**

1、linkman.h(头文件)

2、test.c(测试)

3、程序运行结果部分示范: 

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式