数据结构课程设计通讯录管理系统.docx
《数据结构课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录管理系统.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构课程设计通讯录管理系统
攀枝花学院
学生课程设计(论文)
题目:
通讯录管理系统
学生姓名:
学号:
所在院(系):
数学与计算机学院
专业:
信息与计算科学
班级:
2013级
指导教师:
职称:
年月日
攀枝花学院教务处制
攀枝花学院本科学生课程设计任务书
题 目
通讯录管理系统
1、课程设计的目的
1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
[问题描述]:
实现通讯录的建立和输出、通讯者的插入、删除和查询等几种操作功能。
[基本要求]:
用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单请按下形式给出:
*********************************************************************
*通讯录管理系统*
*1.通讯录链表的建立*
*2.通讯者结点的插入*
*3.通讯者结点的查询*
*4.通讯者结点的删除*
*5.通讯录链表的输出*
*0.退出通讯录管理系统*
*********************************************************************
请选择0—5:
使用数字0~5来选择菜单项,其他输入则不起作用,并给出错误提示。
3、主要参考文献
[1]刘大有等,《数据结构》(C语言版),高等教育出版社
[2]严蔚敏等,《数据结构》(C语言版),清华大学出版社
[3]WilliamFord,WilliamTopp,《DataStructurewithC++》清华大学出版社
[4]苏仕华等,数据结构课程设计,机械工业出版社
4、课程设计工作进度计划
1)分析题目,查阅相关资料:
1天;
2)算法设计、数据结构设计:
1天
3)编写代码并调试:
1天
4)完成课程设计报告:
2天
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
课程设计(论文)指导教师成绩评定表
题目名称
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
1需求分析
1.1需求概述
通讯录管理系统是一个比较实用的小型管理系统。
随着生活节奏的加快,人们追求丰富便捷的电子产品体验,因此也提高对便捷方式的喜爱。
当今社会下人们的交际范围越来越广泛,通讯录系统的出现,方便了人们存储通讯录,便于人们日常的交际。
为方便广大人们对通讯管理系统的使用,本设计采用作文应用程序的主界面,用控制语句来改变程序各项功能的实现。
主菜单部分主要解决的问题是程序开始选择问题,以及循环选择问题,其余各部分根据其实现功能完成代码设计。
1.2需求环境
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
①硬件要求:
一台计算机。
②软件配置:
WINDOWS、C/VC++6.0。
1.3功能描述
本课程设计是利用图形学的相关知识在TC或VisualC++环境下用C实现一个通讯录管理系统。
具有实现通讯录的建立和输出、通讯者的插入、删除和查询等几种操作功能。
其具体功能要求如下:
a)通讯录链表的建立
b)通讯者结点的插入
c)通讯者结点的查询
d)通讯者结点的删除
e)通讯录链表的输出
f)退出通讯录管理系统
2概要设计
2.1程序功能模块
由需求分析知,本次课程设计分为以下几个模块:
2.2程序流程图
程序流程图
2.3数据结构的设计
由于主函数设计的是菜单选择项,所以在程序未退出的的情况下要实现循环运行,并且要考虑到未建立通讯录链表的情况下其他功能无法实现的情况。
故在实现循环运行的功能时定义一个变量j=1,在选择退出后再将j赋值为0,要考虑判定是否建表的情况定义了一个全局变量flag1=0,建链表后flag1赋值为1。
为了达到选择各功能,采用switch判定选择项并跳转入相应功能函数。
判定是否建表语句:
if(flag1!
=1)
{printf("请先建立表!
");
getchar();
system("cls");}
3详细设计
3.1程序初始化
3.1.1代码功能
为了达到程序各项功能的实现,以及满足菜单选择项的功能,对每个功能的实现分别用了不同函数,并且有用到函数的嵌套以减少代码的重复。
3.1.2功能实现代码
①要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下:
(1)使链表的头尾指针head、rear指向新生成的头结点(也就是尾结点);
(2)置结束标志为0(假);
(3)while(结束标志不为真)
{
P指向新生成的结点;
读入一个通讯者数据至新结点的数据域;
将新结点链到尾结点之后;
使尾指针指向新结点;
提示是否继续建表,读入一个结束的标志;
}
(4)尾结点的指针域置空置NULL。
具体算法实现如下:
/*******尾插法建立带头结点的通讯录链表算法*******/
LinkListCreateList(void)
{
LinkListhead=(ListNode*)malloc(sizeof(ListNode));/*申请头结点*/
ListNode*p,*rear;
charflag='y';//intflag=0;/*结束标志置0*/
rear=head;/*尾指针初始指向头结点*/
while(flag=='y')
{
p=(ListNode*)malloc(sizeof(ListNode));/*申新结点*/
printf("编号(4)姓名(8)性别电话(11)地址(31)\n");
printf("-----------------------------------------------\n");
printf("\n添加的编号:
\n");
scanf("%s",p->data.num);
printf("\n添加的姓名:
\n");
scanf("%s",p->data.name);
printf("\n性别:
\n");
scanf("%s",p->data.sex);
printf("\n电话:
\n");
scanf("%s",p->data.phone);
printf("\n地址:
\n");
scanf("%s",p->data.addr);
rear->next=p;/*新结点连接到尾结点之后*/
rear=p;/*尾指针指向新结点*/
printf("继续建表?
(y/n):
");
scanf("%s",&flag);
}
rear->next=NULL;/*终端结点指针置空*/
returnhead;/*返回链表头指针*/
}
3.2链表结点的插入
3.2.1代码功能
要求将一个通讯者记录的数据结点按其编号的次序插入有序通讯表相应位置,以保持通讯录的有序性。
插入的基本思想是:
使用两个指针变量p1和p2分别指向当前访问过的结点和下一个结点,循环顺序查找链表。
寻找插入结点的位置,其中p1指向待插入位置的前一个结点。
3.2.2功能实现代码
插入操作是非常简单的。
具体实现算法如下:
(1)用p1指向原链表头结点,p2指向链表的第一个结点;
(2)while(p2!
=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;/*p1指向刚访问过的结点*/
p2=p2->next;/*p2指向下一个结点*/
}
(3)插入新结点。
具体算法如下:
/*********在通讯录链表head中插入结点************/
voidInsertNode(LinkListhead,ListNode*p)
{
ListNode*p1,*p2;
p1=head;
p2=p1->next;
while(p2!
=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;/*p1指向刚访问过的结点*/
p2=p2->next;/*p2指向表的下一个结点*/
}
p1->next=p;/*插入p所指向的结点*/
p->next=p2;/*连接表中剩余的结点*/
}
3.3通讯者结点信息的查找
3.3.1代码功能
通讯录结点查找的基本思想是:
首先输入要查找的通讯者编号或姓名,从表头顺序访问表中结点。
如果查找成功,则返回一个指向查找道德通讯者信息;若查找失败,则返回一个空的指针NULL。
3.3.2功能实现代码
/**********有序通讯录链表的查找****************/
ListNode*ListFind(LinkListhead)
{
ListNode*p;
charnum[5];
charname[9];
charpp;
printf("==================\n");
printf("a.按编号查询\n");
printf("b.按姓名查询\n");
printf("==================\n");
printf("请选择: