C程序设计通讯录管理系统.docx
《C程序设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《C程序设计通讯录管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
C程序设计通讯录管理系统
1系统设计目标及意义、功能介绍·································3
2系统的详细设计思路·································3
3系统运行效果图·································11
4系统设计、开发过程中的问题·································13
5课程设计心得体会·································13
6附录源代码及简要说明·································13
一、系统设计目标及意义、功能介绍
(1)系统设计的目标及意义
通讯录管理系统的建立是为了有效节省同学,朋友,客户间日常交流的投资(指时间,精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。
本通讯录管理系统是一个非常通用的管理系统,运用VisualC++,构建MFC平台,用户可以通过图像窗口菜单进行信息录入、删除、查找,直观方便。
(2)系统设计的功能介绍
1、录入成员信息。
基本信息:
姓名、性别、出生年月日、民族等。
2、删除一个成员信息。
3、修改成员信息并保存。
4、能够按姓名对成员信息进行检索并将检索结果显示在屏幕上。
5、能够按专业对成员信息进行检索并将检索结果显示在屏幕上。
6、显示所有成员信息。
7、能够利用图形菜单的形式进行管理。
二、系统的详细设计思路
(一)系统的总体框架
(二)通讯录对象的主要属性
(三)功能分析
1、联系人管理者
(1)增加联系人:
联系人信息包括姓名、就读学校、班级、专业、家庭地址、家庭联系电话、邮编、本人联系电话这些信息。
添加时,内容不能为空。
(2)修改联系人资料:
对已存的联系人信息进行变更、修改。
正常情况下,联系人的姓名是不会发生变化的,但考虑到更名的情况还是偶有发生,因此设计为联系人所有资料都允许更改,这样可以灵活应对这些不太常见的情况。
(3)删除联系人:
对选定联系人执行删除操作,为了防止误删除,给使用者一个反悔的机会,在执行删除前要询问使用者是否真的要删除,在得到确认后执行删除操作。
2、联系人信息查询与显示
通讯录使用频率最高的功能就是查询联系人的信息。
查询可以查询某个学院、某个专业、某个班级下所有的联系人。
并且提供了按姓名和按学号查询的功能,并且同名的人都可以显示。
联系人显示窗口示姓名、就读学校、班级、专业、家庭地址、家庭联系电话、邮编、本人联系电话这些信息。
3、UML类图
People
#name[]:
char
#sex[]:
char
#nation[]:
char
#telephone[]:
char
#year:
int
#month:
int
#day:
int
+People()
+~People()
+in():
void
lianxiren
-num[5]:
char
-youbian:
int
-shengao:
int
-tizhong:
int
-qqhao:
int
+add():
void
+delet():
void
+display():
void
+select():
void;
+alter():
void
+face():
int
4,函数设计
(1)增加联系人的函数
voidlianxiren:
:
add()
{cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入性别[请用'm'表示男,用'f'表示女]:
";
chars;cin>>s;
while((s!
='f')&&(s!
='m'))
{cout<<"输入错误,请重新输入!
:
";
cin>>s;}
if(s=='f')strcpy(sex,"女");
elsestrcpy(sex,"男");
cout<<"请输入民族:
";
cin>>nation;
cout<<"请输入出生日期:
年:
";
cin>>;
cout<<"月(0~12):
";cin>>;
while(<1)||>12)){cout<<"输入错误,请重新输入!
月:
";
cin>>;}
cout<<"日(0~31):
";cin>>;
while(<1)||>31)){cout<<"输入错误,请重新输入!
日:
";
cin>>;}
cout<<"请输入联系方式:
手机:
";cin>>telephone;
cout<<"请输入编号(0~9999):
";cin>>num;
cout<<"输入邮编:
";
cin>>youbian;
cout<<"输入身高:
";
cin>>shengao;
cout<<"输入体重:
";
cin>>tizhong;
cout<<"输入QQ号:
";
cin>>qqhao;
ofstreamfout("lianxiren",ios:
:
app);
if(!
fout)
{
cout<"<}
else{fout<:
left)<fout<(2)<<<<"."<(2)<<<<"";
fout<fout<();}
}
(2)显示所有联系人的函数
voidlianxiren:
:
display()
{
ifstreamfin("lianxiren",ios:
:
in);
if(!
fin)
{
cout<"<system("pause");
}
boolflag=true;
stringrecord;chara[100];(a,100);
while(getline(fin,record))
{
if(flag)
{cout<:
left)<cout<cout<cout<cout<flag=false;}
if(flag)
{
cout<}
else
{
cout<}
}
(3)删除联系人的函数
voidlianxiren:
:
delet()
{
ofstreamout1("1",ios:
:
out);
ifstreamin1("lianxiren",ios:
:
in);
if(!
out1||!
in1)
{
cout<"<}
stringa;
cout<";
cin>>a;
boolflag=true;
stringstr,s;in1>>s;inti=0;
while(in1>>num>>name)
{
getline(in1,str);
if((a==name)||(a==num))
{i++;
if(i=1)
{cout<"<cout<:
left)<cout<cout<cout<cout<:
left)<}
else{cout<:
left)<flag=false;
continue;
}
out1<:
left)<}
();
();
if(flag)
{
cout<"<}
else
{
cout<<"确定要删除吗(Y/N)(不区分大小写):
";chara;
cin>>a;
if((a=='y')||(a=='Y'))
{ofstreamout("lianxiren",ios:
:
out);
ifstreamin("1",ios:
:
in);
if(!
out||!
in)
{
cout<"<}
while(getline(in,str))
{
out<}
();
();
cout<"<}
}
(4)修改联系人的函数
{ofstreamoutData("1",ios:
:
out);
ifstreaminData("lianxiren",ios:
:
in);
if(!
outData||!
inData)
{
cout<"<system("pause");
return;
}
stringsign;
cout<";
cin>>sign;
stringstr1;
boolflag=true;
stringstr;
while(inData>>num>>name)
{
getline(inData,str);
if((sign==name)||(sign==num))
{
cout<"<cout<cout<:
left)<cout<cout<cout<cout<:
left)<cout<"<cout<<"请输入姓名:
";cin>>name;
cout<<"请输入性别(请用'm'代表'男',用'f'代表'女'):
";
chars;cin>>s;
while((s!
='f')&&(s!
='m'))
{cout<<"输入错误,请重新输入!
:
";cin>>s;}
if(s=='f')strcpy(sex,"女");elsestrcpy(sex,"男");
cout<<"请输入民族:
";cin>>nation;
cout<<"请输入出生日期:
年:
";cin>>;
cout<<"月:
";cin>>;
while(<1)||>12)){cout<<"输入错误,请重新输入!
月:
";cin>>;}
cout<<"日:
";cin>>;
while(<1)||>31)){cout<<"输入错误,请重新输入!
月:
";cin>>;}
cout<<"请输入联系方式:
手机:
";cin>>telephone;
cout<<"请输入编号:
";cin>>num;
cout<<"输入邮编:
";
cin>>youbian;
cout<<"输入身高:
";
cin>>shengao;
cout<<"输入体重:
";
cin>>tizhong;
cout<<"输入QQ号:
";
cin>>qqhao;
ofstreamfout("lianxiren",ios:
:
app);
if(!
fout)
{
cout<"<system("pause");
}
else{fout<:
left)<fout<(2)<<<<"."<(2)<<<<"";
fout<fout<();}
flag=false;
break;
}
outData<:
left)<}
if(flag)
{
cout<"<}
else
{
while(getline(inData,str))
{
outData<}
();
();
ofstreamout("lianxiren",ios:
:
out);
ifstreamin("1",ios:
:
in);
if(!
out||!
in)
{
cout<"<system("pause");
return;
}
while(getline(in,str))
{
out<}
();
();
cout<"<}
}
三,系统运行效果图
1,主界面
2,添加联系人信息
3删除联系人信息
4显示所有联系人
5,修改信息
6,查询联系人信息
7,关闭系统
四,系统开发过程中遇到的问题
在初步完成该程序时,我发现程序有一个严重的漏洞,当系统保存的学生信息中有同名或者编号相同的同学时,这时若要执行查询或者删除学生信息时,只能查询到或删除第一个符合条件的同学,这就导致了程序的错误。
后来我发现只需要将程序中一些“break”换成“continue”便可以解决这个问题,也就使程序在读到第一个符合条件的同学信息时不结束读取,而是继续读入,这样就可以将同名或编号相同的学生全部查询到,不会漏查。
五,课程设计心得体会
1.在编写程序的过程中,我将课本中的大部分知识又都熟悉了一遍,使我对课本又有了更深的记忆,同时又弄懂了一些以前不太明白的地方。
2.在编程过程中,我还明白了做事要有耐心,决不能心急,要一步一步地来,不清楚的地方一定要查书,用到什么就查什么,比如在用到输入、输出函数时,不知道整型、实型、字符型、字符串用什么格式,就要认真地去看一下教材,切不可自我放弃。
3.我还明白了只要我们肯用心,就没有什么是困难的。
或许我们在编程时会遇到各种各样的困难,但只我们用心思考,我们总能从学过的知识中找到解决这些问题的方法,这些
方法或许是书上没有的,或许是没人用过的。
当这些问题得到解决时,我发现自己真的很开心!
六,附录源代码及简要说明
#include
#include
#include
#include
#include
usingnamespacestd;
.......................People基类............................................................
classPeople
{protected:
intyear;
intmonth;
intday;
charname[8];
charsex[5];
charnation[6];
charadress[6];
chartelephone[13];
public:
People(){}
~People(){}
voidin(){}
};
.............................lianxiren派生类..................................................
classlianxiren:
publicPeople
{private:
charnum[5];
intyoubian;
intshengao;
inttizhong;
intqqhao;
public:
voidadd();
voiddelet();
voiddisplay();
voidselect();
voidalter();
intface();
};
..............lianxiren类的成员函数add(),用于向系统添加联系人信息................................
voidlianxiren:
:
add()
{cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入性别[请用'm'表示男,用'f'表示女]:
";
chars;cin>>s;
while((s!
='f')&&(s!
='m'))
{cout<<"输入错误,请重新输入!
:
";
cin>>s;}
if(s=='f')strcpy(sex,"女");
elsestrcpy(sex,"男");
cout<<"请输入民族:
";
cin>>nation;
cout<<"请输入出生日期:
年:
";
cin>>year;
cout<<"月(0~12):
";cin>>month;
while((month<1)||(month>12)){
cout<<"输入错误,请重新输入!
月:
";
cin>>month;}
cout<<"日(0~31):
";cin>>day;
while((day<1)||(day>31)){
cout<<"输入错误,请重新输入!
日:
";
cin>>day;}
cout<<"请输入联系方式:
手机:
";cin>>telephone;
cout<<"请输入编号(0~9999):
";cin>>num;
cout<<"输入邮编:
";
cin>>youbian;
cout<<"输入身高:
";
cin>>shengao;
cout<<"输入体重:
";
cin>>tizhong;
cout<<"输入QQ号:
";
cin>>qqhao;
ofstreamfout("lianxiren",ios:
:
app);
if(!
fout)
{
cout<"<}
else{fout<:
left)<fout<(2)<(2)<fout<fout<();}
}
...............lianxiren类的成员函数display(),用于将系统中的联系人信息显示出来...................
voidlianxiren:
:
display()
{
ifstreamfin("lianxiren",ios:
:
in);
if(!
fin)
{
cout<"<system("pause");
}
boolflag=true;
stringrecord;
chara[100];
(a,100);
while(getline(fin,record))
{
if(flag)
{cout<:
left)<cout<cout<cout<}
cout<flag=false;
}
if(flag)
{
cout<