数据结构论文
数据结构论文
题 目 名 称 数据结构论文
课 程 名 称 数据结构(c 语言版)
学 生 姓 名 XXX
学 号 [1**********]8
系 、专 业 经济与管理学院电子商务091601班 指 导 教 师 XX
2011年 6 月 7 日
摘 要
目前的信息通信能力已经走超出了我们的想象,越来越多的通信工具出现,但无论是何种工具,其基本的一项功能就是记录通信者的信息,也便在需要时进行查寻。
“优秀的人际关系是一个人成功的重要因素”这已经成为不争的事实,这些
日益繁多的人际交往使得我们很难搞清楚与每个人具体的联系方式,这严重影响了一个人的发展,所以通讯录管理系统的建立已是必要的了,此次课程设计我利用了数据结构中的知识以及C 语言的知识设计的通讯录管理系统能够达到快速了解联系人信息,通讯录管理系统主要包括:1.通讯录链表的建立2.通讯者结点的插入3.通讯者结点的查询4.通讯者结点的删除5.通讯录链表的输出0.退出通讯录管理系统。你能够通过本系统了解联系人的姓名、单位、电话、地址,你也可以根据自己的需要改变系统的信息,相信通过使用该通讯录管理系统能够更加便利你的生活,为你的良好的人际关系添砖加瓦,帮助你走向成功。
关键词 信息通信,个人信息,通信录管理系统, 查找
1、 题目与要求
1.1 问题提出
日益繁多的人际交往使得我们很难搞清楚与每个人具体的联系方式,这严重
影响了一个人的发展,所以计划编写一个“通讯录管理系统”程序,主要用来管理联系人基本信息,可以根据自己的需要查看系统的信息,方便人们之间的联系。
1.2 本系统涉及的知识点
单链表、结构体、数组、循环、函数、指针
1.3 功能要求
用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单
按下设计:
1.通讯录链表的建立
2.通讯者结点的插入
3.通讯者结点的查询
4.通讯者结点的删除
5.通讯录链表的输出
0.退出通讯录管理系统。
使用数字0~5来选择菜单项,其他输入则不起作用,并给出错误提示。
2 功能设计
2.1 方案设计
本设计主要利用单链表做存储结构,实现。
1、通讯录链表的建立
在这个模板中要求按照编号、姓名、单位、电话、地址依次输入联系人的信
息从而建立通讯录链表;
2、通讯者结点的插入
在这个模板中功能要求增加联系人的信息,按照编号、姓名、单位、电话、
地址依次输入你要添加联系人的相应的信息,达到通讯者的插入;
3、通讯者结点的查询
在本模板中要求你快速的查找需要查找联系人的信息,本模板可以选择:1、
通过编号查找2、通过姓名查找,然后通过你的选择,输入相应的信息,这样查找需要的信息,如果没有需要查找的联系人,则输出“没有你要查找的人”;
4.通讯者结点的删除
在本模板中要求能够删除不需要联系的人员信息,可以通过编号查找删除或
通过姓名查找删除,输入相应的删除人信息时,系统能够弹出“真的要删除该节点吗”,如果你确定了但是系统中没有本人信息,系统自动弹出“没有要删除的通讯者”如果有本人信息则弹出“删除成功”的标志语;
5.通讯录链表的输出
在本模板中能过显示系统中已有所有联系人的相关信息;
0.退出通讯录管理系统
本模板功能是实现退出本系统的功能。
2.2 算法设计
2.3 详细设计
1. createlist :此函数的功能是实现通信录的初始建立。
If(head){
int c;
printf("通讯录已经存在!是否要重新建立!\n 1 or 0 : ");
scanf("%d",&c);
if(c==0) return head;
}//如果通信录存在,则由用户作出决定是否重新建立。
2. insertnode:此函数的功能是实现联系人的添加功能。
while(p2!=NULL && strcmp(p2->data.num,p->data.num)
//用于判断所添加的联系人的位置,并使其插入到合适的位置。
3. listfind : 此函数的功能是实现联系人的查找功能。
if(!head){
printf("尚未建立任何通讯录!");
return head;
}//用于判断通信录是否为空,这样有利于程序的健壮性。
while(q && strcmp(q->data.num,num)
q=q->next;
if (q==NULL || strcmp(q->data.num,num)>0)
q=NULL; //用来查找所需要的人的节点位置,并由此函数返回。
4. delnode :此函数的功能是实现联系人的删除操作。
调用listfind 函数查找到要删除的联系人的节点位置。如果返回 节点不为空,则联系人存在,并提示用户是否要进行删除操作,如 用户确定删除,则free(p);
5. printlist: 此函数的功能是实现联系人的全部输出。
if(!head->next)
printf("当前通讯录中还没有任何信息\n");
//用于判断通信录是否为空。
else 采用链表的一般形式输出。
0.exit (0): 用于退出整个程序。
3调试分析
4、设计总结 数据结构设计的题目需用我们把理论变为上机调试。在学习科目的第一节课起,在选题的时候老师就为我们阐述了它的重要性。它对我们来说具有一定的难度。而且他还是其它编程语言的一门基本学科。
刚开始做设计的时候确实有很多不理解的地方,,但对于我们来说也许不算是一个大的挑战,撞了几次壁之后,我们决定静下心来,仔细去写研究和编写程序。不懂的就请教老师和同学,努力的去做,在自己和老师、同学的的帮助下来逐渐的完成这个设计,当我们可以开始运行自己的程序时,但却是有好多处的错误,虽然经过几经周折但还是看不出到底是哪里出现了错误,但是设计还是得继续下去,我们又多次请教了老师和同学,他们不厌其烦的给我们讲解,就这样我们逐渐的排除了错误,眼看着一个个错误就通过辛勤的努力就在眼前渐渐说的消失了,我们觉得非常的开心。此次的程序设计能够成功,是我和搭档共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。
其实现在想起来,收获还真是不少,虽然说以前不是很懂这门语言,在它上面花费了好多心血,觉得它还是很难,但事实就是凡事都得花精力与时间去琢磨,去挖掘,然后你才能有所大的收获和感受,通过努力我明白了以前不懂的代码的应用,发现了每个程序都有一些共同点,通用的结构,相似的格式。只要努力去学习,就会灵活的应用它。
参 考 文 献
[1]刘大有等,《数据结构》(C 语言版),高等教育出版社
[2]严蔚敏等,《数据结构》(C 语言版),清华大学出版社
[3]William Ford,William Topp,《Data Structure with C++》清华大学出版社 [4]苏仕华等,数据结构课程设计,机械工业出版社
#include
#include
#include
typedef struct
{
char num[6];
char name[10];
char unit[20];
char phone[13];
char addr[30];
}datatype;
typedef struct node
{
datatype data;
struct node * next;
}listnode,*linklist;
int menu_select()
{
int sn;
printf("\n");
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf( "
for(; ;){
源程序 *******************通讯录管理系统****************\n"); * 1. 通讯录链表的建立 *\n"); * 2. 通讯者结点的插入 *\n"); * 3. 通讯录链表的查询 *\n"); * 4. 通讯者结点的删除 *\n"); * 5. 通讯录链表的输出 *\n"); * 0. 退出通讯录管理系统 *\n"); ************************************************\n"); 请选择操作0-5: ");
scanf_s("%d",&sn);
if(sn5){
printf("\t输入错误\n");
printf("请重新输入! ");
}
else
return sn;
}
}
linklist createlist(linklist head)
{if(head){
int c;
printf("通讯录已经存在!是否要重新建立!\n 1 or 0 : ");
scanf_s("%d",&c);
if(c==0) return head;
printf("\n");
}
linklist H=(listnode *)malloc(sizeof(listnode));
listnode *p,*rear;
int flag=1;
rear=H;
while(flag==1)
{
p=(listnode *)malloc(sizeof(listnode));
printf("编号 姓名 单位 电话 地址 \n");
printf(" -------------------------------------------------------------------------\n");
scanf_s("%s%s%s%s%s",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr); rear->next=p;
rear=p;
printf("创建成功!\n");
printf(" 继续建表吗? (1.是/0.不):");
scanf_s("%d",&flag);
}
rear->next=NULL;
return H;
}
void insertnode(linklist head,listnode *p)
{
listnode *p1,*p2;
p1=head;
p2=p1->next;
while(p2!=NULL && strcmp(p2->data.num,p->data.num)
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
printf("插入成功!\n");
}
listnode *listfind(linklist head)
{if(!head){
printf("尚未建立任何通讯录!");
return head;
}
linklist q;
char num[6];
char name[10];
int xz;
printf("--------------------------------------------------------------------------\n");
printf(" 1. 编号查询 \n");
printf(" 2. 姓名查询 \n");
printf("--------------------------------------------------------------------------\n");
printf("请选择: \n");
q=head->next;
scanf_s("%d",&xz);
if (xz==1)
{
printf(" 请输入要查找的编号: ");
scanf_s("%s",num);
while(q && strcmp(q->data.num,num)
q=q->next;
if (q==NULL || strcmp(q->data.num,num)>0)
q=NULL;
}
else
if(xz=2)
{
printf("请输入要查询者的姓名: ");
scanf_s("%s",name);
while(q && strcmp(q->data.name,name)!=0)
q=q->next;
}
return q;
}
void delnode(linklist head)
{
int jx;
listnode *p,*q;
p=listfind(head);
if(p==NULL){
printf("没有要删除的通讯者!\n");
return;
}
printf ("真的要删除该结点吗?(1.是/0.不):");
scanf_s("%d",&jx);
if (jx==1)
{
q=head;
while(q!=NULL && q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已被删除!\n");
}
}
void printlist(linklist head)
{ if(!head->next)
printf("当前通讯录中还没有任何信息\n");
else {
listnode * p;
p=head->next;
printf(" 编号 姓名 单位 电话 地址 \n");
printf(" ------------------------------------------------------------------------\n");
while(p!=NULL) {
printf(" %s, %s, %s, %s, %s\n",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr);
printf(" ------------------------------------------------------------------------\n");
p=p->next;
}
}
}
void main()
{
listnode *p=NULL;
linklist head=NULL;
for( ; ; )
switch(menu_select() )
{
case 1:
printf("\n");
printf(" ***********************************************\n"); printf(" 通讯录链表的建立 \n"); printf(" ***********************************************\n");
head=createlist(head);
break;
case 2:
printf("\n");
printf(" ************************************************\n"); printf(" 通讯录信息添加 \n"); printf(" **** **** **** **** **** **** **** \n"); printf("编号 、姓名 、 单位 、 电话 、地址 \n");
printf("--------------------------------------------------------------------------\n");
p=(listnode *)malloc(sizeof(listnode));
scanf_s("%s%s%s%s%s",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr); insertnode(head,p);
break;
case 3:
printf("\n");
printf(" ************************************************\n"); printf(" 通讯录信息查询 \n"); printf(" ************************************************\n"); p=listfind(head);
if(p!=NULL){
printf(" ** 编号 姓名 单位 电话 地址**\n");
printf(" ------------------------------------------------------------------------\n");
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr); printf(" ------------------------------------------------------------------------\n");
}
else
printf("没有你要找的人 ! \n");
break;
case 4:
printf("\n");
printf(" ************************************************\n"); printf(" 通讯信息的删除 \n"); printf(" ************************************************\n");
delnode(head);
break;
case 5:
printf("\n");
printf(" ************************************************\n"); printf(" 通讯录链表的输出 \n"); printf(" ************************************************\n"); printlist(head);
break;
case 0:
printf("\t 谢谢您的使用! \n");
exit(0);
}
getchar(); getchar();
}
致 谢
通过一周的的努力,我我们的课程设计终于完成了,这意味着这一阶段艰苦的热烈的付出即将告一段落。在整个课程设计中,我在学习上和思想上都受益非浅,这除了自身的努力外,与指导的老师、同学和朋友的关心、支持和鼓励是分不开的。
在课程设计的编写过程中, 指导老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每次编程里的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。
做课程设计是一次再系统的学习,课程设计的的完成,让我在其中学到了许多,尤其是学会了合作,懂得了合作造就的效益和成果。 在这里再次感谢和我一起搭档的同学,还有对我们精心指导的老师!