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

上传人:b****7 文档编号:25485753 上传时间:2023-06-09 格式:DOCX 页数:17 大小:118.37KB
下载 相关 举报
数据结构课程设计报告通讯录.docx_第1页
第1页 / 共17页
数据结构课程设计报告通讯录.docx_第2页
第2页 / 共17页
数据结构课程设计报告通讯录.docx_第3页
第3页 / 共17页
数据结构课程设计报告通讯录.docx_第4页
第4页 / 共17页
数据结构课程设计报告通讯录.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

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

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

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

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

数据结构课程设计报告

 

专业:

计算机科学与技术

年级:

课题名称:

通讯录

小组成员1:

小组成员2:

小组成员3:

 

信息技术学院专业教研室一

 

一、问题描述

设计目的:

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

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

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

设计内容:

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

1)输入信息——enter();

2)显示信息———display();

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

4)删除信息———delete();

5)存盘———save();

6)装入———load();

设计要求:

1)每条信息至包含:

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

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

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

二、需求分析

A,添加:

系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).

B,删除:

首先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.

C,显示所有人员信息:

该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.

D,查询:

可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.

E,退出系统

关闭通讯录管理系统.

三、概要设计

六个函数的实现:

voidenter();新添纪录

voidsearch();按姓名查询

voiddisplay();显示

voidload();读取文件

voidsave();写入文件

voiddelete();删除

四、详细设计

通讯录管理系统功能说明图:

新添联系人

查询菜单

删除联系人

保存退出

不保存退出

通讯录管理系统

 

数据结构及各模块分析:

1.设计类、对象及基本数据类型:

创建一个record类,它有五个数据成员:

charname[20];姓名

charstreet[20];街道

charcity[20];城市

chareip[20];邮编

charstate[20];国家

2.包含函数及功能如下:

voidmainmenu();主菜单

voidsearchmenu();查找菜单

voidenter();新添纪录

voidsearch();按姓名查询

voiddisplay();显示所有

voidload();读取文件

voidsave();写入文件

voiddelete();按姓名删除

3.结构体:

structrecord

{

charstreet[20];

charname[20];

charcity[20];

charstate[20];

chareip[20];

}student[500];

structslnode

{

recorddate;

structslnode*next;

structslnode*prior;

};

五、调试分析

●voidload()//从文件导入

{

if((fp=fopen("student","rb"))==NULL)//打开文件进行读的操作

{

printf("\n\t\t通讯录文件不存在");

if((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作

{

printf("\n\t\t建立失败");

exit(0);

}

else

{

printf("\n\t\t通讯录文件已建立");

printf("\n\t\t按任意键进入主菜单");

getch();//从键盘接收一个字符

}

return;//返回主函数的主菜单

}

exit(0);

}

fseek(fp,0,2);/*文件位置指针移动到文件末尾*/

if(ftell(fp)>0)/*文件不为空*/

{

rewind(fp);/*文件位置指针移动到文件开始位置*/

for(num=0;!

feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);

.......

getch();

return;

}

●voidmainmenu()//主菜单

{

charchoic;

system("cls");

printf("\n\t\t***************欢迎进入通讯录系统***************");

printf("\n\t\t******************1-新添纪录******************");

printf("\n\t\t******************2-查找联系人****************");

printf("\n\t\t******************3-删除联系人***************");

printf("\n\t\t******************4-保存退出*****************");

printf("\n\t\t******************5-不保存退出***************");

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

printf("\n\t\t请选择:

");

choic=getch();

switch(choic)

{

case'1':

enter();break;

case'2':

searchmenu();break;

case'3':

delet();break;

case'4':

save();break;

case'5':

exit(0);

default:

mainmenu();

}

}

●voidsearchmenu()//查询菜单

{

charchoic;

system("cls");

printf("\n\t\t*******************查询菜单*******************");

printf("\n\t\t****************1-显示所有********************");

printf("\n\t\t****************2-按姓名查询******************");

printf("\n\t\t****************3-返回主菜单******************");

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

printf("\n\t\t请选择:

");

choic=getch();

switch(choic)

{

case'1':

display();break;

case'2':

search();break;

case'3':

mainmenu();break;

}

}

●voidenter()//添加纪录

{

printf("\n\t\t****************请输入学生信息****************\n");

printf("\n\t\t姓名:

");

scanf("%s",&student[num].name);

printf("\n\t\t街道:

");

scanf("%s",&student[num].street);

printf("\n\t\t城市:

");

scanf("%s",&student[num].city);

printf("\n\t\t输入邮编:

");

scanf("%s",&student[num].eip);

printf("\n\t\t国家:

");

scanf("%s",&student[num].state);

num++;

listinsert();

printf("\n\t\t是否继续添加?

(Y/N):

");

if(getch()=='y')

enter();

return;

}

●voiddisplay()//显示所有

{

inti;

system("cls");

if(num!

=0)

{

printf("\n\t\t***************以下为通讯录所有信息************");

for(i=0;i

{

printf("\n\t\t姓名:

%s",student[i].name);

printf("\n\t\t街道:

%s",student[i].street);

printf("\n\t\t城市:

%s",student[i].city);

printf("\n\t\t邮编:

%s",student[i].eip);

printf("\n\t\t国家:

%s",student[i].state);

printf("\t\t");

if(i+1

{

printf("\n\t\t__________________________");

//system("pause");

}

}

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

}

else

printf("\n\t\t通讯录中无任何纪录");

printf("\n\t\t按任意键返回主菜单:

");

getch();

return;

}

●voidsearch()//查找联系人

{

intj=0,a=0;//j用来记录查找

.......

scanf("%s",name);

for(inti=a;inext)//num用来表示联系人的个数

{

if(strcmp(name,p->next->date.name)==0)//查找是否有该人,有则输出该点所有信息,并往下查找。

{

printf("查询到的信息:

");

printf("\n");

printf("姓名:

");

printf("%s",p->next->date.name);

............

j++;

}

if(j==0)

printf("\t\t该通讯录没有该人!

");

if((i+1)

{

printf("\n\t\t是否继续查找相同名字的学生信息:

(y/n)");

.........

}

else

{

printf("\n\t\t按任意键返回主菜单");

..........

}

}

}

●voiddelet()//删除联系人

{

inta=0;

intfindmark=0;

intj;

intdeletemark=0;

inti;

charname[20];

printf("\n\t\t请输入要删除学生姓名:

");

scanf("%s",name);

for(i=a;i

{

if(strcmp(student[i].name,name)==NULL)

{

printf("\n\t\t以下是您要删除的学生纪录:

");

findmark++;

printf("\n\t\t________________________________");

printf("\n\t\t姓名:

%s",student[i].name);

printf("\n\t\t街道:

%s",student[i].street);

printf("\n\t\t城市:

%s",student[i].city);

printf("\n\t\t邮编:

%s",student[i].eip);

printf("\n\t\t国家:

%s",student[i].state);

printf("\n\t\t________________________________");

printf("\n\t\t是否删除?

(y/n)");

if(getch()=='y')

{

for(j=i;j

student[j]=student[j+1];

num--;

deletemark++;

printf("\n\t\t删除成功");

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?

(y/n)");

if(getch()=='y')

{

a=i;

continue;

}

}

printf("\n\t\t是否继续删除?

(y/n)");

if(getch()=='y')

delet();

return;

}

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?

(y/n)");

if(getch()=='y')

{

a=i;

continue;

}

}

}

else

continue;

}

if((deletemark==0)&&(findmark==0))

{

printf("\n\t\t没有该同学的纪录");

return;

}

else

if(findmark!

=0)

{

printf("\n\t\t没有重名信息");

printf("\n\t\t没有该同学的纪录");

return;

}

}

六、使用说明

1.运行环境:

MicrosoftVisualC++6.0

2.细节和具体的操作方法:

将软件进行初始化,即在VC++6.0中运行该程序,进入程序主界面,首次运行会建立txt文件,提示文件是否成功建立。

然后按任意键后进入主菜单。

界面显示的是“主菜单”,主菜单有五个方面:

1,新添记录

2,查询菜单

3,删除联系人

4,保存退出

5,不保存退出

按“1”新添加记录,根据提示,输入信息相关信息。

按“2”显示查询的菜单。

按“3”删除指定联系人。

按“4”将输入的联系人信息保存到文件中并退出通讯录。

按“5”退出通讯录,不保存输入的联系人信息。

查询菜单包裹三个方面

1,显示所有

2,按姓名查询

3,返回主菜单

按“1”显示所有联系人的信息。

按“2”按姓名进行查询。

按“3”返回主菜单。

七、总结

1.程序的编写应是:

三分编写,七分调试;

2.程序编写之前需求分析,至关重要,将关系这整个项目的成败.

3.熟能生巧,这次在用指针处理双向链表时,以前对这块内容并不十分清楚,这次感觉很吃力,所以在今后的编程之中,尽可能把基本技能练习熟练.

4.做软件最终是满足用户的需求,所以做软件时应一切应以用记为导向.

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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