数据结构
课外实践报告
项 目 名 称: 通讯录的管理
所 在 班 级: 计算机科学与技术
小 组 成 员: ***********************
任 课 教 师: ******
起 止 时 间: 2012.11.19——2012.12.16
项目基本信息
课外实践评定成绩记录
一、 问题描述及分析
随着通讯业发展,学生生活中需要一种电子电话号码本,也为预防手机故障、遗失造成联
系电话丢失,设计该通讯录查询系统,需要实现添加、插入、查找、修改、删除、显示、读取
保存信息等功能。用链表的结构来存储数据,共有9个模块,
imenu函数是主菜单,
用InsertCon函数实现插入联系人的基本信息的功能,
用 AddDataType函数实现初始化联系人的基本信息的功能,
用FindCon函数实现查找联系人的基本信息的功能,
用 changeMessage函数实现修改联系人的基本信息的功能,
用 DeleteMessage函数实现删除联系人的基本信息的功能,
用showmessage函数实现显示联系人的基本信息的功能,
用 saveFilelinklist函数实现保存联系人的基本信息的功能,
用 readFilelinklist函数实现读取联系人的基本信息的功能,
使用的是头插法定义链表,从尾部插入的方法实现链表。在主函数则是用一个switch函数控
制和一个整数型全局变量,可以来选择链表函数,也实现了函数的循环使用。
二、 功能模块及数据结构描述
1、主菜单menu
{ 创建窗口“通讯录管理系统”;}
2、初始化联系人的基本信息 AddDataType
{ 通过该函数实现初始化联系人基本信息的功能 }
3、插入联系人的基本信息InsertCon
{ 通过该函数实现插入联系人基本信息的功能 }
4、查找联系人的基本信息FindCon
{ 通过该函数实现查找联系人基本信息的功能 }
5、修改联系人的基本信息 changeMessage
{ 通过该函数实现修改某个联系人某些基本信息的功能 }
6、删除联系人的基本信息DeleteMessage
{ 通过该函数实现删除某个联系人全部信息的功能 }
7、保存文件saveFilelinklis
{ 通过该函数实现保存已输入信息的功能 }
8、读取文件内容 readFilelinklist
{ 通过该函数实现读取文件中信息的功能 }
9、显示信息showmessage
{ 通过该函数实现显示已存入的全部联系人的基本信息的功能 }
三、 主要算法流程描述及部分核心算法
1、算法流程图
2、部分核心算法
(1)初始化联系人的基本信息
int AddDataType(linklist *&L)
{
linklist *p,*q;
if(L==NULL)
{
L=(linklist*)malloc(sizeof(linklist));
L->next=NULL;
}
int i,n;
system("CLS");
q=L;
cout<<"请输入你想输入联系人的人数:"<<endl;
cin>>n;
for(i = 1;i<= n;i++)
{
p = (linklist *)malloc(sizeof(linklist));
cout << "开始添加第"<<i<<"个联系人信息:"<< endl;
cout << "请输入联系人编号:";
cin >>p->ID ;
find(L,p->ID);
cout << "请输入联系人姓名:";
cin >> p->name;
cout << "请输入联系人姓别:";
cin >> p->sex ;
cout << "请输入联系人班级:";
cin >> p->Class ;
cout << "请输入联系人住址:";
cin >> p->Addr ;
cout << "输入手机号:";
cin >> p->Mobi ;
p->next=L->next;
L->next=p;
}
return 0;
}
(2)插入联系人的基本信息
int InsertCon(linklist *&L)
{
linklist *p;
if(L ==NULL)
{
cout << "还没有添加任何联系人,请先添加联系人!!"<< endl;
return 0;
}
p = (linklist *)malloc(sizeof(linklist));
cout << "请依次输入被插入人的信息:编号 姓名 性别 班级 住址 手机号"<< endl;
cout << "请输入联系人编号:";
cin >>p->ID ;
find(L,p->ID);
cout << "请输入联系人姓名:";
cin >> p->name;
cout << "请输入联系人姓别:";
cin >> p->sex ;
cout << "请输入联系人班级:";
cin >> p->Class ;
cout << "请输入联系人住址:";
cin >> p->Addr ;
cout << "输入手机号:";
cin >> p->Mobi ;
p->next=L->next;
L->next=p;
saveFilelinklist(L );
system("CLS");
cout<<" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
<<" >> << "<<endl
<<" >> 信息修改成功! 已保存修改! << "<<endl
<<" >> << "<<endl
<<" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<<endl;
return 0;
}
(3)查找联系人的基本信息
int FindCon(linklist *&L)
{
system("CLS");
char na[20];
linklist *p,*q;
if(L == NULL)
{
cout << "没有联系人的信息,请先添加"<< endl;
return 0;
}
cout << "请您输入要查找人的姓名:"<< endl;
cin >> na;
p = L;
while(p!= NULL)
{
if(strcmp(p->name ,na)==0)
{
q = p;
cout << "找到联系人,信息如下!!"<< endl;
cout << "-----------------------------------------------------------"<<endl
<< "······························"<<endl
<< "-----------------------------------------------------------"<<endl
<<"编号:"<<q->ID <<endl
<< "-----------------------------------------------------------"<<endl
<<"姓名:" <<q->name <<endl
<< "-----------------------------------------------------------"<<endl
<<"性别: " <<q->sex<<endl
<< "-----------------------------------------------------------"<<endl
<<"班级: " <<q->Class <<endl
<< "-----------------------------------------------------------"<<endl
<<"住址: " <<q->Addr <<endl
<< "-----------------------------------------------------------"<<endl
<<"手机号: " <<q->Mobi <<endl
<< "-----------------------------------------------------------"<<endl;
break;
}
else
p = p->next ;
}
return 0;
}
(4)修改联系人的基本信息
int changeMessage(linklist *&L)
{
linklist *p;
char id[10];
char nam[10];
char sex[5];
char Addr[50];
char Class[20];
char Mobi[20];
if(L == NULL)
{
cout<< "没有任何信息,请返回添加信息!!!"<< endl;
return 0;
}
else
p = L;
cout << "请你输入要修改的人的名字:";
cin >> nam;
while(p != NULL && p->name != nam)
{
if(strcmp(p->name ,nam)==0)
{
strcpy(p->name ,nam);
int choose;
do
{
cout << "请选择要修改哪一项的信息!!!"<< endl;
cout << "1 修改编号 2 修改性别 3 修改班别 4 修改地址 5 修改手机号码 " << endl;
cin >> choose;
switch(choose)
{
case 1:
cout << "请输入要修改后的编号:";
cin >> id;
find(L,id);
strcpy(p->ID ,id);
cout << "编号修改成功!!!"<< endl;
system("CLS");
return 0;
break;
case 2:
cout << "请输入要修改后的性别:";
cin >> sex;
strcpy(p->sex , sex);
cout << "性别修改成功!!!"<< endl;
system("CLS");
return 0;
break;
case 3:
cout << "请输入修改后的班别:";
cin >> Class;
strcpy(p->Class ,Class);
system("CLS");
cout << "班别修改成功!!!"<< endl;
return 0;
break;
case 4:
cout << " 请输入修改后的地址:";
cin >> Addr;
strcpy(p->Addr ,Addr);
system("CLS");
cout << "地址修改成功!!!"<< endl;
return 0;
break;
case 5:
cout << "请输入修改后的手机号码:";
cin >> Mobi;
strcpy(p->Mobi ,Mobi);
system("CLS");
cout << "手机号修改成功!!!"<< endl;
return 0;
break;
default:
cout << "输入错误,重新选择!!" << endl;
break;
}
}while(choose != 0);
}
else if(p->next != NULL && p->name != nam)
{
p = p->next ;
}
else
{
cout << "输入名字错误,请重新选择4修改!!!" << endl;
return 0;
}
}
}
(5)删除联系人的基本信息
int DeleteMessage(linklist *&L)
{
linklist *p,*q;
char a[20];
cout << "请输入要删除联系人的姓名:";
cin >> a;
if(L == NULL)
{
cout << "没有任何信息可删除,请添加信息!!"<< endl;
return 0;
}
p=L->next;
q=L;
while(p!=NULL)
{
if(strcmp(p->name ,a)==0)
{
q->next=p->next;
delete(p);
cout<<"该联系人已成功删除"<<endl;
return 0;
}
q=q->next;
p=p->next;
}
while(p==NULL)
{
cout<<"对不起,没有该联系人"<<endl;
return 0;
}
}
(6)保存文件
int saveFilelinklist(linklist *&L )
{
char *fileName;
FILE *fp;
linklist *p;
p = (linklist *)malloc(sizeof(linklist));
if(p==NULL)
{
cout <<"分配内存失败"<< endl;
}
if(L==NULL)
{
cout <<"没有任何信息,请先添加信息!!"<< endl;
return 0;
}
else
{
ofstream fout("123.txt",ios::out);
if(!fout)
{
cout<<"cannot open output file.\n";
return 1;
}
p=L->next;
do
{
fout<<p->ID;
fout<<" ";
fout<<p->name;
fout<<" ";
fout<<p->sex;
fout<<" ";
fout<<p->Class;
fout<<" ";
fout<<p->Addr;
fout<<" ";
fout<<p->Mobi;
if (p->next!=NULL)//若不是最后一个记录
fout<<"\n";
p=p->next;
}while(p!=NULL);
fout.close;
cout<<" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl
<<" >> <<"<<endl
<<" >> 信息保存成功 <<"<<endl
<<" >> <<"<<endl
<<" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<<endl;
}
return 0;
}
(7)读取文件内容
int readFilelinklist(linklist *&L)
{
linklist *p;
if(L==NULL)
{
L=(linklist*)malloc(sizeof(linklist));
L->next=NULL;
}
ifstream fin("123.txt",ios::in);
if(!fin)
{
cout<<"cannot open input file.\n";
return 1;
}
char str[200];
while(!fin.eof())
{
p= (linklist *)malloc(sizeof(linklist));
for (int i=0; i<6; i++)
{
fin>>str;
switch(i)
{
case 0:
strcpy(p->ID,str);
break;
case 1:
strcpy(p->name,str);
break;
case 2:
strcpy(p->sex,str);
break;
case 3:
strcpy(p->Class,str);
break;
case 4:
strcpy(p->Addr,str);
break;
case 5:
strcpy(p->Mobi,str);
break;
}
}
p->next=L->next;
L->next=p;
}
fin.close ;
return 0;
}
(8)显示信息
void showmessage(linklist *&L)
{
linklist *p;
int i=0;
if(L == NULL )
{
cout << "没有任何信息可输出,请添加信息!!!"<< endl;
}
else
{
p = L->next;
cout << "*******************************联系表如下***************************************";
cout << "********************************************************************************";
cout <<" "<<" 编号 "<<"姓名 "<<" 性别 "<< "班别 "<<" 住址 "<<"手机号 "<< endl;
cout <<"--------------------------------------------------------------------------------";
do
{
i++;
cout << endl;
cout <<i;
cout <<" "<<p->ID<<" "<<p->name<<" "<<p->sex<<" "<<p->Class<<" "<<endl
<<p->Addr<<" "<<p->Mobi<<endl;
cout <<"------------------------------------------------------------------------------"<<endl;
p = p->next ;
if (i==70)
break;
}while(p!=NULL);
do
{
i++;
cout << endl;
cout <<i;
cout <<" "<<p->ID<<" "<<p->name<<" "<<p->sex<<" "<<p->Class<<" "<<endl
<<p->Addr<<" "<<p->Mobi<<endl;
cout <<"------------------------------------------------------------------------------"<<endl;
p = p->next ;
}while (p!=NULL);
}
cout << "*********************************联系表***************************************";
cout << endl;
}
四、 系统使用说明
程序运行后,进入如下界面进行相应的基本操作:
进入该界面,按照提示,进行基本操作(按1,进行插入联系人信息的操作;按2,进行插入
联系人信息的操作;按3,进行查找联系人信息的操作;按4,进行修改联系人信息的操作;
按5,进行删除联系人信息的操作;按6,进行显示联系人信息的操作;按7,进行保存联系人
信息的操作;按8,推出程序。)在键盘上按照提示输入相应信息进行操作。
五、 问题及解决办法
调试过程中遇到的主要问题有哪些?如何解决的。有何结论?
1、调试出现的问题:删除或查找的信息并不存在
解决办法:设置错误提示
2、调试出现的问题:输出结果和预期不一样
解决办法:设置断点对变量添加监视进行调试
六、 课外实践总结
通过这次的上机实验,使我学到了一些回顾了以前学过的知识,使我对数据结构程序设计有了更深层次的认识和理解,懂得了灵活运用。在设计的同时,我还发现了自己的不足之处,对以前所学的知识理解的不够深刻、掌握的不够牢固。而且即使感觉自己的理论上已经掌握,但运用到实践过程中仍有意想不到的困难,比如删除那一块的程序,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣。
通过这次课外实践,我们也体会到了团队合作的重要性,从最初的查阅资料到最后的程序的成功运行,我们组有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。
总之,这次课外实践设计让我们受益匪浅。我们深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功。