数据结构课程设计报告通讯录.docx
- 文档编号:25485753
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:17
- 大小:118.37KB
数据结构课程设计报告通讯录.docx
《数据结构课程设计报告通讯录.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告通讯录.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告通讯录
数据结构课程设计报告
专业:
计算机科学与技术
年级:
课题名称:
通讯录
小组成员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;i { 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.做软件最终是满足用户的需求,所以做软件时应一切应以用记为导向.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 通讯录
![提示](https://static.bdocx.com/images/bang_tan.gif)