沈旻吉数据结构课程方案_第1页
沈旻吉数据结构课程方案_第2页
沈旻吉数据结构课程方案_第3页
沈旻吉数据结构课程方案_第4页
沈旻吉数据结构课程方案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

个人资料整理 仅限学习使用上海电力学院数据结构C++课程设计题 目:通讯录管理系统学生姓名: 沈旻吉学 号: 20183278院 系:计算机与信息工程学院专业年级:信息安全 2018级2018年6月28日个人资料整理 仅限学习使用一、设计题目通讯录管理系统实现一个通讯录管理系统。通讯录内容包括姓名及电话、QQ、E_mail四项内容。系统功能包括实现按姓名升序存放通讯录内容,查询某人信息,并在插入或修改一项新的信息后依然保持有序。最后将通讯录信息保存到数据文件中。二、需求分析1)运行环境<软、硬件环境)使用语言:C++软件环境:运行软件MicrosoftVisualC++6.0SP6系统软件Windows7旗舰版2)输入的形式和输入值的范围输入姓名和邮箱为字符型,范围为 -128~+127输入电话号码和QQ号为整型,范围为-2147483648~+21474836473)输出的形式描述程序运行后经过屏幕输出4)功能描述通讯录内容包括每个人的姓名及电话、QQ、E_mail四项内容;通讯录中的内容按姓名顺序<升序)存放;插入一项新的信息或修改一项信息后通讯录任然有序;查询某人的信息时,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息;修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息;删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息;能显示通讯录中的所有记录;采用菜单操作。通讯录的内容保存到数据文件中。5)测试数据姓名1:smj电话1:123QQ:123邮箱:123@163.com姓名2:yyf电话2:456QQ:456邮箱:456@163.com姓名3:vigoss电话3:789QQ:789邮箱:789@163.com修改用:姓名:cold电话:1QQ:1邮箱:1@163.com三、概要设计1)抽象数据类型定义描述<对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)1、student类:成员类型有姓名,电话号码,QQ号及邮箱地址。2、input 函数:输入:无前置条件:无功能:添加联系人信息个人资料整理 仅限学习使用输出:无3.output 函数:输入:无前置条件:表存在功能:用来排序并输出所有联系人的信息输出:依次输出联系人信息后置条件:表不变4、友元类AddressBook类:定义头指针,存放数据 key5、input 函数:输入:无前置条件:无功能:录入函数输出:无后置条件:若添加成功,表中增加一个新元素,并且写入文件6、find 函数:输入:无前置条件:found函数中有功能:子查找函数输出:当调用删除、修改操作时,如果找到了,则进入find函数找出该联系人的信息;如果未找到,则提示通讯录中没有此人的信息7、found函数:输入:无前置条件:表存在功能:查找函数输出:当调用查找操作时,如果找到了,则进入find函数找出该联系人的信息;如果未找到,则提示通讯录中没有此人的信息8、del函数:输入:无前置条件:表存在功能:删除函数输出:如果找到了,则删除该联系人信息,如果未找到,则提示通讯录中没有此人的信息9、show函数:输入:无前置条件:表存在功能:显示函数输出:依次输出联系人信息10、mend函数:输入:无前置条件:表存在功能:修改函数输出:如果找到了则显示该联系人信息并修改,如果未找到,则提示通讯录中没有此人的信息11、save函数个人资料整理 仅限学习使用输入:无前置条件:表存在功能:保存函数输出:将数据保存到数据文件中12、begin函数:输入:无前置条件:表存在功能:初始化函数输出:无13、clear 函数:输入:无前置条件:表存在功能:清空函数输出:无14、mainmenu函数:输入:无前置条件:表存在功能:主选菜单函数输出:无15、main函数:输入:无前置条件:表存在功能:主函数输出:无2)功能模块设计<如主程序模块设计)添加联系人信息模块:voidAddressBook::input(>排序并显示所有联系人信息模块:voidAddressBook::show(>查询联系人信息模块:voidAddressBook::find(>voidAddressBook::found(>查找并修改联系人信息模块:voidbook::mend(>查找并删除联系人信息模块:voidbook::del(>联系人信息写入文件模块:voidbook::save(>主程序模块:voidmain(>3)模块层次调用关系图个人资料整理 仅限学习使用主程序模块添加联系排序并显查询联系查询并修查询并删保存数据人信息模示所有联人信息模改联系人除联系人至文件中块系人信息块信息模块信息模块模块四、详细设计实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。类的定义及类中的成员函数:classstudent{protected:charname[20] 。inttel 。intQQ 。charE_mail[20] 。public:student*next 。student(>{}~student(>{}char*getname(>{returnnamevoidinput(>{

}cout<<"\t\t\tcout<<"\t\t

按提示输入:"<<endl输入姓名:"。

。cin>>name

。cout<<"\t\t

输入电话:"

。cin>>tel

。cout<<"\t\t

输入

QQ:"。cin>>QQ。cout<<"\t\t

输入

E_mail:"

。cin>>E_mail。}voidinput(ifstream&is>个人资料整理 仅限学习使用{is>>name>>tel>>QQ>>E_mail

。is.get(> 。}voidoutput(>{cout<<" 学生基本信息如下:"<<endlcout<<" 姓名:"<<name<<" 电话:"<<tel<<" QQ:"<<QQ<<" e_mail:"<<E_mail<<endl

。。}voidoutput(ofstream&os>{os<<setw(15><<name<<setw(15><<tel<<setw(20><<QQ<<setw(20><<E_mail<<endl。}friendclassAddressBook。}。classAddressBook{public:AddressBook(>{head=newstudent。head->next=NULL。key=0。}~AddressBook(>{deletehead。}voidinput(>。voidmend(>。voiddel(>。intfind(student**p,char*pn="^">。voidfound(>。voidshow(>。voidcount(>。voidsave(>。voidbegin(>。voidclear(>。charmainmenu(>。intgetkey(>{returnkey。}voidsetkey(intk>{key=k。}private:student*head。intkey。个人资料整理 仅限学习使用}。主要模块的伪码算法:添加联系人信息模块:voidAddressBook::input(>{student*p,*p2=NULLp=head。intn 。while(p->next>p=p->next 。while(n>{

。p2=newstudent

。p2->input(>p->next=p2

。。p2->next=NULL

。p=p->next

。AddressBook::setkey(1> 。cout<<"\t\t\t 按1继续,按

0返回

:"

。cin>>n

。}}排序并显示所有联系人信息模块:voidAddressBook::show(>{student*p,*qp=head->nextchartemp[20]

。。。while(p>{q=p->next

。while(q>{if(strcmp(p->name,q->name>==1>{strcpy(temp,q->name> 。strcpy(q->name,p->name> 。strcpy(p->name,temp> 。inttemp1 。temp1=q->tel 。q->tel=p->tel 。p->tel=temp1 。个人资料整理 仅限学习使用inttemp2 。temp2=q->QQ。q->QQ=p->QQ。p->QQ=temp2。chartemp3[20] 。strcpy(temp3,q->E_mail> 。strcpy(q->E_mail,p->E_mail> 。strcpy(p->E_mail,temp3> 。q=q->next}

。elseq=q->next

。}p=p->next。}student*p1 。p1=head->next 。while(p1>{p1->output(> 。p1=p1->next 。}}查询联系人信息模块:intAddressBook::find(student**p1,char*pn>{student*p 。p=head。while(p->next>{(*p1>=p 。if(!strcmp((p->next>->getname(>,pn>>{return1 。}p=p->next 。}return0 。}voidAddressBook::found(>{个人资料整理 仅限学习使用student*p 。charname[20]="^" 。cout<<"\t\t\t 输入要查找的姓名:"。cin>>name 。if(!find(&p,name>>{cout<<"\t\t 找不到你要查找的内容!"<<endl。return 。}(p->next>->output(> 。}查找并修改联系人信息模块:voidAddressBook::mend(>{student*p 。charname[20]="^" 。cout<<"\t\t\t 输入要修改的姓名:"。cin>>name 。if(!find(&p,name>>{cout<<"\t\t 找不到你要修改的内容!"<<endl。return 。}(p->next>->output(> 。(p->next>->input(> 。AddressBook::setkey(1> 。}查找并删除联系人信息模块:voidAddressBook::del(>{student*p,*p2 。charname

。cout<<"\t\t\t

输入要删除的姓名

:"

。cin>>name

。if(!find(&p,&name>>cout<<"\t\t 找不到你要删除的内容!"<<endl。(p->next>->output(> 。p2=p->next 。个人资料整理 仅限学习使用p->next=p2->next 。deletep2 。AddressBook::setkey(1> 。}联系人信息写入文件模块:voidAddressBook::save(>{student*p 。p=head。ofstreamos("student.txt",ios::out>

。if(AddressBook::getkey(>==1>{while(p->next>{(p->next>->output(os> 。p=p->next 。}}cout<<"\t\t\t 文件已保存!"<<endl 。AddressBook::setkey(0> 。}主程序模块:voidmain(>{AddressBookpp 。intk=1charn

。。pp.begin(> 。while(k==1>{n=pp.mainmenu(> 。switch(n>{case'1':pp.input(>case'2':pp.show(>case'3':pp.found(>

。break。。break。。break。case'4':pp.del(>case'5':pp.mend(>case'6':pp.save(>

。break。。break。。break。case'0':if(pp.getkey(>==1>{cout<<"\t\t\t

是否保存? 1:

保存

0:

不保存

:"

。cin>>k

。个人资料整理 仅限学习使用if(k==1>pp.save(> 。}pp.clear(> 。k=0 。break 。}}}五、调试分析包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。在调试过程中发现了很多问题,其中包括在实现升序输出的时候,我想运用冒泡排序的方法。起初直接将两个类进行交换,但始终实现不了。经过反复的调试之后,我尝试将类中的“name”、“tel”、“QQ”、“E_mail”分别一次交换,最终实现了升序输出。我的程序中的输入联系人信息函数时间复杂度为O<1),平均空间复杂度为0<n/2),输出联系人信息函数时间复杂度由于有冒泡排序法所以为O<n^2),平均空间复杂度为O<n),查询联系人信息函数平均时间复杂度为O<n),查询并修改联系人信息函数平均时间复杂度为O<1),查询并删除联系人信息函数平均时间复杂度为O<1)。调试过程中会有很多的问题,以前遇到问题时我总是显得很茫然不知所措,经过此次课程设计后,我通过逐条错误分析、修改语句,再反复调试,最终达到没有错误顺利运行,从而使我科服了以前的困难,编程和改错能力都有了质的提高。六用户使用说明详细列出每一步的操作说明。添加联系人信息:第一步:打开程序,进入主界面选择菜单。第二步:键盘输入1进入添加联系人程序,按照提示依次输入联系人的姓名、电话、QQ号还有邮箱地址,然后按回车回到主界面选择菜单。查询联系人信息<表中有联系人信息为前提,下同):第一步:进入主界面选择菜单。第二步:键盘输入3进入查询联系人信息程序,按照提示输入要查询的联系人姓名,按回车,如果找到了则显示该联系人的信息,如果没有找到则显示“查无此人”,然后按回车回到主界面选择菜单。查询并修改联系人信息:第一步:进入主界面选择菜单。个人资料整理 仅限学习使用第二步:键盘输入 5进入查询并修改联系人信息程序,按照提示输入要查询并修改的联系人姓名,按回车,如果找到了则提示输入修改后的信息,然后按照提示依次输入修改后的姓名、电话、 QQ号还有邮箱地址,然后按回车回到主界面选择菜单,如果没找到则提示“找不到你要查找的内容”,然后按回车回到主界面选择菜单。查询并删除联系人信息:第一步:进入主界面选择菜单。第二步:键盘输入4进入查询并删除联系人信息程序,按照提示输入要查询并修改的联系人姓名,按回车,如果找到了则删除该联系人信息,然后按回车回到主界面选择菜单,如果没找到则提示“找不到你要查找的内容”,然后按回车回到主界面选择菜单。排序并显示所有联系人信息:第一步:进入主界面选择菜单。第二步:键盘输入2进入排序并显示所有联系人信息程序,然后便会得到按照姓名升序排列以后所有联系人的信息,然后按回车回到主界面选择菜单。保存联系人信息第一步:进入主界面选择菜单。第二步:键盘输入6进入查询联系人信息程序,按照提示将数据存入“student.txt”文件,输入的内容已保存在此文件内。关闭通讯录:第一步:进入主界面选择菜单。第二步:键盘输入0则关闭通讯录,再按一下任意一个键则退出程序窗口。七、测试结果主界面选择菜单:个人资料整理 仅限学习使用添加新联系人:查询联系人信息:如果表中有联系人信息:个人资料整理 仅限学习使用如果表中有联系人信息但没有匹配的姓名:查询并修改联系人信息:如果表中有联系人信息且有相匹配的姓名:如果表中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论