数据结构课程设计说明书模板.docx
- 文档编号:2443934
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:16
- 大小:36.12KB
数据结构课程设计说明书模板.docx
《数据结构课程设计说明书模板.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计说明书模板.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构课程设计说明书模板
中北大学
数据结构与算法课程设计
说明书
学院、系:
软件学院
专业:
软件工程
班级:
13140A01
学生姓名:
景贝贝
学号:
1314011438
设计题目:
通讯录的制作
起迄日期:
2015年1月12日-2015年1月29日
指导教师:
杨顺民
2015年1月29日
1需求分析
1) 每条信息至包含:
姓名(NAME)街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力
3) 上机能正常运行,并写出课程设计报告
通讯录的基本活动包括:
对一个人的采编、删除、查找和显示等等。
由于上述四项基本活动都是通过人名(即关键字)进行的。
作为通讯录,就需要一个模块来完成对别人的登记和记录情况,本程序使用文件来完成上述操作。
2设计内容
本系统应完成一下几方面的功能:
1) 输入信息——enter();
2) 显示信息———display();
3) 查找以姓名作为关键字———search();
4) 删除信息———delete();
5) 存盘———save();
6) 装入———load();
3设计目的
用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。
编写一个通讯录管理系统。
以把所学数据结构知识应用到实际软件开发中去。
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。
因此,为了表示每个数据元素与其后继元素之间的逻辑关系,对于数据元素来说,除了存储数据本身信息之外,还需要存储一个指示其后继的信息。
这两部分组成数据的存储映像,称为结点。
4.系统流程图
7exit()
退出
ch=getche()
5.详细设计及
(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);
}
}
}
6.部分调试界面
7.程序源码
#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("……………………~欢迎使用迷你通讯录系统~………………………\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("\n请选择:
\n");
gets(s);
c=atoi(s);//是把字符串转换成长整型数的一个函数
}while(c<0||c>7);/*超出选项范围时,提示重新输入*/
returnc;/*返回输入值*/
}
voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空时退出*/
{
structaddress*info;/*定义当前结点*/
for(;;)
{
info=(structaddress*)malloc(sizeof(structaddress));/*为当前结点分配空间*/
if(!
info)
{
printf("\n分配空间失败");
exit(0);/*如果分配空间失败,退出程序*/
}
printf("输入空姓名结束:
\n");
inputs("姓名:
",info->name,30);
if(!
info->name[0])
break;/*如果输入姓名为空,结束循环*/
inputs("街道:
",info->street,100);
inputs("城市:
",info->city,30);
inputs("国家:
",info->state,30);
inputs("邮编:
",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("\n太长\n");
}while(strlen(p)>count);
p[strlen(p)-1]=0;
strcpy(s,p);
}
voiddls_store(/*数据插入函数,也是本例的关键函数*/
structaddress*i,/*接受传入的当前输入结点地址*/
structaddress**start,/*接受传入的首结点地址*/
structaddress**last/*接受传入的尾结点地址*/
)
{
structaddress*old,*p;
if(*last==NULL)/*如果尾结点为空,意味着当前链表为空*/
{
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;
}
/*如果链表不为空*/
p=*start;/*p取入口地址(也就是首结点地址)*/
old=NULL;/*old赋空*/
while(p)
{/*如果p不为空时,执行特循环体,查找比当前结点应该插入的位置*/
if(strcmp(p->name,i->name)<0)/*如果当前结点的name域比p(首结点)大时(实现以name域升序排序)*/
{
old=p;
p=p->next;
}
else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 说明书 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)