欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    C++课程设计报告简单的通讯录 .doc

    • 资源ID:2384564       资源大小:93KB        全文页数:16页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++课程设计报告简单的通讯录 .doc

    南京航空航天大学C+课程设计报告学号:姓名: 一、程序简介二、程序功能介绍三、源程序四、编程心得及其展望*一、 程序简介:*简单的通讯录*1、 Add recrd;2、 Delete Record;3、 Display All record;4、 Query by Name;5、 Modify Record;6、 Add from a Text File;7、 Write to a Text File;8、 Sort;9、 Quit;请选择(19):* 此程序是对一个简单的通讯记录进行管理。用户根据以上的各个选项卡进行想要的数据操作,每一个选项都有相关的提示输入输出,简单明了,甚是清晰。根据程序可以对一个有序链表进行如下操作:1、 增加一个有序的通讯记录;2、 删除通讯记录上的一个记录;3、 显示通讯录上所有的记录;4、 按姓名查找有关的记录;5、 输入要修改的姓名查找到后对其进行修改;6、 从写好的一个正文文件中批量增加记录并排序;7、 把通讯录上所有记录写入到一个文件内进行保存;8、 修改当前的排序关键字;9、 退出程序并把本次所有记录写入到二进制文件中。下面是对改程序进行相关介绍。二、程序功能简介: 此程序为一个简单的通讯录。通讯录是一个简单的数据库,每一个记录包含一个人的所有信息(本程序中信息包含:姓名、办公室电话、家庭电话、手机号码、EMail地址)。用于管理一个小群体的通讯记录。程序的执行过程为:显示主菜单,用户通过在Choice:处输入选项(本程序为19的数字选项),按回车后接入相关程序段进行执行!下面对本程序的19个选项进行简单的说明:1、 Add Record(增加记录):程序执行时,有相关的提示输入。每次输入一个人的相关数据信息,新记录加入后通讯录按指定的排序顺序排序。本程序中,最初默认按“姓名“进行排序,但是后面的8 Sort选项可以进行相应的排列顺序修改(如改为按“办公室电话“进行排序)。2、 Delete Record(删除记录): 如果要对已建通讯录中的某个人的信息进行删除操作,则选2. 输入待删除记录的姓名,显示该姓名的所有信息,让用户确认是否要删除。3、 DisplayAll Record(显示所有的记录):执行时程序按设定的排列顺序对通讯录中的所有记录进行显示,每显示10条记录,暂停,用户按<Enter>键继续。4、 Query By Name(按姓名进行查询并显示该记录):用户根据执行程序时的相关提示,输入要查询记录的姓名,系统根据输入的姓名在已建立的通讯录中查找该记录并且显示在屏幕上。5、 Modify Record(按姓名查找并进行修改):用户根据执行程序时的提示信息输入要修改的记录的姓名,系统根据输入的信息在已建立的通讯记录中查找相关的记录。本程序段是查找到要修改的记录后显示出来,然后提示用户重新输入该记录的信息(所有信息)。然后重新插入到原有通讯录中重新排序。6、 Add From A Text File(从正文文件中批量添加记录到通讯表中): 此程序段是提供给用户事先在建立好的一个文本文件中输入相关的记录,然后通过此选项卡插入到通讯表中。 程序执行是需要用户输入正文文件名。输入程序从相关的文件中追加记录。7、 Write To A Text File(将通讯表中的数据写入到正文文件中): 通过该选项用户可以把通讯表中的记录逐一写入到文本文件中保存起来。用户需要输入一个文本文件的名字即可,系统将通讯表中的所有记录写入该文件中。8、 Sort(重新设置排序格式): 首先显示当前的排序关键字,然后提示是否需要修改,用户根据需要回答是否需要修改。 程序中有两种吧、排序格式,一种按姓名牌关键字为“1“,第二种为按办公室电话排序,关键字为”2“。改变排序方式的意义是在两种排序方式间的变换。9、 Quit (退出系统): 退出系统是,系统根据程序自动把所有数据写入到二进制文件中,在下一次执行时,系统会由主函数自动把该二进制文件中的记录读入到通讯表中来。下面为程序的主页面:三、源程序:1、以下为程序段:每个函数都有相关的说明解释。# include <iostream.h># include <fstream.h># include <stdlib.h># include <string.h># include <iomanip.h>class Node char Name10; int OfficePhone; int HomePhone; char MobilePhone15; char Email20; Node *Next;public: Node(char *name=" ",int op=0,int hp=0,char *mp=" ",char *email=" ",Node *next=NULL); void Show() cout<<setw(10)<<Name<<setw(11)<<OfficePhone<<setw(11)<<HomePhone <<setw(15)<<MobilePhone<<setw(20)<<Email<<endl; void SetName(char *name) strcpy(Name,name); void SetOfficePhone(int op) OfficePhone=op; void SetHomePhone(int hp) HomePhone=hp; void SetMobilePhone(char *mp) strcpy(MobilePhone,mp); void SetEMail(char *email) strcpy(Email,email); friend class AddrList;Node:Node(char *name,int op,int hp,char *mp,char *email,Node *next) strcpy(Name,name); OfficePhone=op; HomePhone=hp; strcpy(MobilePhone,mp); strcpy(Email,email); Next=NULL;class AddrList Node *HeadPtr; Node *TailPtr; int Tag; / 排序标志,当Tag=1,表示按姓名排序;默认按姓名排序。 / 当Tag=2,表示按办公室电话排序。public: AddrList(Node *headptr=NULL,Node *tailptr=NULL,int tag=1); /构造函数,创建空链表,将Tag的值置为1 void AddTail(Node *p); /将p指向的结点加入到链表尾部 void AddSort(Node *p); /将p指向的结点按Tag指定的顺序插入到链表中 Node * LookUp(char *name); /按姓名查找结点,返回该结点指针 void Delete(char *name); /删除指定姓名的结点 void Sort(int tag); /按tag指定的关键字重新排序 void ShowAll(); /显示全部结点,每10个显示一屏 void SetTag(int t); /置Tag的值 int GetTag(); /取Tag的值 Node * GetHeadPtr(); /取首指针 AddrList(); /释放链表空间 void CreateList(char *filename); /从二进制文件中读入数据,构造链表 void WriteToFile(char *filename); /将链表中数据写入指定的二制文件 void WriteToTxtFile(char *filename); /将链表写到文本文件中;AddrList:AddrList(Node *headptr,Node *tailptr,int tag) /构造函数,创建空链表,将Tag的值置为1HeadPtr=headptr; TailPtr=tailptr; Tag=tag; void AddrList:AddTail(Node *p) /将p指向的结点加入到链表尾部if(HeadPtr=NULL) HeadPtr=p; TailPtr=p; p->Next=NULL;else TailPtr->Next=p; TailPtr=p; p->Next=NULL;void AddrList:AddSort(Node *p) /将p指向的结点按Tag指定的顺序插入到链表中 Node *p1,*p2;if(Tag=1)if(HeadPtr=NULL)HeadPtr=p;TailPtr=p;p->Next=NULL;return;if( strcmp(p->Name,HeadPtr->Name)<0 )p->Next=HeadPtr;HeadPtr=p;return;p1=p2=HeadPtr;while(strcmp(p->Name,p2->Name)>0 && p2->Next!=NULL)p1=p2;p2=p2->Next;if(strcmp(p->Name,p2->Name)>0) p2->Next=p;p->Next=NULL;TailPtr=p;elsep->Next=p2;p1->Next=p;return;else if(Tag=2)if(HeadPtr=NULL)HeadPtr=p;TailPtr=p; p->Next=NULL;return;if( (p->OfficePhone)<(HeadPtr->OfficePhone) )p->Next=HeadPtr;HeadPtr=p;return;p1=p2=HeadPtr;while(p->OfficePhone)>(p2->OfficePhone) && (p2->Next!=NULL)p1=p2;p2=p2->Next;if(p->OfficePhone)>(p2->OfficePhone) p2->Next=p;p->Next=NULL; TailPtr=p; else p->Next=p2; p1->Next=p; return;Node * AddrList:LookUp(char *name) /按姓名查找结点,返回该结点指针 Node *p; p=HeadPtr; while(p!=NULL) if( strcmp( p->Name,name )=0 ) return p; p=p->Next; return NULL;void AddrList:Delete(char *name) /删除指定姓名的结点 Node *p1,*p2; if( HeadPtr=NULL ) cout<<"链表为空,无记录可删除!"<<endl; return ; if( strcmp(HeadPtr->Name,name)=0 ) p1=HeadPtr; HeadPtr=HeadPtr->Next; delete p1; cout<<"已删除相关信息!"<<endl; else p1=HeadPtr; p2=HeadPtr->Next; while(strcmp(p2->Name,name)!=0 && p2->Next !=NULL ) p1=p2; p2=p2->Next; if( strcmp( p2->Name,name )=0 && p2) p1->Next=p2->Next; delete p2; cout<<"已删除了相关信息!"<<endl; else cout<<"链表上没有找到要删除的结点!"<<endl; return;void AddrList:Sort(int tag) /按tag指定的关键字重新排序 Node *p1,*p2; Tag=tag; p1=HeadPtr; HeadPtr=NULL; TailPtr=NULL; while(p1) p2=p1->Next; AddSort(p1); p1=p2; TailPtr->Next=NULL;void AddrList:ShowAll() /显示全部结点,每10个显示一屏 system("cls"); if(HeadPtr=NULL) cout<<"链表为空,没有记录可显示!"<<endl; else Node *p; int n=0; cout<<setw(10)<<"姓名"<<setw(11)<<"办公室电话"<<setw(11) <<"家庭电话"<<setw(15)<<"手机号码"<<setw(20)<<"E-Mail地址"<<endl; p=HeadPtr; while(p!=NULL) p->Show(); p=p->Next; n+; if(n%10=0) system("pause"); system("cls"); cout<<setw(10)<<"姓名"<<setw(11)<<"办公室电话"<<setw(11) <<"家庭电话"<<setw(15)<<"手机号码"<<setw(20)<<"E-Mail地址"<<endl; void AddrList:SetTag(int t) /置Tag的值 Tag=t; int AddrList:GetTag() /取Tag的值 return Tag; Node * AddrList:GetHeadPtr() /取首指针 return HeadPtr; AddrList:AddrList() /释放链表空间 Node *p; while (HeadPtr) p=HeadPtr; HeadPtr=HeadPtr->Next; delete p; void AddrList:CreateList(char *filename) /从二进制文件中读入数据,构造链表 fstream infile(filename,ios:in|ios:binary); /filename是一个指针就不用"filename"了 if(!infile) cout<<"不能读出文件!"<<endl; exit(1); else infile.read(char*)&Tag,sizeof(int); int n; infile.read(char*)&n,sizeof(int); for(int i=0; i<n; i+) Node *p=new Node; infile.read(char*)p,sizeof(Node); AddTail(p); infile.close();void AddrList:WriteToFile(char *filename) /将链表中数据写入指定的二制文件 Node *p; p=HeadPtr; fstream outfile(filename,ios:out|ios:binary); outfile.write(char*)&Tag,sizeof(int); if(!outfile) cout<<"不能写入二进制文件!"<<endl; exit(2); int n=0; for( ;p!=NULL;p=p->Next) n+; outfile.write(char*)&n,sizeof(int); p=HeadPtr; while(p!=NULL) outfile.write(char*)p,sizeof(Node); p=p->Next; outfile.close();void AddrList:WriteToTxtFile(char *filename) /将链表写到文本文件中 Node *p; p=HeadPtr; ofstream out(filename); if(!out) cout<<"不能写入文件!"<<endl; exit(3); out<<Tag<<endl; int n=0; for( ;p!=NULL;p=p->Next) n+; out<<"写入"<<n<<"个数据"<<endl; out<<setw(10)<<"姓名"<<setw(11)<<"办公室电话"<<setw(11) <<"家庭电话"<<setw(15)<<"手机号码"<<setw(20)<<"E-Mail地址"<<endl; p=HeadPtr; while(p!=NULL) out<<setw(10)<<p->Name<<setw(11)<<p->OfficePhone<<setw(11) <<p->HomePhone<<setw(15)<<p->MobilePhone<<setw(20)<<p->Email<<endl; p=p->Next; out.close();void DisplayMenu() /显示菜单char *menu= " ", " ", " ", " ", " *通讯录管理系统* ", " ", " 1. Add Record ", " 2. Delete Record", " 3. Display All Record", " 4. Query by Name", " 5. Modify Record", " 6. Add from a Text File", " 7. Write to a Text File", " 8. Sort", " 9. Quit", " 请选择(1-9) : ", " ", " * ", NULL ;system("cls");for (int i=0;menui;i+)cout << menui<<endl;void add(AddrList &addrlist) /按当前Tag标志插入结点,插入结点后,链表仍然保持升序 char na10,mp15,em20; int op,hp; cout<<"请按Enter键转入下一屏!"<<endl; system("pause"); system("cls"); cout<<"请输入通讯录上的信息:"<<endl; cout<<"姓名、办公室电话、家庭电话、手机号、E-Mail地址,以#结束!"<<endl; cin>>na>>op>>hp>>mp>>em; while( strcmp(na,"#")!=0 ) Node *p; p=new Node; p->SetName(na); p->SetOfficePhone(op); p->SetHomePhone(hp); p->SetMobilePhone(mp); p->SetEMail(em); addrlist.AddSort(p); cin>>na>>op>>hp>>mp>>em; cout<<"已经建立一个通讯录!"<<endl; system("pause");void del(AddrList &addrlist) /删除一个结点 if(addrlist.GetHeadPtr()=NULL) cout<<"链表为空,没有记录可删除!"<<endl; system("pause"); cout<<"请按Enter键转入下一屏!"<<endl; system("pause"); system("cls"); char na10; cout<<"请输入想要删除的姓名 "<<endl; cin.get(); cin.getline(na,10); Node *p; p=addrlist.LookUp(na); if(p=NULL) cout<<"在通讯录中没有找到相关信息!"<<endl; system("pause"); else cout<<"在通讯录中找到相关信息!是否要删除,输入Y or N "<<endl; p->Show(); char c; cin>>c; if(c='Y') addrlist.Delete(na); system("pause"); void showall(AddrList &addrlist) /显示所有结点 addrlist.ShowAll(); cout<<endl; system("pause");void query(AddrList &addrlist) /按姓名查找一个结点 if(addrlist.GetHeadPtr()=NULL) cout<<"链表为空,没有联系人可查找!"<<endl; system("pause"); else cout<<"请按Enter键转入下一屏!"<<endl; system("pause"); system("cls"); Node *p; char na10; cout<<"请输入要查询的姓名"<<endl; cin.get(); cin.getline(na,10); p=addrlist.LookUp(na); if(p) cout<<"找到相关信息,数据为:"<<endl; p->Show(); system("pause"); else cout<<"没有找到要查询的姓名!"<<endl; system("pause"); void modify(AddrList &addrlist) /修改一个结点 if(addrlist.GetHeadPtr()=NULL) cout<<"链表为空,没有记录可修改!"<<endl; system("pause"); else cout<<"请按Enter键转入下一屏!"<<endl; system("pause"); system("cls"); char na10,na110,mp15,em20; Node *p; int op,hp; cout<<"请输入要修改人的姓名!"<<endl; cin.get(); cin.getline (na,10); p=addrlist.LookUp(na); if(p=NULL) cout<<"没有找到要修改的记录!"<<endl; system("pause"); else cout<<"原记录为:"<<endl; p->Show(); cout<<"请输入要修改的信息!"<<endl; cin>>na1>>op>>hp>>mp>>em; p->SetName(na1); p->SetOfficePhone(op); p->SetHomePhone(hp); p->SetMobilePhone(mp); p->SetEMail(em); if(addrlist.GetTag()=1) addrlist.Sort(1); else addrlist.Sort(2); cout<<"已经修改! 现在的信息为:"<<endl; p->Show(); system("pause"); void addfromtxtfile(AddrList &addrlist) /从正文文件增加记录 cout<<"请输入源文件的文件名:" char filename80,na10,mp15,em20; int n,op,hp; cin.get(); cin.getline(filename, 80); ifstream infile(filename); if(!infile) cout<<"不能读出文件!"<<endl; exit(4); infile>>n; for(int i=0;i<n;i+) Node *p=new Node; infile>>na>>op>>hp>>mp>>em; p->SetName(na); p->SetOfficePhone(op); p->SetHomePhone(hp); p->SetMobilePhone(mp); p->SetEMail(em); addrlist.AddSort(p); infile.close(); cout<<"已将文件中的"<<n<<"个数据加入到了通讯录中!"<<endl; system("pause");void writetotxtfile(AddrList &addrlist) /将链表写到正文文件中 char filename80; cout<<"请输入想存放出的文件的文件名: " cin>>filename; addrlist.WriteToTxtFile(filename); cout<<"已将通讯录中的所有数据写到文件中!"<<endl; system("pause");void sort(AddrList &addrlist) / 按姓名或办公室电话排序 if(addrlist.GetHeadPtr()=NULL) cout<<"当前链表为空,没有可以操作的程序!"<<endl; system("pause"); else cout<<"请按Enter键转入下一屏!"<<endl; system("pause"); system("cls"); if(addrlist.GetTag()=1) cout<<"当前是按 '姓名' 进行排序的,是否要修改,确认请输入Y!否认请输入N!"<<endl; char C; cin>>C; if(C='Y') addrlist.SetTag(2); addrlist.Sort(2); cout<<"已经重新排好顺序! 请查看."<<endl; system("pause"); else if(addrlist.GetTag()=2) cout<<"当前是按办 '公室电话' 进行排序的,是否要修改,确认请输入Y!否认请输入N!"<<endl; char C;

    注意事项

    本文(C++课程设计报告简单的通讯录 .doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开