C++课程设计电话本管理

  • 格式:doc
  • 大小:225.50 KB
  • 文档页数:13

明德、博学、诚智、创新

1

福建农林大学计算机与信息学院

计算机类

课程实习报告

课程名称:

实习题目:

姓 名:

系:

专 业:

年 级:

学 号:

指导教师:

职 称:

年 月 日 明德、博学、诚智、创新

2

福建农林大学计算机与信息学院计算机类

课程实习报告结果评定

评语:

成绩:

指导教师签字: 评定日期: 明德、博学、诚智、创新

3 目 录

1……………………………………………………………………………页码

1.1…………………………………………………………………………页码

2……………………………………………………………………………页码

2.1…………………………………………………………………… …页码

明德、博学、诚智、创新

4 电话本管理

1. 实习的目的和任务

二、功能描述:

这是一个电话簿管理小程序,利用文本文件储存电话簿数据,具有添加、删除、显示和查询联系人电话号码功能。在这个小型管理程序中,类与类之间通过链表将各个数据相连接,形成一个通畅的应用小程序!在程序中,对于用户需求尽可能的予以满足.

三、流程图:

按ENTER进入电话本功能界面

电话本功能界面(用户根据界面说明进行选择操作)

0

进入帮助 1添加联系人 2查找并修改 3姓名查找联系人 4首字母近似查找 5显示全部记录 6删除记录

用户

根据帮助程序 根据提示用户新建联系人姓名和电话号码 输入联系人姓名,查找修改 输入姓名查找 输入首字母匹配查找 显示电话薄全部数据 逐一删除联系人数据,首先输入联系人姓名 7退出电话簿程序并保存电话簿数据 明德、博学、诚智、创新

5

四、类与对象结构描述,核心程序代码(需要有相应的注释):

1.程序中所定义的类

(1)电话簿记录类

class CTelRecord

{

private:

int nYear,nMonth,nDay,nHour,nMinute,nSecond; //时间单元

char szName[20]; //电话簿数据:姓名和电话号码

char Last[20];

char szNumber[20];

public:

CTelRecord(){} //构造函数

CTelRecord(char *name,char *number);

void SetRecord(char *name,char *last,char *number); //输出时间

int Compare(char *name); //根据姓名查找

void SetName(char *name){strcpy(szName,name);}

void SetNum(char *num){strcpy(szNumber,num);}

void SetLast(char *last){strcpy(Last,last);}

char *GetName(void){return szName;} //需通过函数访问的私有成员

char *GetLast(void){return Last;}

char *GetNum(void){return szNumber;} 用户选择0后进入帮助界面

1

怎样产生一个新纪录 2

怎样显示我的电话本 3

什么时候我有一种新版面 4

什么时候有一种新版面 5

退出帮助进入电话簿功能界面

电话本功能界面 明德、博学、诚智、创新

6 int GetYear(void){return nYear;}

int GetMonth(void){return nMonth;}

int GetDay(void){return nDay;}

int GetHour(void){return nHour;}

int GetMinute(void){return nMinute;}

int GetSecond(void){return nSecond;}

void Show(); //打印数据

void Modify(char *number); //修改结点函数

int LookChar(char *szName); //按首字母查找匹配姓名

};

(2)定义结点类

class CNode

{

private:

CTelRecord *pData; //用于指向数据类指针

CNode *pNext; //指向链表下一个结点指针

public:

CNode(){pData=0;pNext=0;} //结点构造

CNode(CNode &node); //拷贝构造函数

void ShowNode(){pData->Show();} //指向打印函数

CTelRecord *GetData(void){return pData;}

friend class CList; //定义链表类为友元类

};

(3) 定义链表类

class CList

{

CNode *head_ptr,*current_ptr;

public:

CList(){head_ptr=NULL;} //构造函数

void Help_me(); //帮助函数

void AddNode(); //在首部添加结点

void DeleteNode(); //删除结点

void ShowList(); //显示所有记录

void DeleteList(); //删除所有记录

void Search(); //查找

CNode *GetListHead(){return head_ptr;}

void Insert(CNode *new_rec_ptr); //按顺序插入新节点

CNode*Position_insertion_point(char name[20]);

void ModNum(void); //修改号码

void SearchFriends(void); //查找具有相似名的记录

void load_list_from_file(void); //保存文件

void write_list_to_file(); //把文件数据写入链表中

};

2. 新增函数说明

根据姓氏,返回其在链表中的正确位置,新节点即将插入此点。

CNode*CList::Position_insertion_point(char name[20]) 明德、博学、诚智、创新

7 {

char temp_name[20];

CNode *temp_ptr;

int tempint;

if(head_ptr->pNext!=NULL) // 如果有多于一个结点的链表,查找结点在链表中的正确位置

{

current_ptr=head_ptr;

temp_ptr=current_ptr->pNext;

strcpy(temp_name,temp_ptr->pData->GetName());

tempint=strcmp(name,temp_name); /*比较链表中的姓氏与欲插入的姓氏的大小*/

while((tempint>0)&¤t_ptr->pNext!=NULL) /*若欲插入的姓氏大于链表中当前结点的姓氏,继续向下查找*/

{

current_ptr=temp_ptr;

if(current_ptr->pNext!=NULL)

{

temp_ptr=current_ptr->pNext;

strcpy(temp_name,temp_ptr->pData->GetName());

tempint=strcmp(name,temp_name);

}

}

}

else //如果只有一个头结点,返回头结点的位置,新结点插在头节点后

current_ptr=head_ptr;

return(current_ptr);

}

3.电话簿记录在链表的读取与写入

(1)从链表读取数据

void CList::load_list_from_file(void) //从数据文件FRIENDS.DAT中读取数据,重建链表处理函数

{

CNode *new_rec_ptr; //CTelRecord *Phonebook;

ifstream infile;

int end_loop=0;

infile.open("FRIENDS.DAT",ios::in);

if(infile) //打开文件正确

{

do

{

new_rec_ptr=new CNode;

new_rec_ptr->pData=new CTelRecord;

if(new_rec_ptr!=NULL)

{

char name[20],last[20],number[20];