C++课程设计报告简单通讯录管理.docx

上传人:b****5 文档编号:27958995 上传时间:2023-07-06 格式:DOCX 页数:19 大小:18.96KB
下载 相关 举报
C++课程设计报告简单通讯录管理.docx_第1页
第1页 / 共19页
C++课程设计报告简单通讯录管理.docx_第2页
第2页 / 共19页
C++课程设计报告简单通讯录管理.docx_第3页
第3页 / 共19页
C++课程设计报告简单通讯录管理.docx_第4页
第4页 / 共19页
C++课程设计报告简单通讯录管理.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C++课程设计报告简单通讯录管理.docx

《C++课程设计报告简单通讯录管理.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告简单通讯录管理.docx(19页珍藏版)》请在冰豆网上搜索。

C++课程设计报告简单通讯录管理.docx

C++课程设计报告简单通讯录管理

南京航空航天大学

《C++语言程序设计》课程设计

实验报告

题目:

通讯录管理系统

班级:

学号:

姓名:

成绩:

指导教师:

日期:

xxxx年xx月xx日

一、课题名称:

简单通讯录管理

二、程序功能:

一个简单的通讯录管理程序,具有插入、删除、显示、修改和查询联系人通讯方式等功能。

三、课题分析;

本课程设计的数据有每个人的学号、姓名、办公室号码、住宅号码、手机号码和Email地址,可以进行排序,同时为了减少执行“添加”、“删除”等过于复杂和繁琐的操作,采用单向链表来进行数据的存储和操作。

同时需要一个文本文件来存储联系人信息,数据可从该文本文件中导出。

同时也可以从程序中导出数据,从而保存!

为了方便,进行了汉化。

四、设计中的问题与解决方法:

1.需要整体构思,先期的准备工作很重要。

2.写程序时尽量考虑充分,否则调试时会很难受的。

3.关于指针数组和二维数组的区别,额,还得看看。

4.函数还是自己怎么顺手怎么写,不要硬套格式。

五、对设计的感想和心得:

第一次写程序让我苦不堪言,前前后后折腾了两个星期。

尤其是调试,天!

不说啥了。

写程序是一回事,调试是另一码事,有时候就是个小问题导致程序各种崩溃。

唉,确实找错需要灵感。

但最终在细心检查下,发现啦。

最终写完后,感觉如释重负。

写一个“正常”的程序,不容易啊。

六、原程序代码

#include

#include

#include

#include

#include

#include

classAddrList;

classNode

{

charID[20];

charName[20];

charOfficePhone[20];

charHomePhone[20];

charMobilePhone[20];

charEmail[20];

Node*Next;

public:

Node(char*id=0,char*name=0,char*op=0,char*hp=0,char*mp=0,char*email=0,Node*next=NULL)

{

strcpy(ID,id);

strcpy(Name,name);

strcpy(OfficePhone,op);

strcpy(HomePhone,hp);

strcpy(MobilePhone,mp);

strcpy(Email,email);

Next=next;

}

voidShow()

{

cout<

}

friendclassAddrList;

friendvoidadd(AddrList&addrlist);

friendvoidquery(AddrList&addrlist);

friendvoidmodify(AddrList&addrlist);

};

classAddrList

{

Node*HeadPtr;

intTag;

public:

AddrList(Node*headptr=NULL,Node*tailptr=NULL,inttag=0)

{//构造函数,创建空链表,将Tag的值置为1

HeadPtr=headptr;

Tag=tag;

}

voidAddSort(char*id,char*name,char*op,char*hp,char*mp,char*email);//将p指向的结点按Tag指定的顺序插入到链表中

Node*LookUp(char*name);//按姓名查找结点,返回该结点指针

voidDelete(char*name);//删除指定姓名的结点

intSort(int);//按tag指定的关键字重新排序

intShowAll();//显示全部结点,每10个显示一~AddrList();//释放链表空间

voidCreateList(char*filename);//从二进制文件中读入数据,构造链表

voidWriteToFile(char*filename);//将链表中数据写入指定的二制文件

voidWriteToTxtFile(char*filename);//将链表写到文本文件中

voidCreateFromTxt(char*filename);

friendvoidsort(AddrList&addrlist);//按姓名或办公室电话排序

};

voidAddrList:

:

AddSort(char*id,char*name,char*op,char*hp,char*mp,char*email)//将p指向的结点插入链表尾部{

Node*p;

p=newNode(id,name,op,hp,mp,email);

Node*x1=HeadPtr;

Node*x2=x1;

if(id)

{

if(HeadPtr)

{

while(x1=x1->Next){x2=x1;}

x2->Next=p;

p->Next=NULL;

}

elseHeadPtr=p,p->Next=NULL;

}

}

Node*AddrList:

:

LookUp(char*name)//按姓名查找结点,返回该结点指针

{

Node*x=HeadPtr;

while(x!

=NULL&&strcmp(x->Name,name)!

=0){x=x->Next;}

if(x){returnx;}

elsereturn0;

}

voidAddrList:

:

Delete(char*name)//删除指定姓名的结点

{

Node*x1=HeadPtr;

Node*x2=x1;

while(strcmp(x2->Name,name)!

=0&&x2!

=NULL){x1=x2;x2=x2->Next;}

if(x1!

=x2)

{if(x2)

{

x1->Next=x2->Next;

deletex2;

cout<<"已删除"<

}

else{cout<<"未找到,请确认后再输入"<

}

else{HeadPtr=x1->Next;deletex2;}

}

intAddrList:

:

Sort(intT_T)//按用户指定的关键字重新排序

{

switch(T_T)

{case1:

{

Node*x=HeadPtr,*t;

if(!

HeadPtr)return0;

intm=0,n=0;

Node*p[100]={0};

while(x){p[m]=x;m++;x=x->Next;}

n=m;

inti,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(strcmp(p[j]->Name,p[k]->Name)<=0)

{

k=j;

}

}

{t=p[k];p[k]=p[i];p[i]=t;}

}

HeadPtr=p[0];

i=0;

while(i

{

p[i]->Next=p[i+1];

i++;

}

p[i]->Next=NULL;

Tag=1;

break;

}

case2:

{

Node*x=HeadPtr,*t;

if(!

HeadPtr)return0;

intm=0,n=0;

Node*p[100]={0};

while(x){p[m]=x;m++;x=x->Next;}

n=m;

inti,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(strcmp(p[j]->ID,p[k]->ID)<=0)

{

k=j;

}

}

{t=p[k];p[k]=p[i];p[i]=t;}

}

HeadPtr=p[0];

i=0;

while(i

{

p[i]->Next=p[i+1];

i++;

}

p[i]->Next=NULL;

Tag=2;

break;}}

}

intAddrList:

:

ShowAll()//显示全部结点,每10个显示一屏

{

Node*x=HeadPtr;

if(x);

elsereturn0;

inti=1;

while

(1)

{

cout<

while(i<=10)

{

x->Show();

i++;

if(x=x->Next);

elsebreak;

}

system("pause");

i=1;

if(x);

elsebreak;

}

}

AddrList:

:

~AddrList()//释放链表空间

{

Node*x1=HeadPtr;

Node*x2=x1;

while(x2=x2->Next)

{

deletex1;

x1=x2;

}

deletex2;

}

voidAddrList:

:

CreateList(char*filename)//从二进制文件中读入数据,构造链表

{

chara[30]={0},b[30]={0},c[30]={0},d[30]={0},e[30]={0},f[30]={0};

ifstreamin(filename,ios:

:

binary);

while(in>>a)

{

in>>b>>c>>d>>e>>f;

AddSort(a,b,c,d,e,f);

}

in.close();

}

voidAddrList:

:

CreateFromTxt(char*filename)//从文本文件中读入数据,构造链表

{

chara[30],b[30],c[30],d[30],e[30],f[30];

ifstreamin(filename);

while(in>>a)

{

in>>b>>c>>d>>e>>f;

AddSort(a,b,c,d,e,f);

}

}

voidAddrList:

:

WriteToFile(char*filename)//将链表中数据写入指定的二进制文件

{

Node*p=HeadPtr;

ofstreamout(filename,ios:

:

binary);

out<ID<<"";

out<Name<<"";

out<OfficePhone<<"";

out<HomePhone<<"";

out<MobilePhone<<"";

out<Email<<"";

while(p=p->Next)

{

out<ID<<"";

out<Name<<"";

out<OfficePhone<<"";

out<HomePhone<<"";

out<MobilePhone<<"";

out<Email<<"";

}

out.close();

}

voidAddrList:

:

WriteToTxtFile(char*filename)//将链表写到文本文件中

{

Node*x=HeadPtr;

ofstreamout(filename,ios:

:

binary);

out<

out<ID<Name<OfficePhone<HomePhone<MobilePhone<Email<

while(x=x->Next)

{

out<ID<Name<OfficePhone<HomePhone<MobilePhone<Email<

}

out.close();

}

voidDisplayMenu()//显示菜单

{

inti;

char*menu[]={"","","","",

"***********小巧通讯录管理系统*************",

"",

"1.新增一个联系人",

"2.删除一个联系人",

"3.显示所有联系人",

"4.查找联系人",

"5.更改联系人记录",

"6.从TXT文档中增加记录",

"7.导出联系人到Txt文档",

"8.排序",

"9.退出",

"",

"******************************************",

""

"^_^欢迎使用^_^",

NULL};

system("cls");

for(i=0;menu[i];i++)

cout<

cout<<"请选择(1--9):

";

}

voidadd(AddrList&addrlist)//按当前Tag标志插入结点,插入结点后,链表仍然保持升序

{

system("cls");

chara[30],b[30],c[30],d[30],e[30],f[30];

cout<<"添加记录"<

"**************************************"<

"请输入一个联系人数据"<

cout<<"学号"<

cin>>a>>b>>c>>d>>e>>f;

addrlist.AddSort(a,b,c,d,e,f);

cout<<"添加完成"<

system("pause");

}

voiddel(AddrList&addrlist)//删除一个结点

{

system("cls");

charp[30];

cout<<"删除记录"<

"**************************************"<

"请输入一个联系人的姓名"<

cin>>p;

addrlist.Delete(p);

cout<<"删除完成"<

system("pause");

}

voidshowall(AddrList&addrlist)//显示所有结点

{

system("cls");

cout<<"显示所有联系人"<

"**************************************"<

if(addrlist.ShowAll());

elsecout<<"空记录!

"<

system("pause");

}

voidquery(AddrList&addrlist)//按姓名查找一个结点

{

system("cls");

charname[30];

Node*p;

cout<<"查找联系人"<

"**************************************"<

"请输入一个联系人的姓名"<

cin>>name;

if(p=addrlist.LookUp(name))

{

cout<ID<Name<OfficePhone<HomePhone<MobilePhone<Email<

}

elsecout<<"未找到"<

system("pause");

}

voidmodify(AddrList&addrlist)//修改一个结点

{

system("cls");

charname[30];

Node*p;

cout<<"修改联系人"<

"**************************************"<

"请输入一个联系人的姓名"<

cin>>name;

if(p=addrlist.LookUp(name))

{

cout<<"请输入修改后的联系人"<

cout<<"学号"<

cin>>p->ID>>p->Name>>p->OfficePhone>>p->HomePhone>>p->MobilePhone>>p->Email;

cout<<"修改完成"<

}

elsecout<<"未找到"<

system("pause");

}

voidaddfromtxtfile(AddrList&addrlist)//从正文文件增加记录

{

system("cls");

charfilename[30];

cout<<"从TXT文档中增加记录"<

"**************************************"<

"请输入要加入的文件名"<

cin>>filename;

addrlist.CreateFromTxt(filename);

cout<<"载入完成"<

system("pause");

}

voidwritetotxtfile(AddrList&addrlist)//将链表写到正文文件中

{

system("cls");

charfilename[30];

cout<<"导出联系人到Txt文档"<

"**************************************"<

"请输入要导出的文件名"<

cin>>filename;

addrlist.WriteToTxtFile(filename);

cout<<"导出完成"<

system("pause");

}

voidsort(AddrList&addrlist)//按姓名或学号排序

{

system("cls");

intT_T;

intchoice=0;

switch(addrlist.Tag)

{

case0:

{cout<<"此文档未排序"<

case1:

{cout<<"此文档已按"<<"姓名"<<"排序,将按另一种方式排序"<

case2:

{cout<<"此文档已按"<<"学号"<<"排序,将按另一种方式排序"<

}

cout<<"请输入排序方式:

1.姓名2.学号"<

cin>>T_T;

if(addrlist.Sort(T_T))

cout<<"已排序"<

elsecout<<"空记录!

";

system("pause");

}voidquit(AddrList&addrlist)//退出前将链表写入二进制文件中

{

addrlist.WriteToFile("通讯录数据文件.bin");

}

voidmain()

{

system("color0A");

intchoice=0,state;

charch;

AddrListaddrlist;

addrlist.CreateList("通讯录数据文件.bin");//从二进制文件中读入数据,构建链表

while(choice!

=9)

{

DisplayMenu();//显示主菜单

cin>>ch;

if(ch<'1'||ch>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1