课程设计报告訾振恒.docx

上传人:b****5 文档编号:7505491 上传时间:2023-01-24 格式:DOCX 页数:16 大小:103.31KB
下载 相关 举报
课程设计报告訾振恒.docx_第1页
第1页 / 共16页
课程设计报告訾振恒.docx_第2页
第2页 / 共16页
课程设计报告訾振恒.docx_第3页
第3页 / 共16页
课程设计报告訾振恒.docx_第4页
第4页 / 共16页
课程设计报告訾振恒.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

课程设计报告訾振恒.docx

《课程设计报告訾振恒.docx》由会员分享,可在线阅读,更多相关《课程设计报告訾振恒.docx(16页珍藏版)》请在冰豆网上搜索。

课程设计报告訾振恒.docx

课程设计报告訾振恒

安徽理工大学

数据结构

课程设计说明书

 

题目:

通讯录

 

院系:

计算机科学与工程学院

专业班级:

电子仪器10-1班

学号:

2010302936

学生姓名:

訾振恒

指导教师:

张柱

2011年12月20日

 

安徽理工大学课程设计(论文)任务书

计算机科学与工程学院

学号

2010302936

学生姓名

訾振恒

专业(班级)

电子10-1

设计题目

通讯录

系统平台:

window7

开发工具:

MicrosoftVisualC++6.0

 

(1)设每个记录有下列数据项:

电话号码、用户名、地址;

(2)从键盘输入各记录,用单链表实现;

(3)采用单链表存储结构;

(4)查找并显示给定电话号码的记录;

(5)通讯录信息文件保存;

(6)要求人机界面友好,使用图形化界面;

课程设计报告要求不少于3000字。

源程序要求不少于300行

11月15日确定认知实习的题目为通讯录。

11月16日到11月20日查找资料确定用单链表来存储实现。

11月21日到12月5日进行代码编写。

12月6日到12月10日进行调试和优化。

12月11日到12月12日撰写报告。

[1]何钦铭颜晖.C语言程序设计.高等教育出版社,2008

[2]秦锋.数据结构.清华大学出版社,2011

[3]王娣.C语言程序开发范例宝典.人民邮电出版社出版社,2010

 

指导教师签字

教研室主任签字

2011年11月8日

学生姓名:

訾振恒学号2010302936专业班级:

电子10-1

课程设计题目:

通讯录

指导教师评语:

 

 

成绩:

 

指导教师:

年月日

安徽理工大学课程设计(论文)成绩评定表

目  录

1问题描述1

2需求分析1

3总体设计2

3.1通讯录单链表变量的定义2

3.2系统流程图2

4详细设计3

4.1通讯录链表的建立3

4.2代码设计4

5总结11

参考文献12

1问题描述

(1)题目内容:

设计散列表实现通讯录查找系统。

(2)基本要求:

(a)设每个记录有下列数据项:

电话号码、用户名、地址;

(b)从键盘输入各记录,分别以电话号码为关键字建立单链表;

(c)采用单链表存储结构;

(d)查找并显示给定电话号码的记录;

(e)通讯录信息文件保存;

(f)要求人机界面友好,使用图形化界面;

(3)设计目的:

通过本次课程设计,了解通讯录的一些基本功能。

掌握利用单链表进行插入,查找,用头插法建立单链表。

2需求分析

经过本次的课程设计,我认为通讯录主要实现的功能如下:

(1)添加信息:

一个通讯录应该有其基本的添加功能。

在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:

姓名,电话号码,地址。

(2)删除信息:

当你不需要删除某条通讯录信息时,可以选择删除功能函数,即可完成,方便简单。

(3)查找:

一个通讯录应该具有令一基本功能就时查找,本设计时按电话号码为关键字查找的,只要你输入要查找人的电话号码就可出来相应的个人信息。

(4)打印:

当你要输出通讯录中的全部信息时,只要选择打印函数,再执行后即可完成打印功能。

(5)保存:

通讯录删除或添加等功能时,都是需要保存的。

所以每次操作完一个项目时,运行一次即可完成保存到文件的功能。

(6)读取:

选择读取功能函数,将保存到文件中的信息读到通讯录链表中。

(7)退出:

当你做完你要做的事情之后,就可以选择退出函数退出该界面。

在这次设计中用到了一些变量和函数,例如init(),PrintList(),Insert(),Delete(),Search(),Save(),Load(),Create()等。

3总体设计

3.1通讯录单链表变量的定义

charphone[15]charname[30];charaddr[50];charcity[30];并通过L=(LNode*)malloc(sizeof(LNode))获取电话号码,姓名,地址,城市的内存空间。

操作集合:

intCreateList(LinkList&L,intn);//创建通讯录

intinit(LinkList&L);//初始化通讯录单链表

intListInsert(LinkListL,inti);//添加通讯录信息

intListDelete(LinkListL);//删除

voidListSearch(LinkListL,charx[]);//以姓名查找

voidListSave(LinkListL);//保存到指定的文件中

voidListLoad(LinkListL);//从指定的文件中读取

voidPrintList(LinkListL);//将通讯录中的信息全部输出

3.2系统流程图

系统流程图如图1所示。

 

图1算法流程图

4详细设计

4.1通讯录链表的建立

链表是一个动态结构,他不需要事先分配空间,因此生成链表的过程,是一个节点逐个插入的过程。

为了使建表方便,主要有头插法和尾插法两种建表方式。

本次试验是采用头插法建立通讯录链表。

intCreateList(LinkList&L,intn)

{LinkListp;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;//先建立一个带头结点的单链表

for(inti=0;i

p=(LinkList)malloc(sizeof(LNode));//分配链表空间结点

cout<<"输入姓名\n";

cin>>((p->data).name);

cout<<"输入号码\n";

cin>>((p->data).phone);

cout<<"输入地址\n";

cin>>((p->data).addr);

cout<<"输入城市\n";

cin>>((p->data).city);

p->next=L->next;

L->next=p;}//插入

return0;}

4.2代码设计

(1)初始化单链表

intinit(LinkList&L)

{

L=(LNode*)malloc(sizeof(LNode));//为链表分配内存空间

if(!

L)return(ERROR);

L->next=NULL;

returnOK;

}

(2)添加通讯录信息信息

添加信息算法思想:

通过键盘输入电话号码、姓名、地址、城市。

再判断一下,如果表中已经有这信息时,退出,没有的话,就把该信息添加进去。

intListInsert(LinkListL,inti)

{

LinkListp=L;

LinkListq=(LinkList)malloc(sizeof(LNode));//为插入的变量分配结点空间

intcount=0;

while(count!

=i-1){//利用循环查找要插入结点的位置

p=p->next;

count++;

}

cout<<"输入姓名\n";

cin>>((q->data).name);

cout<<"输入号码\n";

cin>>((q->data).phone);

cout<<"输入地址\n";

cin>>((q->data).addr);

cout<<"输入城市\n";

cin>>((q->data).city);

q->next=p->next;//修改结点前后指针完成插入

p->next=q;

return(0);

}

添加个人信息的界面如图1所示。

图1添加信息界面

(3)删除记录

删除算法思想:

首先要确认删除的位置,并判断要删除的位置是否存在,利用循环结构进行进行查找删除的位置,若找到删除成功,否则删除失败。

intListDelete(LinkListL)

{

inti;

cout<<"请输入要删除的位置\n";

cin>>i;

LinkListp=L;

LinkListq;

intcount=0;

while(count!

=i-1){//利用循环查找要删除结点的位置

p=p->next;

count++;

}

q=p->next;//修改要删除结点前后指针完成删除

p->next=q->next;

return0;

}

删除信息的界面如图2所示。

图2删除界面

(4)查找

查找算法思想:

输入要查找的姓名,利用循环结构,把通讯录中的的信息与所要查找的姓名比较,若找到则查找成功,否则查找失败。

voidListSearch(LinkListL,charx[])

{

LinkListp;

p=L->next;

while(p&&strcmp(p->data.name,x)!

=0)//利用循环把要查询的姓名与已有信息相比较进行查找

p=p->next;

cout<<"现在输出姓名\n";

cout<data.name<

cout<<"现在输出号码\n";

cout<data.phone<

cout<<"现在输出地址\n";

cout<data.addr<

cout<<"现在输出城市\n";

cout<data.city<

}

查找信息的界面如图3所示。

图3查找界面

(5)打印通讯录。

打印通讯录的思想:

利用循环结构把通讯录中的全部信息输出来,包括姓名,号码,地址,城市。

voidPrintList(LinkListL)

{

LinkListp;

p=L->next;

while(p)//利用循环把通信录中的信息全部输出

{

cout<<"现在输出姓名\n";

cout<<(p->data).name<

cout<<"现在输出号码\n";

cout<<(p->data).phone<

cout<<"现在输出地址\n";

cout<<(p->data).addr<

cout<<"现在输出城市\n";

cout<<(p->data).city<

p=p->next;

}

cout<

}

打印通讯录的信息的界面如图4所示。

图4打印通讯录的界面

(6)保存信息

保存信息算法思想:

打开一个文件,判断该文件是否打开,没打开则返回。

打开成功以后,通过一个循环把信息写进去。

写完后,通过一个函数close()关闭退出文件。

voidListSave(LinkListL)

{

LinkListp;

p=L->next;

FILE*fp;

if((fp=fopen("f1.txt","a+"))==NULL)//打开文件

{cout<<"cannotopenfile\n";

exit(0);

}

cout<<"\nsavingfile\n";

while(p)//保存文件信息

{

fputs(p->data.name,fp);

fputs("",fp);

fputs(p->data.phone,fp);

fputs("",fp);

fputs(p->data.addr,fp);

fputs("",fp);

fputs(p->data.city,fp);

fputs("\n",fp);

p=p->next;

}

fclose(fp);//关闭文件

getch();

}

保存到文件的信息界的面如图5所示。

图5保存到文件的界面

(7)读取

voidListLoad(LinkListL)

{

LinkListp;

FILE*fp;

L->next=NULL;

if((fp=fopen("f1.txt","r+"))==NULL)//打开文件

{

cout<<"cannotopenfile\n";

exit

(1);

}

cout<<"\nloadingfile\n";

while(!

feof(fp))//将文件信息读入链表

{

p=(LNode*)malloc(sizeof(LNode));

fscanf(fp,"%s%s%s%s",p->data.name,p->data.phone,p->data.addr,p->data.city);

printf("%s%-10s%-10s%-10s\n",p->data.name,p->data.phone,p->data.addr,p->data.city);

if(!

p)

{

cout<<"memorymallocfail";

return;

}

}

fclose(fp);getch();

}

读取到链表的信息界的面如图6所示。

图6读取到链表的信息界面

(9)退出

退出的基本思想:

选择0表示退出。

然后按任意键退出。

退出的面如图7所示。

图7退出的界面

5总结

通过对数据结构这门课的学习,我了解到:

“数据结构”在计算机科学中是一门综合性的专业基础课。

数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。

在研究信息检索时也必须考虑如何组织数据,以便使查找和存取数据元素更为方便。

可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一个核心内容,是从事计算机科学研究及其应用的科技工作者必须掌握的重要内容。

经过这次课程设计,我体会到自己所学的东西太少了,很多都不知道。

在进行文件保存和把文件读入到通讯录链表中时遇到了困难,经过多方咨询和查资料才解决。

做这课程设计让我认识到仅仅看书是不够的,要经常动手写程序,上机调试是最重要的。

在课程设计中我更体会到:

一个好的程序应该是一个所占空间小、运行时间短、其他性能也好的算法。

然而,实际上很难做到十全十美,原因是上述要求有时相互抵触。

要节约算法的执行时间往往要以牺牲更多的存储空间为代价;而为了节省存储空间又可能要以更多的时间作为代价。

因此,只能根据具体情况有所侧重:

如果程序的使用次数较少,则应该力求算法简明易懂,而易于转换为上机程序;如果程序反复多次使用,则应该尽可能选用快速的算法;如果待解决的问题数据量极大,机器的存储空间较小,则在编写算法时应该考虑如何节省空间。

以后在编写程序时就应该注意到所编写程序的时间复杂度,以及是否运用了良好的算法,而不能只是象以前编写程序时单纯使用C++的知识,要充分考虑程序的性能,争取编写出更优良的程序来。

只有经过长期的锻炼才能在编程能力上有一定的提高。

参考文献

[1]何钦铭,颜晖.C语言程序设计.高等教育出版社,2008

[2]秦锋.数据结构.清华大学出版社,2011

[3]王娣.C语言程序开发范例宝典.人民邮电出版社出版社,2010

[4]王娣韩旭等编著C语言从入门到精通清华大学出版社2010

[5]霍顿著杨浩译C语言入门经典(第4版)清华大学出版社2008

[6]国家863中部软件孵化器C语言从入门到精通人民邮电出版社2010

[7]哈比森等著C语言参考手册机械工业出版社2011

[8]王敬华林萍张清国编著C语言程序设计教程(第二版)清华大学出版社2009

[9]戴晟晖等编著从零开始学C语言电子工业出版社2011

[10]詹春华杨沙主编C语言程序设计教程科学出版社2011

[11]汉利科夫曼著潘蓉等译C语言详解人民邮电出版社2010

[12]汤朵吉米拜尔著杨涛等译C程序设计语言(第2版·新版)机械工业出版社2004

[13]彭伟编著C语言程序设计实训100例电子工业出版社2009

[14]张红梅,于明.VisualC++程序设计实验教程.北京:

中国铁道出版社,2006

[15]严华峰等.VisualC++程序设计案例精编.北京:

中国水利水电出版社,2004

[16]EugeneOlafsen.MFCVisualC++6.0编程技术内幕.北京:

机械工业出版社,2006

[17]严蔚敏,吴伟民.数据结构(C语言版).北京:

清华大学出版社,2001

[18]陈向群.数据结构.北京:

人民邮电出版社,2001

[19]王晓东.数据结构与算法设计.北京:

电子工业出版社,2002

[20]胡学钢.数据结构.北京:

高等教育出版社,2009

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1