c++课程设计电话薄管理文档格式.docx
《c++课程设计电话薄管理文档格式.docx》由会员分享,可在线阅读,更多相关《c++课程设计电话薄管理文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
我设计的管理项目主要包括以下几个:
1.添加联系人纪录
2.显示电话簿内容
3.根据姓名查询电话簿数据
4.根据姓名删除电话簿数据
5.根据姓名修改电话簿数据
6.智能查找电话簿数据
7.帮助
0.退出系统
主要功能都不在主函数里,而是用了类的知识在。
我这里按照书上提示的定义了三个类,一个电话簿记录类,一个链表类,一个节点类。
主要的类,程序中有一个选择函数,可以通过这个函数来实现各种功能。
注意:
在修改电话簿数据时,首先询问是只修改电话号码还是只修改姓名,如果只修改电话号码,则找到该结点后将新的电话号码更新即可;
如果需要修改姓名,就需要先删除原结点,然后建立新结点,输入新的姓名、电话、将这个结点插入到链表中,因为电话簿是按姓名顺序排列的。
(4)如何设计修改功能的函数
基本思路:
查找目标---建立新信息---插入新信息---删除原记录。
首先根据姓名查找用户的方法找到需要修改的目标,然后建立一个新结点输入修改的内容,此时新信息储存在新结点中,再将新结点插入到链表中并将查找到的需要修改的结点删除。
使用了查找函数、增加函数、删除函数这三个函数的思路。
三程序调试分析
在程序的调试过程中我遇到了种种困难,首先是出现的各种errors,一出现就是好多,我还要一个一个去找,鉴于程序中三个类的函数太多,查找起来十分不便。
最难搞的就是链表的内容,一不小心就出现各种错误。
考虑不周全,没有想到空链表,还有各结点处的数据处理,很是头疼。
当然还有开始没考虑到的确认删除函数,询问是否继续函数等,在学姐同学的帮助下,终于调试正确!
四程序调试(截图版)
五总结
编这个程序真是耗费了我相当多的人力财力与物力,最先选的就是这题,后来觉得这题太难,真心不会,就决定换一题。
然后我又想不能挑太简单的,觉得至少是中等难度,希望通过编写程序更多地提高自己。
于是选了解方程的那个题,周日整天对着电脑越改越错,越改errors越多,我真不知道该怎么办了。
最后决定还是认真做电话薄管理。
通过我的不懈努力,现在终于完成,我感到深深的自豪与激动,还有一定得感谢一下在此次编程中帮助我的人。
这次VC++程序设计让我对知识进行了一次总结和巩固,而通过这次做课程设计,也使我明白了实践的重要性,我现在也很愿意做一些实践活动,来提高自己的能力。
这次做课程我真的受益非浅,我以后会多参与这种活动来锻炼自己的。
链表部分我会一如既往好好努力,请看我的作业。
六附录
源程序:
#include<
iostream.h>
conio.h>
//conio.h是Console(键盘和屏幕)输出输入函数的头文件,con--Console,
fstream.h>
iomanip.h>
string.h>
stdlib.h>
charpause;
classCTelRecord//电话簿记录类
{
private:
chardate[20];
chartime[20];
charszName[20];
//电话簿的数据:
姓名和电话号码
charszNumber[20];
charszTName[20];
public:
CTelRecord();
//缺省构造函数
CTelRecord(char*name,char*number,char*,char*,char*);
//构造函数
voidSetRecord(char*name,char*number,char*,char*D,char*T);
//输入数据函数
voidSetDate_Time(char*dd,char*tt){strcpy(date,dd);
strcpy(time,tt);
}
char*GetLName(){returnszName;
char*GetFName(){returnszTName;
char*GetNumber(){returnszNumber;
char*GetDate(){returndate;
}//增加时间的显示及存储
char*GetTime(){returntime;
}//显示时间
intCompare(CTelRecord&
);
//比较函数,比较姓名
voidShow();
//打印数据函数
voidModify(char*number);
//修改电话号码
intLookChar(char*szName);
//根据首字母查找匹配的姓名
};
classCNode//定义节点类
CTelRecord*pData;
//用于指向数据类的指针
CNode*pNext;
//指向链表下一个节点的指针
CNode(){pData=newCTelRecord;
pNext=0;
}//节点构造函数
CNode(CTelRecordctelrecord,CNodenode){pData=&
ctelrecord,pNext=&
node;
}//构造函数
CNode(CNode&
node);
//用于拷贝的构造函数
~CNode(){};
voidInputData(CTelRecord*pdata){pData=pdata;
}//数据录入函数
voidShowNode(){pData->
Show();
}//结点显示函数
CTelRecord*GetData(){returnpData;
}//获得结点信息函数
CNode*GetpNext(){CNode*p=pNext;
returnp;
}//获得下一个结点
friendclassCList;
//定义链表类为友员类
CNode*current_ptr=NULL;
//全程变量,用于指明当前在链表中的位置
classCList//定义链表类
CNode*pHead;
//链表头节点指针
CList(CNode*node=NULL){pHead=node;
}//构造函数
~CList(){DeleteList();
}//析构函数
voidSetpHead(CNode*node){pHead=node;
}//重置链表头函数
voidAddNode(CNode*pnode);
//在首部添加节点
voidDeleteNode(CNode*);
//删除结点函数
CNode*LookUp(CTelRecord&
//按照姓氏智能查询函数(新增函数用以完成设计要求(4))
voidShowList();
//显示链表函数
voidDeleteList();
//删除链表函数
CNode*GetListHead(){returnpHead;
}//获得链表头部函数
CNode*GetListEnd();
//获得链表尾部函数
CNode*GetListNextNode(CNode*);
//获得链表中指定结点的下个结点函数
voidInsert(CNode*pnode);
//排序插入函数
intload_list_from_file();
//从文件载入数据函数
voiddelete_record();
//删除记录函数
intverify_delete();
//确认删除的函数
voidwrite_list_to_file();
//把信息写入文件的函数
voidhandle_choice(intchoice);
//选择处理函数
voidhelp_me();
//帮助函数
CTelRecord:
:
CTelRecord()
strcpy(date,"
date"
strcpy(time,"
time"
strcpy(szName,"
姓氏"
strcpy(szTName,"
名字"
strcpy(szNumber,"
电话号码"
CTelRecord(char*lastname,char*firstname,char*number,char*DD,char*TT)
{
strcpy(date,DD);
strcpy(time,TT);
strcpy(szName,lastname);
strcpy(szNumber,number);
strcpy(szTName,firstname);
voidCTelRecord:
SetRecord(char*lastname,char*firstname,char*number,char*DD,char*TT)
intCTelRecord:
Compare(CTelRecord&
ctelrecord)
if(strcmp(ctelrecord.szName,szName)==0||strcmp(ctelrecord.szTName,szTName)==0)
return0;
elsereturn1;
Show()
charname[40];
strcpy(name,szName);
strcat(name,szTName);
cout<
<
setw(40)<
name<
setw(20)<
szNumber<
date<
setw(10)<
time<
'
\n'
;
Modify(char*number)
LookChar(char