通讯录实验报告.docx
- 文档编号:5318825
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:14
- 大小:72.28KB
通讯录实验报告.docx
《通讯录实验报告.docx》由会员分享,可在线阅读,更多相关《通讯录实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
通讯录实验报告
计科系实验报告
实验课程名称通讯录管理系统
专业班级10级计科1班
学生姓名
学号
指导教师
2012至2013学年第一学期第1至18周
第1章概述
1.1现状分析
日益繁多的人际交往使得我们很难记住与每个人之间的联系方式,通讯录能够便捷的给我们带来所需要的相关信息。
为了实现通讯录管理的几种操作功能,首先设计一个含有多少个菜单项的主控菜单程序,然后再为这些菜单配上相应的功能。
1.2实现意义
随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机或者手机中的电话簿程序来帮助人们记住这些事情,极其简便。
这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
然而要靠计算机来记住这些信息,首先就得要求用单链表做数据结构,设计一个实现通讯者信息的输入、查询、删除、输出、等功能的通讯录管理系统。
每条通讯者信息包含:
编号、姓名、性别、电话号码、地址等信息。
第2章系统分析
2.1用户需求分析
为实现系统功能,本程序主要分为五个模块。
它们分别为:
输入一个信息、删除一个信息、查询一个信息、插入一个信息、输出所有的信息、退出该程序。
这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句—switch语句,分别实现其它各个函数的调用功能。
界面必须美观简洁能够使人一目了然操作方便。
2.2管理者需求分析
题目要求编写程序实现通讯者通讯录的管理每个同学的通讯录基本信息包括编号、姓名、性别、电话和住址。
要求给用户提供功能界面根据用户的选择实现添加、查找、删除、输出某个记录的功能用文件实现基本信息的存储。
按照题目要求同学通讯录系统需要实现的功能有添加信息、查找信息、显示信息以及删除信息。
并且在通讯录的个人信息中必须包含有编号、姓名、性别、电话号码以及家庭住址。
据此要求可以得知本程序必须满足以下要求:
一、首先要有一个基本信息类类中包含有编号、姓名、性别、电话号码以及家庭住址的内容。
二、必须有一个便于操作的菜单实现添加信息、查找信息、显示信息以及删除信息的功能。
三、必须能够实现文件的存取以及修改功能以便于真正的达到同学录记录数据的目的。
第3章 概要设计
根据要求通讯录需要提供文件的输入、输出等操作;还需要保存记录以进行删除、查找等操作,另外还需提供键盘式选择菜单实现选择功能。
3.1 主控菜单设计
系统功能模块图如下:
图3.1通讯录管理系统总体结构图
3.2总结构设计流程图
第4章 详细设计
4.1通讯录建立模块设计
linklistcreatelist(void)
{
linklisthead=(listnode*)malloc(sizeof(listnode));
listnode*p,*rear;
intflag=0;
rear=head;
while(flag==0)
{p=(listnode*)malloc(sizeof(listnode));
printf("编号(4)姓名(8)性别(11)电话(11)地址(13)\n");
printf("**********\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
rear->next=p;
rear=p;
printf("结束建表吗?
(1/0):
");
scanf("%d",&flag);
}
rear->next=NULL;
returnhead;
}
4.2通讯录查询模块设计
listnode*listfind(linklisthead)
{
listnode*p;
charnum[5];
charname[9];
intxz;
printf("=============\n");
printf("1按编号查询\n");
printf("2按姓名查询\n");
printf("==========\n");
printf("请选择\n");
p=head->next;
scanf("%d",&xz);
if(xz==1){
printf("请输入查找者的编号");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
returnp=NULL;
elsereturnp;}
else
if(xz==2){
printf("请输入查找者的姓名");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
returnp;}
}
4.3通讯录删除模块设计
voiddelnode(linklisthead)
{
intj=0;
listnode*p,*q;
p=listfind(head);
if(p==NULL)printf("没有查到要删除的通讯者\n");
printf("真的要删除该结点吗?
(0/1)");
scanf("%d",&j);
if(j==0){
q=head;
while(q!
=NULL&&q->next!
=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已被删除\n");}
}
4.4通讯录链表的输出模块设计
voidprintlist(linklisthead)
{
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.sex,p->data.phone,p->data.addr);
printf("--------------\n");
p=p->next;
}
}
第5章运行与测试
第6章总结和心得
在编代码时,因为不细心的少符号或输入有误而导致花了大量时间去调试,终于调试对了又发现链接不起,拿到同学电脑上去调试,发现是安装的软件有问题。
在运行监测中第一项:
通讯录链表的建立,就出现了有问题,原本要求输入五个参数就能完成起通讯录链表的建立,但是出现要输入六个参数才能完成建立。
回去看源代码才发现在输出项中多输了一个%s。
接着调试,在通讯者结点的删除中出现了无法删除,经过修改源代码调试后又出现能删除了但是又不能继续往下做了,又进行修改和调试找不出问题所在,没办法找同学帮我看了一下,才发现在通讯者结点的删除代码中没有printf(“通讯者已被删除!
\n)
经过无数次的调试修改终于完成了,感到欣慰,也感到失落,原来不懂的太多太多。
参考文献
[1]数据结构:
严蔚敏,吴伟民编著.—北京:
清华大学出版社,2007
[2]数据结构课程设计:
苏仕华编著.—北京:
清华大学出版社,2002
[3]数据结构自学辅导:
苏仕华编著.—北京:
机械工业出版社,2005
附件(源代码)
#include
#include
#include
typedefstruct{
charnum[5];
charname[9];
charsex[3];
charphone[13];
charaddr[31];
}datatype;
typedefstructnode{
datatypedata;
structnode*next;
}listnode;
typedeflistnode*linklist;
linklisthead;
listnode*p;
intmenu_select();
linklistcreatelist(void);
voidinsertnode(linklisthead,listnode*p);
listnode*listfind(linklisthead);
voiddelnode(linklisthead);
voidprintlist(linklisthead);
voidmain()
{
for(;;){
switch(menu_select())
{
case1:
printf("**********\n");
printf("通讯录链表的建立");
printf("**********\n");
head=createlist();
break;
case2:
printf("**********\n");
printf("通讯者信息的添加");
printf("**********");
printf("编号(4)姓名(8)性别(11)电话(11)地址(13)");
printf("**********\n");
p=(listnode*)malloc(sizeof(listnode));
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
insertnode(head,p);
break;
case3:
printf("**********\n");
printf("通讯者信息的查询");
printf("**********\n");
p=listfind(head);
if(p!
=NULL){
printf("编号姓名性别电话地址\n");
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("**********\n");
}
else
printf("没有查到通讯者!
\n");
break;
case4:
printf("**********\n");
printf("通讯录信息删除");
printf("**********\n");
delnode(head);
case5:
printf("**********\n");
printf("通讯录信息输出");
printf("**********\n");
printlist(head);
break;
case0:
printf("\t再见!
\n");
return;
}
}
}
/**********/
intmenu_select()
{
intsn;
printf("通讯录管理席系统\n");
printf("===========\n");
printf("1通讯录链表的建立\n");
printf("2通讯者结点的插入\n");
printf("3通讯者结点的查询\n");
printf("4通讯者结点的删除\n");
printf("5通讯链表的输出\n");
printf("0退出管理系统\n");
printf("===========\n");
printf("请选择0-5");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>5)
printf("\n\t输入错误,重选0-5");
else
break;
}
returnsn;
}
linklistcreatelist(void)
{
linklisthead=(listnode*)malloc(sizeof(listnode));
listnode*p,*rear;
intflag=0;
rear=head;
while(flag==0)
{p=(listnode*)malloc(sizeof(listnode));
printf("编号(4)姓名(8)性别(11)电话(11)地址(13)\n");
printf("**********\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
rear->next=p;
rear=p;
printf("结束建表吗?
(1/0):
");
scanf("%d",&flag);
}
rear->next=NULL;
returnhead;
}
voidinsertnode(linklisthead,listnode*p)
{
listnode*p1,*p2;
p1=head;
p2=p1->next;
while(p2!
=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
}
listnode*listfind(linklisthead)
{
listnode*p;
charnum[5];
charname[9];
intxz;
printf("=============\n");
printf("1按编号查询\n");
printf("2按姓名查询\n");
printf("==========\n");
printf("请选择\n");
p=head->next;
scanf("%d",&xz);
if(xz==1){
printf("请输入查找者的编号");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
returnp=NULL;
elsereturnp;}
else
if(xz==2){
printf("请输入查找者的姓名");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
returnp;}
}
voiddelnode(linklisthead)
{
intj=0;
listnode*p,*q;
p=listfind(head);
if(p==NULL)printf("没有查到要删除的通讯者\n");
printf("真的要删除该结点吗?
(0/1)");
scanf("%d",&j);
if(j==0){
q=head;
while(q!
=NULL&&q->next!
=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已被删除\n");
}
}
voidprintlist(linklisthead)
{
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.sex,p->data.phone,p->data.addr);
printf("--------------\n");
p=p->next;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 实验 报告