理学院信息与计算科学实训报告.docx
《理学院信息与计算科学实训报告.docx》由会员分享,可在线阅读,更多相关《理学院信息与计算科学实训报告.docx(56页珍藏版)》请在冰点文库上搜索。
理学院信息与计算科学实训报告
实训报告
实训题目:
通讯录管理系统
学院:
理学院
专业:
信息与计算科学
学 号:
学生姓名:
2014年3月18日
实训
时间
2013-2014第一学期第14、15周
实训
地点
沈阳理工大学现代教育技术中心C304、C319
实训
学时
2周
实训
目的
将所学的知识运用到实践中,提高观察问题、发现问题、分析问题、解决问题的能力,强化编程能力。
实训
内容
回顾C/C++语言编程技术;进行复杂算法能设计,掌握编程技巧。
编写规范、高效、健壮的代码;VSS/CVS、C/C++编码规范。
开发一个运行于WindowsXP平台的学生成绩管理程序,可以实现学生成绩的输入、插入、排序、查询等功能。
实训
要求
开发一个运行于WindowsXP平台的学生成绩管理程序,可以实现学生成绩的输入、插入、排序、查询等功能。
通过实训答辩。
实训
使用
设备
PC机;
笔记本电脑
实训
成果
完成了此次实训内容;
完成了实训报告;
提高了自己的学习能力以及编程能力;
1概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
在这次的课程设计中我选择的题目是通讯录管理,平常的系统,实现功能简单,不能够进行有效的管理,经过我的思考,我做的系统,结构清楚,能够添加联系人,删除,查找,并分为以姓名,电话号码两种方式查找,精确,无错,最主要的是我考虑到了用户的使用习惯,以人性化的方式,展现在用户面前,界面清晰大方,容易操作。
2系统分析
通讯录管理基本内容包括:
添加,查找,删除联系人,,上述基本功能用链式存储比较方便,由于查找,删除都是以姓名或电话号码为关键字进行的,因此要用到双向链表,效率高,以实现各种功能。
由此重点和难点是双向链表的建立,查找,删除等基本操作。
通讯录管理软件,通过各种接口函数完成对联系人的添加,查找,删除,看似简单,实际实现起来,还是有点困难,关键是要考虑到各种情况
程序执行时的命令:
本程序为了使用时的方便,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入选者即可。
界面友好,适合用户使用习惯。
5.测试数据。
在我的这个通讯录管理软件中;基本函数有
dlink*enter(dlink*h);//输入信息函数
intmenu_select();//菜单选择函数
dlink*add(dlink*h);//增加联系人函数
voidsearch(dlink*h);//查找函数
dlink*deletebyname(dlink*h);//以姓名为关键字删除
dlink*deletebyphone(dlink*h);//以电话号码为关键字删除
voidoutput(dlink*h);//输出函数
voidsearchbyname(dlink*h)//按姓名查找
voidsearchbyphone(dlink*h)//按电话号码查找
voidsave(dlink*h)//保存联系人信息到文件
详细分析:
1.通过dlink*creatlist()
{dlink*head,*p,*r;
p=newdlink;
head=p;
r=head;
p->Rlink=NULL;
returnhead;//创建双向链表
2.通过dlink*enter(dlink*h)函数输入联系人信息
3.通过调用voidsearch(dlink*h)函数选择是以姓名还是电话号码方式进行查找,分别调用函数voidsearchbyname(dlink*h),voidsearchbyphone(dlink*h)完成相应功能。
3.调用函数dlink*add(dlink*h)增加联系人详细。
4.通过调用dlink*deletebyname(dlink*h),dlink*deletebyphone(dlink*h),分别以姓名,电话号码为关键字进行删除。
5.调用voidoutput(dlink*h)函数输出所有联系人信息
6.调用voidsave(dlink*h)函数保存联系人信息。
3概要设计
1.数据结构设计:
在本实验中我用的是双向链表,其主要优点是便于查找,删除操作,不用记录指针操作,因其本身有一个指向前驱节点,一个指向后继节点的指针。
2.算法的设计:
本系统从整体上分为7大模块:
(1)输入联系人信息
(2)查找联系人信息//根据指定关键字进行相关查找
(3)显示联系人信息//显示所有联系人信息
(4)增加联系人信息//向通讯录中增加联系人信息
(5)删除联系人信息//根据指定关键字删除联系人信息
(6)存储联系人信息//存储通讯录中的联系人信息
(7)退出程序
对应模块相应算法为:
(1):
输入联系人信息
dlink*enter(dlink*h)
{
dlink*head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
p=newdlink;
cin>>p->data.name;
cin>>p->data.phone;
cin>>p->data.street;
cin>>p->data.city;
cin>>p->data.eip;
cin>>p->data.state;
p->Rlink=NULL;
while(q!
=NULL)
{r=q;
q=q->Rlink;
}
p->Llink=r;
r->Rlink=p;
r=p;
returnhead;
}
(2)查找联系人信息
按姓名查找:
voidsearchbyname(dlink*h)
{
cin>>nam;//输入联系人姓名
while(p&&p->data.name!
=nam)
{q=p;
p=p->Rlink;
}//查找节点
if(p)
{cout<<"您要查找的联系人信息为:
"<cout<<"*******************************************************************************"<cout<<"\n\t姓名:
"<data.name<cout<<"\n\t电话号码:
"<data.phone<cout<<"\n\t街道名:
"<data.street<cout<<"\n\t城市名:
"<data.city<cout<<"\n\t邮编:
"<data.eip<cout<<"\n\t国家:
"<data.state<cout<<"*******************************************************************************"<}
}
按电话号码查找:
voidsearchbyphone(dlink*h)
{
cout<<"请输入要查找的联系人电话号码:
"<cin>>callnum;
while(p&&p->data.phone!
=callnum)
{q=p;
p=p->Rlink;
j++;
}
if(p)
{cout<<"您要查找的联系人信息为:
"<cout<<"*******************************************************************************"<cout<<"\n\t姓名:
"<data.name<cout<<"\n\t电话号码:
"<data.phone<cout<<"\n\t街道名:
"<data.street<cout<<"\n\t城市名:
"<data.city<cout<<"\n\t邮编:
"<data.eip<cout<<"\n\t国家:
"<data.state<cout<<"*******************************************************************************"<}
}
(3)显示联系人信息
voidoutput(dlink*h)
{
dlink*p;
p=h->Rlink;
for(i=1;i<=num;i++)
{
cout<<"\n\t\t\t第"<
"<cout<<"*******************************************************************************"<cout<<"\n\t姓名:
"<data.name<cout<<"\n\t电话号码:
"<data.phone<cout<<"\n\t街道名:
"<data.street<cout<<"\n\t城市名:
"<data.city<cout<<"\n\t邮编:
"<data.eip<cout<<"\n\t国家:
"<data.state<cout<<"*******************************************************************************"<p=p->Rlink;
}
}
(4)增加联系人信息
dlink*add(dlink*h)
{dlink*head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
cout<<"\n\t\t****************请输入联系人信息****************"<cout<<"请输入姓名:
"<cin>>p->data.name;
cout<<"请输入电话:
"<cin>>p->data.phone;
cout<<"请输入街道名:
"<cin>>p->data.street;
cout<<"请输入城市名:
"<cin>>p->data.city;
cout<<"请输入邮编:
"<cin>>p->data.eip;
cout<<"请输入国家名:
"<cin>>p->data.state;
p->Rlink=NULL;
while(q!
=NULL)
{r=q;
q=q->Rlink;
}//while
p->Llink=r;
r->Rlink=p;
r=p;
returnhead;
}
(5)删除联系人信息
dlink*deletebyname(dlink*h)//按姓名删除
{
cout<<"请输入要删除的联系人姓名:
"<cin>>nam;
while(p&&p->data.name!
=nam)
{q=p;
p=p->Rlink;
}
if(num==1)//num为联系人总数目
{p->Llink->Rlink=NULL;
free(p);
num--;
}
else
if(p->Llink==head)
{p->Rlink->Llink=head;
p->Llink->Rlink=p->Rlink;
free(p);
num--;
}
elseif(p->Rlink==NULL)
{p->Llink->Rlink=NULL;
free(p);
num--;
}
else
{p->Rlink->Llink=p->Llink;
q->Rlink=p->Rlink;
free(p);
num--;
}
cout<<"\n\t\t已删除成功!
"<returnhead;
}
dlink*deletebyphone(dlink*h)//按电话号码删除
{dlink*head,*p,*q;
cout<<"请输入要删除的联系人电话号码:
"<cin>>callnum;
while(p&&p->data.phone!
=callnum)
{q=p;
p=p->Rlink;
}
if(num==1)
{p->Llink->Rlink=NULL;
free(p);
num--;
}
else
if(p->Llink==head)
{p->Rlink->Llink=head;
p->Llink->Rlink=p->Rlink;
free(p);
num--;
}
elseif(p->Rlink==NULL)
{p->Llink->Rlink=NULL;
free(p);
num--;
}
else
{p->Rlink->Llink=p->Llink;
q->Rlink=p->Rlink;
free(p);
num--;
}
cout<<"\n\t\t已删除成功!
"<returnhead;
}
(6)存储联系人信息
intWriteLinklistToFile(constchar*strFile,dlink*h)
{
FILE*fpFile;
dlink*head=h;
dlink*p;
p=head->Rlink;
if(!
(fpFile=fopen(strFile,"w")))//以写的方式打开
{
printf("Openfilefailed\n");
return0;
}
while(p)
{
fprintf(fpFile,"%s\t%s\t%s\t%s\t%s\t%s\t\n",p->data.name,p->data.phone,p->data.street,p->data.city,p->data.eip,p->data.state);
p=p->Rlink;
}
fclose(fpFile);
return1;
};
voidsave(dlink*h)
{cout<<"暂不支持很快会解决"<exit(0);
dlink*head;
head=h;
inta;
char*strName="test.txt";
a=WriteLinklistToFile(strName,head);
}
(7)退出程序
Exit(0);
3、抽象据类型的设计
typedefstructdoublelink//定义
{structinformationdata;
structdoublelink*Llink,*Rlink;
}dlink;
4详细设计
程序源代码为:
#include
#include
#include
#include
#include
#include
usingnamespacestd;
unsignedintnum=0;
structinformation
{stringname;
stringphone;
stringstreet;
stringcity;
stringeip;
stringstate;
};
structinformationa[120];
typedefstructdoublelink//定义
{structinformationdata;
structdoublelink*Llink,*Rlink;
}dlink;
dlink*enter(dlink*h);
dlink*insert(dlink*h);
intmenu_select();
dlink*add(dlink*h);
voidsearch(dlink*h);
dlink*deletebyname(dlink*h);
dlink*deletebyphone(dlink*h);
voidoutput(dlink*h);
dlink*creatlist()
{dlink*head,*p,*r;
p=newdlink;
head=p;
r=head;
p->Rlink=NULL;
returnhead;
}
//*********************************************************
dlink*enter(dlink*h)//创建
{dlink*head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
system("cls");
//新建用户信息
p=newdlink;
cout<<"\n\t\t****************请输入联系人信息****************"<cout<<"请输入姓名:
"<cin>>p->data.name;
cout<<"请输入电话:
"<cin>>p->data.phone;
cout<<"请输入街道名:
"<cin>>p->data.street;
cout<<"请输入城市名:
"<cin>>p->data.city;
cout<<"请输入邮编:
"<cin>>p->data.eip;
cout<<"请输入国家名:
"<cin>>p->data.state;
p->Rlink=NULL;
while(q!
=NULL)
{r=q;
q=q->Rlink;
}
p->Llink=r;
r->Rlink=p;
r=p;
num++;
charz;
cout<<"是否要继续插入新联系人信息?
(Y/N):
"<cin>>z;
if((z=='y')||(z=='Y'))
head=insert(head);
returnhead;
}
//***********************************************************************
dlink*insert(dlink*h)//插入新用户信息
{dlink*head=h;
if(num==0)
{cout<<"\n\t通讯录中没有任何联系人信息,确认要添加吗?
(Y/N)"<charz;
cin>>z;
if((z=='y')||(z=='Y'))
head=add(head);
else;
}
else
head=add(head);
returnhead;
}
//*****************************************************************
dlink*add(dlink*h)
{dlink*head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
system("cls");
//新建用户信息
p=newdlink;
cout<<"\n\t\t****************请输入联系人信息****************"<cout<<"请输入姓名:
"<cin>>p->data.name;
cout<<"请输入电话:
"<cin>>p->data.phone;
cout<<"请输入街道名:
"<cin>>p->data.street;
cout<<"请输入城市名:
"<cin>>p->data.city;
cout<<"请输入邮编:
"<cin>>p->data.eip;
cout<<"请输入国家名:
"<cin>>p->data.state;
p->Rlink=NULL;
while(q!
=NULL)
{r=q;
q=q->Rlink;
}//while
p->Llink=r;
r->Rlink=p;
r=p;
num++;
charz;
cout<<"是否要继续插入新联系人信息?
(Y/N):
"<cin>>z;
if((z=='y')||(z=='Y'))
head=insert(head);
returnhead;
}
//*******************************************************************************************
voidsearchbyname(dlink*h)//按姓名查找
{
if(num==0)
{cout<<"\n\t当前通讯录没有任何联系人信息"<cout<<"\n\t\t\t*****无法执行查找操作******"<cout<}
else
{dlink*head,*p,*q;
stringnam;
head=h;
p=h->Rlink;
inti,j=1,k=1,mark=0;
system("cls");
cout<<"请输入要查找的联系人姓名:
"<cin>>nam;
for(i=k;i<=num;i++,p=p->Rlink)
{
while(p&&p->data.name!