当前位置:文档之家› 通讯录实验报告

通讯录实验报告

实验课程名称通讯录管理系统专业班级 10级计科1班学生姓名学号指导教师2012至2013学年第一学期第1 至18 周目录第1章概述 (3)1.1现状分析 (3)1.2实现意义 (3)第2章系统分析 (4)2.1用户需求分析 (4)2.2管理者需求分析 (4)第3章概要设计 (5)3.1主控菜单设计 (5)3.2 总结构设计流程图 (6)第4章详细设计 (6)4.1通讯录建立模块设计 (6)4.2通讯录查询模块设计 (7)4.3通讯录删除模块设计 (7)4.4通讯录链表的输出模块设计 (8)第5章运行与测试 (9)第6章总结和心得 (9)参考文献 (10)附件(源代码) (10)第1章概述1.1现状分析日益繁多的人际交往使得我们很难记住与每个人之间的联系方式,通讯录能够便捷的给我们带来所需要的相关信息。

为了实现通讯录管理的几种操作功能,首先设计一个含有多少个菜单项的主控菜单程序,然后再为这些菜单配上相应的功能。

1.2实现意义随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机或者手机中的电话簿程序来帮助人们记住这些事情,极其简便。

这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。

通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。

然而要靠计算机来记住这些信息,首先就得要求用单链表做数据结构,设计一个实现通讯者信息的输入、查询、删除、输出、等功能的通讯录管理系统。

每条通讯者信息包含:编号、姓名、性别、电话号码、地址等信息。

第2章系统分析2.1用户需求分析为实现系统功能,本程序主要分为五个模块。

它们分别为:输入一个信息、删除一个信息、查询一个信息、插入一个信息、输出所有的信息、退出该程序。

这五个函数再通过主函数调用分别得以实现。

主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。

然后,通过执行多分支选择语句—switch语句,分别实现其它各个函数的调用功能。

界面必须美观简洁能够使人一目了然操作方便。

2.2管理者需求分析题目要求编写程序实现通讯者通讯录的管理每个同学的通讯录基本信息包括编号、姓名、性别、电话和住址。

要求给用户提供功能界面根据用户的选择实现添加、查找、删除、输出某个记录的功能用文件实现基本信息的存储。

按照题目要求同学通讯录系统需要实现的功能有添加信息、查找信息、显示信息以及删除信息。

并且在通讯录的个人信息中必须包含有编号、姓名、性别、电话号码以及家庭住址。

据此要求可以得知本程序必须满足以下要求:一、首先要有一个基本信息类类中包含有编号、姓名、性别、电话号码以及家庭住址的内容。

二、必须有一个便于操作的菜单实现添加信息、查找信息、显示信息以及删除信息的功能。

三、必须能够实现文件的存取以及修改功能以便于真正的达到同学录记录数据的目的。

第3章概要设计根据要求通讯录需要提供文件的输入、输出等操作;还需要保存记录以进行删除、查找等操作,另外还需提供键盘式选择菜单实现选择功能。

3.1主控菜单设计系统功能模块图如下:图3.1通讯录管理系统总体结构图3.2 总结构设计流程图第4章详细设计4.1通讯录建立模块设计linklist createlist(void){linklist head=(listnode *)malloc(sizeof(listnode));listnode *p,*rear;int flag=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->,p->data.sex,p->data.phone,p->data.add r);rear->next=p;rear=p;printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL;return head;}4.2通讯录查询模块设计listnode *listfind(linklist head){listnode *p;char num[5];char name[9];int xz;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) return p=NULL;else return p;}elseif(xz==2){printf("请输入查找者的姓名 ");scanf("%s",name);while(p&&strcmp(p->,name)!=0)p=p->next;return p;}}4.3通讯录删除模块设计void delnode(linklist head){int j=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通讯录链表的输出模块设计void printlist(linklist head){listnode *p;p=head->next;printf("编号姓名性别联系电话地址\n");printf("--------------\n");while(p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,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<stdio.h>#include<string.h>#include<stdlib.h>typedef struct{char num[5];char name[9];char sex[3];char phone[13];char addr[31];}datatype;typedef struct node{datatype data;struct node *next;}listnode;typedef listnode *linklist;linklist head;listnode *p;int menu_select();linklist createlist(void);void insertnode(linklist head,listnode *p);listnode *listfind(linklist head);void delnode(linklist head);void printlist(linklist head);void main(){for( ; ;){switch (menu_select()){case 1:printf("**********\n");printf("通讯录链表的建立");printf("**********\n");head=createlist();break;case 2: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->,p->data.sex,p->data.phone,p->data.add r);insertnode(head,p);break;case 3:printf("**********\n");printf("通讯者信息的查询");printf("**********\n");p=listfind(head);if(p!=NULL){printf("编号姓名性别电话地址\n ");printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->d ata.addr);printf("**********\n");}elseprintf("没有查到通讯者!\n");break;case 4:printf("**********\n");printf("通讯录信息删除");printf("**********\n");delnode(head);case 5:printf("**********\n");printf("通讯录信息输出");printf("**********\n");printlist(head);break;case 0:printf("\t再见!\n");return;}}}/**********/int menu_select(){int sn;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");elsebreak;}return sn;}linklist createlist(void){linklist head=(listnode *)malloc(sizeof(listnode));listnode *p,*rear;int flag=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->,p->data.sex,p->data.phone,p->data.add r);rear->next=p;rear=p;printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL;return head;}void insertnode(linklist head,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(linklist head){listnode *p;char num[5];char name[9];int xz;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)return p=NULL;else return p;}elseif(xz==2){printf("请输入查找者的姓名 ");scanf("%s",name);while(p&&strcmp(p->,name)!=0)p=p->next;return p;}}void delnode(linklist head){int j=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");}}void printlist(linklist head){listnode *p;p=head->next;printf("编号姓名性别联系电话地址\n");printf("--------------\n");while(p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data. addr);printf("--------------\n");p=p->next;}}。

相关主题