通讯录管理系统.docx
- 文档编号:30402682
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:33
- 大小:143.84KB
通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
通讯录管理系统
通讯录管理系统
一、要求
具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。
(1)数据包括:
人名、工作单位、电话号码和E-MAIL地址。
(2)可对记录中的姓名和电话号码进行修改。
(3)可增加和删除记录。
(4)可显示所有的保存记录。
(5)可按人名或电话号码进行查询。
[提示]
建议采用结构体数组和文件系统实现。
结构体成员包括人名、工作单位、电话号码和E-MAIL地址。
二、需求分析
根据题目的要求程序应该采用结构体数组和文件系统实现。
应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。
三、总体设计要求
根据上面的分析,可以将程序系统的设计分为如下几个模块:
输入、显示、删除、查询、、添加、修改、保存、加载和退出。
四:
详细设计
1.主函数
主函数的设计一般比较的简单,只提供输入,功能处理和输出部分的函数调用。
其中个功能模块用菜单方式选择。
菜单部分也可以写成函数。
【流程图】
【程序】
main()
{
inti;
ADDRESSadr[M];/*定义结构体数组*/
intlength;/*保存记录长度*/
clrscr();/*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{
case0:
length=enter(adr);break;/*输入记录*/
case1:
list(adr,length);break;/*显示全部记录*/
case2:
search_by_name(adr,length);break;/*按名字查找*/
case3:
search_by_tel(adr,length);break;/*按电话查找*/
case4:
length=delete(adr,length);break;/*删除记录*/
case5:
length=add(adr,length);break;/*插入记录*/
case6:
save(adr,length);break;/*保存文件*/
case7:
length=load(adr);break;/*读文件*/
case8:
length=modify(adr,length);break;/*修改记录*/
case9:
exit(0);/*如返回值为9则程序结束*/
}
}
}
adr[M]中的M为记录人数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#defineM50。
2.各功能模块的设计
通讯录的数据信息:
人名、工作单位、电话号码、E-MAIL均可以采用字符型数组;可以采用结构体的形式,把个信息作为结构的成员。
typedefstruct/*定义数据结构*/
{
charname[20];/*姓名*/
charunits[30];/*单位*/
chartele[11];/*电话*/
charemail[30]
}ADDRESS;
(1)选择函数
【流程图】
【程序】
menu_select()
{
chars[80];
intc;
gotoxy(1,25);/*将光标定为在第25行,第1列*/
printf("pressanykeyentermenu......\n");/*提示压任意键继续*/
getch();/*读入任意字符*/
clrscr();/*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf("0.Enterrecord\n");
printf("1.Listthefile\n");
printf("2.Searchbyname\n");
printf("3.Searchbytel\n");
printf("4.Deletearecord\n");
printf("5.addrecord\n");
printf("6.Savethefile\n");
printf("7.Loadthefile\n");
printf("8.Modify\n");
printf("9.Quit\n");
printf("***********************************************\n");
do{
printf("\nEnteryouchoice(0~9):
");/*提示输入选项*/
scanf("%s",s);/*输入选择项*/
c=atoi(s);/*将输入的字符串转化为整型数*/
}while(c<0||c>9);/*选择项不在0~9之间重输*/
returnc;/*返回选择项,主程序根据该数调用相应的函数*/
}
(2):
数据的输入
【流程图】
【程序】
intenter(ADDRESSt[])
{
inti,n;
char*s;
clrscr();/*清屏*/
printf("\npleaseinputnum\n");/*提示信息*/
scanf("%d",&n);/*输入记录数*/
printf("pleaseinputrecord\n");/*提示输入记录*/
printf("nameunittelephone\n");
printf("------------------------------------------------\n");
for(i=0;i { scanf("%s%s%s",t[i].name,t[i].units,t[i].tele);/*输入记录*/ printf("----------------------------------------------\n"); } returnn;/*返回记录条数*/ } (3)显示模块 显示所有记录,方便修改,查找等功能 【流程图】 【程序】 voidlist(ADDRESSt[],intn) { inti; clrscr(); printf("\n\n***************************ADDRESS***************************\n"); printf("nameunittelephone\n"); printf("------------------------------------------------\n"); for(i=0;i printf("%-20s%-30s%-11s%-20s\n",t[i].name,t[i].units,t[i].tele,t[i].email); if((i+1)%10==0)/*判断输出是否达到10条记录*/ { printf("Pressanykeycontinue...\n");/*提示信息*/ getch();/*压任意键继续*/ } printf("********************************end****************************\n"); } (4): 删除模块 【流程图】 【程序】 intdelete(ADDRESSt[],intn) { chars[20];/*要删除记录的姓名*/ intch=0; inti,j; printf("pleasedeletedname\n");/*提示信息*/ scanf("%s",s);/*输入姓名*/ i=find1(t,n,s);/*调用find1函数*/ if(i>n-1)/*如果i>n-1超过了数组的长度*/ printf("nofoundnotdeleted\n");/*显示没找到要删除的记录*/ else { print(t[i]);/*调用输出函数显示该条记录信息*/ printf("Areyousuredeleteit(1/0)\n");/*确认是否要删除*/ scanf("%d",&ch);/*输入一个整数0或1*/ if(ch==1)/*如果确认删除整数为1*/ { for(j=i+1;j {strcpy(t[j-1].name,t[j].name);/*将后一条记录的姓名拷贝到前一条*/ strcpy(t[j-1].units,t[j].units);/*将后一条记录的单位拷贝到前一条*/ strcpy(t[j-1].tele,t[j].tele);/*将后一条记录的电话拷贝到前一条*/ strcpy(t[j-1].email,t[j].email);/*将后一条记录的emial拷贝到前一条*/ } n--;/*记录数减1*/ } } returnn;/*返回记录数*/ } (5)查询模块 按照题目的要求查询可以分为姓名查询和电话号码查询 a)按姓名查找 【流程图】 【程序】 voidsearch_by_name(ADDRESSt[],intn) { chars[20];/*保存待查找姓名字符串*/ inti;/*保存查找到结点的序号*/ clrscr();/*清屏*/ printf("pleasesearchname\n"); scanf("%s",s);/*输入待查找姓名*/ i=find1(t,n,s);/*调用find函数,得到一个整数*/ if(i>n-1) printf("notfound\n"); else print(t[i]);/*找到,调用显示函数显示记录*/ } b)按电话号码查找 【程序】 voidsearch_by_tel(ADDRESSt[],intn) {chars[20];inti; clrscr(); printf("pleasesearchtele\n"); scanf("%s",s); i=find2(t,n,s); if(i>n-1) printf("notfound\n"); else print(t[i]); } (6)修改模块 【流程图】 【程序】 intmodify(ADDRESSt[],intn) {ADDRESStemp; chars[20]; inti,j; printf("pleasethename\n"); scanf("%s",s); i=find1(t,n,s); if(i>n-1) printf("notfound\n"); else { print(t[i]); printf("pleaseenterthemassages: nameunitstelephoneemail"); scanf("%s%s%s%s",temp.name,temp.units,temp.tele,temp.email); strcpy(t[i].name,temp.name); strcpy(t[i].units,temp.units); strcpy(t[i].tele,temp.tele); strcpy(t[i].email,temp.email); } returnn; } (7)添加模块 【流程图】 【程序】 intadd(ADDRESSt[],intn)/*插入函数,参数为结构体数组和记录数*/ { ADDRESStemp;/*新插入记录信息*/ inti,j; chars[20];/*确定插入在哪个记录之前*/ printf("pleaseinputrecord\n"); printf("************************************************\n"); printf("nameunittelephone\n"); printf("--------------------------------------------------\n"); scanf("%s%s%s",temp.name,temp.units,temp.tele);/*输入插入信息*/ printf("------------------------------------------------\n"); printf("pleaseinputlocatename\n"); scanf("%s",s);/*输入插入位置的姓名*/ i=find1(t,n,s);/*调用find,确定插入位置*/ for(j=n-1;j>=i;j--)/*从最后一个结点开始向后移动一条*/ { strcpy(t[j+1].name,t[j].name);/*当前记录的姓名拷贝到后一条*/ strcpy(t[j+1].units,t[j].units);/*当前记录的单位拷贝到后一条*/ strcpy(t[j+1].tele,t[j].tele);/*当前记录的电话拷贝到后一条*/ strcpy(t[j+1].email,t[j].email);/*当前记录的email拷贝到后一条*/ } strcpy(t[i].name,temp.name);/*将新插入记录的姓名拷贝到第i个位置*/ strcpy(t[i].units,temp.units);/*将新插入记录的单位拷贝到第i个位置*/ strcpy(t[i].tele,temp.tele);/*将新插入记录的电话拷贝到第i个位置*/ strcpy(t[i].email,temp.email);/*将新插入记录的email拷贝到第i个位置*/ n++;/*记录数加1*/ returnn;/*返回记录数*/ } (8)保存模块 将所有记录的信息保存到record.txt中。 【程序】 voidsave(ADDRESSt[],intn) { inti; FILE*fp;/*指向文件的指针*/ if((fp=fopen("record.txt","wb"))==NULL)/*打开文件,并判断打开是否正常*/ { printf("cannotopenfile\n");/*没打开*/ exit (1);/*退出*/ } printf("\nSavingfile\n");/*输出提示信息*/ fprintf(fp,"%d",n);/*将记录数写入文件*/ fprintf(fp,"\r\n");/*将换行符号写入文件*/ for(i=0;i { fprintf(fp,"%-20s%-30s%-11s%-30",t[i].name,t[i].units,t[i].tele,t[i].email);/*格式写入记录*/ fprintf(fp,"\r\n");/*将换行符号写入文件*/ } fclose(fp);/*关闭文件*/ printf("****savesuccess***\n");/*显示保存成功*/ } (9)加载模块 【程序】 intload(ADDRESSt[]) { inti,n; FILE*fp;/*指向文件的指针*/ if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/ { printf("cannotopenfile\n");/*不能打开*/ exit (1);/*退出*/ } fscanf(fp,"%d",&n);/*读入记录数*/ for(i=0;i fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele);/*按格式读入记录*/ fclose(fp);/*关闭文件*/ printf("Youhavesuccessreaddatafromfile\n");/*显示保存成功*/ returnn;/*返回记录数*/ } 3.公共函数 下面是在每个功能模块中都有可能用到的一些公共函数。 (1)显示指定的一条记录函数print(ADDRESStemp) 【程序】 voidprint(ADDRESStemp) { clrscr(); printf("\n\n********************************************\n"); printf("nameunittelephone\n"); printf("------------------------------------------------\n"); printf("%-20s%-30s%-11s%-30s\n",temp.name,temp.units,temp.tele,temp.email); printf("**********************end***********************\n"); } (2)查找姓名函数find1(ADDRESSt[],intn,char*s) 【程序】 intfind1(ADDRESSt[],intn,char*s) {inti; for(i=0;i {if(strcmp(s,t[i].name)==0)/*记录中的姓名和待比较的姓名是否相等*/ returni;/*相等,则返回该记录的下标号,程序提前结结束*/ } returni;/*返回i值*/ } (3)查找电话号码函数find1(ADDRESSt[],intn,char*s) 【程序】 intfind2(ADDRESSt[],intn,char*s) {inti; for(i=0;i { if(strcmp(s,t[i].email)==0) returni; } returni; } 五、上机操作 要输入的信息 nameaddrssphnumE-mail 第一组: aaawuhan132*********** 第二组: bbbchengdu156*********** 第三组: ycxbeijing027*********** 主菜单如下: (1)输入模块 (2)显示模块 (3)删除模块: A删除没有信息abc B删除已经有的信息aaa: 显示信息并要求确认 (4)查询模块: A按姓名查找 输入已有姓名aaa,显示记录 输入没有记录ppp B按电话进行查找 输入156,显示记录 (5)修改模块: 输入要修改的姓名,显示原有信息,在输入更新信息 (6)添加 (7)保存模块 (8)加载模块 七: 通讯录管理系统源程序 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"ctype.h" #defineM50 typedefstruct { charname[20]; charunits[30]; chartele[11]; charemail[30]; }ADDRESS; intenter(ADDRESSt[]); voidlist(ADDRESSt[],intn); voidsearch_by_name(ADDRESSt[],intn); voidsearch_by_tel(ADDRESSt[],intn); voidprint1(ADDRESStemp); voidprint2(ADDRESStemp); intdelete(ADDRESSt[],intn); intadd(ADDRESSt[],intn); voidsave(ADDRESSt[],intn); intload(ADDRESSt[]); voidprint(ADDRESStemp); intmenu_select(); main() { inti;ADDRESSadr[M];intlength; clrscr(); for(;;) { switch(menu_select()) { case0: length=enter(adr);break; case1: list(adr,length);break; case2: search_by_name(adr,length);break; case3: search_by_tel(adr,length);break; case4: length=delete(adr,length);break; case5: length=add(adr,length);break; case6: save(adr,length);break; case7: length=load(adr);break; case8: length=modify(adr,length);break; case9: exit(0); } } } menu_select() { chars[80];intc; gotoxy(1,25); printf("pressanykeyentermenu......\n"); getch();clrscr();gotoxy(1,1); printf("********************MENU*********************\n\n"); printf("0.Enterrecord\n"); printf("1.Listthefile\n"); printf("2.Searchbyname\n"); printf("3.Searchbytel\n"); printf("4.Deletearecord\n"); printf("5.addrecord\n"); printf("6.Savethefile\n"); printf("7.Loadthef
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)