通讯录管理系统by wangwang.docx

上传人:b****6 文档编号:3645251 上传时间:2022-11-24 格式:DOCX 页数:41 大小:253.02KB
下载 相关 举报
通讯录管理系统by wangwang.docx_第1页
第1页 / 共41页
通讯录管理系统by wangwang.docx_第2页
第2页 / 共41页
通讯录管理系统by wangwang.docx_第3页
第3页 / 共41页
通讯录管理系统by wangwang.docx_第4页
第4页 / 共41页
通讯录管理系统by wangwang.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

通讯录管理系统by wangwang.docx

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

通讯录管理系统by wangwang.docx

通讯录管理系统bywangwang

实训报告

 

题目:

通讯录

院系:

信息科技学院

专业:

电子信息工程

姓名:

朱秀珍

学号:

1352100202

指导教师:

朱震

日期:

2014-07-01

 

桂林电子科技大学信息科技学院

目录

1问题定义…………………………………………………………………………..3

2系统设计……………………………………………………………………3

2.1总体设计………………………………………………………………………………3

2.2详细设计………………………………………………………………………………4

2.2.1主控流程…………………………………………………………………………4

2.2.2数据结构设计……………………………………………………………………5

2.2.3输入记录模块……………………………………………………………………5

2.2.4查询记录模块…………………………………………………………………5

2.2.5删除记录模块……………………………………………………………………5

3系统实现………………………………………………………………………5

3.1编码………………………………………………………………………5

3.1.1程序源代码……….……………………………………………………………5

3.1.2主函数main()……….………………………………………………………19

3.1.3主菜单界面………….………………………………………………………19

3.1.4读取文件中的记录至链表……………………………………………………….21

3.1.5删除记录………….………………………………………………………………22

3.1.6查找记录………….……………………………………………………………23

3.1.7修改记录………….…………………………………………………………….23

3.1.7添加记录………….…………………………………………………………….23

3.2测试与调试…………………………………………………………………………26

3.2.1概述………….……………………………………………………………26

3.2.2程序测试………….……………………………………………………………26

4系统维护………………………………………………………………………30

5归纳总结…………………………………………………………………………31

5.1开发经验…………………………………………………………………………31

5.2实训中遇到的问题及解决方法………………………………………………31

5.3设计中的不足之处……………………………………………………………………31

5.4感想和心得体会……………………………………………………………………31

6参考资料………………………………………………………………………32

 

本题目设计目的是训练学生的基本编程能力,了解通讯录的开发流程,熟悉C语言的文件的各种基本操作。

本程序中涉及结构体、各种语句的运用如for();switch();if….else等方面的知识。

通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。

掌握利用结构体实现对通讯录的原理,为进一步开发出高质量的通讯录打下坚实的基础。

1、问题定义

创建一个通讯录。

假设系统中每个学生记录包括姓名、联系地址、联系电话的修改、删除和查询等程序的运行效果如下图所示,选择任意菜单后,实现相应功能。

在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。

2、系统设计

2.1总体设计

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。

需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。

可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。

图2.1通讯录系统功能模块图

本通讯录由实现,如图2.1所示,它由如下四大功能模块组成:

●输入记录模块。

完成将数据存入结构体的工作。

记录可以从文件中读入,也可从键盘逐个输入朋友信息。

朋友信息由朋友的姓名、联系地址、联系电话构成。

当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中。

●查询记录模块。

完成在结构体中查找满足相关条件的学生记录。

在此通讯录中,用户可以按照姓名在中进行查找。

若找到该学生的记录,则返回指向该学生的记录的指针。

否则返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。

●添加记录模块。

完成对朋友信息的更新。

在此通讯录中,它实现了对好友记录的增加和排序操作,并将追加后的数据存入源数据文件。

●输出记录模块。

实现对朋友信息的存盘,即将记录写入数据文件中;

2.2详细设计

2.2.1主控main()函数执行流程

删除记录

修改记录

退出

添加记录

 

2.2.2数据结构设计

结构体

structCallData

{

charname[30];

charPhonnum[12];

charTelenum[12];

charAddr[128];

structCallData*next;

};

图2.2主控函数执行流程图

2.2.3输入记录模块

输入记录模块主要实现将数据存入结构体中。

,用户应选择2,调用AddDataToLink(t)函数,进行朋友将要添加的组数,姓名、电话、地址的输入,即完成在结构体中添加记录的操作。

2.2.4查询记录模块2.2.4

查询记录模块主要实现了在结构体中按姓名查找满足相关条件的信息记录。

在查询函数QueryData(Data)中,找到相同名字则打印出记录。

2.2.5删除记录模块

该操作完成删除指定姓名的记录,调用DeleteData(DeleteItem),输入要删除的序号,输入后调用函数若找到该记录,询问是否继续寻找相同姓名的记录。

3、系统实现

3.1编码

3.1.1程序源代码

#include

#include

#include

#include

#include

usingnamespacestd;

#defineOPEN_FILEERROR-1

#defineWRITE_FILEERROR-2

#defineREAD_FILEERROR-3

structCallData

{

charname[30];

charPhonnum[12];

charTelenum[12];

charAddr[128];

structCallData*next;

};

intOnePage();/*第一屏显示函数*/

intAddDataPage();/*添加记录的提示函数*/

voidQueryDataPage();/*查询记录提示函数*/

boolAddLinktoFilePage();/*添加链表信息至文件*/

voidUpdateDataPage();/*修改记录提示函数*/

intDeletepage();/*删除记录函数*/

structCallData*CreatNode();/*建立链表节点*/

structCallData*CreatLink(intN);/*建立度为N的节点*/

structCallData*InsertNode();/*插入一个节点*/

structCallData*DeleteNode(CallData*Head,char*Item);/*删除一个节点*/

structCallData*FileToLink();/*从文件读取数据到链表*/

voidfreelink(CallData*head);/*链表资源回收*/

voidinput(structCallData*pdata);/*输入数据至链表*/

voidoutput(structCallData*head);/*输出链表*/

voidoutputnode(structCallData*head);/*输出节点*/

structCallData*AddDataToLink(intt);/*添加记录函数*/

intAddDataToFile(structCallData*head,char*way);/*写数据到文件*/

intUpdateData(char*Item);/*修改记录函数*/

intDeleteData(char*Item);/*删除记录函数*/

intQueryData(char*Item);/*查找记录函数*/

intDataCmp(structCallData*head,char*Item);/*比较函数,用于比较并输出链表中与Item相同的记录*/

intHelpData();/*帮助函数*/

intExit();/*退出处理函数*/

intmain()

{

boolback=true,exit=true;/*循环条件变量*/

intinput,t;/*input为功能选择变量,t为添加的条目的组数*/

charData[20],DeleteItem[20],UpdateItem[20];/*定义要查找的名字Data,要删除的项目DeleteItem,要修改的条目UpdataItem*/

structCallData*Link=NULL;/*定义结构体变量link*/

while(exit)

{

OnePage();/*显示第一屏*/

printf("**请输入要选择的功能:

");

scanf("%d",&input);/*输入要进行的功能*/

printf("\n");

switch(input)

{

case1:

while(back)

{

system("cls");

QueryDataPage();/*显示查询屏*/

scanf("%s",Data);/*输入要查找的名字*/

if(QueryData(Data)==-1)/*调用查找函数,参数Data为要查找的名字*/

{

printf("**没有找到该联系人**\n");

}

printf("**是否继续查询:

");

back=AddLinktoFilePage();/*完成一次查询后是否继续查询*/

system("cls");

}

back=true;

break;

case2:

while(back)

{

system("cls");

AddDataPage();/*添加联系人显示*/

printf("**请输入要添加的条目的组数:

");

scanf("%d",&t);/*输入要添加几组数据*/

if(t<1||t>100)/*判断用户输入*/

HelpData();

else

Link=AddDataToLink(t);/*调用添加记录函数*/

output(Link);

printf("**是否保存数据:

\n");

if(AddLinktoFilePage()==true)

AddDataToFile(Link,"a+");/*将数据保存到文件*/

else

freelink(Link);/*释放链表资源*/

printf("**是否继续添加:

");

back=AddLinktoFilePage();

system("cls");

}

back=true;

break;

case3:

while(back)

{

system("cls");/*清屏*/

Deletepage();/*显示删除功能界面*/

printf("**请输入要删除的联系人的姓名:

");

scanf("%s",DeleteItem);/*输入联系人姓名*/

if(DeleteData(DeleteItem)==0)/*调用删除函数,函数内已经包含查找函数*/

printf("**删除记录操作成功**");

else

printf("**删除失败,未发现该联系人**\n");

printf("**是否继续操作:

");

back=AddLinktoFilePage();/*输入y或者n*/

system("cls");

}

back=true;/*充值back*/

break;

case4:

while(back)

{

system("cls");/*清屏*/

UpdateDataPage();

printf("**输入要修改的联系人姓名:

");

scanf("%s",UpdateItem);

if(UpdateData(UpdateItem)==0)/*调用修改函数,函数内已经包含查找函数,返回0则修改成功*/

{

printf("**修改记录操作成功**\n");

printf("**是否继续修改记录:

");

back=AddLinktoFilePage();

system("cls");/*清屏*/

}

else/*否则修改失败*/

{

printf("**修改记录操作失败,或没有发现该联系人**\n");

printf("**是否继续修改记录:

\n");

back=AddLinktoFilePage();

}

system("cls");/*清屏*/

}

back=true;

break;

case5:

exit=false;

Exit();

break;

default:

HelpData();

}

}

return0;

}

 

intOnePage()

{

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("操作提示:

\n");

printf("1.查询记录\n");

printf("2.添加记录\n");

printf("3.删除记录\n");

printf("4.修改记录\n");

printf("5.退出\n");

printf("*******************************************************************************\n");

return0;

}

intAddDataPage()

{

system("cls");

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("操作提示:

\n");

printf("1.请输入要添加的数据的组数\n");

printf("2.按照屏幕上的提示输入相关的数据\n");

printf("*******************************************************************************\n");

return0;

}

boolAddLinktoFilePage()

{

printf("*********************************************************************\n");

printf("操作提示:

\n");

printf("1.请输入Y或者N\n");

printf("2.Y是,N否\n");

printf("*********************************************************************\n");

printf("请选择……:

");

charchose;

cin>>chose;

while(chose!

='Y'&&chose!

='N'&&chose!

='y'&&chose!

='n')

{

printf("输入有误,请输入Y或N\n");

}

 

if(chose=='Y'||chose=='y')

returntrue;

else

returnfalse;

}

voidQueryDataPage()

{

system("cls");

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("***【来自ZZ通讯录系统的提示:

】****\n");

printf("**请输入需要查找的名字**\n");

printf("**当前版本只支持名字查找**\n");

printf("******************************************************************************\n");

printf("**请输入要查询的姓名:

");

}

voidUpdateDataPage()/*修改记录提示函数*/

{

system("cls");

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("操作提示:

\n");

printf("**请输入要修改的条目,即输入要修改的姓名**");

printf("**按照屏幕上的提示输入相关的数据**\n");

printf("*******************************************************************************\n");

}

intDeletepage()

{

system("cls");

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("操作提示:

\n");

printf("按照屏幕上的提示输入相关的数据\n");

printf("*******************************************************************************\n");

return0;

}

intExitPage()

{

system("cls");

printf("********************************ZZ通讯录管理系统*******************************\n");

printf("\n");

printf("********************************版本1.0测试版**********************************\n");

printf("\n");

printf("********************************正在处理退出***********************************\n");

printf("*****************************************************************************\n");

return0;

}

structCallData*CreatNode()/*建立链表节点*/

{

structCallData*Head,*point;

point=Head=(structCallData*)malloc(sizeof(structCallData));

point->next=NULL;

returnHead;

}

structCallData*DeleteNode(CallData*Head,char*Item)/*删除链表中name为Item的节点*/

{

structCallData*P1,*P2=NULL;

if(Head==NULL)/*是否为空表*/

{

printf("链表为空");

returnHead;

}

P1=Head;

while(strcmp(P1->name,Item)!

=0&&P1

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

当前位置:首页 > 高中教育 > 语文

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

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