通讯录管理系统课程设计报告_第1页
通讯录管理系统课程设计报告_第2页
通讯录管理系统课程设计报告_第3页
通讯录管理系统课程设计报告_第4页
通讯录管理系统课程设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通讯录管理系统一、目的随着信息科技高速的发展,计算机的使用也越来越广泛,它渐渐的成为在人们生活中占有重要位置的工具,给人们的生活带来了极大便利和帮助,它帮助人们处理繁琐复杂的工作,可以帮人们高效的处理和存储信息。在以前,科技不发达,好多事情只能通过人力来完成,对于通讯录人们只能手工管理,手写记录、查找,给人们带来很大的不便。而随着信息技术的发展,特别是计算机的普及,人们希望能让机器代替人力来解决一些实际问题,开发通讯录管理系统,可以便于人们对通讯录的联系人进行管理,方便日常生活。该报告主要介绍通讯录管理系统的设计与实现,主要讲述如何开发通讯录管理系统,以及该系统一些模块功能的实现。二、需求分析本系统为简单的通讯录管理系统,应具备以下功能:(1)输入相关数据,创建一个新联系人信息(姓名、性别、地址、电话、QQ、生日)。(2)按姓名/电话号码查询某个通讯者的信息。(3)按姓名/电话号码删除某个通讯者的信息。(4)输出显示所有通讯者的信息。(5)清空联系人信息。(6)按姓名/电话号码查找修改某联系人的信息。三、概要设计1、本程序包含的模块(1)主程序模块Main(){通讯录链表定义及初始化;根据用户输入选择调用功能模块;(2)功能模块—实现对通讯录链表的操作主函数调用功能函数实现对通讯录链表的增、删、改、查。2、链表的定义及功能函数的抽象数据类型定义(1)链表的定义typedefstructnode charname[MAXLEN]; charsex; intnumber;/*number在头结点被用来存放链表的长度,所以定义为int型*/ charaddress[MAXLEN]; intQQnum; charbirth[MAXLEN]; structnode*next;/*指向下一节点的指针*/}AddressNode;/*结构体类型范例*/typedefstructnode*AddressList;/*结构体指针类型范例*/(2)功能函数的抽象数据类型定义voidPrintAddressNode(AddressListL);/*打印当前工作指针指向的节点的数据*/voidPrintList(AddressListL);/*打印当前链表内所有节点的数据*/intGetElemByNum(AddressListL,intnumber);/*按号码查找节点*/intGetElemByName(AddressListL,constchar*name);/*按名字查找结点*/AddressListCreateEmptyList();/*创建一个空链表*/voidAddNode(AddressListL,AddressNoden);/*插入一个节点,插入位置为头结点之后*/voidInputNode(AddressListL);/*用户输入数据,然后插入链表内*/intDeleteElemByNum(AddressListL,intnumber);/*删除号码为number的节点*/intDeleteElemByName(AddressListL,constchar*name);/*删除名字为name的节点*/voidClearList(AddressListL);/*清空链表*/voidSelectBySex(AddressListL,charsex);/*筛选链表内所有男/女的数据*/intChangeByName(AddressListL,constchar*name);/*修改名字为name的节点*/intChangeByNum(AddressListL,intnumber);/*修改号码为number的节点*//*menu.c*/voidmenu_start();/*初始菜单*/voidmenu_delete(AddressListL)/*选择删除联系人后的次级界面*/;voidmenu_getelem(AddressListL);/*选择查找联系人后的次级界面*/voidmenu_change(AddressListL);/*选择修改联系人后的次级界面*//*main.c*/AddressListInitListWithData(AddressListL);/*给通讯录设置一些初始数据*/2、主程序流程图四、详细设计本程序总共有4个文件,一个.h头文件,三个.c资源文件my.h文件#ifndef__MY_H__#define__MY_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAXLEN128#defineOK1#defineERROR0typedefstructnode charname[MAXLEN]; charsex; intnumber; charaddress[MAXLEN]; intQQnum; charbirth[MAXLEN]; structnode*next;}AddressNode;typedefstructnode*AddressList;/*函数声明部分*//*fun.c*/voidPrintAddressNode(AddressListL);voidPrintList(AddressListL);intGetElemByNum(AddressListL,intnumber);intGetElemByName(AddressListL,constchar*name);AddressListCreateEmptyList();voidAddNode(AddressListL,AddressNoden);voidInputNode(AddressListL);intDeleteElemByNum(AddressListL,intnumber);intDeleteElemByName(AddressListL,constchar*name);voidClearList(AddressListL);intChangeByName(AddressListL,constchar*name);intChangeByNum(AddressListL,intnumber);/*menu.c*/voidmenu_start();voidmenu_delete(AddressListL);voidmenu_getelem(AddressListL);voidmenu_change(AddressListL);/*main.c*/AddressListInitListWithData(AddressListL);#endifmain.c文件#include"my.h"*函数:InitListWithData()*参数:链表头结点L*返回值:链表头结点*功能:给通讯录设置一些初始数据AddressListInitListWithData(AddressListL) AddressNoden; strcpy(,"Li"); n.sex='m'; n.number=10010; strcpy(n.address,"武汉"); n.QQnum=123456789; strcpy(n.birth,"1996.9.1"); AddNode(L,n); strcpy(,"Liu"); n.sex='f'; n.number=11000; strcpy(n.address,"上海"); n.QQnum=78563491; strcpy(n.birth,"1996.4.9"); AddNode(L,n); strcpy(,"Shi"); n.sex='m'; n.number=10000; strcpy(n.address,"深圳"); n.QQnum=12389769; strcpy(n.birth,"1995.1.23"); AddNode(L,n); strcpy(,"NiNa"); n.sex='f'; n.number=10001; strcpy(n.address,"北京"); n.QQnum=18967543; strcpy(n.birth,"1994.10.19"); AddNode(L,n); strcpy(,"Lucy"); n.sex='f'; n.number=10100; strcpy(n.address,"南京"); n.QQnum=129879889; strcpy(n.birth,"1996.8.7"); AddNode(L,n); returnL;intmain() intselect; AddressListphone=CreateEmptyList(); phone=InitListWithData(phone); do system("cls");//清屏 menu_start(); scanf("%d",&select); getchar(); if(select==0) printf("欢迎下次使用!\n"); break; switch(select) case1: PrintList(phone); break; case2: InputNode(phone); break; case3: menu_delete(phone); break; case4: menu_getelem(phone); break; case5: ClearList(phone); break; case6: menu_change(phone); break; default: printf("输入非法数据,请重新输入!\n"); printf("请按回车继续……\n"); getchar(); }while(select!=0); return0;menu.c文件#include"my.h"*函数:menu_start()*参数:无*返回值:无*功能:起始界面voidmenu_start() printf("****************************\n"); printf("欢迎使用简易通讯录!\n"); printf("****************************\n"); printf("1:输出全部联系人信息\n"); printf("2:插入新的联系人\n"); printf("3:删除一个联系人\n"); printf("4:查找某个联系人\n"); printf("5:清空联系人信息\n"); printf("6:修改某个联系人\n"); printf("0:退出\n"); printf("****************************\n"); printf("请选择要执行的操作:");*函数:menu_delete()*参数:链表头结点L*返回值:无*功能:选择删除联系人后的次级界面voidmenu_delete(AddressListL) intselect,number; charname[MAXLEN]; printf("****************************\n"); printf("请输入删除数据的方式:\n"); printf("1:按姓名\n"); printf("2:按号码\n"); printf("0:返回\n"); printf("****************************\n"); do printf("请选择:"); scanf("%d",&select); getchar(); if(select!=1&&select!=2&&select!=0) printf("输入非法数据,请重新输入!\n"); }while(select!=1&&select!=2&&select!=0); switch(select) case1: printf("请输入姓名:"); scanf("%[^\n]",name); getchar(); DeleteElemByName(L,name); break; case2: printf("请输入号码:"); scanf("%d",&number); getchar(); DeleteElemByNum(L,number); break; case0: printf("即将返回上级目录,"); break;*函数:menu_getelem()*参数:链表头结点L*返回值:无*功能:选择查找联系人后的次级界面voidmenu_getelem(AddressListL) intselect,number; charname[MAXLEN]; printf("****************************\n"); printf("请输入查找联系人的方式:\n"); printf("1:按姓名\n"); printf("2:按号码\n"); printf("0:返回\n"); printf("****************************\n"); do printf("请选择:"); scanf("%d",&select); getchar(); if(select!=1&&select!=2&&select!=0) printf("输入非法数据,请重新输入!\n"); }while(select!=1&&select!=2&&select!=0); switch(select) case1: printf("请输入姓名:"); scanf("%[^\n]",name); getchar(); GetElemByName(L,name); break; case2: printf("请输入号码:"); scanf("%d",&number); getchar(); GetElemByNum(L,number); break; case0: printf("即将返回上级目录,"); break;*函数:menu_change()*参数:链表头结点L*返回值:无*功能:选择修改联系人后的次级界面voidmenu_change(AddressListL) intselect,number; charname[MAXLEN]; printf("****************************\n"); printf("请输入查询修改数据的方式:\n"); printf("1:按姓名\n"); printf("2:按号码\n"); printf("0:返回\n"); printf("****************************\n"); do printf("请选择:"); scanf("%d",&select); getchar(); if(select!=1&&select!=2&&select!=0) printf("输入非法数据,请重新输入!\n"); }while(select!=1&&select!=2&&select!=0); switch(select) case1: printf("请输入姓名:"); scanf("%[^\n]",name); getchar(); ChangeByName(L,name); break; case2: printf("请输入号码:"); scanf("%d",&number); getchar(); ChangeByNum(L,number); break; case0: printf("即将返回上级目录,"); break;fun.c文件#include"my.h"*函数:PrintAddressNode()*参数:当前工作指针p*返回值:无*功能:打印当前工作指针指向的节点的数据voidPrintAddressNode(AddressListp) printf("姓名:%s\n",p->name); printf("性别:%s\n",p->sex=='m'?"男":"女"); printf("电话号码:%d\n",p->number); printf("地址:%s\n",p->address); printf("QQ:%d\n",p->QQnum); printf("生日:%s\n",p->birth);*函数:PrintList()*参数:链表头结点L*返回值:无*功能:打印当前链表内所有节点的数据voidPrintList(AddressListL)//遍历打印整个链表AddressListp=L->next; if(!p) printf("通讯录为空!\n"); else printf("共%d个人\n",L->number); while(p) printf("****************************\n"); PrintAddressNode(p); p=p->next; printf("****************************\n");*函数:GetElemByNum()*参数:链表头结点L,待查找的号码number*返回值:成功OK/失败ERROR*功能:按号码查找节点intGetElemByNum(AddressListL,intnumber) AddressListp; p=L->next; while(p&&p->number!=number) p=p->next;//让p指向下一个节点 if(!p) printf("没有%d号码的记录,请核对后查阅\n",number); returnERROR; else printf("找到记录:\n"); PrintAddressNode(p); returnOK;*函数:GetElemByName()*参数:链表头结点L,待查找的姓名name*返回值:成功OK/失败ERROR*功能:按姓名查找节点intGetElemByName(AddressListL,constchar*name) AddressListp; p=L->next; while(p&&strcmp(p->name,name)) p=p->next;//让p指向下一个节点 if(!p) printf("没有%s的记录,请核对后查阅\n",name); returnERROR; else printf("找到记录:\n"); PrintAddressNode(p); returnOK;*函数:CreateEmptyList()*参数:无*返回值:链表头结点*功能:创建一个空链表AddressListCreateEmptyList()//创建一个空表AddressListp;p=(AddressList)malloc(sizeof(AddressNode));if(p==NULL)perror("CreateEmptyAddressListerror");exit(0); p->number=0;//在头结点中的num存储的是链表的整个长度p->next=NULL;returnp;*函数:AddNode()*参数:链表头结点L,保存新节点数据的结构体n*返回值:无*功能:插入一个节点,插入位置为头结点之后voidAddNode(AddressListL,AddressNoden)//插入新节点 AddressListp; if((p=(AddressList)malloc(sizeof(AddressNode)))==NULL) printf("插入新节点失败!\n"); strcpy(p->name,); p->sex=n.sex; p->number=n.number; strcpy(p->address,n.address); p->QQnum=n.QQnum; strcpy(p->birth,n.birth); p->next=L->next; L->next=p; L->number++;*函数:InputNode()*参数:链表头结点L*返回值:无*功能:用户输入数据,然后插入链表内voidInputNode(AddressListL) AddressNoden; printf("请输入姓名:"); scanf("%[^\n]",); do getchar(); printf("请输入性别(m为男,f为女):"); scanf("%c",&n.sex); if(n.sex!='m'&&n.sex!='f') printf("输入错误,请重新输入!\n"); }while(n.sex!='m'&&n.sex!='f'); printf("请输入电话号码:"); scanf("%d",&n.number); getchar(); printf("请输入地址:"); scanf("%[^\n]",n.address); getchar(); printf("请输入QQ号码:"); scanf("%d",&n.QQnum); getchar(); printf("请输入生日:"); scanf("%[^\n]",n.birth); getchar(); AddNode(L,n);*函数:DeleteElemByNum()*参数:链表头结点L,待删除的号码number*返回值:成功OK/失败ERROR*功能:删除号码为number的节点intDeleteElemByNum(AddressListL,intnumber) AddressListp,q; p=L; while(p->next&&p->next->number!=number) p=p->next;//让p指向下一个节点 if(!p->next) printf("没有%d号码的记录,请核对后删除\n",number); returnERROR; else printf("找到记录:\n"); q=p->next; PrintAddressNode(q); p->next=q->next; free(q); L->number--; printf("该记录已被删除\n"); returnOK;*函数:DeleteElemByName()*参数:链表头结点L,待删除的姓名name*返回值:成功OK/失败ERROR*功能:删除姓名为name的节点intDeleteElemByName(AddressListL,constchar*name) AddressListp,q; p=L; while(p->next&&strcmp(p->next->name,name)) p=p->next;//让p指向下一个节点 if(!p->next) printf("没有%s的记录,请核对后查阅\n",name); returnERROR; else printf("找到记录:\n"); q=p->next; PrintAddressNode(q); p->next=q->next; free(q); L->number--; printf("该记录已被删除\n"); returnOK;*函数:ClearList()*参数:链表头结点L*返回值:无*功能:清空链表voidClearList(AddressListL)//清空链表 AddressListp,q; p=L->next; while(p) q=p->next; free(p); p=q; L->next=NULL; L->number=0; printf("清空通讯录成功\n");*函数:ChangeByName()*参数:链表头结点L,待修改的姓名name*返回值:成功OK/失败ERROR*功能:按姓名查找修改节点intChangeByName(AddressListL,constchar*name)AddressListp,q; p=L; while(p->next&&strcmp(p->next->name,name))p=p->next;//让p指向下一个节点if(!p->next)printf("没有%s的记录,请核对后查阅\n",name);returnERROR;elseprintf("************************\n");printf("找到记录:\n");q=p->next;PrintAddressNode(q);printf("************************\n");printf("现在开始修改联系人信息!\n");printf("************************\n");printf("请输入姓名:");scanf("%[^\n]",q->name);dogetchar();printf("请输入性别(m为男,f为女):");scanf("%c",&q->sex);if(q->sex!='m'&&q->sex!='f')printf("输入错误,请重新输入!\n");}while(q->sex!='m'&&q->sex!='f');printf("请输入电话号码:");scanf("%d",&q->number);getchar();printf("请输入地址:");scanf("%[^\n]",q->address);getchar();printf("请输入QQ号码:");scanf("%d",&q->QQnum);getchar();printf("请输入生日:");scanf("%[^\n]",q->birth);getchar();printf("修改成功!");returnOK;*函数:ChangeByNum()*参数:链表头结点L,待修改的号码number*返回值:成功OK/失败ERROR*功能:按号码查找修改节点intChangeByNum(AddressListL,intnumber)AddressListp,q; p=L; while(p->next&&p->next->number!=number)p=p->next;//让p指向下一个节点if(!p->next)printf("没有%d的记录,请核对后查阅\n",number);returnERROR;elseprintf("************************\n");printf("找到记录:\n");q=p->n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论