1、课程设计任务书 2011—2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 1月 6 日共 1 周 一、设计目的 熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。 二、设计要求 在本课程设计过程中要求学生: (1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务; (2)按照课程设计的题目要求,独立地完成各
2、项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩。 (3)学生在接受设计任务后,根据要求认真完成。 (4)认真编写课程设计报告。 三、设计内容 1) 问题描述 人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。 2) 基本要求 (1) 在外存上,用文件保存电话号码信息; (2) 在内存中,设计数据结构存储电话号码信息; (3) 提供查询功能:根据姓名实现快速查询; (4) 提供其他维护功
3、能:例如插入、删除、修改等; (5) 按电话号码进行排序。 3) 设计思想 由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,所以电话号码信息采用文件的形式存放到外存中。在系统运行时,需要将电话号码信息从文件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以设计如下结构类型的数组来接收数据: const int max=10; struct TeleNumber { string name; //姓名 string phoneNumber; //固定电话号
4、码 string mobileNumber; //移动电话号码 string email; //电子邮箱 } Tele[max]; 为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,在数组中实现插入和删除操作的代价较高。如果记录需频繁进行插入或删除操作,可以考虑采用二叉排序树组织电话号码信息,则查找和维护都能获得较高的时间性能。更复杂地,需要考虑该二叉排序树是否平衡,如何使之达到平衡。 四、参考文献 1.王红梅.数据结构.清华大学出版社 2.王红梅.数据结构学习辅导与实验指导.清华大学出版社 3.
5、严蔚敏, 吴伟民.数据结构(C语言版). 清华大学出版社 目录 一、需求分析 2 二、总体设计 2 三、详细设计 4 四、调试与测试 9 五、关键源程序清单和执行结果 9 六、感想与体会 17 一、需求分析 1.程序的功能: 能够完成通讯录链表的建立、通讯者的插入、通讯者的查询、显示所有通讯者的信息、通讯录修改除名字外的其他信息、把txt文本中的信息导入到程序中、保存程序中打的信息导出到文本中保存以及通讯录表的退出等功能 2. 输入输出的要求: 程序运行后,给出7个菜单项的内容和输入提示: 1.增加电话号码
6、 2.显示电话号码 3.排序个人电话 4.查找个人电话 5.删除个人信息 6.修改个人信息 7.保存个人信息 二、总体设计 主程序 修改 查找 保存 删除 排序 显示 增加 图一 程序框架图 主程序 是否有电话号码 增加电话号码
7、 N Y 插入联系人 显示联系人 排序电话号码 查找联系人 删除联系人 修改联系人 图二 程序设计流程图 三、详细设计 (1)先定义结构体: struct TeleNumber
8、 //数据类 { char name[10]; //姓名 int phoneNumber; //固定电话号码 int mobileNumber; //移动电话号码 int s; TeleNumber * Next; void ReadFile(istream & in); void input(); void display(); } ; (2)主函数: 输出菜单项,再通过输入1--7这几个数字,利用switch语句实现子函数调用。 int main() { bool
9、flag=true;
TeleMessage tele;
char name[20];
while(flag)
{
system("cls");
cout<<"1.增加电话号码"< 10、cin>>x;
switch(x)
{
case 0:flag=false;break;
case 1:tele.Insert();break;
case 2:tele.Show();break;
case 3:tele.Sort();break;
case 4:
cout<<"请输入欲查找认得姓名"< 11、
case 7:tele.Save();break;
}
cout<<"输入任意字母返回"< 12、dl<<"插入成功"< 13、
{
temp=p->Next;
p->Next=p->Next->Next; //摘链
delete temp;
cout<<"\t\t删除成功!"< 14、)
{
if(x==4)
{
p->display();
return p;
}
else
return p;
}
if(x==4)
cout<<"查无此人"< 15、t<<"\t\t已找到个人的信息,请输入新的信息!"< 16、输入"< 17、1;i 18、//建立外存文件TeleNumber.txt
for(TeleNumber *p=Head->Next;p!=End;p=p->Next)
out< 19、晰,指针的知识掌握的不够。
五.关键源程序清单和执行结果
#include 20、int s;
TeleNumber * Next;
void ReadFile(istream & in);
void input();
void display();
} ;
void TeleNumber::ReadFile(istream & in) //从文件把数据读入到程序
{
in>>name>>phoneNumber>>mobileNumber;
}
void TeleNumber::input() //信息输入
{
cout<<"请输入姓名"< 21、>>name;
cout<<"请输入固定电话号码"< 22、 //功能类
{
public:
TeleMessage(); //构造数据结构
~TeleMessage(); //释放单链表
void Save(); //数据保存到文件
TeleNumber * Search(char *); //信息查找
void Sort(); 23、 //排序
void Insert(); //插入
void Remove(); //删除
void Change(); //更改
void Show(); //显示
void Swap(TeleNumber *,TeleNumber *); //两个TeleNumber对象交换数据域
private:
TeleNumber * 24、End,* Head;
ifstream in; //定义读,写文件对象
ofstream out;
};
TeleMessage::TeleMessage()
{
Head=new TeleNumber; //头插法建立单链表
Head->Next=new TeleNumber;
End=Head->Next;
in.open("TeleNumber.txt"); //打开外存文件,看是否有数据存在
i 25、f(!in)
cout<<"电话系统中没有任何号码,请输入号码"< 26、母继续"< 27、 //保存文件
{
out.open("TeleNumber.txt"); //建立外存文件TeleNumber.txt
for(TeleNumber *p=Head->Next;p!=End;p=p->Next)
out< 28、p(TeleNumber *p1,TeleNumber *p2) //两个类对象数据域进行交换
{
TeleNumber * temp=new TeleNumber;
strcpy(temp->name,p1->name);
temp->mobileNumber=p1->mobileNumber;
temp->phoneNumber=p1->phoneNumber;
temp->s=p1->s;
strcpy(p1->name,p2->name);
p1->mobileNumber=p2->mobileNumber; 29、
p1->phoneNumber=p2->phoneNumber;
p1->s=p2->s;
strcpy(p2->name,temp->name);
p2->mobileNumber=temp->mobileNumber;
p2->phoneNumber=temp->phoneNumber;
p2->s=temp->s;
}
void TeleMessage::Sort() //起泡排序
{
TeleNumber *p=NULL,*q=NULL;
int exchange=j-1;
i 30、nt bound;
int i;
while(exchange)
{
bound=exchange;
exchange=0;
for(p=Head->Next,i=1;i 31、 //插入
{
End->input(); //从单链表尾部插入
End->Next=new TeleNumber;
End=End->Next;
cout< 32、
cout<<"请输入要删除人的姓名:"< 33、 }
}
TeleNumber * TeleMessage::Search(char * name)
{
for(TeleNumber *p=Head->Next;p!=End;p=p->Next)
if(!strcmp(p->name,name))
{
if(x==4)
{
p->display();
return p;
}
else
return p;
}
if(x==4)
cout<<"查无此人"< 34、Change() //修改信息
{
char name[20];
cout<<"请输入要修改的人的姓名:";
cin>>name;
if(Search(name))
{
cout<<"\t\t已找到个人的信息,请输入新的信息!"< 35、 * p=Head->Next;
if( p!=End){ for(;p!=End;p=p->Next)
p->display(); }
else cout<<"没有信息,请先输入"< 36、endl;
cout<<"4.查找个人电话"< 37、ut<<"请输入欲查找认得姓名"< 38、 图四 显示联系人
图五 排序电话号码
图六 查找联系人
图七 修改联系人
图八 保存成功
六、感想与体会:
这次课程设计加深了对结构体的理解,以及文件流的一些深入理解,但还是不太会把文本文件导入到程序中,而且导出到文件中的内容会形成乱码,所以仍需进一步的学习,以能更加熟练的运用数据结构(C++)来设计系统。刚开始我会发现有些小问题,在运行程序的时候,删除功能不能实现,但在经过老师的指导以及同学的帮助下,我还是很好的完成了任务。
17






