以双向链表为算法结构的通讯录的制作的实践报告.docx

上传人:b****1 文档编号:2469516 上传时间:2023-05-03 格式:DOCX 页数:20 大小:58.60KB
下载 相关 举报
以双向链表为算法结构的通讯录的制作的实践报告.docx_第1页
第1页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第2页
第2页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第3页
第3页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第4页
第4页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第5页
第5页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第6页
第6页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第7页
第7页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第8页
第8页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第9页
第9页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第10页
第10页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第11页
第11页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第12页
第12页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第13页
第13页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第14页
第14页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第15页
第15页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第16页
第16页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第17页
第17页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第18页
第18页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第19页
第19页 / 共20页
以双向链表为算法结构的通讯录的制作的实践报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

以双向链表为算法结构的通讯录的制作的实践报告.docx

《以双向链表为算法结构的通讯录的制作的实践报告.docx》由会员分享,可在线阅读,更多相关《以双向链表为算法结构的通讯录的制作的实践报告.docx(20页珍藏版)》请在冰点文库上搜索。

以双向链表为算法结构的通讯录的制作的实践报告.docx

以双向链表为算法结构的通讯录的制作的实践报告

 

西安财经学院

实践教学活动周登记表

 

姓名:

龚雨

学号:

1305170125

专业:

计算机科学与技术

院系:

信息学院

指导教师:

刘通

日期:

 

实验实训教学管理中心制

 

实践教学开展时间

2015年1月12日——2015年1月23日

实践形式(在选项后打√)

集中

分散

实践单位或地点

指导教师

刘通

职称

讲师

二级学院、系

信息学院计算机系

实践内容及收获(后附实践教学成果)

本次实践活动以算法实践为主。

意在巩固计算机知识,熟练掌握算法操作。

在掌握算法的基础上,能自主编写程序实现具体操作。

本次实践以实践报告的形式呈现出来。

本次的实践学习是一次很有意义的活动。

我在查询一系列的资料和理论的同时也对《数据结构》这门课程的一系列指示进行了深入的复习,把以前不会和模糊的知识弄清楚。

其次,这次的实践报告需要一个人完成,这也锻炼我独立思考的能力,提高了我的分析层次。

虽然完成的过程很艰难,很多次想过放弃,但最终坚持了下来。

我体会到了独立一个人成功的喜悦,体会到了学习的乐趣。

在以后的学习生活中,我会秉承谨慎严谨的专业态度,努力认真。

在生活中我也会保持乐观积极的态度。

我相信我会变得越来越好。

成绩

评定

 

成绩:

指导教师签字:

2015年月日

系意见

签字(盖章):

2015年月日

二级学院意见

签字(盖章):

2015年月日

本科生实践教学活动周实践教学成果

成果形式:

实践报告

成果名称:

以双向链表为算法结构的通讯录的制作的实践报告

 

学生姓名:

龚雨

学号:

1305170125

专业:

计算机科学与技术

班级:

计本1301班

指导教师:

刘通

完成时间:

2015年1月23日

以双向链表为算法结构的通讯录的制作的实践报告

一、实践的目的

灵活运用《数据结构》中的双向链表的知识,并结合C语言知识来实现通讯录的制作,是为了研究算法的应用。

(1)有利于我们把所学的数据结构和算法的基本知识扎实的掌握,并初步掌握设计的基本方法,初步完成书本知识和生活实践的结合,把知识生活化,而不是专业化。

(2)培养计算机知识学习人员的专业设计能力和动手能力,在实践的过程中提高设计人员的知识素养和涵养,学习分析和编写程序的能力。

在一定的程度上,也锻炼参与者的应变能力和独立思考和作业的习惯。

通过实践教学,能够使我们深入社会,深入实践,使学生熟悉实际工作,使理论与实践能够密切结合,培养我们分析和解决问题的综合能力以及扎实朴素的工作作风;同时通过实践教学这个环节,促进教学方法的改进,从而不断提高教学质量,培养高质量的合格人才。

二、实践教学的内容

(一)、算法的内容:

包括文件的载入、信息的输入、显示、以关键字查找、删除、存盘。

(二)、算法的流程图如下:

(三)、各个算法的内容、应用领域以及作用:

1、双向链表的初始化:

voidinitlist()//链表初始化函数

{

L=(linklist)malloc(sizeof(pnode));//动态申请内存

L->next=L;

L->prior=L;

}

双向链表的初始化:

运用链表初始化函数initlist是为了申请动态空间(有动态和静态之分,本文用得是动态申请内存)。

初始化在顺序表和单链表中同样必需。

2、装入:

voidload()//装载已有文件信息

{//无文件,新建立文件

……;

……;

//已有文件,导入文件

……;

……;

}

装入:

如果原本没有文件,就需要用建立新文件,然后再装入。

为接下来的操作打下基础。

3、插入新结点:

voidlistinsert()//增加新结点

{q=(DuLinkList)malloc(sizeof(DuLNode));//插入新结点q,

q->data=e;//读出内存信息

q->prior=p->prior;

q->next=p;

p->prior->next=q;

p->next=q;

}

插入算法:

插入新结点读出结点内存信息。

4、输入新信息:

voidenter()//添加新纪录

{intp=0,l=1;//信息输入

charch[11];

charn;

cout<<”请输入信息”}

5、查找:

voidsearch()

{char*pw;

intbInWord,i;

intistart,iend;

charatemp[20];//输入关键字

pw=s1;s3[0]='\0';//输出查询结果

while(*pw!

='\0'){

bInWord=0;

for(i=0;pw[i]!

='\0';i++){

if(pw[i]!

=''&&bInWord==0){bInWord=1;istart=i;}

elseif(pw[i]==''&&bInWord==1) {iend=i; break;}

}

if(pw[i]=='\0'&&bInWord==1)iend=i;

if(bInWord==1){

strncpy(atemp,pw+istart,iend-istart);

atemp[iend-istart]='\0'; 

//puts(s3);

char*pfind;

if((pfind=strstr(s2,atemp))!

=NULL){//finde;

……;//检索可能的重名纪录

}

6、显示所有记录:

voiddisplay()//显示所有纪录

{//显示内存中的所有记录

……;

……;

}

7、删除指定信息:

voiddel()//删除纪录

{//输入要删除的姓名

……;

……;

//查找符合条件的记录,对于每条记录询问是否删除;

//满足条件的输出结束,询问是否删除其他记录,循环

……;

……;

}

8、保存到磁盘文件:

voidsave()//

{//写入文件操作

……;

}

注:

以上各个算法的内容仅是举例,只是为更好说明各个算法的具体作用,与本次报告内容并不相关。

(四)、分析:

经过反复测试,最终提供了一个较为友好的界面和操作模式,而且容错能力较好,稳定性很强。

下面做一些简单的说明:

1、2级菜单只是作为一种尝试,并非必须!

2、在界面排版上,我学习了互联网上部分程序的界面编排,其中以格式控制方式显示提高了界面显示的稳定性,较为理想。

3、在文件读取和保存方面,该程序做到了实时保存保存和读取,操作非常简便。

4、在查找方面,我将其设计为一次多记录的显示方式,也更合乎操作习惯,界面较为友好,对于无符合条件的结果,只是结果集为空,界面保持不变。

同时,它是实时读取的,可以将刚刚输入而未保存的记录也读取到!

另外,一次查询结束后返回的是查询菜单,可以直接进行下一次的查询,也较为合理。

5、删除功能我做了较多的工作,整体界面和设计都较为合理。

对于输入的姓名,查找出结果后提示是否删除。

若有重名,则会二次显示,提示是否删除,一直到所有记录查询结束(可以在重名中选中需要的进行删除,并不需要删除每一个纪录)。

结束之后可以直接再次删除其他纪录,因为它提供循环删除操作功能。

(五)、程序源代码:

#include

#include

#include

#include

structrecord

{

charname[20];

charstreet[20];

charcity[20];

chareip[20];//邮编

charstate[20];

}people[500];//500个记录,可修改

structpnode

{

recorddata;

structpnode*next,*prior;//双循环链表

};

typedefpnode*linklist;

linklistl;

intlen=0;//链表长度

FILE*fp;//文件指针

voidmainmenu();//主菜单

voidsearchmenu();//查询菜单

voidenter();//添加新纪录

voidsearch();//按条件搜索记录

voiddisplay();//显示全部记录

voidload();//载入文件内容

voidsave();//写入文件

voiddel();//删除记录

voidlistinsert();//插入结点函数

voidinitlist();//初始化链表函数

voidmain()//主函数

{

initlist();

load();

listinsert();

while

(1)

mainmenu();//进入主菜单,有非法输入仍停留在主菜单

}

voidinitlist()//链表初始化函数

{

l=(linklist)malloc(sizeof(pnode));//动态申请内存

l->next=l;

l->prior=l;

voidload()//装载已有文件信息

{

if((fp=fopen("txl.txt","rb"))==NULL)

{

printf("\n\t\t通讯录文件不存在");

if((fp=fopen("txl.txt","wb"))==NULL)

{

printf("\n\t\t建立失败");

exit(0);

}

else

{

printf("\n\t\t通讯录文件已建立");

printf("\n\t\t按任意键进入主菜单");

getch();

return;

}

exit(0);

}

//导入文件功能部分

fseek(fp,0,2);

if(ftell(fp)>0)

{

rewind(fp);

for(len=0;!

feof(fp)&&fread(&people[len],sizeof(structrecord),1,fp);len++);

printf("\n\t\t文件导入成功");

printf("\n\t\t按任意键返回主菜单");}

getch();

return;

}

printf("\n\t\t文件导入成功");

printf("\n\t\t通讯录文件中无任何纪录");

printf("\n\t\t按任意键返回主菜单");

getch();

return;

}

voidlistinsert()//增加新结点

{

linklists,p=l;

for(inti=0;i

{

s=(linklist)malloc(sizeof(pnode));

strcpy(s->data.name,people[i].name);

strcpy(s->data.city,people[i].city);

strcpy(s->data.street,people[i].street);

strcpy(s->data.eip,people[i].eip);

strcpy(s->data.state,people[i].state);

s->prior=p->prior;

s->next=p;

p->prior->next=s;

p->prior=s;

p=p->next;

}

}

voidmainmenu()//主菜单

{

charch;

system("cls");

printf("\n\t\t***************欢迎进入通讯录系统***************");

printf("\n\t\t******************1-新添纪录***************");

printf("\n\t\t******************2-查找联系人***************");

printf("\n\t\t******************3-删除联系人***************");

printf("\n\t\t******************4-保存***************");

printf("\n\t\t******************5-退出***************");

printf("\n\t\t************************************************");

printf("\n\t\t请选择:

");

printf("%c",ch=getch());

switch(ch)

{

case'1':

enter();break;

case'2':

searchmenu();break;

case'3':

del();break;

case'4':

save();break;

case'5':

exit(0);

default:

mainmenu();

}

}

voidenter()//添加新纪录

{

printf("\n\t\t****************请输入学生信息****************\n");

printf("\n\t\t姓名:

");

scanf("%s",&people[len].name);

printf("\n\t\t街道:

");

scanf("%s",&people[len].street);

printf("\n\t\t城市:

");

scanf("%s",&people[len].city);

printf("\n\t\t邮编:

");

scanf("%s",&people[len].eip);

printf("\n\t\t国家:

");

scanf("%s",&people[len].state);

len++;

printf("\n\t\t是否继续添加?

(Y/N):

");

if(getch()=='y')

enter();

return;

}

voidsearchmenu()//查询菜单

{

charch;

system("cls");

printf("\n\t\t*******************查询菜单*******************");

printf("\n\t\t****************1-显示所有记录****************");

printf("\n\t\t****************2-按姓名查询****************");

printf("\n\t\t****************3-返回主菜单****************");

printf("\n\t\t************************************************");

printf("\n\t\t请选择:

");

printf("%c",ch=getch());

switch(ch)

{

case'1':

display();break;

case'2':

search();break;

case'3':

mainmenu();break;

}

}

voidsearch()

{

printf("\n\t\t*****************按姓名查找*******************");

charname[20];

printf("\n\t\t请输入姓名:

");

scanf("%s",name);

printf("查询到的信息:

\n");

printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");//格式控制输出

printf("-----------------------------------------------------------------------------\n");

for(inti=0;i

{

if(strcmp(name,people[i].name)==0)

printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);

if(i+1

}

printf("-----------------------------------------------------------------------------\n");

printf("\n\t\t按任意键返回查询菜单");

getch();

searchmenu();

}

voiddisplay()//显示所有纪录

{

inti;

system("cls");

if(len!

=0)

{

printf("\n\t\t***************以下为通讯录所有信息************\n\n");

printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");

printf("-----------------------------------------------------------------------------\n");

for(i=0;i

{

printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);

if(i+1

}

printf("-----------------------------------------------------------------------------\n");

}

else

printf("\n\t\t通讯录中无任何纪录");

printf("\n\t\t按任意键返回查询菜单:

");

getch();

searchmenu();

}

voiddel()//删除纪录

{

inta=0,i,j,findmark;//findmark为查找结果标志

//intfindmark=0,delmark=0;

charname[20];

printf("\n\t\t请输入要删除学生姓名:

");

scanf("%s",name);

for(i=a;i

{

if(findmark=strcmp(people[i].name,name)==NULL)//找到一条符合条件的记录

{

//findmark++;

printf("\n\t\t以下是您要删除的学生纪录:

\n");

printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");

printf("-----------------------------------------------------------------------------\n");

printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);printf("-----------------------------------------------------------------------------\n");

printf("\n\t\t是否删除?

(y/n)");

if(getch()=='y')

{

for(j=i;j

people[j]=people[j+1];

len--;

i--;

//delmark++;

printf("\n\t\t删除成功");

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?

(y/n)");//是否删除同名纪录

if(getch()=='y')

{

a=i;

continue;//删除上一条记录之后搜索是否有同名纪录

}

}

}//endif

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?

(y/n)");//不删前一条纪录,删当前纪录

if(getch()=='y')

{

a=i;

continue;

}

}

}//endif

else

continue;

}//endfor

if(!

findmark)//没有找到任何符合条件的记录

printf("\n\t\t没有符合条件的记录!

");

printf("\n\t\t是否继续删除?

(y/n)");//无同名纪录,是否继续删除其他纪录

if(getch()=='y')

del();//继续删除其他纪录

}

voidsave()//写入文件

{

inti;

if((fp=fopen("txl.txt","wb"))==NULL)

{

printf("\n\t\t文件打开失败");

}

for(i=0;i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2