




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、17c+课程设计报告2021-10-21南京航空航天大学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-na
9、me,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(
10、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
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; ad
12、dsort(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,
17、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 menuiendl;void add(addrlist &addrlist) /按当前tag标志插入结点,插入结点后,链表仍然保持升序 char na10,mp15,em20; int op,hp; cout请按ent
18、er键转入下一屏!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) /修改一个结点
22、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
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) /从正文文件增加记录 cou
24、t请输入源文件的文件名:; 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.cl
25、ose(); 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当前链表为空,没有可以操
26、作的程序!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已经重新排好顺序! 请查看.endl; system(pause); else if(addrlist.gettag()=2) cout当前是按办 公室电话 进行排序的,是否要修改,确认请输入y!否认请输
27、入n!c; if(c=y) addrlist.settag(1); addrlist.sort(1); cout已经重新排好顺序! 请查看.endl; system(pause); void quit(addrlist &addrlist) /退出前将链表写入二进制文件中 system(cls); addrlist.writetofile(addrlist.dat); cout已经将所有通讯记录分别写进二进制 addrlist.dat 文件中!现在正在退出系统!endl; exit(5);void main() int choice=0,state;addrlist addrlist;addr
28、list.createlist(addrlist.dat); /从二进制文件中读入数据,构建链表while (choice!=9) displaymenu(); /显示主菜单 coutchoice; state=cin.rdstate(); if (state) /处理非法输入,如输入一个字符是非法的 char str80; cin.clear(); cin.getline(str,80); choice=10; switch (choice) case 1: add(addrlist); break; case 2: del(addrlist); break; case 3: showall
29、(addrlist); break; case 4: query(addrlist); break; case 5: modify(addrlist); break; case 6: addfromtxtfile(addrlist); break; case 7: writetotxtfile(addrlist); break; case 8: sort(addrlist); break; case 9: quit(addrlist); break; default : ; 2、下面的数据记录为相关的选项的执行记录:(1)add record 请输入相关信息: 姓名 办公室电话 家庭电话 手机
30、号码 email地址yehang 78894561 89456166hppytlijaming 89445646 78891566ljmingguhao 1495626 8123496guhaozhlang 9461264 9334545wodelui muwend 4568946 894616q451326zhbxing 8953125 1239465zhbaindff已建立一个通讯录,请查看(2)delete record: 请输入要删
31、除的姓名: guhao数据为:guhao 1495626 8123496guhao 是否删除: y已删除! 请继续(3)display all record: 姓名 办公室电话 家庭电话 手机号码 email地址yehang 78894561 89456166hppytlijaming 89445646 78891566ljmingzhlang 9461264 9334545wodelui muwend 4568946 894616q451326zhbxing 89
32、53125 1239465zhbaindff(4)query by name请输入要查询的姓名: yehang已找到,信息为:yehang 78894561 89456166hppyt请继续(5)modify record: 请输入要修改的姓名:zhbxing原纪录为:zhbxing 8953125 1239465zhbaindff请输入新信息:zhbaixin 8953125 1239465zhbaindff已修改,新记录为:zhbaixin 8953125 1239465zhbaindff(6)add from a text file: 请输入添加记录文件的文件名: data.txt 正在加载 已加载4个新记录!请查看姓名 办公室电话 家庭电话 手机号码 email地址 guh 5 6 2 3 lija
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手车买卖分期付款合同
- 爷爷的收音机珍贵的家庭物品写物10篇
- 二手房意向金协议
- 应急分队考试试题及答案
- 疫苗考试试题及答案
- 医药政策考试试题及答案
- 六一其它活动方案
- 六一奶茶店活动方案
- 六一安全活动方案
- 六一抓鱼活动方案
- 仪器仪表制造职业技能竞赛理论题库
- 网络服务器配置与管理(微课版) 教案 项目02 虚拟化技术和VMware-2
- 税收分析试题及答案
- 国家开放大学2025年《创业基础》形考任务3答案
- 《成本会计学(第10版)》课后参考答案 张敏
- LNG加气站质量管理手册
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 2021-2022学年江苏省扬州市高一下学期期末地理试题
- 司炉岗位应急处置卡(燃气)参考
- 最新四川省教师资格认定体检表
- 串并联电路电压表电流表(课堂PPT)
评论
0/150
提交评论