个人电话号码查询系统设计报告.docx
《个人电话号码查询系统设计报告.docx》由会员分享,可在线阅读,更多相关《个人电话号码查询系统设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
个人电话号码查询系统设计报告
问题描述:
实现一个简单个人电话号码查询系统,根据用户输入信息(如姓名等)进行快速查询。
基本要求:
(1)在内存中,设计数据结构存储电话号码信息;
(2)在外存上,用文件保存电话号码信息;
(3)提供查询功能:
根据姓名实现快速查询;
(4)提供其他维护功能,例如插入、删除、修改等。
需求分析:
(1)输入数据建立个人电话号码查询系统。
(2)输出个人电话号码查询系统中的所有联系信息。
(3)插入新的联系人信息。
(4)查询该系统中满足要求的信息。
(5)删除不需要的联系人信息。
数据结构设计:
(一)模块设计
本程序包含两个模块:
主程序模块和链表操作模块。
其调用关系如下图所示.
(二)系统子程序及功能设计
本系统中共设置5个子程序,子程序的函数名及功能说明如下,其中大部分都是链表的基本操作函数。
(1)LinkListBook_Creat(LinkListlist)//1.新建个人电话号码信息
(2)LinkListBook_Print(LinkListlist)//2.浏览个人电话号码信息
(3)Book_Search(LinkListlist)//3.查找个人电话号码信息
(4)LinkListBook_Del(LinkListlist)//4.删除个人电话号码信息
(5)main()//主函数。
设定界面颜色和大小,调用链表操作模块
(三)函数主要调用关系图
算法设计:
(一)概要设计:
为了实现需求分析中的功能,可以从三个方面着手设计。
1.主界面设计
为了实现个人电话号码查询系统各功能的管理,设计一个含有多个菜单项的主菜单子程序已链接系统各项子功能,方便用户使用本系统。
本系统主控菜单运行界面如图所示:
2.存储结构设计
本系统主要采用链表结构类型来表示存储在“简单个人电话号码查询系统”中的信息。
其中,链表结点由4个分量构成:
成员姓名、电话号码1、电话号码2、指向该结构体的指针。
3.系统功能设计
本系统设置了5个子功能菜单,设计描述如下:
(1)新建个人电话号码信息。
一次输入一个联系人信息,该功能由LinkListBook_Creat(LinkListlist)实现。
(2)浏览个人电话号码信息。
可以显示所有成员记录,由LinkListBook_Print(LinkListlist)实现。
(3)查找个人电话号码信息。
可以按照姓名查找成员记录信息,运行时首先检测所输入的联系人在不在系统中,若有,则输出该联系人信息,反之则输出“本系统中没有找到此人!
”。
该功能由Book_Search(LinkListlist)实现。
(4)删除个人电话号码信息。
可以通过姓名方式对系统中不再需要的信息删除,删除操作时首先检测所输入的联系人在不在系统中,若有,则删除该联系人信息,并显示“删除成功!
”反之则输出“本系统中没有找到此人!
”。
由LinkListBook_Del(LinkListlist)实现。
(5)退出系统
不再操作时,需要退出系统,即return0;
(二)详细设计:
1.数据类型定义
本系统采用链式结构存储结点。
结点定义如下:
typedefstructnode
{
charname[14];
chartel1[15];
chartel2[15];
structnode*link;
}LNode,*LinkList;
2.系统主要子程序详细设计
(1)建立链表的函数,主要用来建立本查询系统。
LinkListBook_Creat(LinkListlist)
{//1.新建个人电话号码信息
LinkListp,r,q;
p=(LinkList)malloc(sizeof(LNode));
printf("\n姓名:
");
scanf("%s",p->name);
printf("TEL1:
");
scanf("%s",p->tel1);
printf("TEL2:
");
scanf("%s",p->tel2);
printf("\n");
p->link=NULL;
if(list==NULL||strcmp(p->name,list->name)<0)
{
p->link=list;
list=p;
}
else
{
q=list;
while(q!
=NULL&&strcmp(q->name,p->name)<0)
{
r=q;
q=q->link;
}
p->link=q;
r->link=p;
}
returnlist;
}
(2)显示链表中所有结点的信息,用于查看系统中所有的记录。
LinkListBook_Print(LinkListlist)
{//2.浏览个人电话号码信息
LinkListq=list;
while(q)
{
printf("姓名:
%s\t",q->name);
printf("TEL1:
%s\t",q->tel1);
printf("TEL2:
%s\t\n",q->tel2);
q=q->link;
}
returnlist;
}
测试分析:
1.新建个人电话号码信息
在主菜单下,用户输入1并回车,然后按照提示输入数据,分别输入查询系统成员的姓名和电话号码,运行结果如图所示:
2.浏览个人电话号码信息
在主菜单下,用户输入2并回车,可以查看查询系统中所有的成员信息,运行结果如图所示:
3.查找个人电话号码信息
在主菜单下,用户输入3并回车,可按照姓名查询,按照提示操作,运行结果如图所示:
4.删除个人电话号码信息
在主菜单下,用户输入4并回车,进行记录的删除。
本系统按姓名的方式删除,运行结果如图所示:
总结:
本课题是设计一个简单的个人电话号码查询系统,该电话号码查询系统基本能够实现我们所需的各项功能,但是该系统依旧有漏洞,必须按照系统提示的操作来执行,用在实际生活中可能会使用户体验不佳,并且文件保存方面也没有很好地实现。
在整个系统程序设计的过程中,我可以感受到自己对数据结构有了一定的掌握!
但也有着许多不足之处。
特别是在程序的逻辑部分还存在着严重的不足。
我逐步的了解了程序模块化设计的思想含义。
在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行,不能够达到理想的状况,即函数在逻辑方面存在错误!
此外编程是一项高精度的工作,所以我们要有规范化,标准化的代码编写习惯,通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至函数都有明确规定,良好的编写习惯,不但有助于代码的纠错,也有助于不同人员之间的协作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。
参考文献:
[1]严蔚敏,严伟民.数据结构(C语言版).北京:
清华大学出版社,1997.
[2]严蔚敏,严伟民.数据结构题集(C语言版).北京:
清华大学出版社,1999.
[3]谭浩强.C程序设计.北京:
清华大学出版社,2001.
[4]阮宏一,鲁静.数据结构课程设计(C/C++描述).北京:
电子工业出版社,2011.
附录:
源程序
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"stdlib.h"
typedefstructnode
{
charname[14];
chartel1[15];
chartel2[15];
structnode*link;
}LNode,*LinkList;
//1.新建个人电话号码信息
LinkListBook_Creat(LinkListlist)
{
LinkListp,r,q;
p=(LinkList)malloc(sizeof(LNode));
printf("\n姓名:
");
scanf("%s",p->name);
printf("TEL1:
");
scanf("%s",p->tel1);
printf("TEL2:
");
scanf("%s",p->tel2);
printf("\n");
p->link=NULL;
if(list==NULL||strcmp(p->name,list->name)<0)
{
p->link=list;
list=p;
}
else
{
q=list;
while(q!
=NULL&&strcmp(q->name,p->name)<0)
{
r=q;
q=q->link;
}
p->link=q;
r->link=p;
}
returnlist;
}
//2.浏览个人电话号码信息
LinkListBook_Print(LinkListlist)
{
LinkListq=list;
while(q)
{
printf("姓名:
%s\t",q->name);
printf("TEL1:
%s\t",q->tel1);
printf("TEL2:
%s\t\n",q->tel2);
q=q->link;
}
returnlist;
}
//3.查找个人电话号码信息
Book_Search(LinkListlist)
{
LinkListq=list,p;
p=(LinkList)malloc(sizeof(LNode));
printf("请输入要查找的姓名:
");
scanf("%s",p->name);
while(q!
=NULL)
{
if(strcmp(q->name,p->name)!
=0)
q=q->link;
else
{
printf("\n姓名:
%s\n",q->name);
printf("TEL1:
%s\n",q->tel1);
printf("TEL2:
%s\n",q->tel2);
printf("\n");
return0;
}
if(q==NULL)
{
printf("本系统中没有找到此人!
\n");
}
}
return0;
}
//4.删除个人电话号码信息
LinkListBook_Del(LinkListlist)
{
LinkListp,q=list,r;
p=(LinkList)malloc(sizeof(LNode));
printf("请输入要删除的姓名:
");
scanf("%s",p->name);
if(strcmp(p->name,list->name)==0)
{
list=q->link;
free(q);
printf("联系人删除成功!
\n");
}
else
{
r=list;
while(q&&strcmp(q->name,p->name)!
=0)
{
r=q;
q=q->link;
}
if(q==NULL)
printf("本系统中没有此人!
");
else
{
r->link=q->link;
free(q);
printf("联系人删除成功!
\n");
}
}
returnlist;
}
//主函数
main()
{
intk;
LinkListlist=NULL;
system("color2f");
printf("\n╭************欢迎使用个人电话号码查询系统************╮\n\n");
while
(1)
{
printf("┡▁1新建个人电话号码信息▁┩\n");
printf("┡▂2浏览个人电话号码信息▂┩\n");
printf("┡▃3查找个人电话号码信息▃┩\n");
printf("┡▄4删除个人电话号码信息▄┩\n");
printf("┡▅0退出电话号码管查询系统▅┩\n");
printf("\n╰************欢迎使用个人电话号码查询系统***********╯\n");
printf("请选择你的操作0----4:
\n");
scanf("%d",&k);
system("cls");
switch(k)
{
case1:
list=Book_Creat(list);getchar();system("cls");break;
case2:
list=Book_Print(list);break;
case3:
Book_Search(list);break;
case4:
list=Book_Del(list);break;
case0:
return0;
}
}
return0;
}