通讯录管理系统 数据结构课程设计Word格式.docx
《通讯录管理系统 数据结构课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统 数据结构课程设计Word格式.docx(31页珍藏版)》请在冰点文库上搜索。
姓名2:
yyf电话2:
456QQ:
456邮箱:
456@
姓名3:
vigoss电话3:
789QQ:
789邮箱:
789@
修改用:
姓名:
cold电话:
1QQ:
1邮箱:
1@
三、概要设计
1)抽象数据类型定义描述
(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)
1、student类:
成员类型有姓名,电话号码,QQ号及邮箱地址。
2、input函数:
输入:
无
前置条件:
功能:
添加联系人信息
输出:
3.output函数:
表存在
用来排序并输出所有联系人的信息
依次输出联系人信息
后置条件:
表不变
4、友元类AddressBook类:
定义头指针,存放数据key
5、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)功能模块设计(如主程序模块设计)
1.添加联系人信息模块:
voidAddressBook:
:
input()
2.排序并显示所有联系人信息模块:
show()
3.查询联系人信息模块:
find()
found()
4.查找并修改联系人信息模块:
voidbook:
mend()
5.查找并删除联系人信息模块:
del()
6.联系人信息写入文件模块:
save()
7.主程序模块:
voidmain()
3)模块层次调用关系图
四、详细设计
实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。
类的定义及类中的成员函数:
classstudent
{
protected:
charname[20];
inttel;
intQQ;
charE_mail[20];
public:
student*next;
student(){}
~student(){}
char*getname(){returnname;
}
voidinput()
{
cout<
<
"
\t\t\t按提示输入:
endl;
\t\t输入姓名:
"
;
cin>
>
name;
cout<
\t\t输入电话:
cin>
tel;
\t\t输入QQ:
QQ;
\t\t输入E_mail:
E_mail;
}
voidinput(ifstream&
is)
is>
name>
tel>
QQ>
is.get();
voidoutput()
学生基本信息如下:
姓名:
name
<
电话:
tel
QQ:
QQ
e_mail:
E_mail<
voidoutput(ofstream&
os)
os<
setw(15)<
setw(20)<
E_mail
friendclassAddressBook;
};
classAddressBook
{
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;
主要模块的伪码算法:
student*p,*p2=NULL;
p=head;
intn;
while(p->
next)
p=p->
next;
while(n)
p2=newstudent;
p2->
input();
p->
next=p2;
AddressBook:
setkey
(1);
\t\t\t按1继续,按0返回:
n;
student*p,*q;
p=head->
chartemp[20];
while(p)
q=p->
while(q)
if(strcmp(p->
name,q->
name)==1)
{
strcpy(temp,q->
name);
strcpy(q->
name,p->
strcpy(p->
name,temp);
inttemp1;
temp1=q->
q->
tel=p->
p->
tel=temp1;
inttemp2;
temp2=q->
QQ=p->
QQ=temp2;
chartemp3[20];
strcpy(temp3,q->
E_mail);
E_mail,p->
E_mail,temp3);
q=q->
}
elseq=q->
student*p1;
p1=head->
while(p1)
p1->
output();
p1=p1->
intAddressBook:
find(student**p1,char*pn)
student*p;
(*p1)=p;
if(!
strcmp((p->
next)->
getname(),pn))
return1;
return0;
charname[20]="
\t\t\t输入要查找的姓名:
find(&
p,name))
\t\t找不到你要查找的内容!
return;
(p->
\t\t\t输入要修改的姓名:
if(!
\t\t找不到你要修改的内容!
student*p,*p2;
charname;
\t\t\t输入要删除的姓名:
p,&
name))
\t\t找不到你要删除的内容!
p2=p->
next=p2->
deletep2;
ofstreamos("
student.txt"
ios:
out);
if(AddressBook:
getkey()==1)
output(os);
\t\t\t文件已保存!
setkey(0);
AddressBookpp;
intk=1;
charn;
pp.begin();
while(k==1)
n=pp.mainmenu();
switch(n)
case'
1'
pp.input();
break;
2'
pp.show();
3'
pp.found();
4'
pp.del();
5'
pp.mend();
6'
pp.save();
0'
if(pp.getkey()==1)
\t\t\t是否保存?
1:
保存0:
不保存:
k;
if(k==1)
pp.save();
pp.clear();
k=0;
五、调试分析
包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。
在调试过程中发现了很多问题,其中包括在实现升序输出的时候,我想运用冒泡排序的方法。
起初直接将两个类进行交换,但始终实现不了。
经过反复的调试之后,我尝试将类中的“name”、“tel”、“QQ”、“E_mail”分别一次交换,最终实现了升序输出。
我的程序中的输入联系人信息函数时间复杂度为O
(1),平均空间复杂度为0(n/2),输出联系人信息函数时间复杂度由于有冒泡排序法所以为O(n^2),平均空间复杂度为O(n),查询联系人信息函数平均时间复杂度为O(n),查询并修改联系人信息函数平均时间复杂度为O
(1),查询并删除联系人信息函数平均时间复杂度为O
(1)。
调试过程中会有很多的问题,以前遇到问题时我总是显得很茫然不知所措,经过此次课程设计后,我通过逐条错误分析、修改语句,再反复调试,最终达到没有错误顺利运行,从而使我科服了以前的困难,编程和改错能力都有了质的提高。
六用户使用说明
详细列出每一步的操作说明。
1.添加联系人信息:
第一步:
打开程序,进入主界面选择菜单。
第二步:
键盘输入1进入添加联系人程序,按照提示依次输入联系人的姓名、电话、QQ号还有邮箱地址,然后按回车回到主界面选择菜单。
2.查询联系人信息(表中有联系人信息为前提,下同):
进入主界面选择菜单。
键盘输入3进入查询联系人信息程序,按照提示输入要查询的联系人姓名,按回车,如果找到了则显示该联系人的信息,如果没有找到则显示“查无此人”,然后按回车回到主界面选择菜单。
3.查询并修改联系人信息:
键盘输入5进入查询并修改联系人信息程序,按照提示输入要查询并修改的联系人姓名,按回车,如果找到了则提示输入修改后的信息,然后按照提示依次输入修改后的姓名、电话、QQ号还有邮箱地址,然后按回车回到主界面选择菜单,如果没找到则提示“找不到你要查找的内容”,然后按回车回到主界面选择菜单。
4.查询并删除联系人信息:
键盘输入4进入查询并删除联系人信息程序,按照提示输入要查询并修改的联系人姓名,按回车,如果找到了则删除该联系人信息,然后按回车回到主界面选择菜单,如果没找到则提示“找不到你要查找的内容”,然后按回车回到主界面选择菜单。
5.排序并显示所有联系人信息:
键盘输入2进入排序并显示所有联系人信息程序,然后便会得到按照姓名升序排列以后所有联系人的信息,然后按回车回到主界面选择菜单。
6.保存联系人信息
键盘输入6进入查询联系人信息程序,按照提示将数据存入“student.txt”文件,输入的内容已保存在此文件内。
7.关闭通讯录:
键盘输入0则关闭通讯录,再按一下任意一个键则退出程序窗口。
七、测试结果
1.主界面选择菜单:
2.添加新联系人:
3.查询联系人信息:
如果表中有联系人信息:
如果表中有联系人信息但没有匹配的姓名:
4.查询并修改联系人信息:
如果表中有联系人信息且有相匹配的姓名:
如果表中没有联系人信息:
5.查询并删除联系人信息:
6.排序并显示所有联系人信息:
7.联系人信息写入文件:
八、附录:
程序设计源代码
#include<
iostream>
string>
stdio.h>
stdlib.h>
fstream>
iomanip>
usingnamespacestd;
//录入函数
//子查找函数
strcmp(p->
next->
getname(),pn))
//查找函数
//删除函数
//cout<
strlen(name);
p,name))
return;
//显示函数
n