问题补充说明:1、需求分析信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或电话号码进行... 1、需求分析 信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或电话号码进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计 整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。3、详细设计 采用结构体数组。Struct{Char name[20]; //人名 Char post[20]; //工作单位或学校 Int class; //类别,如1表示同学、2表示朋友、3表示同事等 Int tel; //固定电话 Int mobile1; //移动电话1 Int mobile2; //移动电话1 Char email[20]; //email地址 ……………….. //根据实际需要增加内容}TelInfo; //电话簿信息结构体TelInfo telInfo[N]; //电话簿信息结构体数组(1)数据插入模块输入数据,然后采用追加方式写文件。(2)数据修改模块通过菜单选择修改姓名、电话号码。可以把要修改的姓名或电话号码存储在临时变量里面,然后读文件,找到要修改的记录,把该记录重新以新的值写入。(3)数据删除模块删除一条记录,则输入要删除的人名,然后读文件,把文件中读出来的记录的人名与待删除的人名比较,如果不匹配,则重新写入文件;否则舍弃不再写入文件。(4)数据显示模块 采用分屏显示,每屏10条记录。读文件,输出结果。(5)数据查询模块用基本查找算法对电话簿实现按人名或电话号码的查询(读文件,把读出记录得相应字段与输入的查询字段比较),并把结果输出。可根据需要增加其他功能谢谢了 真的急求~~~ 展开
我这里有一个,你看看吧,满意的给分哦(在visualc++6巴略破采.0上运行)
#include<stdlib.h>
#include<string.h>/*使用字符串函数*/
#include<conio.h>/*使用通过控制台进行数据输入和数据输出鲜的函数*/
#includ创镇征报江么易九老混序e<stdio.h>
#include<dos.h>/*使用DOS函数*/
inti;/*定义一个全局变量i*/
structaddr/*定义通讯地址结构体*/
{charpost_num[10];/*邮编*沙春染月负/
charaddr[60];/*家庭地址*/
};
structbirth/*定义出生分直却资宜正年月结构体*/
{i微杀值案呢曲复爱良ntyear;/*年份*/
intmonth;/*月欢给而改老缩吃飞扬份*/
intday;/*日期*/
};
structrecord1/*定义电子通讯录结构体*/
{调混早剧议伤径革intnumber;杆聚落绿笔问屋唱助硫调/*序号*/
charname[20];/*姓名*/
charsex;/*性别*/
structbirthbirth;/*出生年月*/
structaddraddr;/*通信地址*/
chartelephone[13];/*联系电话*/
}records[50];
FILE*fp;/*定义指向file类型结构体的指针变量*/
voidData_Load()/*定义载入数据函数*/
{intj;
longk;
fp=fopen("record.txt","r+t");/*打开文件record.txt,进行读写计务国*/
if(fp!=NULL)/*如果文件不为空*/
{for(i=1;i<50;i++)
{j=fgetc(fp已聚头亮预);/*从"records.txt"文件读入整型数字*/
if(j==EOF)/*判断是否到了文件尾*/
return;/*如果到了结尾,返回*/
k=i-1;
fseek(fp,k*sizeof(structrecord1激率),SEEK_SET);/*将位置指针移到record1结构体所含字节
的第k倍个字节处*/
frea考始己口投活限华始小困d(&records[i],sizeof(structrecord1),1,fp);/*读取一条记录*/
}
}
else
{fp=fopen("record.txt","w");/*打开文件record.txt,只写*/
i=1;
}
}
voidData_Show(intj)/*定义显示数据函数*/
{
printf("\n\n\tNo:%3d\n",reco山跑从觉rds[j].number)断川微;/*序号*/
printf("\n\tname:%2s\n",records[j].name);/*姓名*/
printf("\n\tbirthday(y/m/d):%4d%2d%2销米d",records[j].birth.year,records[j].birth.month,
records[j].birth.day);/*打印第j个成员的出生年月日*/
printf("\n\tpostcode:%-10s",records[j].addr.post_num);/*邮编*/
printf("\n\taddress:%-40s",records[j].addr.addr);/*家庭地址*/
printf("\n\tphone%-13s",records[j].telephone);/*联系电话*/
}
voidData_Input(intj)/*定义添加数据函数*/
{
fflush(stdin);/*清空输入缓冲区*/
records[j].number=j;
printf("\n\n\n\tinputNo%d",j);
printf("\n\tname:");/*输入姓名*/
scanf("%s",records[j].name);
fflush(stdin);/*清空输入缓冲区*/
printf("\tsex(m/f):");/*输入性别*/
scanf("%c",&records[j].sex);
printf("\t---birthday---");/*输入出生年月*/
printf("\n\tyear:");
scanf("%d",&records[j].birth.year);
printf("\tmonth:");
scanf("%d",&records[j].birth.month);
printf("\tday:");
scanf("%d",&records[j].birth.day);
printf("\tpostcode:");/*输入邮编*/
scanf("%s",records[j].addr.post_num);
printf("\taddress:");/*输入家庭地址*/
scanf("%s",records[j].addr.addr);
printf("\tphone:");/*输入联系电话*/
scanf("%s",records[j].telephone);
}
voidData_Save()/*定义保存函数*/
{
intj;
fp=fopen("record.txt","w");/*打开文件record.txt,只写*/
for(j=1;j<=i;j++)
{fwrite(&records[j],sizeof(structrecord1),1,fp);/*将结构体变量records的确定个数字节输
入到record.txt文件中,个数为结构体friend1所含字节数*/
}
}
voidmain()/*主函数*/
{
intj,k;
charch;
charsearch_name[40];/*定义字符串变量*/
Data_Load();/*声明载入数据函数*/
i--;
do
{printf("*********************************MENU***************************************\n");
printf("------------------------!WELLCOMETOTHESYSTEM!------------------------------");
printf("\n*\tSelectFunction:*");
printf("*\t1.AddNew*");
printf("*\t2.Viewthedata*");
printf("*\t3.Delete*");
printf("*\t4.Search*");
printf("*\t5.Insert*");
printf("*\t6.Saveandquit*");
printf("*\t7.Quit*");
printf("\n********************************MENU****************************************\n");
printf("\tPleasechoosetheoptionyouneed:");
ch=getche();/*输入字符*/
switch(ch)
{
case'1':
{intp;
printf("\n\tPleaseinputthenumberofpeopleyouwanttoadd:");
scanf("%d",&p);/*增加记录*/
printf("\tPleasepressENTERagain");
while(getch()!=0x1b&&i<p)
{i++;
Data_Input(i);
printf("PleasepressEnteragaintocontinue\n");
}
if(i==p)printf("\n\tThedataisfull\n");
}/*记录完后显示通讯录已满*/
break;
case'2':j=1;/*打印所有记录*/
while(getch()!=0x1b&&j<=i)Data_Show(j++);/*声明打印数据函数*/
if(j>i)printf("\n\tThesystemisend\n");/*显示记录末尾*/
break;
case'3':/*删除通讯录中的记录*/
if(i<1)
{printf("\n\tnorecord\n");/*显示无记录*/
break;
}
printf("\n\tpleaseinputthenumberyouwanttodelect:");
scanf("%d",&k);
printf("\tsucceed!\n");
for(j=k;j<i;j++)/*将删除位置后的元素顺序前移,即后一数据复制到前一位置,循环操作*/
{strcpy(records[j].name,records[j+1].name);
records[j].sex=records[j+1].sex;
records[j].birth.year=records[j+1].birth.year;
records[j].birth.month=records[j+1].birth.month;
records[j].birth.day=records[j+1].birth.day;
strcpy(records[j].addr.post_num,records[j+1].addr.post_num);
strcpy(records[j].addr.addr,records[j+1].addr.addr);
strcpy(records[j].telephone,records[j+1].telephone);
}
i--;/*元素总数减1*/
break;
case'4':/*通讯录搜索功能*/
printf("\n\tPleaseinputthename:");/*输入名字*/
scanf("%s",search_name);/*获得名字到指针型字符串变量*/
for(j=1;j<=i;j++)
{
if(strcmp(search_name,records[j].name)==0)/*比较字符串,即查看是否与记录中名字
相同*/
{Data_Show(j);
printf("\n");/*搜索成功,打印记录结束循环*/
break;
}
}
if(j>i)/*搜索失败*/
printf("\n\tNoRecord");/*显示无此记录*/
break;
case'5':
printf("\n\tInsertNo:");/*录入插入位置*/
scanf("%d",&k);
for(j=k+1;j<i;j++)/*将插入位置后的元素顺序后移,即将其复制到后一位置,循环操作*/
{strcpy(records[j].name,records[j-1].name);
records[j].sex=records[j-1].sex;
records[j].birth.year=records[j-1].birth.year;
records[j].birth.month=records[j-1].birth.month;
records[j].birth.day=records[j-1].birth.day;
strcpy(records[j].addr.post_num,records[j-1].addr.post_num);
strcpy(records[j].addr.addr,records[j-1].addr.addr);
strcpy(records[j].telephone,records[j-1].telephone);
}
Data_Input(k);/*声明增加数据函数*/
i++;/*将记录数目加一*/
break;
case'6':Data_Save();
printf("\n");/*声明保存函数*/
exit(0);break;/*保存后退出*/
case'7':printf("\n\tsaveornot?:(y/n)");
ch=getch();/*获得输入字符*/
if(ch=='y')Data_Save();
fclose(fp);/*关闭record.txt文件*/
exit(0);/*退出程序*/
default:printf("Pleasechoose1-4\n");/*输入的如果不是数字1-4,让其重新输入*/
}
}
while(1);/*每次都从第一个功能开始,循环操作*/
}
请采纳答案,支持我一下。
标签:管理系统,通讯,来自