课程设计报告訾振恒.docx
- 文档编号:7505491
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:16
- 大小:103.31KB
课程设计报告訾振恒.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;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< cout<<"现在输出号码\n"; cout< cout<<"现在输出地址\n"; cout< cout<<"现在输出城市\n"; cout< } 查找信息的界面如图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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 訾振恒
![提示](https://static.bdocx.com/images/bang_tan.gif)