1、C+编程之通讯录 “通讯录”程序设计报告 第一完成人:黄斌斌(2013211000) 第二完成人:刘炜伦(2013210999) 王 龙(2013210998)【设计背景】 设计一个本班同学的通讯录并能实现:1.通讯录的编辑(添加、删除及修改);2.能够按不同的项进行查找(例如按姓名、按电话号码查找);3.对已存的通讯录按不同的项进行排序;4.将通讯录写入文件;5.从文件读入通讯录。 备注:通讯录中至少应该有以下数据:姓名,地址,电话,邮编,E-mail。【设计思路】首先,通讯录要有一个主菜单,通过主菜单上面的选项进行对通讯录的操作。例如,浏览通讯录,将文件中保存的联系人在界面上显示供用户查阅
2、;通过添加、删除及修改选项对通讯录内存有的联系人进行修改;通过查找选项快速查找到所需查找的联系人讯息;通过退出选项退出程序。那么,在编写程序的时候首先要定义一个联系人的类 people 。然后编写主函数,使用户再选择退出选项之前可以随心所欲在通讯录中获得足够的讯息。【模块分析】本通讯录分为六大模块: 1.主界面模块; 2.浏览联系人模块; 3.添加联系人模块; 4.删除联系人模块; 5.修改联系人模块; 6查找联系人模块;1.主界面模块:主界面模块下图所示,主界面有六个选项可选择:浏览、新增、删除、修改、查找及退出。选择其中一个选项则跳到相应的模块,在其他模块进行操作完毕后返回主界面进行循环,
3、选择0.退出则为退出通讯录。 图 1 主界面操作指南:若输入为0-5,则进行相应的操作;若输入其他字符,就会显示“输入错误,请重新选择”,并循环回主界面,让用户重新选择。图 2 输入错误界面2.浏览联系人模块:选择主界面的1选项后跳到本模块,立即显示在通讯录中所有的联系人,并默认按姓名排序,此外,模块末尾处有七个选项,选择后可按不同的项对联系人进行排序,或者选择0.退出 返回主界面。图 3 浏览联系人界面操作指南:选择输入1-6进行不同项的排序,选择0返回主界面;若输入其他字符就会提示“选择有误,请重新进行选择:”,并让用户重新选择。图 4 输入错误界面3.添加联系人模块: 在主界面选择2.新
4、增进入此模块,随后用户可根据界面提示依次输入联系人的姓名、地址、电话号码、QQ号码、邮箱及邮政编码。输入完毕后程序将联系人保存至文件中,并将通讯录中所有联系人按姓名依次显示出来,方便用户确认保存成功,并在末尾显示“保存联系人成功!”字样。随后返回主界面供用户进行其他操作。4.查找联系人模块: 通过主界面的3选项进入此模块,此模块下可通过不同的选项进行查找联系人,并在查找成功后将所有符合条件的联系人显示出来,若搜索不到符合条件的联系人,则显示“查找的联系人不存在!”字样图 5 查找成功图 6 查找失败5.删除联系人模块: 在主界面选择4选项之后进入此模块,此模块会将文件中存有的所有通讯录联系人按
5、姓名依次显示,在每一个联系人前面有一个编号,用户只需输入所要删除的联系人的编号,便可从文件中删除此联系人的所有相关信息。并将剩余联系人按名字依次显示,让用户确信联系人已经删除,同时显示“删除联系人成功!”字样,随后返回主界面。图 7 删除联系人成功操作指南:若是输入编号之外的字符,则会显示“没有这个编号,请重新输入:”并让用户重新输入直至输入正确的编号。图 8 输入编号错误6.修改联系人模块: 在主界面选择5选项进入此模块,此模块会将文件中存有的所有通讯录联系人按姓名依次显示,在每一个联系人前面有一个编号,用户只需输入所要修改的联系人的编号,便会出现提示依次修改联系人的用户信息,保存到文件中,
6、显示文件中所有联系人并会出现“修改联系人成功!”字样,随后返回主界面。图 9 修改联系人输入图图 10 修改联系人显示图操作指南:若出入编号之外的字符,将会如删除联系人模块一样显示“没有这个编号,请重新输入:”字样,让用户重新输入直至输入正确的编号。【测试完善】 本通讯录在编写完毕后仍存在一些不足之处。首先是主界面选择时,如果用户输入0到5的其他字符如“a”,那么程序将会出现错误,只能强行关闭。随后我们采用了强制转换的方法,使得choose的值在0到7之内,避免程序崩溃。再一个是在删除联系人以及修改联系人的编号选择上也出现了同样的问题,但是编号的值范围可能是两位数或者三位数,那么强制转换的方法
7、就行不通了,所以使用到了 atoi 函数,使用这个函数能使输入的字符串中的数字字符转换成整型,而其他字符则转换为0。【附:源代码】 /by 2013210998 2013210999 2013211000#include#include#includeusing namespace std;class peoplepublic : people()name=0;addr=0;tele=0;qq=0;email=0;post=0; friend void scan();/浏览联系人,默认按名字排序 friend void add();/添加联系人 friend void del();/删除联系人
8、 friend void modify();/修改联系人信息 friend void search_name();/按姓名查找 friend void search_addr();/按地址查找 friend void search_tele();/按电话号码查找 friend void search_post();/按邮编查找 friend void search_email();/按邮箱查找 friend void search_qq(); /按QQ号码查找 friend void scan_addr(); friend void scan_tele(); friend void scan_
9、post(); friend void scan_email(); friend void scan_qq(); friend void show(); private:string name;string addr;string tele;string qq;string email;string post;people a200;/创建数组void arrange();void arrange_1()/输出排序选项 coutendl; cout 1.按姓名排序 2.按地址排序 3.按电话号码排序 endl;coutendl; cout 4.按邮编排序 5.按邮箱排序 6.按QQ号码排序 e
10、ndl;coutendl; cout 0.退出(返回首页) endl;coutendl; cout1) choose=7; else if(tem054) choose=7; else choose=tem0-48; return (choose);void search() /查找联系人函数 int choose=1;char tem;cout 1.按姓名查找 2.按地址查找 3.按电话号码查找 endl; cout 4.按邮编查找 5.按邮箱查找 6.按QQ号码查找 endl;cout 0.退出(返回首页) endl;cout请输入您的选择:; choose=choose_1(); swi
11、tch(choose) case 1:search_name();break; case 2:search_addr();break; case 3:search_tele();break; case 4:search_post();break; case 5:search_email();break; case 6:search_qq();break; case 0:break; coutendl; system(pause);void show()cout现有联系人:endl;coutendl; for(int i=0;(i200)&(ai.name!=0);i+)/按名字输出 cout编
12、号:i+1 姓名:ai.name ; cout地址:ai.addr 电话:ai.tele QQ:ai.qq ; cout邮箱:ai.email 邮编:ai.postendl; coutendl;void scan_addr() /按地址排序 scan();system(cls);int num=0; people b;for(int i=0;i200;i+) if(ai.addr=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.addr) b=aj+1;aj+1=aj;aj=b; show
13、();void scan_tele() /按电话号码排序 scan();system(cls);int num=0; people b;for(int i=0;i200;i+) if(ai.tele=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.tele) b=aj+1;aj+1=aj;aj=b; show();void scan_post() /按邮编排序 scan();system(cls);int num=0; people b;for(int i=0;i200;i+) if(ai
14、.post=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.post) b=aj+1;aj+1=aj;aj=b; show();void scan_email() /按邮箱排序 scan();system(cls);int num=0; people b;for(int i=0;i200;i+) if(ai.email=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.email) b=
15、aj+1;aj+1=aj;aj=b; show();void scan_qq() /按QQ号码排序 scan();system(cls);int num=0; people b;for(int i=0;i200;i+) if(ai.qq=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.qq) b=aj+1;aj+1=aj;aj=b; show();void arrange()/排序函数 int choose; do arrange_1(); choose=choose_1(); switc
16、h(choose) case 1:system(cls);scan();break; case 2:scan_addr();break; case 3:scan_tele();break; case 4:scan_post();break; case 5:scan_email();break; case 6:scan_qq();break; case 0:break; default:cout选择有误!请重新选择:;coutendl;system(pause);break; while(choose!=0);void modify()/修改联系人 people b;int num=0;char
17、 tem20; ifstream fin; fin.open(tongxunlu.txt,ios:in); for(int i=0;iai.nameai.addrai.teleai.qqai.emailai.post; fin.close(); for(int i=0;i200;i+) if(ai.name=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.name) b=aj+1;aj+1=aj;aj=b; show(); int k=0;cout=num|k=0)cout没有这么个编号,
18、请重新输入:;scanf(%s,&tem);k=atoi(tem); cout联系人“ak-1.name”将被修改!endl; coutak-1.name; coutak-1.addr; coutak-1.tele; coutak-1.qq; coutak-1.email; coutak-1.post; ofstream fout; fout.open(tongxunlu.txt,ios:out); system(cls);coutendl;coutendl; for(int i=0;(i200)&(ai.name!=0);i+) foutai.name ai.addr ai.tele ai.
19、qq ; foutai.email ai.postendl; fout.close(); scan(); cout修改联系人成功!endl;coutendl; system(pause); void del()/删除联系人 people b;int num=0,i=0,k=0;char tem20; ifstream fin; fin.open(tongxunlu.txt,ios:in); for(int i=0;iai.nameai.addrai.teleai.qqai.emailai.post; fin.close(); for(int i=0;i200;i+) if(ai.name=0)
20、 num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.name) b=aj+1;aj+1=aj;aj=b; show(); cout=num|k=0)cout没有这么个编号,请重新输入:;scanf(%s,&tem);k=atoi(tem); cout联系人“ak-1.name”将被删除!endl; system(pause); for(k;knum+1;k+) ak-1=ak; anum-1=people(); ofstream fout; fout.open(tongxunlu.txt,ios:
21、out); system(cls);coutendl;coutendl; for(int k=0;(k200)&(ak.name!=0);k+) foutak.name ak.addr ak.tele ak.qq ; foutak.email ak.postendl; fout.close(); scan(); cout删除联系人成功!endl;coutendl; system(pause); void add()/添加联系人 ofstream fout; fout.open(tongxunlu.txt,ios:app);/打开文件 string name;string addr;string
22、 tele;string qq;string email;string post; coutname; coutaddr; couttele; coutqq; coutemail; coutpost; foutname addr tele qq email postendl;/出入文件中 fout.close(); scan(); cout保存联系人成功!endl;coutendl; system(pause); void scan()/浏览联系人,默认按名字排序 people b;int num=0; ifstream fin; fin.open(tongxunlu.txt,ios:in);
23、 for(int i=0;iai.nameai.addrai.teleai.qqai.emailai.post; fin.close(); for(int i=0;i200;i+) if(ai.name=0) num=i;break;/num记录通讯录现有联系人个数 for(int i=0;i200;i+)/冒泡排序法 for(int j=0;jaj+1.name) b=aj+1;aj+1=aj;aj=b; cout现有联系人:endl;coutendl; for(int i=0;(i200)&(ai.name!=0);i+)/按名字输出 cout编号:i+1 姓名:ai.name ; cou
24、t地址:ai.addr 电话:ai.tele QQ:ai.qq ; cout邮箱:ai.email 邮编:ai.postendl; coutendl;void search_name()/按名字查找 ifstream fin; fin.open(tongxunlu.txt,ios:in); for(int i=0;iai.nameai.addrai.teleai.qqai.emailai.post; fin.close(); string tem;int k=0,i=0;couttem;for(i=0;i200&ai.name!=0;i+) if(ai.name=tem) k=1; cout编号:i+1 姓名:ai.name ; cout地址:ai.addr 电话:ai.tele QQ:ai.qq ; cout邮箱:ai.email 邮编:ai.postendl; if(k=0) cout查找的联系人不存在!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1