通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
通讯录管理系统
目录
一、设计题目2
二、设计目的2
三、设计分析2
四、具体功能实现3
五、详细设计5
六、总结7
附录9
一、设计题目
通讯录管理系统的设计与实现
二、设计目的
为了满足通讯录的要求,通过计算机技术给人们带来便利。
通过此系统可对通讯录信息进行管理和维护操作。
实现了通讯录的几乎所有功能,包括存取、显示、删除记录、查询记录等功能,以及对信息的修改和保存。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的处理用户使用过程中可能出现的异常情况。
三、设计分析
1.系统功能模块图:
图1系统功能模块图
(1)添加:
可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
(2)显示:
可以以表格形式输出所有通讯录里的记录。
(3)删除:
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。
(4)查询:
可以选择用姓名、电话、地址三种方式查询。
(5)修改:
输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。
(6)保存:
输入文件名(带后缀名)后,即可将通讯录信息保存到文件。
运行所需环境:
win7及以下各版本windows,visualC++6.0。
2.系统功能需求分析:
主要包含一下多种功能:
(1)添加:
添加通讯录记录
(2)显示:
显示通讯录记录
(3)删除:
删除通讯录记录
(4)查询:
查询通讯录记录
(5)修改:
修改通讯录记录
(6)保存:
将信息保存到文件
本系统为通讯录管理系统,可由用户自由添加,删除和修改信息,还可以将通讯录信息导出到文本文档,极大的方便了用户的使用。
四、具体功能实现
1.添加:
添加通讯录记录2.显示:
显示通讯录记录
图2添加通讯录记录图3显示通讯录记录
3.删除:
删除通讯录记录4.查询:
查询通讯录记录
先选择查询方式,以姓名查询方式
图4删除通讯录记录图5查询通讯录记录
5.修改:
修改通讯录记录
图6修改通讯录记录
五、详细设计
测试:
1.删除界面:
图7删除界面
2.查询界面:
以姓名查询方式为例:
图8姓名查询
3.修改界面:
修改后,通讯录里的显示记录:
4.保存界面:
图9修改后界面图10保存界面
通讯录.txt文件截图:
图11通讯录文件
2、问题思考与调试:
(1)当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。
因此,向别人请教后,在一些地方加入了system("pause");这个语言,用来对某项操作完成后进行暂停。
(2)现在这个程序的界面个人感觉很清爽。
但在最初,每次进行一项操作,运行窗口里的内容会一直保留着,感觉很杂乱,如下图20(添加后,进行显示操作):
图12内容保留窗口
之后,我去网上寻求解决办法,知道可以使用system("cls");这一语句可以解决这个问题,最后,修改成功。
六、总结
这次程序课程设计是对我们一学期以来的检验,考察了我们的编程能力。
自己动手,自己发现和解决问题。
我发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得自己对指针、链表掌握的不是太好,并且觉得这个不一定要用链表,于是改变了编程思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。
还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,可以借助网络的力量,了解和掌握更多的知识,这样我们才能写出更好的C程序。
附录
#include//输入输出函数
#include//动态存储分配函数
#include//使用字符串函数时包含的头文件
typedefstruct
{
charname[10];/*姓名*/
charadds[20];/*地址*/
charpostcoat[20];/*邮政编码*/
charnum[15];/*电话号码*/
}Person;
Personpe[80];
intmenu_select()
{
charc;
do{
system("cls");
printf("\t\t************************************\n");
printf("\t\t***@_@通讯录@_@***\n");
printf("\t\t************************************\n");
printf("\t\t*******0┌───────┐*******\n");
printf("\t\t*****4│1.添加记录│计*****\n");
printf("\t\t***电1│2.显示记录│算***\n");
printf("\t\t*算1│3.删除记录│机刘*\n");
printf("\t\t*八4│4.查询记录│科锐*\n");
printf("\t\t***班0│5.修改记录│学***\n");
printf("\t\t*****8│6.保存记录│技*****\n");
printf("\t\t******1│0.退出程序│术******\n");
printf("\t\t*******1└───────┘*******\n");
printf("\t\t************************************\n");
printf("\t\t请您选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
intInput(Personper[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t地址:
");
scanf("\t%s",per[n+i].adds);
printf("\t邮政编码:
");
scanf("\t%s",per[n+i].postcoat);
printf("\t电话号码:
");
scanf("\t%s",per[n+i].num);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("姓名地址邮政编码电话号码\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-8s%-15s%-13s%-15s\n",per[i-1].name,per[i-1].adds,per[i-1].postcoat,per[i-1].num);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
intDelete_a_record(Personper[],intn)
{
chars[20];
inti=0,j;
printf("\t请输入想删除记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return(n);
}
for(j=i;j{
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].postcoat,per[j+1].postcoat);
strcpy(per[j].num,per[j+1].num);
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
voidQuery_a_record(Personper[],intn)
{
intm;
printf("\t\n请选择查询方式:
\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名│\n");
printf("\t│2------地址│\n");
printf("\t│3------邮编│\n");
printf("\t│4------电话│\n");
printf("\t│5------返回│\n");
printf("\t└──────┘\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
if(m==1)
{
chars[20];
inti=0;
printf("\t请输入想查询的姓名:
");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcoat);
printf("\t电话号码:
%s\n",per[i].num);
};
if(m==2)
{
chars[20];
inti=0;
printf("\t请输入想查询的地址:
");
scanf("\t%s",s);
while(strcmp(per[i].adds,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcoat);
printf("\t电话号码:
%s\n",per[i].num);
};
if(m==3)
{
chars[20];
inti=0;
printf("\t请输入想查询的邮编:
");
scanf("\t%s",s);
while(strcmp(per[i].postcoat,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcoat);
printf("\t电话号码:
%s\n",per[i].num);
};
if(m==4)
{
chars[20];
inti=0;
printf("\t请输入想查询的电话:
");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcoat);
printf("\t电话号码:
%s\n",per[i].num);
};
}
voidChange(Personper[],intn)
{
chars[20];
inti=0;
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t姓名:
");
scanf("\t%s",per[i].name);
printf("\t地址:
");
scanf("\t%s",per[i].adds);
printf("\t邮政编码:
");
scanf("\t%s",per[i].postcoat);
printf("\t电话号码:
");
scanf("\t%s",per[i].num);
printf("\t修改成功!
");
}
voidWritetoText(Personper[],intn)
{
inti=0;
FILE*fp;/*定义文件指针*/
charfilename[20];/*定义文件名*/
printf("\t保存到文件\n");/*输入文件名*/
printf("\t请输入所保存的文件名:
");
scanf("\t%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\t无法打开文件\n");
system("pause");
return;
}
fprintf(fp,"******************************************************************************************\n");
fprintf(fp,"*******_*通讯录*_*******\n");
fprintf(fp,"******************************************************************************************\n");
fprintf(fp,"****姓名地址邮政编码电话号码****\n");
fprintf(fp,"------------------------------------------------------------------------------------------\n");
while(i{
fprintf(fp,"****%-6s\t%-20s\t%-20s\t%-13s\n",per[i].name,per[i].adds,per[i].postcoat,per[i].num);
i++;
}
fprintf(fp,"**--------------------------------------------------------------------------------------**\n");
fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
fclose(fp);/*关闭文件*/
printf("保存成功!
\n");
}
voidmain()/*主函数*/
{
intn=0;
for(;;)
{
switch(menu_select())
{
case1:
printf("\n\t添加记录到通讯录\n");/*添加记录*/
n=Input(pe,n);
break;
case2:
printf("\n\t\t\t通讯录记录表\n");/*显示记录*/
Display(pe,n);
break;
case3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);/*删除记录*/
printf("\t");
system("pause");
break;
case4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(pe,n);/*查找记录*/
printf("\t");
system("pause");
break;
case5:
printf("\n\t修改通讯录中的记录\n");
Change(pe,n);/*修改数据*/
printf("\t");
system("pause");
break;
case6:
printf("\n\t保存功能\n");
WritetoText(pe,n);/*保存数据*/
printf("\t");
system("pause");
break;
case0:
printf("\n\t\t@_@谢谢使用,886!
\n");/*结束程序*/
printf("\n\t\t");
system("pause");
exit(0);
}
}
}