通讯录管理课程设计报告.docx
《通讯录管理课程设计报告.docx》由会员分享,可在线阅读,更多相关《通讯录管理课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
通讯录管理课程设计报告
湖南涉外经济学院
课程设计报告
课程名称:
面向对象程序设计课程设计
报告题目:
通讯录管理
学生姓名:
蒋行伍田方成刘倩
所在学院:
信息科学与工程学院
专业班级:
计应1301
指导教师:
2014年6月10日
课程设计任务书
报告题目
C++语言程序设计课程设计—通讯录管理
完成时间
学生姓名
蒋行
伍田
刘倩
方成
专业班级
计应1301
指导教师
职称
总体设计要求和技术要点
编写一个简单的通讯录管理程序。
通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
程序应提供的基本管理功能有:
1)添加:
即增加一个人的记录到通信录中
2)显示:
即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)存储:
即将通讯录信息保存在一个文件中。
4)装入:
即将文件中的信息读入程序。
5)查询:
可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)修改:
可修改一个人的除姓名外其它信息。
工作内容及时间进度安排
设计第一周;分配每个人需要写的模块各自完成
第二周;伍田,方成综合代码并改错
第三周:
蒋行,刘倩排版,写报告
课程设计成果
1.与设计内容对应的软件程序
2.课程设计总结报告
摘要
在《面向对象程序设计》课程理论与实验教学的基础上,根据软件工程的方法与流程,在相对集中的实训教学时间内,通过一个功能较完整的小型应用系统,复习与深入掌握面向对象的程序设计思想与技术方法。
同时,作为整个实践教学体系一部分,系统培养学生采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。
本课题要设计的是简单的通讯录管理程序。
通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
程序提供了通信录的基本管理功能。
包括添加、显示、存储、装入、查询和修改等功能。
关键词:
类;C++;通讯录;结构体
一、概述…………………………………………………………………………1
二、方案设计………………………………………………………………2
1.类设计……………………………………………………………………2
2.特殊设计……………………………………………………………………2
三、系统整体设计及详细设计………………………………………………………2
1.整体设计……………………………………………………………2
2.详细设计……………………………………………………………3
四、系统测试…………………………………………………………6
五、结论与心得………………………………………………………………………8
六、参考文献……………………………………………………………………10
七、程序代码……………………………………………………………………11
一、概述
编写一个简单的通讯录管理程序。
通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
程序应提供的以下基本管理功能有:
1)添加:
即增加一个人的记录到通信录中
2)显示:
即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)存储:
即将通讯录信息保存在一个文件中。
4)装入:
即将文件中的信息读入程序。
5)查询:
可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)修改:
可修改一个人的除姓名外其它信息。
二、方案设计
1.类设计
程序可用一个单向链表来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个类来实现,作为链表的值指针指向这些类对象,通过链表的遍历可以操作这些数据。
首先,本程序中设计如下的结构体存储通信录信息。
该结构体重包括了姓名、地址、电话号码和邮政编码等。
typedefstructTeleNode
{
charname[20];/*姓名*/
charaddress[50];/*地址*/
charphone[20];/*电话号码*/
charcode[20];/*邮政编码*/
structTeleNode*next;
}TeleNode;
基于该结构体,定义了如下通信录类。
该类中包括了指向结构体的头指针head。
函数InitTeleBook()的功能是初始化head;函数isNameExist的功能是判断名字是否已存在结构体中,如果存在则返回1,否则返回0;函数addTeleBook()的功能是添加通讯录信息;函数findByName()的功能是根据姓名查找某人的相关信息;函数printTeleBook()的功能是在屏幕上显示所有通信录中的人员信息,可以分屏显示;函数writeToFile()的功能是将通讯录信息保存在一个文件中;函数loadFromFile()的功能是将文件中的信息读入程序;函数updateTeleBook()的功能是修改一个人的除姓名外其它信息。
classTeleBook{
private:
TeleNode*head;
public:
TeleBook(){head=NULL;}
voidInitTeleBook();
intisNameExist(charname[20]);
voidaddTeleBook();
voidfindByName();
voidprintTeleBook();
voidwriteToFile();
voidloadFromFile();
voidupdateTeleBook();
};
2.特殊设计
本程序为了加快数据定位查找的速度,采用常用优先的方法对链表的各个节点进行排序,即一旦操作了一个人员的数据,他的数据就将被调用到链表的链首。
这样经过有限次操作,经常查阅的人员的信息就将排在链表的前端。
虽然不能说链首的节点一定是最常用的,但常用的节点一定会排在较靠前的部分,链表查找时所要走的平均距离一定较短。
对于人员重名的情况,本程序会检测到将要添加的人名是否重复,并将提示用户重新输入新的人名。
三、系统整体框架及详细设计
1.总体框架
系统的整体框架如图1所示。
图1系统总体框架
2.详细设计
添加通讯录信息的代码如下所示,主要通cin及cout完成数据的输入及提示。
TeleNode*tmp;
tmp=(TeleNode*)new(TeleNode);
tmp->next=NULL;
cout<<"请输入姓名:
";
cin>>tmp->name;
while(isNameExist(tmp->name)){
cout<<"该用户名已存在,请输入别的名称以区分:
";
cin>>tmp->name;
}
cout<<"请输入地址:
";
cin>>tmp->address;
cout<<"请输入电话号码:
";
cin>>tmp->phone;
cout<<"请输入邮政编码:
";
cin>>tmp->code;
tmp->next=head->next;
head->next=tmp;
cout<<"添加成功!
!
\n";
显示通讯录功能的实现主要通过遍历链表来实现,主要代码如下所示。
while(cur){
(10);
cout<name;
(20);
cout<address;
(15);
cout<phone;
(10);
cout<code;
cout<cur=cur->next;
if(flag%15==0){
getch();
}
flag++;
}
文件的存储和读出主要是通过istream和ostream来完成,具体代码如下所示。
voidTeleBook:
:
writeToFile(){
ofstreamfile;
TeleNode*tmp;
("",0x02);
C++程序设计》.北京:
清华大学出版社,
2、吴乃陵、况迎辉着.《C++程序设计》.北京:
高等教育出版社,
程序代码
#include
#include
#include
#include<>
usingnamespacestd;
typedefstructTeleNode/*标记为telebook*/
{
charname[20];/*姓名*/
charaddress[50];/*电话号码*/
charphone[20];/*省份*/
charcode[20];/*地址*/
structTeleNode*next;
}TeleNode;
classTeleBook{
private:
TeleNode*head;
public:
TeleBook(){head=NULL;}
voidInitTeleBook();
intisNameExist(charname[20]);
voidaddTeleBook();
voidfindByName();
voidprintTeleBook();
voidwriteToFile();
voidloadFromFile();
voidupdateTeleBook();
};
voidTeleBook:
:
InitTeleBook(){
this->head=(TeleNode*)new(TeleNode);
this->head->next=NULL;
}
intTeleBook:
:
isNameExist(charname[20]){
TeleNode*tmp=this->head->next;
while(tmp){
if(!
strcmp(tmp->name,name)){
return1;
}
tmp=tmp->next;
}
return0;
}
voidTeleBook:
:
addTeleBook(){
TeleNode*tmp;
tmp=(TeleNode*)new(TeleNode);
tmp->next=NULL;
cout<<"请输入姓名:
";
cin>>tmp->name;
while(isNameExist(tmp->name)){
cout<<"该用户名已存在,请输入别的名称以区分:
";
cin>>tmp->name;
}
cout<<"请输入地址:
";
cin>>tmp->address;
cout<<"请输入电话号码:
";
cin>>tmp->phone;
cout<<"请输入邮政编码:
";
cin>>tmp->code;
tmp->next=head->next;
head->next=tmp;
cout<<"添加成功!
!
\n";
}
voidTeleBook:
:
findByName(){
charname[20];
TeleNode*pre,*cur;
cout<<"请输入要查找的用户名:
";
cin>>name;
pre=this->head;
cur=this->head->next;
(10);
cout<<"姓名";
(20);
cout<<"地址";
(15);
cout<<"电话号码";
(10);
cout<<"邮政编码";
cout<while(cur){
if(!
strcmp(cur->name,name)){
(10);
cout<name;
(20);
cout<address;
(15);
cout<phone;
(10);
cout<code;
cout<pre->next=cur->next;
cur->next=head->next;
head->next=cur;
break;
}
pre=cur;
cur=cur->next;
}
}
voidTeleBook:
:
printTeleBook(){
TeleNode*cur;
intflag=1;
cur=this->head->next;
(10);
cout<<"姓名";
(20);
cout<<"地址";
(15);
cout<<"电话号码";
(10);
cout<<"邮政编码";
cout<while(cur){
(10);
cout<name;
(20);
cout<address;
(15);
cout<phone;
(10);
cout<code;
cout<cur=cur->next;
if(flag%15==0){
getch();
}
flag++;
}
}
voidTeleBook:
:
writeToFile(){
ofstreamfile;
TeleNode*tmp;
("",0x02);//打开文件,不存在则创建
if(!
file)
{
cout<<"FilecreateFailure"<return;
}
tmp=this->head->next;
while(tmp){
file<name<<""<address<<""<phone<<""<code;
tmp=tmp->next;
}
();
}
voidTeleBook:
:
loadFromFile(){
ifstreamfile;
TeleNode*tmp;
charch[100];
("",0x20);//打开文件,不存在则创建
if(!
file)
{
cout<<"FileopenFailure"<return;
}
while(file>>ch){
tmp=(TeleNode*)new(TeleNode);
strcpy(tmp->name,ch);
file>>tmp->address;
file>>tmp->phone;
file>>tmp->code;
tmp->next=this->head->next;
this->head->next=tmp;
}
();
}
voidTeleBook:
:
updateTeleBook(){
TeleNode*tmp;
charname[20];
chartmp1[50],tmp2[20],tmp3[20];
cout<<"请输入姓名:
";
cin>>name;
tmp=this->head->next;
while(tmp){
if(!
strcmp(tmp->name,name)){
cout<<"请输入新地址(输入0不修改):
";
cin>>tmp1;
if(strcmp(tmp1,"0"))
strcpy(tmp->address,tmp1);
cout<<"请输入新电话(输入0不修改):
";
cin>>tmp2;
if(strcmp(tmp2,"0"))
strcpy(tmp->phone,tmp2);
cout<<"请输入新邮编(输入0不修改):
";
cin>>tmp3;
if(strcmp(tmp3,"0"))
strcpy(tmp->code,tmp3);
cout<<"修改成功!
!
\n";
return;
}
tmp=tmp->next;
}
cout<<"该姓名不存在!
!
\n";
}
voidmain(){
TeleBookteleBook;
intselect=111;
();
while(select!
=0){
cout<<"通信录管理系统\n";
cout<<"****************************菜单*******************************\n";
cout<<"*1添加*\n";
cout<<"*2显示*\n";
cout<<"*3存储*\n";
cout<<"*4装入*\n";
cout<<"*5查询*\n";
cout<<"*6修改*\n";
cout<<"*0退出*\n";
cout<<"***************************************************************\n";
cout<<"请输入选择:
";
cin>>select;
switch(select){
case0:
return;
case1:
();
break;
case2:
();
break;
case3:
();
break;
case4:
();
break;
case5:
();
break;
case6:
();
break;
default:
break;
}
}
return;
}