计算机科学与应用系课程设计设计并实现简单的通讯录Word下载.docx
- 文档编号:2949554
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:23
- 大小:222.65KB
计算机科学与应用系课程设计设计并实现简单的通讯录Word下载.docx
《计算机科学与应用系课程设计设计并实现简单的通讯录Word下载.docx》由会员分享,可在线阅读,更多相关《计算机科学与应用系课程设计设计并实现简单的通讯录Word下载.docx(23页珍藏版)》请在冰点文库上搜索。
为了设计并实现简单的通讯录,要求使用数组实现,设计了数组元素的类型,数据元素类型即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)//建立姓名
voidsetnumber(char*p)//建立号码
strcpy(number,p);
voiddisplay()//显示信息
cout<
<
setw(6)<
name<
setw(15)<
number<
endl;
friendclassarray;
//友元函数
};
typedefNodenode[1000];
//新定义Node为node[1000]
2保存个人信息的类array
程序关键代码如下(附有解释):
classarray
{
private:
nodeInfo;
public:
intlen;
//标记信息个数
array(intl=0):
len(l){}//初始化
voidadd(char*p="
);
//添加人员
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"
);
//清屏方便操作
\n\n======欢迎使用通讯录管理系统======\n\n"
;
for(i=0;
i<
9;
i++)
m[i]<
\n==================================\n"
请选择(1-8,0):
cin>
>
c;
}while(c<
'
0'
||c>
8'
return(c-'
//因为返回值为int型
}
5.2、增加记录函数
增加记录函数Add有点用了array中的add()接口函数。
具体代码如下:
voidAdd(array&
list)//1.增加记录
{
charp[10],q[20];
intn,m=0;
请输入要添加的人数:
n;
请输入:
\n姓名号码\n"
for(m;
m<
m++)
p>
q;
list.add(p,q);
添加成功!
\n"
5.3、删除一条记录函数
此函数有调用了array类中的delate()接口函数。
具体程序代码如下:
voidDel(array&
list)//2.删除一条记录
charp[10];
请输入要删除人的姓名:
p;
i=list.locatename(p);
if(i!
=-1)
{list.delate(i);
删除成功!
5.4、按姓名查找并显示一条记录函数
此函数又调用了类array中的接口函数locatename()函数和showone()函数。
voidlocnameshow(array&
list)//4.按姓名查找并显示一条记录
{inti;
请输入要查找人的姓名:
list.showone(i);
5.5、按号码查找并显示一条记录函数
此函数又调用了类array中的接口函数locatenumber()函数和showone()函数。
voidlocnumbershow(array&
list)//5.按号码查找并显示一条记录
charp[20];
请输入要查找号码:
i=list.locatenumber(p);
5.6、.按姓名查找并修改一条记录
此函数调用了类array中的接口函数locatename()函数和setname()函数和setnumber()。
voidmodify(array&
list)//6.按姓名查找并修改一条记录
inti,t;
请输入要查修改人的姓名:
cout<
请选择要修改的内容:
1.姓名2.号码\n"
t;
if(t==1)
{cout<
请输入修改后的姓名:
cin>
list.setname(i,p);
修改姓名成功!
}
else
if(t==2)
请输入修改后的号码:
list.setnumber(i,p);
cout<
选择错误!
重新操作\n"
5.7、从文件中添加数据到库表函数
此函数是为了从文件中读取保存的信息。
voidreadfile(array&
list)//7.从文件中添加数据到库表中
charfname[20];
请输入要读取的文件名:
fname;
ifstreaminf(fname,ios:
:
in|ios:
binary);
if(!
inf)
cerr<
openerror"
inti,j,t;
inf>
j;
t=list.len;
inf>
name>
number;
list.setname(t+i,name);
list.setnumber(t+i,number);
list.len=list.len+j;
添加成功!
inf.close();
cin.get();
5.8、库表中的数据写入文件函数
此函数是为了将输入的信息存入文件。
voidwritefile(array&
list)//8.将库表中的数据写入文件
请输入要写入的文件名:
ofstreamoutf(fname,ios:
out|ios:
outf)
{cout<
不能打开"
fname<
文件!
return;
outf<
list.len<
list.len;
outf<
setw(8)<
list.getname(i)<
list.getnumber(i)<
添加成功"
outf.close();
6、系统运行结果样例
头文件:
#include<
iostream>
string>
iomanip>
fstream>
stdlib.h>
usingnamespacestd;
主函数如下:
intmain()
arraybook;
for(;
)
{
switch(menu_select())
{
case1:
Add(book);
system("
pause"
break;
case2:
Del(book);
case3:
book.showall();
case4:
locnameshow(book);
system("
case5:
locnumbershow(book);
case6:
modify(book);
case7:
readfile(book);
case8:
writefile(book);
case0:
exit
(1);
return1;
程序截屏如下:
又再次运行程序:
7、结语
大一下学的C++,现在无论是自己编写实现些简单函数体,还是参考相关资料上的稍大点的函数结构,都有点模糊了,甚至有时会弄不懂这个函数到底什么作用。
这次课程实践,又让我温习了用起来相当灵活的C++,对c++的封装、继承、多态有了更好地了解,同时也得到了应用,锻炼了自己的动手能力,实际独立处理些问题的能力。
但在具体操作中,有很多的细节问题,需要自己认真把握。
指导老师评语:
成绩:
签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机科学 应用 课程设计 设计 实现 简单 通讯录