课程设计报告訾振恒.docx
《课程设计报告訾振恒.docx》由会员分享,可在线阅读,更多相关《课程设计报告訾振恒.docx(16页珍藏版)》请在冰豆网上搜索。
课程设计报告訾振恒
安徽理工大学
数据结构
课程设计说明书
题目:
通讯录
院系:
计算机科学与工程学院
专业班级:
电子仪器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;ip=(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