1、 学生通讯录管理系统设计1 需求分析1.1 设计任务要求通讯录系统主要包含以下要求:(1)设计一个学生通讯录管理系统,每个学生数据信息包括:姓名、电话号码、qq、邮编和地址;(2)创建学生数据类型为结构体并以磁盘文件保存;(3)能读取磁盘文件并显示输出学生的相关信息;(4)能按姓名或电话等多种方式进行学生信息查询;(5)能查询、添加、修改和删除学生通讯录。1.2 系统功能需求分析系统主要包含以下主要功能:(1)查询通讯录记录;(2)添加通讯录记录;(3)修改通讯录记录;(4)删除通讯录记录;(5)关闭通讯录。2 概要设计2.1 数据类型本系统中所有变量都定义为字符串型,学生通讯录数据类型定义为
2、结构体类型。然而为了更加方便,添加了抽象数据类型类book,再私有继承了以结构体存储的学生数据。2.2 主程序及各程序层次关系以下是系统功能模块关系图,主要包含查询、添加、修改、删除联系人和关闭系统等功能。另外还提供了键盘式选择菜单实现功能选择。图2.1 系统功能模块关系图查询联系人:可以选择用姓名和电话两种方式查询添加联系人:可以添加通讯录记录,依次输入姓名、电话、qq、邮编和地址修改联系人:输入欲修改联系人姓名后,再依次输入修改姓名、电话、qq、邮编和地址即可完成修改删除联系人:输入欲删除联系人的姓名后,会自动删除该联系人的记录内容关闭系统:选择相关操作进行系统正常关闭,保存有效数据记录3
3、 详细设计3.1 实现数据类型(1)以字符串类型定义通讯录中学生数据信息变量:string name;/姓名 string number;/电话号码 string qq;/QQ号 string post;/邮编 string address;/地址(2)学生通讯录数据类型定义为结构体存储:struct inf string name;/姓名 string address;/地址 string number;/电话号码 string post;/邮编 string qq;/QQ号datatype;(3)实现类book私有继承结构体inf:class book:private infpublic:
4、 book();/默认构造函数 int face();/首页 void add_person();/添加联系人 void del_person();/删除联系人 void fix();/修改信息 void find();/查询联系人 void save_new();/保存新增加的联系人;3.2 实现各操作模块的功能(1)主函数的实现:int main() int choose; book b; while (choose = b.face() switch (choose) case 1: b.find();/查询联系人 break; case 2: b.add_person();/添加联系人
5、 break; case 3: b.fix();/修改信息 break; case 4: b.del_person();/删除联系人 break; case 5: cout endl 谢谢使用! endl endl; exit(0);/退出系统 break; default: break; return 0;(2)各操作模块函数的实现:void book:add_person()/添加联系人 cout endl 请根据提示输入信息 endl endl coutname; cout number; cout qq; cout post; cout address; save_new(); cou
6、t endl endl 新联系人信息已经保存好! endl endl; system(pause);/出现中文的显示:按任意键继续。void book:del_person()/删除联系人 ofstream outData(temp.txt, ios:out); ifstream inData(pbook.txt, ios:in); if (!outData | !inData) cout endl 对不起!找不到文件! endl; system(pause); return; string s; cout endl s; string str; bool flag = true; while
7、 (inData name number) getline(inData, str); if (s=name) | (s=number) cout endl 你想删除的联系人: endl endl;cout setiosflags(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl; cout setiosflags(ios:left) setw(17) name numberstr endlendl; flag = false; break; outData setiosflags(ios:
8、left) setw(17) name/将不删除的信息放到temp.txt number qqstr endl; if (flag) cout endl 对不起!联系人中没你找的人! endl endl; else/将temp.txt的数据复制到pbook.txt,直接覆盖要删除的信息,达到删除效果 while (getline(inData, str) outData str endl; outData.close(); inData.close(); ofstream out(pbook.txt, ios:out); ifstream in(temp.txt, ios:in); if (!
9、out | !in) cout endl 对不起!不能打开文件! endl endl; system(pause);return; while (getline(in, str) out str endl; out.close(); in.close(); cout endl 该联系人信息已从通迅录中删除! endl endl; system(pause); void book:fix()/修改信息 ofstream outData(temp.txt, ios:out); ifstream inData(pbook.txt, ios:in); /if (!outData | !inData)
10、cout endl 对不起!找不到文件! endl; system(pause); return; string s; cout endl s; bool flag = true; string str; while (inData name number) getline(inData, str); if (s=name) | (s=number) cout endl 你想修改的联系人: endl endl;cout setiosflags(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl
11、; cout setiosflags(ios:left) setw(17) name number str endl; cout endl 请根据下面提示修改信息 : endl; cout name; cout number; cout qq; cout post; cout address; save_new(); flag = false; break; outData setiosflags(ios:left) setw(17) name number str endl; if (flag) cout endl 对不起!联系人中没你找的人! endl endl; else while (
12、getline(inData, str) outData str endl; outData.close();inData.close(); ofstream out(pbook.txt, ios:out); ifstream in(temp.txt, ios:in); if (!out | !in) cout endl 对不起!不能打开文件! endl endl; system(pause);return; while (getline(in, str) out str endl; out.close();/ in.close(); cout endl 该联系人已在通迅录中修改! endl
13、endl; system(pause); void book:find()/查询联系人 ifstream inData(pbook.txt,ios:in); if (!inData) cout endl 对不起!文件找不到! endl; system(pause); return; string s; cout endl s; bool flag = true; string str; while (inData name number) getline(inData, str); if (name=s) | (number=s) cout endl 你要查找的联系人是: endl endl;
14、cout setiosflags(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl; cout setiosflags(ios:left) setw(17) name numberstr endlendl; flag = false; break; if(flag)coutendl该联系人不存在!endlendl; system(pause);void book:save_new()ofstream f(pbook.txt, ios:app); if (!f) cout endl 对不起!打
15、开文件失败! endl endl; system(pause);return; f setiosflags(ios:left) setw(17) name setw(16) number setw(18) qq setw(14) post setw(20) address endl; f.close();4 调试分析1.在程序的调试过程中遇上了文件存储数据的正确读取错误,但经过不断查问和查阅相关书籍后,根据调试提示错误,解决了所有错误。通过文件存储学生数据信息,使得读取信息操作更加方便、省事;2.在执行操作时,是根据文件搜索算法,去获取学生数据信息。使得在时间和空间上读取数据都要更加快捷、省事
16、。其时间复杂度为O();3.经过这一次的系统设计,使我认识到了实践的重要性,只有实践多了才能把知识学得好,学得牢。同时让我对数据结构得到了进一步的学习,以及对C+语言的学习得以提高,最后也大部分掌握了文件存储数据的相关操作。5 用户使用手册1.本程序的运行环境为WINDOWS操作系统,运行软件为Microsoft Visual C+;2.运行程序后即输出提示信息,由于在定义变量时已将需要输入的定义为string型变量,所以输入时需根据提示信息按要求输入;3运行程序后屏幕上会出现通讯录主菜单,然后根据需要选择1-5序号的操作,输入选定序号后,按Enter键,程序就会执行相关操作。比如输入序号1,
17、再按Enter键,程序就会运行查询联系人的代码操作,然后再根据提示进行查询工作即可;4.当以上操作完成后,程序将输出“按任意键继续.”此时,查询联系人工作的程序运行完毕。6 测试数据和数据结果(1)输入操作序号:2依次输入:wen 15111007203 997191620 123456 湖南长沙输出结果如下所示:(2)输入操作序号:1输入姓名:wen;(或电话号码:15111007203)输出结果如下所示:(3)输入操作序号:3输入姓名:wen重新依次输入要修改信息:wen 15111007203 997191620 654321 海南万宁输出结果如下所示:(4)输入操作序号:4输入姓名:w
18、en输出结果如下所示:(5)输入操作序号:5输出结果如下所示:参考文献1 严蔚敏,吴伟民. 数据结构(C语言版). 北京:清华大学出版社,1997.042 张晓莉,罗文劼,刘振鹏等。数据结构与算法。北京:机械工业出版社,2002.103 王宏生,宋继红。数据结构。北京:国防工业出版社,2006.014 孙淑霞,肖阳春,魏琴等.C/C+程序设计教程(第2版)。北京:电子工业出版社,2007.035 谭浩强。C+程序设计。北京:清华大学出版社,2004,06附录 源程序清单#include #include #include #include #include using namespace st
19、d;struct inf string name;/姓名 string address;/地址 string number;/电话号码 string post;/邮编 string qq;/QQ号datatype;class book:private infpublic: book();/默认构造函数 int face();/首页 void add_person();/添加联系人 void del_person();/删除联系人 void fix();/修改信息 void find();/查询联系人 void save_new();/保存新增加的联系人;/首页int book:face()sy
20、stem(cls);/清楚屏幕 cout endlendl; cout * endl # # endl # 通 迅 录 # endl # # endl # 1. 查询联系人. # endl # # endl # 2. 添加新联系人. # endl # # endl # 3. 修改联系人. # endl # # endl # 4. 删除联系人. # endl # # endl # 5. 关闭系统. # endl # # endl * endl endl choose; return choose;/添加联系人void book:add_person() cout endl 请根据提示输入信息 e
21、ndl endl name; cout number; cout qq; cout post; cout address; save_new(); cout endl endl 新联系人信息已经保存好! endl endl; system(pause);/出现中文的显示:按任意键继续。/删除联系人void book:del_person() ofstream outData(temp.txt, ios:out); ifstream inData(pbook.txt, ios:in); if (!outData | !inData) cout endl 对不起!找不到文件! endl; syst
22、em(pause); return; string s; cout endl s; string str; bool flag = true; while (inData name number) getline(inData, str); if (s=name) | (s=number) cout endl 你想删除的联系人: endl endl;cout setiosflags(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl; cout setiosflags(ios:left) se
23、tw(17) name numberstr endlendl; flag = false; break; outData setiosflags(ios:left) setw(17) name/将不删除的信息放到temp.txt number qqstr endl; if (flag) cout endl 对不起!联系人中没你找的人! endl endl; else/将temp.txt的数据复制到pbook.txt,直接覆盖要删除的信息,达到删除效果 while (getline(inData, str) outData str endl; outData.close(); inData.cl
24、ose(); ofstream out(pbook.txt, ios:out); ifstream in(temp.txt, ios:in); if (!out | !in) cout endl 对不起!不能打开文件! endl endl; system(pause); return; while (getline(in, str) out str endl; out.close();/ in.close(); cout endl 该联系人信息已从通迅录中删除! endl endl; system(pause); /修改信息void book:fix() ofstream outData(te
25、mp.txt, ios:out); ifstream inData(pbook.txt, ios:in); /if (!outData | !inData) cout endl 对不起!找不到文件! endl; system(pause); return; string s; cout endl s; bool flag = true; string str; while (inData name number) getline(inData, str); if (s=name) | (s=number) cout endl 你想修改的联系人: endl endl;cout setiosfla
26、gs(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl; cout setiosflags(ios:left) setw(17) name number str endl; cout endl 请根据下面提示修改信息 : endl; cout name; cout number; cout qq; cout post; cout address; save_new(); flag = false; break; outData setiosflags(ios:left) setw(17) n
27、ame number str endl; if (flag) cout endl 对不起!联系人中没你找的人! endl endl; else while (getline(inData, str) outData str endl; outData.close(); inData.close(); ofstream out(pbook.txt, ios:out); ifstream in(temp.txt, ios:in); if (!out | !in) cout endl 对不起!不能打开文件! endl endl; system(pause); return; while (getli
28、ne(in, str) out str endl; out.close();/ in.close(); cout endl 该联系人已在通迅录中修改! endl endl; system(pause); /查询联系人void book:find() ifstream inData(pbook.txt,ios:in); if (!inData) cout endl 对不起!文件找不到! endl; system(pause); return; string s; cout endl s; bool flag = true; string str; while (inData name number) getline(inData, str); if (name=s) | (number=s) cout endl 你要查找的联系人是: endl endl;cout setiosflags(ios:left) setw(17) 姓名 setw(16) 电话号码 setw(18) QQ setw(14) 邮编 setw(20) 地址 endl; cout setiosflags(ios:left) setw(17) name numberstr endlendl; flag = false; break; if(flag)coutendl该联系人不存在!en
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922