通讯录管理系统课程设计报告.docx

上传人:b****6 文档编号:6746867 上传时间:2023-01-09 格式:DOCX 页数:29 大小:231.95KB
下载 相关 举报
通讯录管理系统课程设计报告.docx_第1页
第1页 / 共29页
通讯录管理系统课程设计报告.docx_第2页
第2页 / 共29页
通讯录管理系统课程设计报告.docx_第3页
第3页 / 共29页
通讯录管理系统课程设计报告.docx_第4页
第4页 / 共29页
通讯录管理系统课程设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

通讯录管理系统课程设计报告.docx

《通讯录管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。

通讯录管理系统课程设计报告.docx

通讯录管理系统课程设计报告

通讯录管理系统

一、目的

随着信息科技高速的发展,计算机的使用也越来越广泛,它渐渐的成为在人们生活中占有重要位置的工具,给人们的生活带来了极大便利和帮助,它帮助人们处理繁琐复杂的工作,可以帮人们高效的处理和存储信息。

在以前,科技不发达,好多事情只能通过人力来完成,对于通讯录人们只能手工管理,手写记录、查找,给人们带来很大的不便。

而随着信息技术的发展,特别是计算机的普及,人们希望能让机器代替人力来解决一些实际问题,开发通讯录管理系统,可以便于人们对通讯录的联系人进行管理,方便日常生活。

该报告主要介绍通讯录管理系统的设计与实现,主要讲述如何开发通讯录管理系统,以及该系统一些模块功能的实现。

二、需求分析

本系统为简单的通讯录管理系统,应具备以下功能:

(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资源文件

1、my.h文件

#ifndef__MY_H__

#define__MY_H__

#include

#include

#include

#defineMAXLEN128

#defineOK1

#defineERROR0

typedefstructnode

{

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);

#endif

2、main.c文件

#include"my.h"

/**************

*函数:

InitListWithData()

*参数:

链表头结点L

*返回值:

链表头结点

*功能:

给通讯录设置一些初始数据

**************/

AddressListInitListWithData(AddressListL)

{

AddressNoden;

strcpy(n.name,"Li");

n.sex='m';

n.number=10010;

strcpy(n.address,"武汉");

n.QQnum=123456789;

strcpy(n.birth,"1996.9.1");

AddNode(L,n);

strcpy(n.name,"Liu");

n.sex='f';

n.number=11000;

strcpy(n.address,"上海");

n.QQnum=78563491;

strcpy(n.birth,"1996.4.9");

AddNode(L,n);

strcpy(n.name,"Shi");

n.sex='m';

n.number=10000;

strcpy(n.address,"深圳");

n.QQnum=12389769;

strcpy(n.birth,"1995.1.23");

AddNode(L,n);

strcpy(n.name,"NiNa");

n.sex='f';

n.number=10001;

strcpy(n.address,"北京");

n.QQnum=18967543;

strcpy(n.birth,"1994.10.19");

AddNode(L,n);

strcpy(n.name,"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;

}

3、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;

}

}

4、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->na

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1