1、计算机科学与应用系课程设计设计并实现简单的通讯录计算机科学与应用系程序类课程设计设计报告书题 目: 设计并实现简单的通讯录 指导教师: 姓 名: 学 号: 日 期: 2012年5月27日 计算机科学与应用系 2011-2012学年第二学期1、 需求分析 设计简单通讯录,对人员的姓名和电话号码进行存储,文件保存,和进行不同的操作,有增加、删除、查询、显示等,对人员进行管理。输入部分,根据程序运行的目录提示,选择要进行的操作,18是对通讯录的操作,0是退出系统。程序执行具体步骤时,会根据所选内容,调用不同的执行函数,然后根据,不同函数的提示,进行具体操作。每执行了不同函数,按任意键继续,系统会自动
2、进行清屏处理,再进行选择操作,便于操作。想退出系统时,可以选择0,便可退出系统。二、 系统主要功能1.增加记录2.删除一条记录3.显示所有记录4.按姓名查找并显示一条记录5.按号码查找并显示一条记录6.按姓名查找并修改一条记录7.从文件中添加数据到库表中8.将库表中的数据写入文件1.退出系统3、 流程图程序流程图如下图所示: 4、 数据结构和类设计为了设计并实现简单的通讯录,要求使用数组实现,设计了数组元素的类型,数据元素类型即Node,封装了姓名和号码以及对其操作的函数;数组这个类即array,封装了node即Node1000,和计算数据元素个数的计数变量len,以及对其操作的各个函数。其中
3、的函数都为接口函数,要实现具体的功能,在主函数中还要要点用具体的自定义函数。1.数据元素类型即Node程序大概代码如下(附有解释):class Nodeprivate: char name10,number20; /分别存储姓名和号码 public:Node(char *p=,char *q=) / 构造函数 strcpy(name,p); strcpy(number,p); char *getname() /得到姓名 return name; char *getnumber() /得到号码 return number; void setname(char *p) / 建立姓名 strcpy(
4、name,p); void setnumber(char *p) / 建立号码 strcpy(number,p); void display() / 显示信息 coutsetw(6)namesetw(15)numberendl; friend class array; /友元函数;typedef Node node1000; /新定义Node为node10002保存个人信息的类array程序关键代码如下(附有解释):class arrayprivate: node Info;public: int len; /标记信息个数 array(int l=0):len(l) /初始化 void add
5、(char *p=,char *q=) ; /添加人员 char *getname(int i); /返回指定人的名字地址 char *getnumber(int i); /返回指定人的姓名地址 void setname(int i,char *p); /修改成员姓名 void setnumber(int i,char *p); /修改成员号码 int locatename(char *p) ; /按姓名定位 int locatenumber(char *p) ; /按号码定位 void delate(int i) ; /删除成员 void showone(int i) ; /显示指定人信息
6、void showall() ; /显示所有人信息;要将array类声明成为Node类的友元类,因为在array类中有Node类型的成员,需要声明才能才能调用Node类中的函数。在初始化时要将len为零,因为那时没有存储数据,len是标记存储数据个数的。其中int locatename(char *p) ;int locatenumber(char *p) ;这两个定位函数对于信息的查找、修改和删除至关重要,在查找时,需要对存储信息的数组进行遍历,返回要查找信息的编号,来确定信息的位置,然后利用 函数void showone(int i) 显示指定人的姓名和号码的信息;用函数 void del
7、ate(int i) 删除指定的成员;用void setname(int i,char *p)和void setnumber(int i,char *p)函数对指定人进行信息的修改。其中在将输入的信息进行文件保存时,因为个人的名字和号码为私有成员,不能直接访问,就需要接口函数char *getname(int i) ;char *getnumber(int i);得到个人信息,才能进行存储。void showall() 函数是将存储的所有信息输出。以上功能的实现,也离不开类Node中定义的函数,因为在实现类array中的函数功能时,利用了类Node中对应的函数。如: char *getname
8、()和char*name(int i),char *getnumber()和char*getnumber(int i);void setname(char *p)和void setname(int i,char *p),void setnumber(char *p)和void setnumber(int i,char *p)等等5主要调用函数代码5.1、选择函数为了选择方便构造了选择函数。程序代码如下:int menu_select() /选择函数 char *m9=1.增加记录, 2.删除一条记录, 3.显示所有记录, 4.按姓名查找并显示一条记录, 5.按号码查找并显示一条记录, 6.按姓
9、名查找并修改一条记录, 7.从文件中添加数据到库表中, 8.将库表中的数据写入文件, 0.退出系统; int i; char c; do system(cls); / / 清屏 方便操作 coutnn=欢迎使用通讯录管理系统=nn; for(i=0;i9;i+) coutmiendl; coutn=n; coutc; while(c8); return(c-0); /因为返回值为int型5.2、增加记录函数增加记录函数Add有点用了array中的add()接口函数。具体代码如下:void Add(array &list)/ 1.增加记录 char p10,q20; int n,m=0; cou
10、tn; cout请输入:n 姓名 号码n ; for(m;mpq; list.add(p,q); cout添加成功!n;5.3、删除一条记录函数 此函数有调用了array类中的delate()接口函数。具体程序代码如下:void Del(array &list) /2.删除一条记录 int i; char p10; coutp; i=list.locatename(p); if(i!=-1) list.delate(i); cout删除成功!endl; 5.4、按姓名查找并显示一条记录函数此函数又调用了类array中的接口函数locatename()函数和showone()函数。具体程序代码如
11、下:void locnameshow(array &list) /4.按姓名查找并显示一条记录 int i; char p10; coutp; i=list.locatename(p); if(i!=-1) list.showone(i); 5.5、按号码查找并显示一条记录函数此函数又调用了类array中的接口函数locatenumber()函数和showone()函数。具体程序代码如下:void locnumbershow(array &list)/5.按号码查找并显示一条记录 int i; char p20; coutp; i=list.locatenumber(p); if(i!=-1)
12、 list.showone(i); 5.6、.按姓名查找并修改一条记录此函数调用了类array中的接口函数locatename()函数和setname()函数和setnumber()。具体程序代码如下:void modify(array &list)/6.按姓名查找并修改一条记录 int i,t; char p10; coutp; i=list.locatename(p); if(i!=-1) coutt; if(t=1) coutp; list.setname(i,p); cout修改姓名成功!; else if(t=2) coutp; list.setnumber(i,p); cout修改
13、姓名成功!; else cout选择错误!重新操作n; 5.7、从文件中添加数据到库表函数此函数是为了从文件中读取保存的信息。具体代码如下:void readfile(array &list)/7.从文件中添加数据到库表中 char fname20; coutfname; ifstream inf(fname,ios:in|ios:binary); if(!inf) cerropen errorj; t=list.len; for(i=0;inamenumber; list.setname(t+i,name); list.setnumber(t+i,number); list.len=list
14、.len+j; cout添加成功!n; inf.close(); cin.get();5.8、库表中的数据写入文件函数此函数是为了将输入的信息存入文件。具体程序代码如下:void writefile(array &list)/8.将库表中的数据写入文件 int i; char fname20; coutfname; ofstream outf(fname,ios:out|ios:binary); if(!outf) cout不能打开fname文件!endl; return; outflist.lenendl; for(i=0;ilist.len;i+) outfsetw(8)list.getn
15、ame(i)setw(15)list.getnumber(i)endl; cout添加成功; outf.close(); cin.get();6、 系统运行结果样例头文件:#include#include#include#include#includeusing namespace std;主函数如下:int main() array book; for(;) switch(menu_select() case 1: Add(book); system(pause); break; case 2: Del(book); system(pause); break; case 3: book.sh
16、owall(); system(pause); break; case 4: locnameshow(book); system(pause); break; case 5: locnumbershow(book); system(pause); break; case 6: modify(book); system(pause); break; case 7: readfile(book); system(pause); break; case 8: writefile(book); system(pause); break; case 0: exit(1); return 1;程序截屏如下:又再次运行程序:7、 结语大一下学的C+,现在无论是自己编写实现些简单函数体,还是参考相关资料上的稍大点的函数结构,都有点模糊了,甚至有时会弄不懂这个函数到底什么作用。这次课程实践,又让我温习了用起来相当灵活的C+,对c+的封装、继承、多态有了更好地了解,同时也得到了应用,锻炼了自己的动手能力,实际独立处理些问题的能力。但在具体操作中,有很多的细节问题,需要自己认真把握。指导老师评语: 成绩: 签名:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1