程序设计基础及数据结构课程设计报告通讯录管理系统.doc
通讯录管理系统程序设计基础及数据结构课程设计报告专 业: 班 级: 姓 名: 学 号: 指导教师: 2011年 07 月11 日目 录1 课程设计目的31.1课程设计目的31.2课程设计题目31.3题目要求32 需求分析52.1功能需求分析52.2方法需求分析63 概要设计73.1系统功能模块图73.2设计思想74 详细设计84.1主菜单84.2添加记录94.3删除记录94.4显示记录104.5修改记录114.6查询记录125 课程设计源代码135.1主菜单源代码135.2增加记录源代码135.3删除记录源代码155.4显示记录源代码175.5修改记录源代码185.6查询记录源代码216 测试分析236.1主菜单236.2增加记录236.3删除记录246.4显示记录246.5修改记录256.6查询记录256.7退出记录267.课程设计总结278.参考文献281.课程设计目的1.1课程设计的目的所学C+知识设计一个通讯录,熟悉C+语言的编程思想,学会应用C+语言开发小的应用软件,提高利用语言的实际应用能力,逐渐培养编程能力、用计算机解决实际问题的能力,达到学习语言的目的。1.2课程设计的题目通讯录管理。 1.3题目要求1.3.1问题描述(功能要求):学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。(1)能建立、修改和增删学生通讯录(2)能够按多种方式进行查询1.3.2问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; (3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的应用模块; (6)功能调试; (7)完成系统总结报告以及系统使用说明书。1.3.3其它要求:(1)只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块2.需求分析2.1功能需求分析 通讯录主要有以下模块:通讯录界面设计、添加记录、删除记录、显示记录、修改记录、查询记录。2.1.1通讯录主菜单主要功能是设计通讯录的界面,能够提示用户的实际操作等。按照序号来实现相应的操作,其中:1添加记录2删除记录3显示记录4修改记录5查询记录6 退出系统。2.1.2通讯录添加记录模块主要功能是添加新联系人记录,添加操作是根据用户的要求实现的。包括添加联系人的学号、姓名、性别、电话号码、出生日期、年龄、地址、Email等,最后输入完成后,将提示新联系人信息已经保存好!2.1.3通讯录删除记录模块主要功能是删除不再需要的联系人记录。其中包括输入要删除输入姓名或学号,如果没有的话,将提示:对不起!通讯录中无该人记录!如果找到,则提示删除联系人的所有信息和删除成功!2.1.4通讯录显示记录模块主要是显示所有的联系人的信息,包括学号、姓名、性别、电话号码、出生日期、年龄、地址、Email并提示所有联系人已经全部显示出来!2.1.5通讯录修改记录模块主要是修改联系人的信息,界面提示要输入需要修改的姓名或者电话号码,如果不正确,显示对不起!通讯录中无该人记录!。如果正确,则显示出要修改联系人的所有信息,并提示根据下面提示修改信息,学号、姓名、性别、电话号码、出生日期、年龄、地址、Email等2.1.6通讯录查询记录模块主要是查询联系人的信息,界面提示要输入需要查询的姓名或者电话号码,如果不正确,显示对不起!通讯录中无该人记录!。如果正确,则显示出所查询联系人的所有信息。2.1.7通讯录关闭通讯录模块提示谢谢使用!2.2 方法需求分析该系统由于数据可能会很大,故采用文件操作,能够打开或修改指定文件及将多个文件组成一个文件。而联系人的信息则通过类的对象来保存,它完全使用类来实现,充分体现面向对象的程序设计特点。3.概要设计3.1 系统功能模块图创建通讯录通讯录管理通讯录查询添加记录修改记录删除记录显示记录按姓名查询按学号查询将信息存入文件3.2 设计思想通讯录系统是用面向对象的方法设计,在类中定义 add_person( ),del_person( ),show_all( ),alter( ),select( ),save_new( )等方法和number,name,sex,phone,date,age,address,email等属性来实现通讯录的各种操作。4.详细设计4.1主菜单 4.1.1原型:menu()4.1.2返回值类型:char4.1.3功能:根据选单的选项内容调用个函数,并完成相应的功能。当输入1时,调用增加函数,并执行其相应的功能;当输入2时,调用删除函数,并执行其相应的功能;当输入3时,调用显示函数,并执行其相应的功能;当输入4时,调用修改函数,并执行其相应的功能;当输入5时,调用查询函数,并执行其相应的功能;当输入6时,调用推出函数,并执行其相应的功能。开始 654321exit()select()alter()show_all()del_person()add_person()结束主菜单流程图4.2增加记录 4.2.1原型:add_person() 4.2.2返回值类型:void 4.2.3功能:当用户手动输入这些信息时,在通讯录中增加此人的信息并返回主菜单。 开始 cin>>number>>name>>sex>>Phone>>date>>age>>address>>emailsave_new结束 增加记录流程图4.3删除记录4.3.1原型:del_person()4.3.2返回值类型:void4.3.3功能:当用户输入要删除人的姓名或学号时,系统自动按顺序查找。找到了此人的信息时,系统显示其信息并删除;若未找到此人的名字时,系统自动输出“对不起!通讯录中无该人记录!”。 开始sign number i=0 sign=name)| sign=number真删除信息假cout<<"对不起"Cout<<”删除成功”结束 删除记录流程图 4.4显示记录4.4.1原型:show_all()4.4.2返回值类型:void开始4.4.3功能:当用户选择该功能时,系统依次显示出通讯录所有联系人的信息。cout<<name<<number<<sex<<phone<<date<<age<<address<<email结束 显示记录流程图 4.5修改记录4.5.1原型:alter()4.5.2返回值类型:void4.5.3功能:当用户输入要修改人的姓名或学号时,系统自动找到此人的信息显示并提示用户修改,若未找到,系统自动输出“对不起!通讯录中无该人记录!”。开始signsign=name)| (sign=number真假cout<<name<<number<<sex<<phone<<date<<age<<address<<emailcout<<"对不起"cin>>name>>number>>sex>>phone>>date>>age>>address>>email结束 修改记录流程图4.6查询记录4.6.1原型:select()4.6.2返回值类型:void4.6.3功能:当用户输入查找人的姓名或学号时,系统自动按顺序查找,并显示其信息,若未找到此人信息,系统自动输出“对不起!通讯录中无该人记录!”。开始sign真sign=name)| (sign=number假Cout<<name<<number<<sex<<phone<<date<<age<<address<<emailcout<<"对不起"结束 查询记录流程图5.课程设计源代码5.1主菜单源代码:char book:menu() /菜单system("cls");cout <<endl<<"t 我的通讯录"<<endl<<endl;cout<<"t * * * * * * * * * * * * * 菜 单 * * * * * * * * * * * * * * *" <<endl<<"t * *" <<endl<<"t * 1. 添加记录 4. 修改记录 *"<<endl<<"t * *" <<endl<<"t * 2. 删除记录 5. 查询记录 *"<<endl<<"t * *" <<endl<<"t * 3. 显示记录 6. 退出系统 *"<<endl<<"t * *" <<endl<<"t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * " <<endl <<endl<<"t 选择:" ;char choose;cin >>choose;fflush(stdin);return choose; 5.2增加记录源代码: void book:add_person() /添加记录cout <<endl <<"请根据下面提示输入新联系人信息" <<endl <<endl<<"请输入联系人学号:" ;cin >>number;fflush(stdin);cout <<"请输入联系人姓名: "cin >>name;fflush(stdin);cout <<"请输入联系人性别: "cin >>sex;fflush(stdin);cout <<"请输入联系人电话号码: "cin >>phone;fflush(stdin);cout <<"请输入联系人出生年月: "cin >>date;fflush(stdin);cout <<"请输入联系人年龄: "cin >>age;fflush(stdin);cout <<"请输入联系人地址: "cin >>address;fflush(stdin); cout <<"请输入联系人Email: "cin >>email;fflush(stdin);save_new();cout <<endl <<"新联系人信息已保存好!" <<endl;system("pause");5.3删除记录源代码: void book:del_person() /删除记录ofstream outData("e:temp.txl", ios:out);ifstream inData("e:pbook.txl", ios:in); /if (!outData | !inData)cout <<endl <<"对不起!没有找到文件!" <<endl;system("pause");return;string sign;cout <<endl <<"请输入联系人姓名或学号:"cin >>sign;string str1;bool flag = true;string str;while (inData >>name >>number)getline(inData, str);if (sign=name) | (sign=number)cout <<endl <<"你想删除的联系人:" <<endl;cout <<str1 <<endl;cout <<setiosflags(ios:left) <<setw(10) <<name<<" " <<number <<str <<endl;flag = false;break;outData <<setiosflags(ios:left) <<setw(10) <<name<<" " <<number <<str <<endl;if (flag) cout <<endl <<"对不起!通讯录中无该人记录!" <<endl <<endl;elsewhile (getline(inData, str)outData <<str <<endl;outData.close();inData.close();ofstream out("e:pbook.txl", ios:out);ifstream in("e:temp.txl", 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"); 5.4显示记录源代码:void book:show_all() /显示记录ifstream inData("e:pbook.txl",ios:in);if (!inData)cout <<endl <<"对不起!没有找到文件!" <<endl;system("pause");return;bool flag = true;string record;while (getline(inData, record)if (flag)cout <<endl <<"-所有记录-n"cout<<"| 学号 | 姓名 |性别| 电话号码 |出生年月|年龄| 地址 | Email |n"cout <<endl<<record <<endl;flag = false;if (flag)cout <<endl <<"通迅录中未添加联系人!" <<endl <<endl;elsecout <<endl <<"以上为通讯录中所有记录!" <<endl <<endl;system("pause");5.5修改记录源代码:void book:alter() /修改记录ofstream outData("e:temp.txl", ios:out);ifstream inData("e:pbook.txl", ios:in); /if (!outData | !inData)cout <<endl <<"对不起!找不到文件!" <<endl;system("pause");return;string sign;cout <<endl <<"请输入联系人姓名或学号:"cin >>sign;string str1;bool flag = true;string str;while (inData >>name >>number)getline(inData, str);if (sign=name) | (sign=number)cout <<endl <<"你想修改的联系人:" <<endl ;cout <<str1 <<endl;cout <<setiosflags(ios:left) <<setw(10) <<name<<" " <<number <<str <<endl;cout <<endl <<"请根据下面提示修改信息: " <<endl;cout<<"请输入正确学号:" ; cin >>number; fflush(stdin); cout <<"请输入正确姓名: " cin >>name; fflush(stdin); cout <<"请输入正确性别: " cin >>sex; fflush(stdin); cout <<"请输入正确电话号码: " cin >>phone; fflush(stdin); cout <<"请输入正确出生年月: " cin >>date; fflush(stdin); cout <<"请输入正确年龄: " cin >>age; fflush(stdin); cout <<"请输入正确地址: " cin >>address; fflush(stdin); cout <<"请输入正确Email: " cin >>email; fflush(stdin);save_new();flag = false;break;outData <<setiosflags(ios:left) <<setw(10) <<name<<" " <<number <<str <<endl;if (flag)cout <<endl <<"对不起!通讯录中无该人记录!" <<endl <<endl;elsewhile (getline(inData, str)outData <<str <<endl;outData.close();inData.close();ofstream out("e:pbook.txl", ios:out);ifstream in("e:temp.txl", 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"); 5.6查询记录源代码:void book:select() /查询记录ifstream inData("e:pbook.txl",ios:in);if (!inData)cout <<endl <<"对不起!文件找不到!" <<endl;system("pause");return;string sign;cout <<endl <<"请输入联系人姓名或学号: "cin >>sign;fflush(stdin);string str1;bool flag = true;string str;while (inData >>name >>number)getline(inData, str);if (name=sign) | (number=sign)cout <<endl <<"您要查找的联系人是: " <<endl;cout <<str1 <<endl;cout <<setiosflags(ios:left) <<setw(11) <<name<<number <<str <<endl;flag = false;system("pause");break;6、调试分析6.1主菜单: 6.2添加记录:6.3删除记录:6.4显示记录:65修改记录:6.6查询记录:6.7退出系统:7. 课程设计总结刚开始拿到这个题目,感觉自己没有能力做完它,无从下手,后来在网上查阅了很多资料,才开始有点头绪。通过课程设计这门课程,我又重新温习了一下前面学过的知识,让我对C+及数据结构又有了进一步的认识。自己动手才能发现问题,解决问题。在这过程中,我发现自己的很多不足,平时没有掌握好的知识在这次设计中彻底暴露出来,经过不断的思考,不断查阅资料,不断上机运行,解决了其中大部分问题。但是收获还是不小的。虽然这次我代码部分没能研究彻底,但我觉得收获还是不少。我不仅对C+的操作有了进一步的掌握,还掌握了程序设计的风格及其注释的格式。感觉以前学的知识通过这个课程设计紧紧联系在一起了,把知识结合起来了。但我还是有太多的不足,如知识掌握不全面,在今后一定要改正。所以今后一定要多多实践,因为理论离不开实践,只有这样,才能把只是掌握透彻。8.参考文献 1C+程序设计 谭浩强 清华大学出版社2 数据结构 杨秀金 张红梅 西安电子科技大学出版社