个人通讯管理系统Word下载.docx
《个人通讯管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《个人通讯管理系统Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
查询:
查询通讯录记录
修改:
修改通讯录记录
保存:
将信息保存到文件
个人任务:
常杰:
负责程序的总体设计、编写程序,以及在vc6.0中运行程序,达到目标是:
程序能够能正常地运行。
李鑫:
负责检查运行中程序出错的位置,以及提出专业的解释和专业的解决办法。
达到目标是:
程序出错后,能够专业的解决问题。
二.总体设计
系统功能模块图:
可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
可以以表格形式输出所有通讯录里的记录
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
可以选择用姓名、电话、地址三种方式查询
输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
,输入文件名(带后缀名)后,即可将通讯录信息保存到文件
运行所需环境:
win7及以下各版本windows,visual
C++6.0。
三.详细设计
(1).通讯录:
typedefstruct
{
charscore;
/*编号*/
charname[10];
/*姓名*/
charnum[15];
/*号码*/
charemail[20];
/*邮箱*/
charage[8];
/*年龄*/
charadds[20];
/*住址*/
}Person;
voidmain()/*主函数*/
{
intn=0;
for(;
;
)
switch(menu_select())
{
case1:
printf("
\n\t添加记录到通讯录\n"
);
/*添加记录*/
n=Input(pe,n);
break;
case2:
\n\t\t\t通讯录记录表\n"
/*显示记录*/
Display(pe,n);
case3:
\n\t从通讯录中删除记录\n"
n=Delete_a_record(pe,n);
/*删除记录*/
\t"
system("
pause"
case4:
\n\t在通讯录中查找记录\n"
Query_a_record(pe,n);
/*查找记录*/
case5:
\n\t修改通讯录中的记录\n"
Change(pe,n);
/*修改数据*/
case6:
\n\t保存功能\n"
WritetoText(pe,n);
/*保存数据*/
case0:
\n\t\t谢谢使用,再见!
\n"
/*结束程序*/
\n\t\t"
exit(0);
}
}
四、程序运行结果与分析
1.进入系统后,出现子菜单,用户可根据需要进行操作。
2.在管理系统中选择“1”,回车运行即可执行“添加记录”操作,进入界面输入联系人的“编号、姓名、年龄、电话号码、通讯地址、电子邮箱”等信息。
如果继续添加,输入“Y”回车运行,停止添加,输入“N”回车运行。
3.完成添加联系人,返回主界面,输入“2”回车运行即可执行查看所有联系人的操作,操作执行后界面显示如下:
4.在主界面选择“3”,回车运行即可执行“删除联系人”的操作,在执行此操作中,需输入要删除的联系人的姓名,回车运行后即可完成删除联系人的操作。
如图所示
5.在主界面选择“4”,回车运行即可进入执行“查询联系人”的操作,查询方式有三种:
姓名查询、电话号码查询、地址查询。
任选一种即可查询该联系人的信息,如图所示:
6.若想修改联系人的信息,在主界面选择“5”,回车运行即可进入执行“修改联系人的信息”的操作。
执行该操作时需输入该联系人的“姓名”,回车运行后即可修改该联系人的个人信息。
如图所示:
7.完成以上联系人的建立,需要对联系人进行保存,在主界面选择“6”,回车运行即可进入执行“保存联系人”的操作,在执行中需要输入“所保存的文件名”,输入后回车运行即可完成联系人的保存。
8.完成以上的所有操作后,只有正确的退出程序,才能把本次所有操作保存下来,在主界面输入“0”后,回车运行即可退出程序,退出后会弹出“谢谢使用,再见!
”。
源程序分析:
#include<
stdio.h>
stdlib.h>
string.h>
Personpe[80];
intmenu_select()
charc;
do{
cls"
\t\t*****通讯录*****\n"
\t\t┌───────┐\n"
\t\t│1.添加记录│\n"
\t\t│2.显示记录│\n"
\t\t│3.删除记录│\n"
\t\t│4.查询记录│\n"
\t\t│5.修改记录│\n"
\t\t│6.保存记录│\n"
\t\t│0.退出程序│\n"
\t\t└───────┘\n"
\t\t请您选择(0-6):
"
c=getchar();
}while(c<
'
0'
||c>
6'
return(c-'
intInput(Personper[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='
n'
&
sign!
N'
\t编号:
scanf("
\t%d"
&
per[n+i].score);
\t姓名:
\t%s"
per[n+i].name);
\t年龄:
per[n+i].age);
\t电话号码:
per[n+i].num);
\t通讯住址:
per[n+i].adds);
\t电子邮箱:
per[n+i].email);
gets(x);
\n\t是否继续添加?
(Y/N)"
\t%c"
sign);
i++;
return(n+i);
}
voidDisplay(Personper[],intn)
inti;
printf("
----------------------------------------------------------------------\n"
/*格式*/
编号姓名年龄电话号码通讯地址电子邮箱\n"
for(i=1;
i<
n+1;
i++)
%-5d%-8s%-6s%-13s%-15s%-15s\n"
per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
if(i>
1&
i%10==0)
{
printf("
\t-----------------------------------\n"
system("
system("
intDelete_a_record(Personper[],intn)
chars[20];
inti=0,j;
\t请输入想删除记录中的名字:
scanf("
%s"
s);
while(strcmp(per[i].name,s)!
=0&
n)i++;
if(i==n)
{
\t通讯录中没有此人!
return(n);
for(j=i;
j<
n-1;
j++)
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].age,per[j+1].age);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].email,per[j+1].email);
per[j].score=per[j+1].score;
\t\t\t已经成功删除!
return(n-1);
voidQuery_a_record(Personper[],intn)
intm;
\t\n请选择查询方式:
\t┌──────┐\n"
\t│1------姓名│\n"
\t│2------电话│\n"
\t│3------地址│\n"
\t│4------返回│\n"
\t└──────┘\n"
请选择:
%d"
m);
while(m!
=1&
m!
=2&
=3&
=4)
输入错误,请重新选择:
}
if(m==1)
chars[20];
inti=0;
\t请输入想查询的姓名:
while(strcmp(per[i].name,s)!
if(i==n)
return;
\t此人编号:
%d\n"
per[i].score);
\t此人年龄:
%s\n"
per[i].age);
per[i].num);
\t通讯地址:
per[i].adds);
per[i].email);
};
if(m==2)
\t请输入想查询的电话:
while(strcmp(per[i].num,s)!
\t此人姓名:
per[i].name);
if(m==3)
\t请输入想查询的地址:
while(strcmp(per[i].adds,s)!
}
voidChange(Personper[],intn)
\t请输入想修改的记录中的名字:
return;
per[i].score);
\t修改成功!
voidWritetoText(Personper[],intn)
FILE*fp;
/*定义文件指针*/
charfilename[20];
/*定义文件名*/
\t保存到文件\n"
/*输入文件名*/
\t请输入所保存的文件名:
filename);
if((fp=fopen(filename,"
w"
))==NULL)
\t无法打开文件\n"
fprintf(fp,"
******************************************通讯录******************************************\n"
------------------------------------------------------------------------------------------\n"
while(i<
n)
fprintf(fp,"
%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n"
per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email);
***************************************共有%d条记录****************************************\n"
n);
fclose(fp);
/*关闭文件*/
保存成功!
/*添加记录*/
/*显示记录*/
/*删除记录*/
/*查找记录*/
/*保存数据*/
/*结束程序*/
五、结论与心得
关键问题:
1、输入数据时,输错了数据的类型会造成错误提示,因此输入时需要注意。
2、一开始主界面输入非正确数字时,没有错误提示。
容易造成用户误解,陷入死循环。
如下图所示:
解决方案:
1.使用继承减少重复代码;
使用多态性统一通讯协议,使程序易于维护;
体现数据抽象和封装;
体现数据访问属性和继承属性。
2.实现说明。
能够使用构造的类层次创建和使用对象,并能实现以上各基本要求。
3.主要是运用到类和对象,还有带参数的构造函数以及析构函数以及数组来实现本程序,并在主函数对各个功能模块就行调用。
4.在输入关键词时,要注意不能输入错误信息,避免造成系统的不必要的错误。
本次程序设计由我和李鑫两人完成,具体分工如下:
我担当本次程序的总体设计、程序运行测试和分析,在设计程序的时候,遇到很多字符输入错误,以及函数调用不当,造成程序无法继续运行,通过这次的课程设计,让我们充分的感觉到了要自己设计一个程序是多么的困难,以及学好程序设计对我们计算机专业的学生来说是多么的重要。