邹全义1814手机通讯录.docx
《邹全义1814手机通讯录.docx》由会员分享,可在线阅读,更多相关《邹全义1814手机通讯录.docx(25页珍藏版)》请在冰点文库上搜索。
邹全义1814手机通讯录
JIANGXIAGRICULTURALUNIVERSITY
数据结构课程设计
题目:
通讯录管理系统
学院:
软件学院
姓名:
邹全义
学号:
20101814
专业:
软件工程
年级:
2010届
指导教师:
杨红云职称:
讲师
二O一一年六月
摘要
通讯录是同过一些工具,显示每个人的联系方法,地址生日等,称之为通讯录。
本通讯录是通过使用Microsoft公司的VisualC++开发工具,MicrosoftVisualC++,(简称VisualC++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言。
可以长期保存。
适合企业通讯录,亲友通讯录,大学通讯录等。
关键词:
通讯录、通讯系统、函数、联系人、设计流程图。
1、绪论
手机通讯录系统是每一个手机用户管理通讯录的必备一个管理信息系统,其内容在生活、工作、生产等领域。
对用户来说是至关重要的,因此通讯录管理系统必须能够为每一个用户的管理者提供充足的信息和快捷、准确的查询手段,大大的方便用户合理的管理通讯录。
随着社会科学技术的不断提高,计算机科学日渐成熟,网上通讯工具的迅速发展,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对通讯录进行管理,具有着手工管理所无法比拟的优点,如:
查找方便、可靠性高等。
这些优点能够极大地提高通讯录管理的效率,也是用户理财的科学化、正规化管理,与先进科学技术接轨的重要条件。
在实训是我们会不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
在设计中遇到了很多问题,最后在老师的指导下,同学的帮助下得到解决。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
2、系统简介
设计一个基于数据结构的通讯录,可以根据用户需要进行创建、删除、查询、显示等功能。
编写一个简单的通讯录系统,能够实现新增联系人,查询联系人信息,修改已存在联系人信息,删除已存在联系人信息,显示通讯录中所有联系人信息的功能。
程序采用模块化设计,各功能分模块独立实现。
联系人信息:
每条联系人信息包含姓名(NAME),性别(GENDER),电话(TEL),城市(CITY),邮编(EIP),生日(BITHDAY),分组(GROUP)。
主菜单:
显示各功能选项。
1、新建通讯录:
在原有的通讯录之外新建一个通讯录并存盘。
2、显示所有联系人:
显示通讯录中所有联系人的信息。
3、添加联系人:
在通讯录中创建新联系人。
4查询联系人:
根据用户输入选项查询联系人信息并显示出来,供输入查询项有姓名、性别、电话、城市、邮编、生日。
如果用户所查询联系人不存在,则提示用户通讯录中没有该联系人。
5、删除联系人:
根据用户输入选项删除联系人信息,可供输入选项有姓名。
如果未找到要删除的联系人,则提示用户通讯录中没有该联系人。
6、修改联系人:
根据用户输入选项查询并修改联系人信息,可供输入选项有姓名。
可选择只修改该联系人某条信息也可选择修改全部信息。
如果未找到要修改的联系人信息,则提示用户通讯录中没有该联系人。
7、显示所有联系人:
显示通讯录中所有联系人的信息。
联系人分组:
根据用户输入组类信息,可供输入选项有同事、亲友、重要人士、未分组。
显示出同一组的人。
3、概要分析
3.1、系统功能结构图
根据项目开发的要求,系统分成八个主功能模块:
新建通讯录、输出联系人、查询联系人、修改联系人信息、删除联系人、联系人分组、退出并保存、主函数。
系统功能结构图如下:
图
(1)
3.2、重要数据的数据结构设计
信息的记录项用结构体structstudent表示,有6个属性,tel\name\gender\city\zip\brith\Relat分别代表电话号、名字、性别、城市、邮编、生日、群组。
typedefstructbirthday//生日
{
intyear;
intmonth;
intday;
}ST;
structTelephone
{
charname[20];//姓名
charcity[20];//城市
STbirth;//生日
chargender[10];//性别
charzip[20];//邮编
chartelephone[20];//电话
charRelat[10];//群组
structTelephone*next;
};
3.3、函数设计
设计以下的函数来实现功能:
(1)voidmain()显示主菜单
函数功能:
在屏幕上显示主菜单,提示用户选择并进行操作。
(2)voidmenu()显示查询菜单
(3)voidCreat();创建新的通讯录
(4)voidAdd();添加联系人
(5)voidDelete();联系人删除如果找到了,则显示该人的信息,如果不存在,则提示通讯录中没有此人的信息。
(6)voidFind();查询某人的信息,用strnicmp()模糊查找,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息
(7)voidList();则显示所有联系人的信息
(8)voidGroup();输入群组输出改组的所有人
(9)voidSaveandfree();保存到文件
(10)voidOpen();打开文件
4.详细设计
4.1.系统主函数main()设计
图
(2)
4.2、主菜单模块函数menu()设计
N
Y
图(3)
4.3、录入通讯录信息功能模块函数voidCreast()设计
图(4)
4.4、查询菜单模块函数voidFind()设计
图(5)
4.5、删除图书功能模块函数voidDelete()设计
图(6)
4.6、库存显示功能模块函数voidList()设计
图(7)
5、调试分析
5.1、本系统在microsoftvisualc++下编译调试通过,可顺利运行,各功能达到设计要求
本系统程序由三个头文件和一个源文件组成。
并保存txt文件。
本次的课程实训题以链表为基础完成对手机通讯录制作。
提高这门课的动手实践能力。
图(8)
图(9)
6.心得
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的C语言知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教同学或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
在这一年中,感谢杨老师在学习上给予的关心和鼓励。
附录
#include
#include
#include
typedefstructbirthday
{
intyear;
intmonth;
intday;
}ST;
structTelephone
{
charname[20];
charcity[20];
STbirth;
chargender[10];
chareip[10];
charzip[20];
chartelephone[20];
charRelat[10];
structTelephone*next;
};
typedefstructTelephoneTEL;
TEL*head=NULL;
voidmenu();
voidAdd();
voidList();
voidFind();
voidGroup();
voidCreate();
voidDelete();
voidSaveandfree();
voidOpen();
intmain()
{
charch;
Open();
while
(1)
{
menu();
scanf("%c",&ch);
switch(ch)
{
case'1':
Create();break;
case'2':
List();
break;
case'3':
Add();
break;
case'4':
Find();break;
case'5':
Delete();break;
case'7':
Group();break;
case'0':
Saveandfree();
exit(0);
break;
default:
printf("选择错误!
");
break;
}
}
}
voidCreate()
{
FILE*fp;
if((fp=fopen("books.txt","w"))==NULL)
{printf("cannotopenthefile.\n");exit
(1);}
fclose(fp);
printf("创建成功!
");
}//菜单
voidmenu()
{
printf("\n++++++++++++通讯录系统+++++++++++++++\n");
printf("\t||*1.创建通讯录||\n");
printf("\t||*2.输出通讯录||\n");
printf("\t||*3.添加通讯录||\n");
printf("\t||*4.查找通讯录||\n");
printf("\t||*5.删除通讯录||\n");
printf("\t||*6.修改通讯录||\n");
printf("\t||*7.联系人分组||\n");
printf("\t||*0.保存并退出!
||\n");
printf("|____________________________|\n");
printf("\t请选择:
<0-7>\n");
}
voidGroup()
{
inti;
TEL*p;
p=head;
chara[10];
printf("0.未分组\n1.显示亲友组\n2.显示重要人士组\n3.显示同事组\n请选择:
");
scanf("%d",&i);
switch(i)
{
case1:
{while(p->next!
=NULL)
{
if(strcmp(p->Relat,"亲友")==0)
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
p=p->next;break;}
}
case2:
{while(p->next!
=NULL)
{
if(strcmp(p->Relat,"重要人士")==0)
printf("%s\t%s\t%s\t%s\t%s\t%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
p=p->next;break;}
}
case3:
{while(p->next!
=NULL)
{
if(strcmp(p->Relat,"同事")==0)
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
p=p->next;break;}
}
}
}
//添加条目
voidAdd()
{
intx;
TEL*p1=NULL,*p2=NULL;
p1=(TEL*)malloc(sizeof(TEL));
printf("输入姓名:
\n");
scanf("%s",p1->name);
printf("输入性别:
\n");
scanf("%s",p1->gender);
printf("输入城市:
\n");
scanf("%s",p1->city);
printf("输入邮编:
\n");
scanf("%s",p1->zip);
printf("输入电话:
\n");
scanf("%s",p1->telephone);
printf("输入出生年份:
\n");
scanf("%d",&p1->birth.year);
printf("输入出生月份:
\n");
scanf("%d",&p1->birth.month);
printf("输入出生日:
\n");
scanf("%d",&p1->birth.day);
printf("请选择群组:
0.未分组\n1.亲友\n2.重要人士\n3.同事\n");
scanf("%d",&x);
if(x==1)strcpy(p1->Relat,"亲友");
elseif(x==2)strcpy(p1->Relat,"重要人士");
elseif(x==3)strcpy(p1->Relat,"同事");
elsestrcpy(p1->Relat,"无");
p1->next=NULL;
if(head==NULL)
{
head=(TEL*)malloc(sizeof(TEL));
head->next=p1;
}
else
{
for(p2=head;p2->next!
=NULL;p2=p2->next);
p2->next=p1;
}
printf("此信息已添加!
");
}
//输出学生信息
voidList()
{
TEL*p=NULL;
if(head==NULL)
{
printf("此通讯录中无记录,请输入记录后在使用本功能!
\n");
return;
}
printf("+++++++++++++通讯录系统+++++++++++\n");//输出信息
printf("姓名性别城市邮编电话出生年月日群组\n");
for(p=head->next;p!
=NULL;p=p->next)
printf("%s%s%s%s%s%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
}
voidFind()
{
TEL*p;
charfindname[20];
printf("请输入要查找的姓名:
\n");
scanf("%s",findname);
printf("+++++++++++通讯录系统++++++++++++++++\n");
printf("姓名性别城市邮编电话出生年月日群组\n");
for(p=head->next;p!
=NULL;p=p->next)
{
if(strnicmp(findname,p->name,strlen(findname))==0)
printf("%s%s%st%s%s%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
}
}
voidDelete()
{
charfindname[20];
TEL*p=head->next,*pr=head->next;
printf("请输入要删除的姓名:
\n");
scanf("%s",&findname);
if(head->next==NULL)
{
printf("无此节点!
\n");
return;
}
while((strcmp(p->name,findname)!
=0)&&p->next!
=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(findname,p->name)==0)
{
printf("%s%s%s%s%s%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
if(p==head->next)
head->next=p->next;
else
pr->next=p->next;
free(p);
}
printf("此信息已删除!
");
}
//保存链表信息到文件并释放内存空间
voidSaveandfree()
{
TEL*p=NULL;
FILE*fp;
char*Book="books.txt";
if(head==NULL)
{
printf("\n记录为空!
\n");
return;
}
else
p=head->next;
if((fp=fopen(Book,"a+"))==NULL)
{
printf("\n打不开文件!
\n");
return;
}
while(p!
=NULL)
{
fprintf(fp,"%s%s%s%s%s%d%d%d%s\n",p->name,p->gender,p->city,p->zip,p->telephone,
p->birth.year,p->birth.month,p->birth.day,p->Relat);
p=p->next;
}
printf("保存完毕!
");
fclose(fp);
//*****释放链表空间*****
for(;head->next!
=NULL;)
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
//文件信息输出到链表
voidOpen()
{
FILE*fp;
TEL*p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL)
{
printf("\n+++++++++++++这是一个手机通讯录管理系统+++++++++++++++\n");
return;
}
head=(TEL*)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(!
feof(fp))
{
p1=(TEL*)malloc(sizeof(TEL));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp);
}