计算机科学与应用系课程设计设计并实现简单的通讯录.docx
- 文档编号:1579045
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:23
- 大小:222.65KB
计算机科学与应用系课程设计设计并实现简单的通讯录.docx
《计算机科学与应用系课程设计设计并实现简单的通讯录.docx》由会员分享,可在线阅读,更多相关《计算机科学与应用系课程设计设计并实现简单的通讯录.docx(23页珍藏版)》请在冰点文库上搜索。
计算机科学与应用系课程设计设计并实现简单的通讯录
《计算机科学与应用系程序类课程设计》
设计报告书
题目:
设计并实现简单的通讯录
指导教师:
姓名:
学号:
日期:
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++的封装、继承、多态有了更好地了解,同时也得到了应用,锻炼了自己的动手能力,实际独立处理些问题的能力。 但在具体操作中,有很多的细节问题,需要自己认真把握。 指导老师评语: 成绩: 签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机科学 应用 课程设计 设计 实现 简单 通讯录