C++课程设计报告简单通讯录管理.docx
- 文档编号:27958995
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:19
- 大小:18.96KB
C++课程设计报告简单通讯录管理.docx
《C++课程设计报告简单通讯录管理.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告简单通讯录管理.docx(19页珍藏版)》请在冰豆网上搜索。
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< out< out< out< out< out< while(p=p->Next) { out< out< out< out< out< out< } out.close(); } voidAddrList: : WriteToTxtFile(char*filename)//将链表写到文本文件中 { Node*x=HeadPtr; ofstreamout(filename,ios: : binary); out< out< while(x=x->Next) { out< } 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<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告 简单 通讯录 管理