通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
通讯录管理系统
设计题目通讯录管理系统
1.课程设计的目的
通讯录是人们日常生活中经常要用到的通讯管理工具,在现实生活中应用非常广泛,从个人到企业,而尤其是在移动通讯领域通讯录的使用使我们感觉是最大受益者。
通讯录给人们带来很大的方便,通讯录以文件方式保存用户录入的数据,它可以高效的管理用户数据信息并提供用户一些功能,包括数据的录入、修改、删除、查找以及文件的读写等。
通过实现一个小型通讯录系统已达到以下四个目的:
(1)通过实现小型通讯录系统,了解一般通讯录的结构设计以及各个功能的实现过程
(2)进一步熟悉模块化设计过程,了解小型软件的开发过程
(3)进一步掌握C语言,初步熟悉C语言高级编程
(4)培养思考问题和解决问题的能力。
2.设计方案论证
2.1总体方案
本程序设计的知识点:
变量的定义,if语句的使用,输入和输出函数,数组的使用,函数的定义和调用等等。
(1)输入记录模块:
输入记录模块主要完成将数据存入数组中的工作。
在此通讯录管理系统中记录可以从键盘逐个输入记录。
记录由与联系人有关的基本信息字段构成。
(2)查询记录模块:
查询记录模块主要完成用户查找某一特定联系人的任务。
在该通讯录系统中,用户可以根据联系人姓名进行查找。
(3)更新记录模块:
更新记录模块主要完成对记录的维护。
在此通讯录管理系统中,它实现删除和排序操作。
(4)输出记录模块:
输出记录模块主要完成两个任务。
第一,它实现对记录的存储操作;第二,它可以将记录输出至屏幕。
2.2主要函数说明
2.2.1数据结构设计
本程序定义了结构体members,用于存放联系人的基本信息。
structmember
{intnumber;
charname[20];
chartelephone[13];
charaddress[50];
charpost[6];
}members[50];
name[20]:
保存联系人姓名。
telephone[13]:
保存联系人电话号码。
address[50]:
保存联系人地址。
post[6]:
保存联系人邮编。
2.2.2部分函数功能描述
(1)data_add()
函数原型:
voidData_Add(intj)
该函数用于在数组中增加记录
(2)data_show()
函数原型:
voidData_Show(intj)
该函数用于在数组中找到符合条件的记录,并将其显示出来。
(3)data_showall()
函数原型:
voidData_Showall(intj)
该函数用于在数组中找到所有符合条件的记录,并将其全部显示出来。
(4)data_save()
函数原型:
voidData_Save()
该函数用于保存数组中的记录。
2.3功能模块结构图
2.4main()函数执行流程:
通讯录管理系统执行流程如图所示,它允许用户从键盘输入记录,添加到新的数组中,然后执行显示主菜单和进入循环操作,用户通过键入数字来选择与数字相对应的功能。
在判断键值时,有效的输入为1~6之间的数值,其他的输入都被视为无效按键,系统会重新显示主菜单界面供用户进行操作。
若选择1,则调用data_add()函数,执行增加记录操作;
若选择2,则执行删除记录操作;若选择3,则调用data_show()函数,执行查询记录操作;若选择4,则调用data_save()函数,执行保存记录操作;
若选择5,则调用data_showall函数,执行按升序排序操作;
若选择6,则执行退出通讯录系统的操作。
流程图:
是
否
2.5源代码
#include
#include
#include
#defineN10
structlibrary
{
intnum;
charbook_name[30];
charwriter[30];
charsort_num[3];
charpub_company[30];
charpub_time[30];
charprise[30];
};
typedefstructlibraryLIB;
LIBlib[N];
FILE*fp;
intall=0;
intmenu(void);
voidinput(void);
voidoutput(void);
voidsave(void);
voiddel(void);
voidsearch(void);
voidxiugai(void);
voidsort(void);
intmain()
{
for(;;)
{
switch(menu())
{
case1:
input();break;
case2:
output();break;
case3:
save();break;
case4:
search();break;
case5:
xiugai();break;
case6:
del();break;
case7:
sort();break;
case0:
exit
(1);break;
}
}
}
intmenu(void)/*显示主菜单*/
{
charm[3];
intn;
printf("\t\t1:
input\n");
printf("\t\t2:
output\n");
printf("\t\t3:
save\n");
printf("\t\t4:
search\n");
printf("\t\t5:
xiugai\n");
printf("\t\t6:
del\n");
printf("\t\t7:
sort\n");
printf("\t\t0:
exit\n");
printf("\t\tpleasechooseaoperation(0-6):
\n");
scanf("%s",m);
n=atoi(m);
return(n);
}
voidinput(void)/*显示输入函数*/
{
inti;
charm[3];
for(i=all;i{
all++;
printf("pleaseinputinformations:
\n");
printf("\t\tnum:
\n");
scanf("%d",&lib[i].num);
printf("\t\tbook_name:
\n");
scanf("%s",lib[i].book_name);
printf("\t\twriter:
\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:
\n");
scanf("%s",lib[i].sort_num);
printf("\t\tpub_company:
\n");
scanf("%s",lib[i].pub_company);
printf("\t\tpub_time:
\n");
scanf("%s",lib[i].pub_time);
printf("\t\tprise:
\n");
scanf("%s",lib[i].prise);
a:
printf("\t\tyes/nocontinueinput?
\n");
printf("\t\t1:
yes\n");
printf("\t\t2:
no\n");
scanf("%s",m);
if(atoi(m)==1)
continue;
elseif(atoi(m)==2)
return;
else
{
printf("\t\tinputerror!
\n");
gotoa;
}
}
}
voidoutput(void)/*显示输出函数*/
{
inti;
for(i=0;i{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
}
}
voidsort(void)/*从登陆号从大到小排序的函数*/
{
intb,i;
structlibraryflash;
if((fp=fopen("file.c","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(b=0;b{
for(i=b+1;i{
if(strcmp(lib[b].sort_num,lib[i].sort_num)<0)
{flash=lib[b];lib[b]=lib[i];lib[i]=flash;}
}
}
printf("thedownobjectis:
\n");
printf("numbook'namewritersort_numpub_companypub_timeprise\n");
for(b=0;b{
if(lib[b].sort_num[0]!
='\0')
printf("%d%s%s%s%s%s%s\n",lib[b].num,lib[b].book_name,lib[b].writer,
lib[b].sort_num,lib[b].pub_company,lib[b].pub_time,lib[b].prise);
elsebreak;
}
}
voidsave(void)/*文件保存*/
{
inti;
if((fp=fopen("file.c","wb"))==NULL)
{
printf("cannotopenthefile");
exit
(1);
}
for(i=0;i{
if(fwrite(&lib[i],sizeof(LIB),1,fp)!
=1)
{
printf("cannotwrite!
");
exit
(1);
}
}
fclose(fp);
}
voidsearch(void)/*书名和作者名查找*/
{
inti,flag;
charm[3];
charname[30];
printf("\t\t请选择按书名或作者名查询:
\n");
printf("\t\t1:
书名\n");
printf("\t\t2:
作者名\n");
scanf("%s",m);
i=atoi(m);
switch(i)
{
case1:
{
printf("\t\tpleaseinputthebook_name:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\tnotfindthebook!
\n");
break;}case2:
{
printf("\t\tpleaseinputthewriter:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].writer)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\tnotfindthewtiter!
\n");
break;}
}
}
voidxiugai(void)/*显示修改函数*/
{
inti,flag;
charname[30],n[3];
printf("\t\tpleaseinputthebook_nameofqc:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
printf("\t\tpleaseinputxiugai'stheinformations:
\n");
printf("\t\tnum:
\n");
scanf("%d",&lib[i].num);
printf("\t\tbook_name:
\n");
scanf("%s",lib[i].book_name);
printf("\t\twriter:
\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:
\n");
scanf("%s",lib[i].sort_num);
printf("\t\tpub_company:
\n");
scanf("%s",lib[i].pub_company);
printf("\t\tpub_time:
\n");
scanf("%s",lib[i].pub_time);
printf("\t\tprise:
\n");
scanf("%s",lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\tnotfindxiugai'sthebook!
\n");
}
voiddel(void)/*显示删除函数*/
{
inti,flag,n;
charname[30];
printf("\t\tpleaseinputthebook_nameofdel:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
lib[i].num=lib[n-1].num;//n未初始化,
strcpy(lib[i].book_name,lib[n-1].book_name);
strcpy(lib[i].writer,lib[n-1].writer);
strcpy(lib[i].sort_num,lib[n-1].sort_num);
strcpy(lib[i].pub_company,lib[n-1].pub_company);
strcpy(lib[i].pub_time,lib[n-1].pub_time);
strcpy(lib[i].prise,lib[n-1].prise);
n=n-1;
flag=1;
printf("\t\tdelok!
\n");
break;
}
}
if(flag==0)
printf("\t\tnoinformationofthebook!
\n");
}
3.设计结果与分析
3.1运行程序
将源程序编译、链接后生成可执行文件,运行该文件会看到如图3所示界面
图3启动画面
3.2增加信息
输入1将输入货物信息,显示图4所示界面
图4启动画面
输入2将输入货物信息,显示图5所示界面
图5启动画面
输入3将输入货物信息,显示图6所示界面
图6启动画面
输入4将输入货物信息,显示图7所示界面
图7启动画面
输入5将输入货物信息,显示图8所示界面
图8启动画面
输入6将输入货物信息,显示图9所示界面
图9启动画面
4.设计体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在谢老师的辛勤指导下,终于游逆而解。
同时,在李老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
5.参考文献
[1]潘新民,王燕芳.微型计算机控制技术[M],第2版.北京:
电子工业出版社,2003.4:
305-350
[2]谭浩强著.C程序设计(第三版)。
北京:
清华大学出版社,2005
[3]谭浩强著.C程序设计题解与上机指导(第三版)。
北京:
清华大学出版社,2005
[4]C编写组编。
常用C]语言用法速查手册。
北京:
龙门书局,1995
[5]范立南,谢子殿.单片机原理及应用教程[M].北京:
北京大学出版社,2006.1:
123-130
[6]范立南,韩晓微,王忠石等.基于多结构元的噪声污染灰度图像边缘检测研究[J].武汉大学学报(工学版),2003,49(3):
45-49
沈阳大学