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

上传人:西安人 文档编号:5014020 上传时间:2020-01-28 格式:DOC 页数:17 大小:162.50KB
返回 下载 相关 举报
C++课程设计报告-简单的通讯录.doc_第1页
第1页 / 共17页
C++课程设计报告-简单的通讯录.doc_第2页
第2页 / 共17页
C++课程设计报告-简单的通讯录.doc_第3页
第3页 / 共17页
C++课程设计报告-简单的通讯录.doc_第4页
第4页 / 共17页
C++课程设计报告-简单的通讯录.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《C++课程设计报告-简单的通讯录.doc》由会员分享,可在线阅读,更多相关《C++课程设计报告-简单的通讯录.doc(17页珍藏版)》请在三一文库上搜索。

1、17C+课程设计报告2020-1-28南京航空航天大学C+课程设计报告学号:姓名: 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):* 此程序是对一个简单的通讯记录进行管理。用户根据以上的各个选项卡进行想要的数据操作,每一个选项都有相

2、关的提示输入输出,简单明了,甚是清晰。根据程序可以对一个有序链表进行如下操作:1、 增加一个有序的通讯记录;2、 删除通讯记录上的一个记录;3、 显示通讯录上所有的记录;4、 按姓名查找有关的记录;5、 输入要修改的姓名查找到后对其进行修改;6、 从写好的一个正文文件中批量增加记录并排序;7、 把通讯录上所有记录写入到一个文件内进行保存;8、 修改当前的排序关键字;9、 退出程序并把本次所有记录写入到二进制文件中。下面是对改程序进行相关介绍。二、程序功能简介: 此程序为一个简单的通讯录。通讯录是一个简单的数据库,每一个记录包含一个人的所有信息(本程序中信息包含:姓名、办公室电话、家庭电话、手机

3、号码、EMail地址)。用于管理一个小群体的通讯记录。程序的执行过程为:显示主菜单,用户通过在Choice:处输入选项(本程序为19的数字选项),按回车后接入相关程序段进行执行!下面对本程序的19个选项进行简单的说明:1、 Add Record(增加记录):程序执行时,有相关的提示输入。每次输入一个人的相关数据信息,新记录加入后通讯录按指定的排序顺序排序。本程序中,最初默认按“姓名“进行排序,但是后面的8 Sort选项可以进行相应的排列顺序修改(如改为按“办公室电话“进行排序)。2、 Delete Record(删除记录): 如果要对已建通讯录中的某个人的信息进行删除操作,则选2. 输入待删除

4、记录的姓名,显示该姓名的所有信息,让用户确认是否要删除。3、 DisplayAll Record(显示所有的记录):执行时程序按设定的排列顺序对通讯录中的所有记录进行显示,每显示10条记录,暂停,用户按键继续。4、 Query By Name(按姓名进行查询并显示该记录):用户根据执行程序时的相关提示,输入要查询记录的姓名,系统根据输入的姓名在已建立的通讯录中查找该记录并且显示在屏幕上。5、 Modify Record(按姓名查找并进行修改):用户根据执行程序时的提示信息输入要修改的记录的姓名,系统根据输入的信息在已建立的通讯记录中查找相关的记录。本程序段是查找到要修改的记录后显示出来,然后提

5、示用户重新输入该记录的信息(所有信息)。然后重新插入到原有通讯录中重新排序。6、 Add From A Text File(从正文文件中批量添加记录到通讯表中): 此程序段是提供给用户事先在建立好的一个文本文件中输入相关的记录,然后通过此选项卡插入到通讯表中。 程序执行是需要用户输入正文文件名。输入程序从相关的文件中追加记录。7、 Write To A Text File(将通讯表中的数据写入到正文文件中): 通过该选项用户可以把通讯表中的记录逐一写入到文本文件中保存起来。用户需要输入一个文本文件的名字即可,系统将通讯表中的所有记录写入该文件中。8、 Sort(重新设置排序格式): 首先显示当

6、前的排序关键字,然后提示是否需要修改,用户根据需要回答是否需要修改。 程序中有两种吧、排序格式,一种按姓名牌关键字为“1“,第二种为按办公室电话排序,关键字为”2“。改变排序方式的意义是在两种排序方式间的变换。9、 Quit (退出系统): 退出系统是,系统根据程序自动把所有数据写入到二进制文件中,在下一次执行时,系统会由主函数自动把该二进制文件中的记录读入到通讯表中来。下面为程序的主页面:三、源程序:1、以下为程序段:每个函数都有相关的说明解释。# include # include # include # include # include class Node char Name10;

7、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() coutsetw(10)Namesetw(11)OfficePhonesetw(11)HomePhone setw(15)MobilePhonesetw(20)EmailNext=NULL;else TailPtr-Next=p; TailPtr=

8、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)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-Nam

9、e,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)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

10、-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,

11、*p2; if( HeadPtr=NULL ) cout链表为空,无记录可删除!Name,name)=0 ) p1=HeadPtr; HeadPtr=HeadPtr-Next; delete p1; cout已删除相关信息!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链表上没有找到要删除的结点!Next; Add

12、Sort(p1); p1=p2; TailPtr-Next=NULL;void AddrList:ShowAll() /显示全部结点,每10个显示一屏 system(cls); if(HeadPtr=NULL) cout链表为空,没有记录可显示!endl; else Node *p; int n=0; coutsetw(10)姓名setw(11)办公室电话setw(11) 家庭电话setw(15)手机号码setw(20)E-Mail地址Show(); p=p-Next; n+; if(n%10=0) system(pause); system(cls); coutsetw(10)姓名setw(

13、11)办公室电话setw(11) 家庭电话setw(15)手机号码setw(20)E-Mail地址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*)&

14、n,sizeof(int); for(int i=0; in; 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不能写入二

15、进制文件!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); outTagNext) n+; out写入n个数据

16、endl; outsetw(10)姓名setw(11)办公室电话setw(11) 家庭电话setw(15)手机号码setw(20)E-Mail地址endl; p=HeadPtr; while(p!=NULL) outsetw(10)Namesetw(11)OfficePhonesetw(11) HomePhonesetw(15)MobilePhonesetw(20)EmailNext; out.close();void DisplayMenu() /显示菜单char *menu= , , , , *通讯录管理系统* , , 1. Add Record , 2. Delete Record, 3

17、. 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 menuiendl;void add(AddrList &addrlist) /按当前Tag标志插入结点,插入结点后,链表仍然保持升序 char na10,mp15,em20; int op,hp; cout请按Ente

18、r键转入下一屏!endl; system(pause); system(cls); cout请输入通讯录上的信息:endl; cout姓名、办公室电话、家庭电话、手机号、E-Mail地址,以#结束!naophpmpem; 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); cinnaophpmpem; cout已经建立一个通讯

19、录!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在通讯录中没有找到相

20、关信息!endl; system(pause); else cout在通讯录中找到相关信息!是否要删除,输入Y or N Show(); char c; cinc; if(c=Y) addrlist.Delete(na); system(pause); void showall(AddrList &addrlist) /显示所有结点 addrlist.ShowAll(); coutendl; system(pause);void query(AddrList &addrlist) /按姓名查找一个结点 if(addrlist.GetHeadPtr()=NULL) cout链表为空,没有联系人可

21、查找!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找到相关信息,数据为:Show(); system(pause); else cout没有找到要查询的姓名!endl; system(pause); void modify(AddrList &addrlist) /修改一个结点 i

22、f(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

23、cout原记录为:Show(); cout请输入要修改的信息!na1ophpmpem; 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已经修改! 现在的信息为:Show(); system(pause); void addfromtxtfile(AddrList &addrlist) /从正文文件增加记录 cout

24、请输入源文件的文件名:; char filename80,na10,mp15,em20; int n,op,hp; cin.get(); cin.getline(filename, 80); ifstream infile(filename); if(!infile) cout不能读出文件!n; for(int i=0;inaophpmpem; p-SetName(na); p-SetOfficePhone(op); p-SetHomePhone(hp); p-SetMobilePhone(mp); p-SetEMail(em); addrlist.AddSort(p); infile.clo

25、se(); cout已将文件中的n个数据加入到了通讯录中!endl; system(pause);void writetotxtfile(AddrList &addrlist) /将链表写到正文文件中 char filename80; coutfilename; 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!C; if(C=Y) addrlist.SetTag(2); addrlist.Sort(2); cout已经重新排好顺序! 请查看.

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

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1