通讯录课程设计报告

1.课设需求分析

1.1功能需求分析

1) 2) 3) 4) 5) 6)

客户信息的的录入 客户信息的查找 客户信息的删除

全部通信录信息的显示 客户信息的加载 客户信息的存储

1.2性能需求分析

1.硬件环境

普通windows操作系统计算机

2.软件环境

Vc6.0环境下运行

1.3 通讯录总体结构设计

2详细设计

3.1数据结构设计

1) 类的设计

2) 通讯录包含的类库

#include

#include #include

3) 各个变量的定义和作用

Linkman *head 头指针,用于遍历访问包含通讯录信息的链表 Int count; 用于记录联系人个数

Static bool loaded 用于表示当前联系人的信息是否来自于加载 string name 用于保存联系人信息 String tel_number 用于保存联系人号码 String address 用于保存联系人所在城市 String city 用于保存联系人当地的邮编

Linkman *next 做链表中的指针用于将多个节点连接起来

3.2成员函数的组成、功能、参数说明、相互调用关系

主函数main()

调用了page();menu(Telephone_book t); 扉页page()

用于显示个人信息,按任意键后消失。 菜单menu(Telephone_book t)

含有多个选项,可以选择。对应用户的选择,会调用相应功能的函数。

添加到链表尾部void Add_at_end(Linkman **h) 参数为链表的头指针,向此链表添加联系人信息。 添加联系人信息void add_linkman()

可以连续添加,在函数中调用void Add_at_end(Linkman **h) 函数,添加后,调用menu(Telephone_book t)可以选择跳入菜单界

查找联系人信息void find()

查找联系人信息,以联系人的名字作为查询对象,可以连续查找。 也可以调用menu(Telephone_book t)可以选择跳入菜单界面 删除联系人信息void delete_linkman()

删除联系人信息,以联系人的名字作为查询对象,可以连续删除。 也可以调用menu(Telephone_book t)可以选择跳入菜单界面 显示联系人信息void display_all_linkman()

显示所有联系人信息也可以调用menu(Telephone_book t)可以选择跳入菜单界面

加载联系人信息void laoding()

将文件中的信息加载到联系人列表中,也可以调用

menu(Telephone_book t)可以选择跳入菜单界面

存储联系人信息void storage()

首先判读联系人信息是否来自于文件的加载,是则将文件晴空,在存储,否则将信息直接添加到文件尾部。可以调用

menu(Telephone_book t)可以选择跳入菜单界面

4.测试流程

1.显示扉页

2.

按任意键,跳转到菜单界面

3.录入联系人信息

4.不在继续添加,选择查找联系人

5.输入要删除联系人的信息

6.添加新联系人,

7.存储联系人信息

8.删除联系人信息后,再从文件中加载信息

9.显示所有联系人信息

10.退出程序

11.Linkman.dat文件中保存的联系人信息

参考文献

1.谭浩强,C++程序设计,北京:清华大学出版社,2004.06

2.Stanley B.Lippman,Josee Lajoie,Barbara E.Moo著,李师贤,蒋爱军,梅晓勇,林瑛译,C++ Primer第四版,人民邮电出版社,2012.02

附录

源代码

(因为机房无法打开.dat文件,所以演示的时候全将其替换为.txt文件)

#include #include #include

using namespace std;

class Telephone_book; struct Linkman //构建联系人 { string name; string tel_number; string address; string city; string postcode; Linkman *next ; };

void page() ; //扉页名片

void menu(Telephone_book &t); //主菜单

class Telephone_book {

public: Telephone_book(Linkman *p=NULL,int cou=0): head(p),count(cou){} //构造函数 void add_linkman(); //录入联系人信息 void find(); //按姓名查找联系人 void delete_linkman(); //按姓名删除联系人 void display_all_Linkman(); //输出所有人的信息 void storage(); //存储所有联系人 void loading(); //载入联系人 ~Telephone_book(); //析构函数 private: Linkman *head; int count; static bool loaded; //判断是否加载过,不用每次都清除文件内容 void Add_at_end(Linkman **h); //可以实现递归调用,连续录入联系人信息 };

bool Telephone_book::loaded=false;

void Telephone_book::Add_at_end(Linkman **h) //将联系人信息添加到通讯录尾部

{

string choice="Y";

if(*h!=NULL)

{

cout

return ;

}

*h=new Linkman;

cout

cout

cin>>(*h)->name ;

cout

cin>>(*h)->tel_number ;

cout

cin>>(*h)->address ;

(*h)->next=NULL;

cout>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="Y")

{

add_linkman();

}

else

{

menu(*this);

}

}///////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::add_linkman() //录入联系人信息

{

Linkman *p=head;

if(head==NULL)

{

Add_at_end(&head);

}

else

{

while(p->next!=NULL)

{

p=p->next;

}

Add_at_end(&(p->next));

}

}//////////////////////////////////////////////////////////////////////////////////

void Telephone_book::find() //按姓名查找联系人

{

string choice="Y";

string nam;

while(1)

{

Linkman *p=head;

bool flage=false;

cout

cin>>nam;

if(p==NULL)

{

cout

return ;

}

else

{

while(p!=NULL)

{

if(p->name==nam)

{

coutname

couttel_number address

flage=true;

break;

}

p=p->next;

}

}

if(flage==false)

{

cout

}

cout

cin>>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="N")

{

break;

}

}

menu(*this);

}///////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::delete_linkman() //按姓名删除联系人

{

string nam;

string choice="Y";

while(1)

{

Linkman *p=head,*q=head;

bool flage=false;

cout>nam;

if(head==NULL)

{

cout

return ;

}

else

{

if(head->name ==nam)

{

head=p->next;

delete p;

flage=true;

}

else

{

p=head->next;

while(p!=NULL)

{

if(p->name==nam)

{

q->next=p->next;

delete p;

flage=true;

break;

}

q=p;

p=p->next;

}

}

}

if(flage==false)

{

cout

}

else

{

cout

}

cout

cin>>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="N")

{

break;

}

}

menu(*this);

}////////////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::display_all_Linkman() //输出所有人的信息

{

Linkman *p=head;

if(p==NULL)

{

cout

}

else

{

while(p!=NULL)

{

coutname

couttel_number

coutaddress

cout

p=p->next;

}

}

menu(*this);

}/////////////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::storage()

所有联系人

{

ofstream outfile;

if(loaded)

{

outfile.open("Linkman.dat",ios::out);

}

else

{

outfile.open("Linkman.dat",ios::out|ios::app);

}

if(!outfile)

{

cerr

exit(1);

}

Linkman *p=head;

if(p==NULL)

{

cout

}

else

{

//存储

while(p!=NULL)

{

outfilename

outfiletel_number

outfileaddress

outfile

p=p->next;

}

}

outfile.close();

cout

menu(*this);

}//////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::loading() //载入联系人

{

ifstream infile("Linkman.dat",ios::out);

Linkman *p=NULL,*q=NULL;

p=new Linkman;

head=p;

while(infile>>p->name,infile>>p->tel_number,infile>>p->address,infile) {

q=p;

p=new Linkman;

q->next=p;

}

p->next=NULL;

infile.close();

cout

loaded=true;

menu(*this);

}

////////////////////////////////////////////////////////////////////////////////////////

Telephone_book::~Telephone_book()

{

Linkman *p=head,*q=head;

while(p!=NULL)

{

q=p->next;

delete p;

p=q;

}

}////////////////////////////////////////////////////////////////////////////////////////

int main()

{

Telephone_book t;

page();

menu(t);

return 0;

}

void page() //扉页名片

{

for(int i=0;i

{

cout

}

cout

cout

cout

cout

cout

{

cout

}

cout

system("pause");

system("cls");

}

void menu(Telephone_book &t) //主菜单

{

char count=0;

for(int i=0;i

{

cout

}

cout

cout

cout

} cout>count; cout

1.课设需求分析

1.1功能需求分析

1) 2) 3) 4) 5) 6)

客户信息的的录入 客户信息的查找 客户信息的删除

全部通信录信息的显示 客户信息的加载 客户信息的存储

1.2性能需求分析

1.硬件环境

普通windows操作系统计算机

2.软件环境

Vc6.0环境下运行

1.3 通讯录总体结构设计

2详细设计

3.1数据结构设计

1) 类的设计

2) 通讯录包含的类库

#include

#include #include

3) 各个变量的定义和作用

Linkman *head 头指针,用于遍历访问包含通讯录信息的链表 Int count; 用于记录联系人个数

Static bool loaded 用于表示当前联系人的信息是否来自于加载 string name 用于保存联系人信息 String tel_number 用于保存联系人号码 String address 用于保存联系人所在城市 String city 用于保存联系人当地的邮编

Linkman *next 做链表中的指针用于将多个节点连接起来

3.2成员函数的组成、功能、参数说明、相互调用关系

主函数main()

调用了page();menu(Telephone_book t); 扉页page()

用于显示个人信息,按任意键后消失。 菜单menu(Telephone_book t)

含有多个选项,可以选择。对应用户的选择,会调用相应功能的函数。

添加到链表尾部void Add_at_end(Linkman **h) 参数为链表的头指针,向此链表添加联系人信息。 添加联系人信息void add_linkman()

可以连续添加,在函数中调用void Add_at_end(Linkman **h) 函数,添加后,调用menu(Telephone_book t)可以选择跳入菜单界

查找联系人信息void find()

查找联系人信息,以联系人的名字作为查询对象,可以连续查找。 也可以调用menu(Telephone_book t)可以选择跳入菜单界面 删除联系人信息void delete_linkman()

删除联系人信息,以联系人的名字作为查询对象,可以连续删除。 也可以调用menu(Telephone_book t)可以选择跳入菜单界面 显示联系人信息void display_all_linkman()

显示所有联系人信息也可以调用menu(Telephone_book t)可以选择跳入菜单界面

加载联系人信息void laoding()

将文件中的信息加载到联系人列表中,也可以调用

menu(Telephone_book t)可以选择跳入菜单界面

存储联系人信息void storage()

首先判读联系人信息是否来自于文件的加载,是则将文件晴空,在存储,否则将信息直接添加到文件尾部。可以调用

menu(Telephone_book t)可以选择跳入菜单界面

4.测试流程

1.显示扉页

2.

按任意键,跳转到菜单界面

3.录入联系人信息

4.不在继续添加,选择查找联系人

5.输入要删除联系人的信息

6.添加新联系人,

7.存储联系人信息

8.删除联系人信息后,再从文件中加载信息

9.显示所有联系人信息

10.退出程序

11.Linkman.dat文件中保存的联系人信息

参考文献

1.谭浩强,C++程序设计,北京:清华大学出版社,2004.06

2.Stanley B.Lippman,Josee Lajoie,Barbara E.Moo著,李师贤,蒋爱军,梅晓勇,林瑛译,C++ Primer第四版,人民邮电出版社,2012.02

附录

源代码

(因为机房无法打开.dat文件,所以演示的时候全将其替换为.txt文件)

#include #include #include

using namespace std;

class Telephone_book; struct Linkman //构建联系人 { string name; string tel_number; string address; string city; string postcode; Linkman *next ; };

void page() ; //扉页名片

void menu(Telephone_book &t); //主菜单

class Telephone_book {

public: Telephone_book(Linkman *p=NULL,int cou=0): head(p),count(cou){} //构造函数 void add_linkman(); //录入联系人信息 void find(); //按姓名查找联系人 void delete_linkman(); //按姓名删除联系人 void display_all_Linkman(); //输出所有人的信息 void storage(); //存储所有联系人 void loading(); //载入联系人 ~Telephone_book(); //析构函数 private: Linkman *head; int count; static bool loaded; //判断是否加载过,不用每次都清除文件内容 void Add_at_end(Linkman **h); //可以实现递归调用,连续录入联系人信息 };

bool Telephone_book::loaded=false;

void Telephone_book::Add_at_end(Linkman **h) //将联系人信息添加到通讯录尾部

{

string choice="Y";

if(*h!=NULL)

{

cout

return ;

}

*h=new Linkman;

cout

cout

cin>>(*h)->name ;

cout

cin>>(*h)->tel_number ;

cout

cin>>(*h)->address ;

(*h)->next=NULL;

cout>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="Y")

{

add_linkman();

}

else

{

menu(*this);

}

}///////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::add_linkman() //录入联系人信息

{

Linkman *p=head;

if(head==NULL)

{

Add_at_end(&head);

}

else

{

while(p->next!=NULL)

{

p=p->next;

}

Add_at_end(&(p->next));

}

}//////////////////////////////////////////////////////////////////////////////////

void Telephone_book::find() //按姓名查找联系人

{

string choice="Y";

string nam;

while(1)

{

Linkman *p=head;

bool flage=false;

cout

cin>>nam;

if(p==NULL)

{

cout

return ;

}

else

{

while(p!=NULL)

{

if(p->name==nam)

{

coutname

couttel_number address

flage=true;

break;

}

p=p->next;

}

}

if(flage==false)

{

cout

}

cout

cin>>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="N")

{

break;

}

}

menu(*this);

}///////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::delete_linkman() //按姓名删除联系人

{

string nam;

string choice="Y";

while(1)

{

Linkman *p=head,*q=head;

bool flage=false;

cout>nam;

if(head==NULL)

{

cout

return ;

}

else

{

if(head->name ==nam)

{

head=p->next;

delete p;

flage=true;

}

else

{

p=head->next;

while(p!=NULL)

{

if(p->name==nam)

{

q->next=p->next;

delete p;

flage=true;

break;

}

q=p;

p=p->next;

}

}

}

if(flage==false)

{

cout

}

else

{

cout

}

cout

cin>>choice;

while(choice!="N"&&choice!="Y")

{

cout

cin>>choice;

}

if(choice=="N")

{

break;

}

}

menu(*this);

}////////////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::display_all_Linkman() //输出所有人的信息

{

Linkman *p=head;

if(p==NULL)

{

cout

}

else

{

while(p!=NULL)

{

coutname

couttel_number

coutaddress

cout

p=p->next;

}

}

menu(*this);

}/////////////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::storage()

所有联系人

{

ofstream outfile;

if(loaded)

{

outfile.open("Linkman.dat",ios::out);

}

else

{

outfile.open("Linkman.dat",ios::out|ios::app);

}

if(!outfile)

{

cerr

exit(1);

}

Linkman *p=head;

if(p==NULL)

{

cout

}

else

{

//存储

while(p!=NULL)

{

outfilename

outfiletel_number

outfileaddress

outfile

p=p->next;

}

}

outfile.close();

cout

menu(*this);

}//////////////////////////////////////////////////////////////////////////////////////

void Telephone_book::loading() //载入联系人

{

ifstream infile("Linkman.dat",ios::out);

Linkman *p=NULL,*q=NULL;

p=new Linkman;

head=p;

while(infile>>p->name,infile>>p->tel_number,infile>>p->address,infile) {

q=p;

p=new Linkman;

q->next=p;

}

p->next=NULL;

infile.close();

cout

loaded=true;

menu(*this);

}

////////////////////////////////////////////////////////////////////////////////////////

Telephone_book::~Telephone_book()

{

Linkman *p=head,*q=head;

while(p!=NULL)

{

q=p->next;

delete p;

p=q;

}

}////////////////////////////////////////////////////////////////////////////////////////

int main()

{

Telephone_book t;

page();

menu(t);

return 0;

}

void page() //扉页名片

{

for(int i=0;i

{

cout

}

cout

cout

cout

cout

cout

{

cout

}

cout

system("pause");

system("cls");

}

void menu(Telephone_book &t) //主菜单

{

char count=0;

for(int i=0;i

{

cout

}

cout

cout

cout

} cout>count; cout


相关内容

  • 通讯录的制作-课程设计报告
  • 中北大学 数 据 结 构 课 程 设 计 说 明 书 2010 年1月6日 1 设计目的: 通讯录的制作 <数据结构>课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论.进行数据 ...

  • 安卓开发课程设计报告
  • 武汉理工大学华夏学院 课 程 报 告 课程名称:智能手机软件开发 题 目: 基于Android 的手机通讯录的设计与实现 专 业 信息工程系 班 级 学 号 姓 名 成 绩 指导教师 2015年3月23日至2015年6月12日 智能手机软件开发大作业 根据所学的Android 手机开发的知识,采用E ...

  • 课程设计模板-课程设计报告格式
  • 学校名 课 程 设 计 报 告 课程名称 C语言程序设计 系 别: 专业班级: 学 号: 姓 名: 课程题目:企业人事管理系统 完成日期: 指导老师: 年 月 日 附件: 课程设计的内容 企业人事管理系统: 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统.能够录入人事的基本资料,在 ...

  • 学生通讯录管理系统课程设计
  • 数 据 结 构 课 程 设 计 报告 题目: 学生通讯录管理系统课程设计 学 院 信息工程学院 专 业 计算机科学与技术 年级班别 12级4班 学 号 2012051411 学生姓名 潘 小 恩 指导教师 米 文 丽 成 绩 2013年12月19日 目 录 一.总体设计方案 ------------ ...

  • 学校电气自动化调查报告范文
  • 尽早了解本专业的设置及就业情况有助于我们确定自己的发展方向,当竞争工作时,能有更多的优势.为此,本小组与2010年11月1日至12月1日进行了调查,通过文献查阅.实地调查.专业访谈相结合的方法展开调查现将有关情况报告如下: 一.情况概述. 通过这些实践活动,本小组了解到了很多情况.首先,电气自动化是 ...

  • 学校电气自动化的相关调查报告
  •   尽早了解本专业的设置及就业情况有助于我们确定自己的发展方向,当竞争工作时,能有更多的优势。为此,本小组与2011年11月1日至12月1日进行了调查,通过文献查阅、实地调查、专业访谈相结合的方法展开调查现将有关情况报告如下:   一、情况概述.   通过这些实践活动,本小组了解到了很多情况。首先, ...

  • 学校电气自动化调查报告
  • 尽早了解本专业的设置及就业情况有助于我们确定自己的发展方向,当竞争工作时,能有更多的优势。为此,本小组与2010年11月1日至12月1日进行了调查,通过文献查阅、实地调查、专业访谈相结合的方法展开调查现将有关情况报告如下: 一、情况概述。 通过这些实践活动,本小组了解到了很多情况。首先,电气自动化是 ...

  • 现场总线及集散控制课程报告
  • 现场总线及集散控制课程报告 LonWorks 总线在楼宇自动化(BAS)中的应用 班级: 电气1321 学号: 1330117106 姓名: 陈 旻 忞 LonWorks 总线在楼宇自动化(BAS)中的应用 陈旻忞 电气1321 (苏州科技学院天平学院 江苏 苏州 215009) 摘要:LonWor ...

  • 现场总线技术课程设计
  • 现场总线技术课程设计 一:课程设计要求 1. 2. 3. 4. 5. 6. 7. 掌握iCAN 总线的原理 掌握iCAN 总线模块的功能及用法 掌握iCAN 总线组网技术 掌握iCAN 网络及模块的测试软件使用方法 掌握 ZOPC 服务器的使用方法 掌握ZOPC 服务器与组态软件的互联方法 了解组态 ...