- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电话簿管理序设计报告
南京理工大学
Vc++课程设计报告
姓名
学号
日期
电话簿管理
一.程序功能简介
一个电话簿管理小程序。利用文本文件存储电话簿数据,具有添加、删除、显示、查询等的功能。
课程设计要求
1)、将电话簿数据和相应的函数封装在类中,改写程序使之结构化。
2)、增加修改记录的功能,能选择修改用户的姓名、号码。
3)、增加录入时间的显示及存储。
4)、增加缺省的查询方式,即查询时只输入姓名的首字母,所有符合该项条件的电话资料,均会被显示。
二、程序结构分析
1、程序结构
(程序结构图见上)
正如程序结构图所显示的,本电话簿程序采用菜单选项的形式,由用户输入功能项,系统由选择调用相关的函数,从而实现不同的应用。
按照程序要求进行的添加或修改。
将电话簿数据封装在类中,使之结构化 。本程序定义了CNode类和CList类,分别用做结点和链表的数据存储。具体说明见下面。
增加修改功能。在修改这一功能中,程序要求添加修改功能:可以对姓名或号码进行修改操作。因此,加入了两个子菜单:修改姓名或号码,分别由不同的语句来执行
增加录入时间的显示及存储。这个功能由localtime()函数在结点的构造函数中执行,实现了添加数据时把系统时间也一并存储。
新增了智能查找功能,使具姓名有相同首字母的人的名字、号码等信息全部输出。这项功能与按照姓名查找方式类似,在查找时比较的是姓氏的首字母。
二 程序设计。
CNode结点类和CList链表类。
1)、CNode类
class CNode
{
char lastname[20];
char firstname[20];
char number[20];
int year,month,day,hour,minute;
CNode *next;
public:
CNode(char lname[20],char fname[20],char num[20]);
void Show();
friend class CList;
};
其中的姓氏,名字,号码由用户在添加时输入,而时间则是由系统调用函数localtime()自行添加。(关于时间的获得程序,将在下面进行说明。)
Cnode类中的next成员是该类的一个指针,存放下一个节点的地址,用来指向下一个节点系统因此而可以访问整个链表。
2)CList类
class CList
{
CNode *phead;
public:
CList()
{
phead=0;
};
~CList() {};
void load_record_from_file();//从文件中读取记录
void add_record_to_file();//从文件中写入记录
CNode *position_insertion_point(char lname[20]);//根据姓氏找到其在链表中的位置,并返回其指针
void insert_node(CNode *);//插入新的记录
void add_record();//增加记录
void display_list();//显示所有的记录
void delete_record();//删除指定记录
void search_by_name();//按名字查找
void change_record();//修改记录
void search_by_lastname();//按姓氏查找
void search_by_first_character();
void help_me();//帮助系统
void handle_choise(int);//处理选择项
void deletelist();//删除所有记录
};
CList类中有大量的成员函数,由该类的对象调用,实现不同的操作。(函数的说明将在下面展现。)
链表
1)、本电话簿管理程序的数据顺序存放,是通过链表来实现的。
链表的每一个结点都由new运算符在程序的运行过程中动态生成,这样就避免类了内存的浪费。但要注意的是,用new运算符申请的空间,系统不能进行自动释放,需要用delete运算符,其格式是:
Delete 指针名;
在clist类的析构函数中,就使用了该运算符:
void CList ::deletelist()
{
CNode *ptr1,*ptr2;
ptr1=phead;
ptr2=ptr1;
while(ptr1)
{
ptr2=ptr1;
delete ptr1;
文档评论(0)