数据结构课程设计通讯录管理系统.docx
- 文档编号:24680230
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:41
- 大小:153.48KB
数据结构课程设计通讯录管理系统.docx
《数据结构课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录管理系统.docx(41页珍藏版)》请在冰豆网上搜索。
数据结构课程设计通讯录管理系统
辽宁科技大学
课程设计报告
设计题目:
通讯录管理系统
学院、系:
电子与信息工程学院
专业班级:
计算机11.班
学生姓名:
刘潘敏
指导教师:
龙艳彬
成绩:
2013年1月8日
一需求分析------------------------------------------------3
1.问题描述--------------------------------------------------3
2.基本要求--------------------------------------------------3
二概要设计-------------------------------------------------3
1.系统功能模块设计----------------------------------------3
2.算法描述----------------------------------------------------6
三详细设计--------------------------------------------------9
四原程序清单-----------------------------------------------19
五测试与分析-----------------------------------------------28
六总结--------------------------------------------------------32
一需求分析
1.问题描述
通过设计通讯录管理系统熟系数据结构中链表的操作,进一步增强程序设计的能力。
以把所学数据结构知识应用到实际软件开发中去,学会用数据结构解决实际问题。
2.基本要求
用〈〈数据结构〉〉中的双向链表作数据结构编写一个通讯录管理系统。
本系统应完成一下几方面的功能:
1)输入信息——enter();
2)显示信息———display();
3)查找以姓名作为关键字———search();
4)删除信息———delete();
5)存盘———save();
6)装入———load();
7)修改———Modify()
设计要求:
1)每条信息至包含:
姓名(NAME)街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项
2)作为一个完整的系统,应具有友好的界面和较强的容错能力
3)上机能正常运行,并写出课程设计报告
二概要设计
1.系统功能模块设计
1)本系统分为信息添加模块,信息查询模块,信息删除模块,信息修改模块,信息装入模块,信息存盘模块,信息显示模块。
2)模块图
3)调用关系图
2.算法思想
本程序的算法根基程序要实现功能进行算法说明。
1)信息添加算法:
函数add()
定义指针*p1,*p2建立新结点p=newPerson(name,eip,state,city,street);
p->next=0;
寻找尾结点
if(person)//若已经存在结点
{
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p->prior=p2;
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
2)信息查询算法:
函数search()
按名字进行查找
定义节点指针*p1,指向头结点,进行循环查找,知道把相同名字的人查找完
3)信息修改算法:
函数:
Modify()
按名字进行查找所要修改的人后,进行修改即可
4)信息删除算法
函数delete()
voidManage:
:
Delete()//删除人员
{
Person*p1,*p2;
intcount=0;
charName[20];
p1=person;
cout<<"请输入要删除人的名字:
"< cin>>Name; if(person) { while(p1) { if(strcmp(p1->Name,Name)==0) { count++; Output(p1); if(p1==person)//若要删除的结点是第一个结点 { if(p1->next==NULL) { person=NULL; p1=NULL;//把p1置空,不然会死循环! } else{ person=p1->next; person->prior=NULL; deletep1; p1=person; } } else//若要删除的结点是后续结点 { p2=p1->next; if(p2==NULL) { p1->prior->next=NULL; } else { p1->prior->next=p1->next; p1->next->prior=p1->prior; } deletep1; p1=p2;//替代原先的"p1=p1->next" } cout<<"\t\t***删除成功***\n"; } else p1=p1->next; } if(count==0) cout<<"查无此人无法删除\n"; } } 5)信息装入算法 } 函数Load()/ ifstreamfPerson; Person*p=person; charName[20],state[20],city[20],street[20], inteip; fPerson.open("person.txt",ios: : in); fPerson>>Name>>eip>>state>>city>>street; while(fPerson.good()) { p=newPerson(Name,eip,state,city,street); p->next=0; //结点加入链表 if(person)//若已经存在结点 { Person*p2; p2=person; while(p2->next)//查找尾结点 { p2=p2->next; } p2->next=p;//连接 } else//若不存在结点(表空) { person=p;//连接 } fPerson>>Name>>eip>>state>>city>>street; } fPerson.close(); } 6)信息存盘算法 函数save() ofstreamfPerson("Person.txt",ios: : out); charc; cout<<"\n保存数据,是否继续? [Y/N]: "; cin>>c; if(c! ='Y') return; Person*p=person; while(p) { fPerson< p=p->next; } fPerson.close(); cout<<"\n保存成功...\n"; 7)信息显示算法: 函数display() 定义节点指针*p,指向头结点,循环输出即可 三详细设计 定义类person 类成员: charName[20];//姓名 charcity[20];//城市 inteip;//邮编 charstate[20];//国家 charstreet[20];//街道 Person*next,*prior; 类的构造函数 Person(char*Name,inteip,char*state,char*city,char*street) {strcpy(this->Name,Name); strcpy(this->state,state); strcpy(this->city,city); strcpy(this->street,street); this->eip=eip; } }; 定义类person的友元类Manage 私有成员Person*person; Manage() { person=NULL; Load(); } 成员函数: ~Manage() { Person*p; p=person; while(p) { p=p->next; deleteperson; person=p; } person=0; } voidFind(charName[20]);//按姓名查找 voidAdd();//添加加信息 voidDelete();//删除信 voidQuery();//查询信息 voidSave();//保存数据 voidLoad();//读入数据 voiddisplay();//显示信息 voidModify(charName[20]);信息修改 voidOutput(Person*p) 主函数: intmain() { Managem; charname[20]; intc; cout<<"★*******★★★★★★*******★"< cout<<"****★辽宁科技大学计11-2班通讯录★************"< cout<<"★*******★★★★★★*******★"< do { cout<<"=========================================="< cout<<"★☆\t1.新增通讯录\t☆★"< cout<<"★☆\t2.删除通讯录\t☆★"< cout<<"★☆\t3.查询详细信息\t☆★"< cout<<"★☆\t4.保存数据\t☆★"< cout<<"★☆\t5.输出信息\t☆★"< cout<<"★☆\t6.修改信息\t☆★"< cout<<"=========================================="< cout<<"0-退出\t请选择(1-6): "; cin>>c; switch(c) { case1: m.Add();break; case2: m.Delete();break; case3: { m.search(); };break; case4: m.Save();break; case5: m.display();break; case6: cout<<"请输入要修改的人员的姓名"< cin>>name; m.Modify(name); } }while(c! =0); chars; cout<<"\n★是否要保存您的所有操作(Y/N): "< cin>>s; if(s=='Y') m.Save(); return0; } 菜单功能: 添加信息代码: voidManage: : Add() { Person*p,*p2;//新结点指 charstate[20]; charcity[20]; charstreet[20]; inteip; charname[20]; charc; cout<<"\n**新增学生通讯录**\n"; //输入学生信息 cout<<"输入姓名: \t"; cin>>name; cout< cout<<"输出邮政: \t"; cin>>eip; cout<<"输入国家: \t"; cin>>state; cout< cout<<"输入城市: \t"; cin>>city; cout<<"输入街道: \t"; cin>>street; cout< p=newPerson(name,eip,state,city,street); p->next=0; //学生结点加入链表 if(person)//若已经存在结点 { p2=person; while(p2->next)//查找尾结点 { p2=p2->next; } p->prior=p2; p2->next=p;//连接 } else//若不存在结点(表空) { person=p;//连接 } cout<<"\t\t\t***添加成功***\n"< while (1) { cout<<"是否继续添加(Y/N)"< cin>>c; if(c=='Y') { Add(); return; } else return; } } 测试结果 修改信息代码 voidManage: : Modify(charName[20]) { Person*p1; charc,name[20]; p1=person; while(p1) { if(strcmp(p1->Name,Name)==0) break; else { p1=p1->next; } } if(p1! =NULL)//若找到结 { cout<<"所要修改的学生的信息如下: \n"< Output(p1); cout<<"1.修改姓名2修改邮政3修改国家4修改城市,5修改街道,6退出修改\n"< cout<<"请选择(1-6)要修改的信息\n"< cin>>c; if(c! ='6') cout<<"请输入新的信息: "; switch(c) { case'1': cin>>p1->Name;break; case'2': cin>>p1->eip;break; case'3': cin>>p1->state;break; case'4': cin>>p1->city;break; case'5': cin>>p1->street;break; default: break; } cout<<"\t***修改成功***\n"< cout<<"是否继续修改(Y/N): "< cin>>c; if(c=='Y') { cout<<"请输入要修改人员的name: "; cin>>name; cout< Modify(name); return; } else return; } else//未找到结点 cout<<"未找到该学生! \n"; } 查询信息代码 voidManage: : search() { charc; charName[20]; do{ cout<<"1按名字查找,2退出查找"< cin>>c; cout< switch(c) { case'1': { cout<<"输入姓名Name: "; cin>>Name; Find(Name); };break; case'2': break; default: cout<<"输入有误请重新输入! ! ! \n"< } }while(c! ='1'&&c! ='2'); cout<<"\t\t\t***查找成功***\n"< cout<<"是否继续查找(Y/N)"< cin>>c; if(c=='Y') search(); else return; } voidManage: : Find(charName[20]) { Person*p1; intcount=0; p1=person; while(p1) { if(strcmp(p1->Name,Name)==0) { count++; Output(p1); } p1=p1->next; } if(count) { cout<<"\t查询成功! ! ! "< cout<<"\n共找到"< } else cout<<"\n\t\t未找到该学生! ! ! \n"< } 测试结果: 存盘代码 voidManage: : Save()//数据写入到文件 { ofstreamfPerson("tongxun.txt",ios: : out); charc; cout<<"\n保存数据,是否继续? [Y/N]: "; cin>>c; if(c! ='Y') return; Person*p=person; while(p) { fPerson< p=p->next; } fPerson.close(); cout<<"\n保存成功...\n"; cout<<"输出数据"< display(); } 测试结果 显示信息: voidManage: : display() { Person*p; p=person; while(p) { cout< p=p->next; cout< } } 四源程序清单 #include #include #include //usingnamespacestd; classPerson { protected: charName[20];//姓名 charcity[20];//城市 inteip;//邮编 charstate[20];//国家 charstreet[20];//街道 Person*next,*prior; public: Person(char*Name,inteip,char*state,char*city,char*street) {strcpy(this->Name,Name); strcpy(this->state,state); strcpy(this->city,city); strcpy(this->street,street); this->eip=eip; } friendclassManage; }; classManage { private: Person*person; public: Manage() { person=NULL; Load(); } ~Manage() { Person*p; p=person; while(p) { p=p->next; deleteperson; person=p; } person=0; } voidFind(charName[20]);//按姓名查找 voidAdd();//添加加信息 voidDelete();//删除信 voidsearch();//查询信息 voidSave();//保存数据 voidLoad();//读入数据 voiddisplay();//显示信息 voidModify(charName[20]); voidOutput(Person*p) { cout<<"\t\t姓名: "< cout<<"\t\t邮政: "< cout<<"\t\t国家: "< cout<<"\t\t城市: "< cout<<"\t\t街道"< cout< } }; voidManage: : Add() { Person*p,*p2;//新结点指 charstate[20]; charcity[20]; charstreet[20]; inteip; charname[20]; charc; cout<<"\n**新增学生通讯录**\n"; //输入学生信息 cout<<"输入姓名: \t"; cin>>name; cout< cout<<"输出邮政: \t"; cin>>eip; cout<<"输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 通讯录 管理 系统