数据结构通讯录制作总结模板.docx
《数据结构通讯录制作总结模板.docx》由会员分享,可在线阅读,更多相关《数据结构通讯录制作总结模板.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构通讯录制作总结模板
数据结构
大作业设计总结报告
题目:
通讯录建立
班级:
学号:
姓名:
指导教师:
日期:
2013年7月3日
一、课程设计目标
1、问题描述:
运用数据结构课程中所学知识制作一个通讯录,在通讯录中实现添加、删除、查找、修改等功能,其中查找方式要用到分块查找。
2、问题分析:
由于通讯录涉及到多个类型不同的数据组合成一个有机的整体,链表又是能够动态地进行存储分配的一种结构,根据需要开辟新的内存空间,不会浪费内存资源,所以利用链表实现通讯录的。
由于系统需要实现的功能较多,所以采用模块化方式减少工作量及编译时的困难,分别实现建立、插入、查询、输出通讯录的功能。
二、设计过程
1、整体算法思想:
①、首先要定义结构体、结构体指针,初始化链表,以便于在后面的查找、插入、删除、输出操作的实现;
②、各个功能模块通过函数实现,可是使程序可读性更好;
③、插入操作:
add_TXL(),利用该函数进行插入操作,同时考虑到排序问题,在输入姓名后,程序对输入的姓名通过ASCII码进行判断,大写字母进行ASCII码相减后进行排序操作;
④、查找操作:
search_TXL(),通过ASCII码相减,选择不同的链表进行查找以实现分块查找;
⑤、删除操作:
delete_TXL(),需先进行查找,找到目标后,进行删除;
⑥、修改操作:
mod_TXL(),同样需要先对通讯录进行查找,然后进行修改;
⑦、主函数中依次调用相关函数即可。
2、程序:
#include
#include
#include
#include
typedefstructnode//结点定义
{
charname[10];//名字存储单元
charclas[20];//班级存储单元
longtel;//电话存储单元
longqq;//QQ号存储单元
structnode*next;
}TXLnode;
typedefstruct//定义索引表
{
charind;
TXLnode*next;
}INDEX[26];
//-----------------------函数声明----------------------------
voidinit_ind();//索引表初始化函数
voidadd_TXL();//通讯录内容添加函数
voidsearch_TXL();//通讯录内容查找函数
voiddelete_TXL();//通讯录内容删除函数
voidmod_TXL();//通讯录内容修改函数
voidoutput_IND();//通讯录内容输出函数
voidprint();//通讯录主菜单选择项内容函数
voidhellow();//通讯录头欢迎界面
//-------------------------函数声明-------------------------
voidinit_ind(INDEXtind)//索引表初始化--以26个字母分为26个索引表
{
inti,j=97;
for(i=0;i<26;i++)
{
tind[i].ind=j;
tind[i].next=NULL;
j++;
}
}
voidadd_TXL(TXLnodeTX,INDEXindex)//增加记录
{
inti;
printf("*系统提示:
请输入个人信息:
姓名、班级、电话、QQ号\n");
scanf("%s%s%ld%ld",&TX.name,&TX.clas,&TX.tel,&TX.qq);
TXLnode*p;
p=(TXLnode*)malloc(sizeof(TXLnode));
if(!
p)
exit(0);
strcpy(p->name,TX.name);
strcpy(p->clas,TX.clas);
p->tel=TX.tel;
p->qq=TX.qq;
p->next=NULL;
if('a'<=TX.name[0]&&TX.name[0]<='z')
i=p->name[0]-'a';
elseif('A'<=TX.name[0]&&TX.name[0]<='Z')
i=TX.name[0]-'A';
else
{
printf("*系统提示:
输入姓名错误\n");
return;
}
if(!
index[i].next)
index[i].next=p;
else
{
p->next=index[i].next;
index[i].next=p;
}
}
voidsearch_TXL(TXLnode&TX,INDEXindex)//查找记录
{
inti,j;
printf("*系统提示:
请输入要查找人的姓名\n");
scanf("%s",&TX.name);
if('a'<=TX.name[0]&&TX.name[0]<='z')
i=TX.name[0]-'a';
elseif('A'<=TX.name[0]&&TX.name[0]<='Z')
i=TX.name[0]-'A';
else
{
printf("*系统提示:
输入姓名出错\n");
return;
}
TXLnode*p;
p=index[i].next;
while(p)
{
j=strcmp(p->name,TX.name);
if(j==0)
{
printf("要查找人信息:
\n");
printf("姓名:
%s班级:
阰%s;",p->name,p->clas);
printf("电话:
%ld;QQ:
%ld\n",p->tel,p->qq);
break;
}
p=p->next;
}
if(p==NULL)
printf("*系统提示:
不存在此人\n");
}
voiddelete_TXL(TXLnodeTX,INDEXindex)//删?
除y记?
录?
{
inti,j;
printf("*系统提示:
请输入要删除人的姓名:
\n");
scanf("%s",&TX.name);
if('a'<=TX.name[0]&&TX.name[0]<='z')
i=TX.name[0]-'a';
elseif('A'<=TX.name[0]&&TX.name[0]<='Z')
i=TX.name[0]-'A';
else
{
printf("*系统提示:
输入姓名出错\n");
return;
}
TXLnode*p,*q;
p=index[i].next;
q=index[i].next;
while(p)
{
if(strcmp(index[i].next->name,TX.name)==0)
{
index[i].next=p->next;
break;
}
j=strcmp(p->name,TX.name);
if(j==0)
{
q->next=p->next;
break;
}
q=p;
p=p->next;
}
free(p);
}
voidmod_TXL(TXLnodeTX,INDEXindex)//修改记录
{
printf("*系统提示:
请输入要修改人员的名字\n");
scanf("%s",&TX.name);
inti,k,j;
if('a'<=TX.name[0]&&TX.name[0]<='z')
i=TX.name[0]-'a';
elseif('A'<=TX.name[0]&&TX.name[0]<='Z')
i=TX.name[0]-'A';
else
{
printf("*系统提示:
输入姓名出错\n");
return;
}
TXLnode*p;
p=index[i].next;
while(p)
{
j=strcmp(p->name,TX.name);
if(j==0)
{
printf("*系统提示:
请输入要修改的项目1:
班级;2:
电话;3:
QQ\n");
scanf("%d",&k);
switch(k)
{
case1:
{
printf("请输入班级:
\n");
scanf("%s",&p->clas);
break;
}
case2:
{
printf("请输入电话:
\n");
scanf("%ld",&p->tel);
break;
}
case3:
{
printf("请输入QQ:
\n");
scanf("%ld",&p->qq);
break;
}
default:
{
printf("*系统提示:
输入出错\n");
return;
}
}
}
p=p->next;
}
}
voidoutput_IND(INDEX&index)//输出索引表
{
inti;
TXLnode*p;
for(i=0;i<26;i++)
{
p=index[i].next;
while(p)
{
printf("姓名:
%s班级:
%s电话:
%ldqq:
%ld\n",p->name,p->clas,p->tel,p->qq);
//printf("电?
话°:
阰%ldqq:
%ld\n",p->tel,p->qq);
p=p->next;
}
}
}
voidprint()//通?
讯?
录?
主÷菜?
单蹋?
选?
项?
展1示?
{
printf("=============================================================\n");
printf("==输入要修改的项目:
==\n");
printf("==0:
退出==\n");
printf("==1:
修改记录==\n");
printf("==2:
查找记录==\n");
printf("==3:
删除记录==\n");
printf("==4:
新增记录==\n");
printf("==5:
显示通讯录==\n");
printf("=============================================================\n");
}
voidhellow()//通讯录欢迎界面
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("++++\n");
printf("++欢迎使用岩哥通讯录++\n");
printf("++++\n");
printf("++制作人:
周岩班级:
10级通信一班++\n");
printf("++++\n");
printf("++学号:
201040600434++\n");
printf("++++\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("\n");
printf("\n");
}
intmain()//主函数
{
inti;
TXLnodeTXL;
INDEXindex;
init_ind(index);
//add_TXL(TXL,index);
//output_IND(index);
hellow();
intj;
print();
scanf("%d",&j);//输入数字选择功能
while
(1)//执行功能
{
switch(j)
{
case0:
//退出程序
{
exit(0);
}
case1:
//修改通讯录内容
{
mod_TXL(TXL,index);
output_IND(index);
intm;
printf("*系统提示:
是否继续修改?
1:
是;0:
否;\n");
scanf("%d",&m);
while(m)
{
mod_TXL(TXL,index);
output_IND(index);
printf("*系统提示:
是否继续修改?
1:
是;0:
否;\n");
scanf("%d",&m);
}
break;
}
case2:
//查找通讯录内容
{
search_TXL(TXL,index);
printf("*系统提示:
是否继续查找?
1:
是;0:
否\n");
intsear;
scanf("%d",&sear);
while(sear)
{
search_TXL(TXL,index);
printf("*系统提示:
是否继续查找?
1:
是;0:
否\n");
scanf("%d",&sear);
}
break;
}
case3:
//删除通讯录内容
{
delete_TXL(TXL,index);
output_IND(index);
intdel;
printf("*系统提示:
是否继续删除?
1:
是;0:
否;\n");
scanf("%d",&del);
while(del)
{
delete_TXL(TXL,index);
output_IND(index);
printf("*系统提示:
是否继续删除?
1:
是;0:
否;\n");
scanf("%d",&del);
}
break;
}
case4:
//录入通讯录内容
{
inta=1;
while(a)
{
add_TXL(TXL,index);
//output_IND(index);
printf("*系统提示:
是否继续增加记录1.是0.否\n");
scanf("%d",&a);
}
//output_IND(index);
break;
}
case5:
//输出展示通讯录内容
{
output_IND(index);
break;
}
default:
printf("*系统提示:
输入不符合标准\n");
}
print();//循环完成后继续提示主菜单进行后面操作
scanf("%d",&j);
}
return0;
}
三、程序调试
1、打开程序
显示欢迎界面和功能菜单,程序运行正常。
2、输入内容
可以连续输入内容,并按名字首字母排序,输入功能正常。
3、修改内容
如图所示,讲aa同学的班级由11改为了tongyi,修改功能正常。
4、查找内容
输入要查找的姓名后,程序显示信息,查找功能正常。
5、删除内容
删除ee后,输出通讯录,显示已没有ee同学信息,删除功能正常。
4、心得体会
通过这次大作业,感觉收获最多的就是把这学期所学的知识进行了一次系统的应用,让本来觉得掌握的比较模糊的地方,在实际编程应用中得到了明确。
同时,也很大程度上增强了自己的信心,以前提到编程,觉得没什么底气,觉得是一件很难完成的工作,通过这次大作业,经历过实际编程后,感觉编程也不是那么遥远。
同时,在编写程序的时候,又把C语言这本书看了很多,发现以前在学的时候并没有学那么透彻,还有一些知识因为当时学的时候没有经过编程的实际操作,已经忘记了。
在结合了大二大三两年的学习,再看C语言这本书,觉得又学到了很多东西。
在经过这次编程之后,觉得对数据结构这门课以及编程比以前更有趣了。
觉得老师在今后的教学中,可以多带领同学们实际地去编写、运行一些程序,这样既可以加深同学们对知识的理解,又能调动学习兴趣。