实验课程名称专业班级学生姓名学号指导教师至学年第学期第至周目录1概述 (3)1.1现状分析 (3)1.2存在的问题 (3)1.3实现意义 (3)2系统分析 (4)2.1 用户需求分析 (4)2.2 管理者需求分析 (4)3概要设计 (4)3.1程序设计中的数据设计 (4)3.2算法流程图 (6)4详细设计 (11)4.1 通讯录建立模块设计 (11)4.2 通讯录插入模块设计 (11)4.3 通讯录查找模块设计 (12)4.4 通讯录删除模块设计 (12)4.5 通讯录输出模块设计 (13)4.6 通讯录数据保存模块设计 (13)5运行与测试 (14)5.1 执行过程中出现错误 (14)5.2功能模块的调试 (14)6总结和心得 (21)参考文献 (21)1概述1.1现状分析通讯录管理系统是一个非常通用的管理系统。
很多地方都需要拥有自己的通讯录管理系统,以便对自己的同学、同事、朋友等信息资料的管理及使用。
通讯录管理系统具有很强的实用性,使用者只要根据具体情况稍加修改,就可以把它应用到实际需求中。
随着社会的发展及知识经济的到来,管理信息系统在各行各业发挥着越来越重要的作用。
通讯录管理系统是典型的信息管理系统。
通讯录管理系统工作繁琐,包含了大量的信息数据,因此需要一个完整的信息管理系统来实现对这些数据的管理,满足管理者的需求。
通讯录管理系统的设计能推动机关单位信息管理走向科学化、规范化。
通讯录管理系统易于开发、维护、使用方便。
各行各业使用越来越广泛。
常用于日常办公,提高办事效率。
1.2存在的问题通讯录管理系统存在很多不足,由于自身编程能力的不足,这个系统实现的功能有限,只能实现管理系统最基本的功能,简单的添加、查询、删除、退出功能。
每个模块设计也存在不足,还需要努力学习,进一步完善所学知识。
编译过程中,由于自己的粗心造成输入错误,使程序不能运行,需要自己认真仔细对待。
还有没有读懂某些模块函数的设计思想,理解困难,能力有限,某些功能自己不能设计完成,还需要进一步努力提升编程能力。
不能完全满足用户的需求。
1.3实现意义通讯录管理系统的设计使得对信息的管理更加方便,能够实现动态管理。
检索迅速、查找方便、可靠性高、存储量大、保密性好。
管理者工作起来效率高,可以不用再做大量的数据记录,从而减少了机关机关单位职员的工作量。
运用数据结构中的算法思想做数据结构,结合C语言知识,编写一个通讯录管理系统。
通过完成本课程,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,进一步熟悉指针的用法,数组的建立运用和函数的调用。
加深对数据结构的理解,提高算法设计能力,锻炼编程能力。
用C语言编写一个通讯录管理系统软件,要求能实现通讯录管理系统中增加新记录、按名字或编号删除记录、显示通讯录的所有信息、按名字或编号查询信息、保存通讯录、退出系统。
2系统分析2.1 用户需求分析通讯录管理系统要求能实现用户需要的功能有:增加新记录、按名字或编号删除记录、显示通讯录的所有信息、按名字或编号查询信息、保存通讯录、退出系统。
2.2 管理者需求分析根据实际情况,使用原型法,即以少量少量代价快速地构造一个可执行的软件系统模型,使用户和开发人员可以较快的确定需求,然后采用循环进化的开发方式,对系统模型作连续化的精化,将系统需具备的性质逐渐加上去,直到所有的性质全部满足。
设计为管理者提供方便的管理方式,能实现动态管理,减少管理者的工作量,提高办事效率。
能够实现添加记录,删除记录,查找记录,退出管理系统等功能。
3概要设计3.1程序设计中的数据设计软件中使用结构体和结构体数组,分别对编码、姓名、性别、电话号码、地址进行储存,在子函数中还使用了结构体数组。
还运用了头文件:#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;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) 地址(31) \n");printf("----------------------------------------\n");scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);rear->next=p;//新结点连接到尾结点之后rear=p;//尾指针指向新结点printf("结束建表吗?(1/0):");scanf("%d",&flag);//读入一个标志数据}rear->next=NULL;return head;}4.2 通讯录插入模块设计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;}4.3 通讯录查找模块设计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(" 请选择: ");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)p=NULL;}elseif(xz==2) {printf("请输入要查找者的姓名:");scanf("%s",name);while(p && strcmp(p->,name)!=0)p=p->next;}return p;}4.4 通讯录删除模块设计void DelNode(LinkList head){char jx;ListNode *p,*q;p=ListFind(head);if(p==NULL) {printf("没有查到要删除的通讯者!\n");return;}printf("真要删除该结点吗?(y/n): ");scanf("%s",&jx);if(jx=='y' || jx=='Y') {q=head;while(q!=NULL && q->next!=p)q=q->next;q->next=p->next;free(p);printf("通讯者已被删除!\n");}}4.5 通讯录输出模块设计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;//后移一个结点}}4.6 通讯录数据保存模块设计5运行与测试5.1 执行过程中出现错误原因:代码输入有误。
处理措施:根据编译提示改正错误。
5.2功能模块的调试运行进入程序主菜单建立链表模块:选择1 结束建表输入1 继续建表输入0显示模块:选择5 添加模块:选择2查找模块:1按编号查询2按姓名查询删除模块:1按编号删除2按姓名删除进入退出界面:选择06总结和心得通过这次课程设计,我了解了写软件的基本过程和基本方法,对通讯录管理系统有了进一步的了解。
此外,我对很多的函数有新的认识,了解了一些功能函数的实现,虽然有很多不懂的、不理解的,但是还是受益匪浅。
在软件的设计过程中遇到很多的困难。
在一次一次软件调试失败下曾经想过要放弃,但在老师的严格要求下,最后还是让自己坚持下来,不畏惧困难,在同学的帮助与讲解下我总算是顺利完成软件设计。