数据结构课程设计报告通讯录的制作.docx

上传人:b****5 文档编号:4440250 上传时间:2022-12-01 格式:DOCX 页数:29 大小:240.31KB
下载 相关 举报
数据结构课程设计报告通讯录的制作.docx_第1页
第1页 / 共29页
数据结构课程设计报告通讯录的制作.docx_第2页
第2页 / 共29页
数据结构课程设计报告通讯录的制作.docx_第3页
第3页 / 共29页
数据结构课程设计报告通讯录的制作.docx_第4页
第4页 / 共29页
数据结构课程设计报告通讯录的制作.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告通讯录的制作.docx

《数据结构课程设计报告通讯录的制作.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告通讯录的制作.docx(29页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告通讯录的制作.docx

数据结构课程设计报告通讯录的制作

 

山东理工大学计算机学院

课程设计

(数据结构)

 

班级

姓名

学号

指导教师

 

二○一一年一月二十日

课程设计任务书及成绩评定

课题名称

数据结构

Ⅰ、题目的目的和要求:

1、设计目的

巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求:

通讯录的制作

设计目的:

用〈〈数据结构〉〉中的双向链表作数据结构,结合C/C++语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:

本系统应完成一下几方面的功能:

输入信息——enter();

显示信息———display();

查找以姓名作为关键字———search();

删除信息———delete();

存盘———save();

装入———load();

设计要求:

1)每条信息至包含:

姓名(NAME)街道(STREET)城市(CITY)邮编(ZIP)国家(STATE)几项。

2)作为一个完整的系统,应具有友好的界面和较强的容错能力。

3)上机能正常运行,并写出课程设计报告。

 

Ⅱ、设计进度及完成情况

日期

内容

1.10-1.11

选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。

1.12~1.14

创建相关数据结构,录入源程序。

1.17~1.19

调试程序并记录调试中的问题,初步完成课程设计报告。

1.20~1.21

上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。

考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。

Ⅲ、主要参考文献及资料

[1]严蔚敏数据结构(C语言版)清华大学出版社1999

[2]严蔚敏数据结构题集(C语言版)清华大学出版社1999

[3]谭浩强C语言程序设计清华大学出版社

[4]与所用编程环境相配套的C语言或C++相关的资料

 

Ⅳ、成绩评定:

 

设计成绩:

(教师填写)

指导老师:

(签字)

 

二○一一年一月二十一日

目录

第一章概述……………………………………………………………1

第二章系统分析………………………………………………………2

第三章概要设计………………………………………………………2

第四章详细设计………………………………………………………5

第五章运行与测试……………………………………………………16

第六章总结与心得…………………………………………………22

参考文献………………………………………………………………24

第一章概述

课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

通过设计通讯录的制作,进一步熟悉数据结构的概念、基本知识和技能,掌握程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的程序设计问题。

逐步熟悉程序设计的方法,并养成良好的编程习惯。

在这次的课程设计中我选择的题目是通讯录的制作,我觉得这是我们日常生活中用到最多的一方面,也是对我们比较重要的一种东西。

虽然它好像是一个被遗忘的问题,但是它往往能起到巨大的作用。

通讯录的存在主要是主要是方便人们的生活,传统通讯录采用纸张印刷,然后装订成册,显示每个人的联系方法,地址等,比较笨重不方便。

随着现代社会科技的发展你可以在个人电脑、掌上电脑、移动电话等任何联网设备上录入你的联系人的手机\电话号码、Email、QQ、MSN、通信地址等通讯录信息,或对以前的信息进行分组、管理和更新,这就是我想所做的。

我想做出一个更加的方便,迅捷,减少很多劳动量的通讯录。

使人们能轻松的管理自己的信息。

第二章系统分析

1.设计内容:

本系统应完成一下几方面的功能:

①输入信息(Enter()):

调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取。

②显示信息(Display()):

用以显示输入的数据,包括从内存中读出和从磁盘中读。

③查找(Search()):

以姓名作为关键字查找要找的信息。

④删除信息(Delete()):

用以删除选定的输入信息(姓名作为关键字)。

⑤存盘(Save()):

调用此函数将内存中的数据保存至磁盘中。

⑥装入(Load()):

调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上。

通讯录的基本活动包括:

对一个人的采编、删除、查找和显示等等。

由于上述四项基本活动都是通过人名(即关键字)进行的。

作为通讯录,就需要一个模块来完成对别人的登记和记录情况,本程序使用文件来完成上述操作。

2.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言是转化。

3.程序执行时的命令:

本程序为了使用时的方便,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入选者即可。

当然也要注意输入时格式,否者可能会引起一些错误。

5.测试数据。

要根据我们自己的需要进行测试,不能凭空的进行数据测试。

第三章概要设计

3.1主要数据结构

主要利用线性表的链式存储结构,来存储数据和信息。

3.2设计方法及原理

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。

因此,为了表示每个数据元素与其后继元素之间的逻辑关系,对于数据元素来说,除了存储数据本身信息之外,还需要存储一个指示其后继的信息。

这两部分组成数据的存储映像,称为结点。

3.3流程图

7exit()

退出

3.4设计结构体及基本数据成员类型:

(1)结构体:

(构造一个结构体来存储和使用数据)

structaddress{/*定义结构*/

charname[30];//姓名

charstreet[100];//街道

charcity[30];//城市

charstate[30];//国家

charzip[11];//邮政编码

structaddress*next;/*后继指针*/

structaddress*prior;/*前导指针*/

};

structaddress*start;/*首结点*/

structaddress*last;/*尾结点*/

structaddress*find(char*);/*声明查找函数*/

(2)包含被调用函数:

功能

voidenter();//输入信息/*函数声明*/

voidsearch();//查找信息

voidsave();//存盘

voidload();//装入

voidlist();//显示信息

voidmldelete(structaddress**,structaddress**);//删除信息

voiddls_store(structaddress*i,structaddress**start,

structaddress**last);

voidinputs(char*,char*,int);

voiddisplay(structaddress*);

intmenu_select(void);

(3)实现主程序与各模块的调用关系:

主函数通过调用各个函数来连接各个函数,从而实现程序功能的实现。

intmain(void)

{

start=last=NULL;

for(;;)

{

switch(menu_select())

{

case1:

enter();

continue;

case2:

mldelete(&start,&last);

continue;

case3:

list();

continue;

case4:

search();

continue;

case5:

save();

continue;

case6:

load();

continue;

case7:

exit(0);

}

}

}

第四章详细设计

(1)头函数

#include

#include

#include

(2)被调用函数

1.添加学生信息:

voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空时退出*/

{

structaddress*info;/*定义当前结点*/

for(;;)

{

info=(structaddress*)malloc(sizeof(structaddress));/*为当前结点分配空间*/

if(!

info)

{

printf("\nOutofmemory");

exit(0);/*如果分配空间失败,退出程序*/

}

printf("输入空姓名结束:

\n");

inputs("Entername:

",info->name,30);

if(!

info->name[0])

break;/*如果输入姓名为空,结束循环*/

inputs("Enterstreet:

",info->street,100);

inputs("Entercity:

",info->city,30);

inputs("Enterstate:

",info->state,30);

inputs("Enterzip:

",info->zip,11);

dls_store(info,&start,&last);/*调用结点插入函数*/

}

}

2删除联系人信息:

voidmldelete(structaddress**start,structaddress**last)/*删除函数*/

{

structaddress*info;

chars[80];

inputs("Entername:

",s,30);/*输入欲删除结点的name域内容*/

info=find(s);/*查找该内容*/

if(info)/*如果找到*/

{

printf("Deleting......\n");

if(*start==info)/*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/

{*start=info->next;

if(*start)

(*start)->prior=NULL;/*如果新入口不为空,把入口的前驱置空*/else*last=NULL;/*如果新入口为空,把尾结点置空,链表为空*/

}

else/*如果欲删除的结点不是首结点*/

{info->prior->next=info->next;/*令该结点的前驱的next指针指向该结点的后驱,*又令该结点的后驱的prior指点指向该结点的前驱*/

if(info!

=*last)/*如果该结点是尾结点,则令该结点的前驱为尾结点*/

info->next->prior=info->prior;

else

*last=info->prior;

}

free(info);/*释放该结点所占用的内存*/

printf("-Ok,deletedsuccessfully!

\n");

}

}

3显示所有联系人;

voidlist(void)

{structaddress*info;

info=start;

if(info==NULL)

printf("NOinformation!

");

while(info)

{

display(info);

info=info->next;

}

printf("\n\n");

}

voiddisplay(structaddress*info)/*输出传入结点函数*/

{

printf("%s\n",info->name);

printf("%s\n",info->street);

printf("%s\n",info->city);

printf("%s\n",info->state);

printf("%s\n",info->zip);

printf("\n\n");

}

4查找联系人信息;

voidsearch(void)/*查找函数*/

{

charname[40];

structaddress*info;

printf("Enternametofind:

");/*输入欲查找的姓名*/

gets(name);

info=find(name);

if(!

info)

printf("Notfound\n");/*如果没找到,显示Notfound*/

else

display(info);/*如果找到,显示该结点资料*/

}

5装入

voidload()/*调用预存文件函数*/

{

registerintt,size;

structaddress*info,*temp=0;

char*p;

FILE*fp;/*打开文件*/

if((fp=fopen("mlist","r"))==NULL)

{

printf("Cannotopenfile!

\n");

exit(0);

}

printf("\n\nLoading...\n");/*调用文件*/

size=sizeof(structaddress);/*为结点分配内存*/

start==malloc(size);

if(!

start)/*如果读取失败,返回*/

{

printf("Outofmemory!

\n");

exit(0);

}

info=start;

p=(char*)info;

while((*p++=getc(fp))!

=EOF)

{

for(t=0;t

*p++=getc(fp);

info->next==malloc(size);

if(!

info->next)

{

printf("Outofmemory!

\n");

return;

}

info->prior=temp;

temp=info;

info=info->next;

p=(char*)info;

}

temp->next=0;

last=temp;

start->prior=0;

fclose(fp);/*关闭文件,释放内存*/

printf("-OK!

\n");

}

6目录函数;

intmenu_select(void)/*主目录*/

{

chars[80];

intc;

printf("…………O(∩_∩)O~欢迎使用亮亮通讯录系统O(∩_∩)O~…………\n");

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

printf("**************1.输入信息***************\n");

printf("**************2.删除信息***************\n");

printf("**************3.显示信息***************\n");

printf("**************4.查找***************\n");

printf("**************5.存盘***************\n");

printf("**************6.装入***************\n");

printf("**************7.退出***************\n");

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

do{

printf("\nPleaseenteryourchoice:

\n");

gets(s);

c=atoi(s);

}while(c<0||c>7);/*超出选项范围时,提示重新输入*/

returnc;/*返回输入值*/

}

(3)最终程序代码

#include

#include

#include

structaddress{/*定义结构*/

charname[30];

charstreet[100];

charcity[30];

charstate[30];

charzip[11];

structaddress*next;/*后继指针*/

structaddress*prior;/*前导指针*/

};

structaddress*start;/*首结点*/

structaddress*last;/*尾结点*/

structaddress*find(char*);/*声明查找函数*/

voidenter();/*函数声明*/

voidsearch();

voidsave();

voidload();

voidlist();

voidmldelete(structaddress**,structaddress**);

voiddls_store(structaddress*i,structaddress**start,

structaddress**last);

voidinputs(char*,char*,int);

voiddisplay(structaddress*);

intmenu_select(void);

intmain(void)

{

start=last=NULL;

for(;;)

{

switch(menu_select())

{

case1:

enter();

continue;

case2:

mldelete(&start,&last);

continue;

case3:

list();

continue;

case4:

search();

continue;

case5:

save();

continue;

case6:

load();

continue;

case7:

exit(0);

}

}

}

intmenu_select(void)/*主目录*/

{

chars[80];

intc;

printf("…………O(∩_∩)O~欢迎使用迷你通讯录系统O(∩_∩)O~…………\n");

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

printf("**************1.输入信息***************\n");

printf("**************2.删除信息***************\n");

printf("**************3.显示信息***************\n");

printf("**************4.查找***************\n");

printf("**************5.存盘***************\n");

printf("**************6.装入***************\n");

printf("**************7.退出***************\n");

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

do{

printf("\nPleaseenteryourchoice:

\n");

gets(s);

c=atoi(s);

}while(c<0||c>7);/*超出选项范围时,提示重新输入*/

returnc;/*返回输入值*/

}

voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空时退出*/

{

structaddress*info;/*定义当前结点*/

for(;;)

{

info=(structaddress*)malloc(sizeof(structaddress));/*为当前结点分配空间*/

if(!

info)

{

printf("\nOutofmemory");

exit(0);/*如果分配空间失败,退出程序*/

}

printf("输入空姓名结束:

\n");

inputs("Entername:

",info->name,30);

if(!

info->name[0])

break;/*如果输入姓名为空,结束循环*/

inputs("Enterstreet:

",info->street,100);

inputs("Entercity:

",info->city,30);

inputs("Enterstate:

",info->state,30);

inputs("Enterzip:

",info->zip,11);

dls_store(info,&start,&last);/*调用结点插入函数*/

}

}

voidinputs(char*prompt,char*s,intcount)/*输入函数,有越界检测功能*/

{

charp[255];

do

{

printf(prompt);

fgets(p,254,stdin);

if(strlen(p)>count)

printf("\nTooLong\n");

}while(strlen(p)>count);

p[strlen(p)-1]=0;

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

当前位置:首页 > 自然科学 > 生物学

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

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