计算机科学与应用系课程设计设计并实现简单的通讯录.docx

上传人:b****2 文档编号:12654094 上传时间:2023-04-21 格式:DOCX 页数:23 大小:222.65KB
下载 相关 举报
计算机科学与应用系课程设计设计并实现简单的通讯录.docx_第1页
第1页 / 共23页
计算机科学与应用系课程设计设计并实现简单的通讯录.docx_第2页
第2页 / 共23页
计算机科学与应用系课程设计设计并实现简单的通讯录.docx_第3页
第3页 / 共23页
计算机科学与应用系课程设计设计并实现简单的通讯录.docx_第4页
第4页 / 共23页
计算机科学与应用系课程设计设计并实现简单的通讯录.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

计算机科学与应用系课程设计设计并实现简单的通讯录.docx

《计算机科学与应用系课程设计设计并实现简单的通讯录.docx》由会员分享,可在线阅读,更多相关《计算机科学与应用系课程设计设计并实现简单的通讯录.docx(23页珍藏版)》请在冰豆网上搜索。

计算机科学与应用系课程设计设计并实现简单的通讯录.docx

计算机科学与应用系课程设计设计并实现简单的通讯录

《计算机科学与应用系程序类课程设计》

设计报告书

 

题目:

设计并实现简单的通讯录

指导教师:

姓名:

学号:

日期:

2012年5月27日

 

计算机科学与应用系2011-2012学年第二学期

1、需求分析

设计简单通讯录,对人员的姓名和电话号码进行存储,文件保存,和进行不同的操作,有增加、删除、查询、显示等,对人员进行管理。

输入部分,根据程序运行的目录提示,选择要进行的操作,1~8是对通讯录的操作,0是退出系统。

程序执行具体步骤时,会根据所选内容,调用不同的执行函数,然后根据,不同函数的提示,进行具体操作。

每执行了不同函数,按任意键继续,系统会自动进行清屏处理,再进行选择操作,便于操作。

想退出系统时,可以选择0,便可退出系统。

二、系统主要功能

1.增加记录

2.删除一条记录

3.显示所有记录

4.按姓名查找并显示一条记录

5.按号码查找并显示一条记录

6.按姓名查找并修改一条记录

7.从文件中添加数据到库表中

8.将库表中的数据写入文件

1.退出系统

3、流程图

程序流程图如下图所示:

 

4、数据结构和类设计

为了设计并实现简单的通讯录,要求使用数组实现,设计了数组元素的类型,数据元素类型即Node,封装了姓名和号码以及对其操作的函数;数组这个类即array,封装了node即Node[1000],和计算数据

元素个数的计数变量len,以及对其操作的各个函数。

其中的函数都为接口函数,要实现具体的功能,在主函数中还要要点用具体的自定义函数。

1.数据元素类型即Node

程序大概代码如下(附有解释):

classNode

{private:

charname[10],number[20];//分别存储姓名和号码

public:

Node(char*p="",char*q="")//构造函数

{

strcpy(name,p);

strcpy(number,p);

}

char*getname()//得到姓名

{

returnname;

}

char*getnumber()//得到号码

{

returnnumber;

}

voidsetname(char*p)//建立姓名

{

strcpy(name,p);

}

voidsetnumber(char*p)//建立号码

{

strcpy(number,p);

}

voiddisplay()//显示信息

{

cout<

}

friendclassarray;//友元函数

};

typedefNodenode[1000];//新定义Node为node[1000]

2保存个人信息的类array

程序关键代码如下(附有解释):

classarray

{

private:

nodeInfo;

public:

intlen;//标记信息个数

array(intl=0):

len(l){}//初始化

voidadd(char*p="",char*q="");//添加人员

char*getname(inti);//返回指定人的名字地址

char*getnumber(inti);//返回指定人的姓名地址

voidsetname(inti,char*p);//修改成员姓名

voidsetnumber(inti,char*p);//修改成员号码

intlocatename(char*p);//按姓名定位

intlocatenumber(char*p);//按号码定位

voiddelate(inti);//删除成员

voidshowone(inti);//显示指定人信息

voidshowall();//显示所有人信息

};

要将array类声明成为Node类的友元类,因为在array类中有Node类型的成员,需要声明才能才能调用Node类中的函数。

在初始化时要将len为零,因为那时没有存储数据,len是标记存储数据个数的。

其中intlocatename(char*p);intlocatenumber(char*p);这两个定位函数对于信息的查找、修改和删除至关重要,在查找时,需要对存储信息的数组进行遍历,返回要查找信息的编号,来确定信息的位置,然后利用函数voidshowone(inti)显示指定人的姓名和号码的信息;用函数voiddelate(inti)删除指定的成员;用voidsetname(inti,char*p)和voidsetnumber(inti,char*p)函数对指定人进行信息的修改。

其中在将输入的信息进行文件保存时,因为个人的名字和号码为私有成员,不能直接访问,就需要接口函数char*getname(inti);char*getnumber(inti);得到个人信息,才能进行存储。

voidshowall()函数是将存储的所有信息输出。

以上功能的实现,也离不开类Node中定义的函数,因为在实现类array中的函数功能时,利用了类Node中对应的函数。

如:

char*getname()和char*name(inti),char*getnumber()和char*getnumber(inti);voidsetname(char*p)和voidsetname(inti,char*p),voidsetnumber(char*p)和voidsetnumber(inti,char*p)等等

5.主要调用函数代码

5.1、选择函数

为了选择方便构造了选择函数。

程序代码如下:

intmenu_select()//选择函数

{

char*m[9]={"1.增加记录",

"2.删除一条记录",

"3.显示所有记录",

"4.按姓名查找并显示一条记录",

"5.按号码查找并显示一条记录",

"6.按姓名查找并修改一条记录",

"7.从文件中添加数据到库表中",

"8.将库表中的数据写入文件",

"0.退出系统"};

inti;

charc;

do{

system("cls");//清屏方便操作

cout<<"\n\n======欢迎使用通讯录管理系统======\n\n";

for(i=0;i<9;i++)

cout<

cout<<"\n==================================\n";

cout<<"请选择(1-8,0):

";

cin>>c;

}while(c<'0'||c>'8');

return(c-'0');//因为返回值为int型

}

5.2、增加记录函数

增加记录函数Add有点用了array中的add()接口函数。

具体代码如下:

voidAdd(array&list)//1.增加记录

{

charp[10],q[20];

intn,m=0;

cout<<"请输入要添加的人数:

";

cin>>n;

cout<<"请输入:

\n姓名号码\n";

for(m;m

{

cin>>p>>q;

list.add(p,q);

}

cout<<"添加成功!

\n";

}

5.3、删除一条记录函数

此函数有调用了array类中的delate()接口函数。

具体程序代码如下:

voidDel(array&list)//2.删除一条记录

{

inti;

charp[10];

cout<<"请输入要删除人的姓名:

";

cin>>p;

i=list.locatename(p);

if(i!

=-1)

{list.delate(i);

cout<<"删除成功!

"<

}

}

5.4、按姓名查找并显示一条记录函数

此函数又调用了类array中的接口函数locatename()函数和showone()函数。

具体程序代码如下:

voidlocnameshow(array&list)//4.按姓名查找并显示一条记录

{inti;

charp[10];

cout<<"请输入要查找人的姓名:

";

cin>>p;

i=list.locatename(p);

if(i!

=-1)

list.showone(i);

}

5.5、按号码查找并显示一条记录函数

此函数又调用了类array中的接口函数locatenumber()函数和showone()函数。

具体程序代码如下:

voidlocnumbershow(array&list)//5.按号码查找并显示一条记录

{

inti;

charp[20];

cout<<"请输入要查找号码:

";

cin>>p;

i=list.locatenumber(p);

if(i!

=-1)

list.showone(i);

}

5.6、.按姓名查找并修改一条记录

此函数调用了类array中的接口函数locatename()函数和setname()函数和setnumber()。

具体程序代码如下:

voidmodify(array&list)//6.按姓名查找并修改一条记录

{

inti,t;

charp[10];

cout<<"请输入要查修改人的姓名:

";

cin>>p;

i=list.locatename(p);

if(i!

=-1)

{

cout<<"请选择要修改的内容:

1.姓名2.号码\n";

cin>>t;

if(t==1)

{cout<<"请输入修改后的姓名:

";

cin>>p;

list.setname(i,p);

cout<<"修改姓名成功!

";

}

else

if(t==2)

{cout<<"请输入修改后的号码:

";

cin>>p;

list.setnumber(i,p);

cout<<"修改姓名成功!

";

}

else

cout<<"选择错误!

重新操作\n";

}

}

5.7、从文件中添加数据到库表函数

此函数是为了从文件中读取保存的信息。

具体代码如下:

voidreadfile(array&list)//7.从文件中添加数据到库表中

{

charfname[20];

cout<<"请输入要读取的文件名:

";

cin>>fname;

ifstreaminf(fname,ios:

:

in|ios:

:

binary);

if(!

inf)

cerr<<"openerror"<

inti,j,t;

charname[10],number[20];

inf>>j;

t=list.len;

for(i=0;i

{

inf>>name>>number;

list.setname(t+i,name);

list.setnumber(t+i,number);

}

list.len=list.len+j;

cout<<"添加成功!

\n";

inf.close();

cin.get();

}

5.8、库表中的数据写入文件函数

此函数是为了将输入的信息存入文件。

具体程序代码如下:

voidwritefile(array&list)//8.将库表中的数据写入文件

{

inti;

charfname[20];

cout<<"请输入要写入的文件名:

";

cin>>fname;

ofstreamoutf(fname,ios:

:

out|ios:

:

binary);

if(!

outf)

{cout<<"不能打开"<

"<

return;

}

outf<

for(i=0;i

{

outf<

}

cout<<"添加成功";

outf.close();

cin.get();

}

6、系统运行结果样例

头文件:

#include

#include

#include

#include

#include

usingnamespacestd;

主函数如下:

intmain()

{

arraybook;

for(;;)

{

switch(menu_select())

{

case1:

Add(book);

system("pause");

break;

case2:

Del(book);

system("pause");

break;

case3:

book.showall();

system("pause");

break;

case4:

locnameshow(book);

system("pause");

break;

case5:

locnumbershow(book);

system("pause");

break;

case6:

modify(book);

system("pause");

break;

case7:

readfile(book);

system("pause");

break;

case8:

writefile(book);

system("pause");

break;

case0:

exit

(1);

}

}

return1;

}

 

程序截屏如下:

又再次运行程序:

7、结语

大一下学的C++,现在无论是自己编写实现些简单函数体,还是参考相关资料上的稍大点的函数结构,都有点模糊了,甚至有时会弄不懂这个函数到底什么作用。

这次课程实践,又让我温习了用起来相当灵活的C++,对c++的封装、继承、多态有了更好地了解,同时也得到了应用,锻炼了自己的动手能力,实际独立处理些问题的能力。

但在具体操作中,有很多的细节问题,需要自己认真把握。

 

指导老师评语:

 

成绩:

签名:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1