通讯录.docx
《通讯录.docx》由会员分享,可在线阅读,更多相关《通讯录.docx(18页珍藏版)》请在冰点文库上搜索。
通讯录
测试与光电工程学院
课程设计课题申报表
测控技术与仪器系2009级学生
相关课程
C语言等
指导教师
程强强
学生人数
1
课题名称
基于Vc的通讯录
设计地点
逸夫楼205
课题工作内容
本课程设计旨在训练和提高学生综合运用c语言进行编程的能力,使学生更加系统的理解和掌握C语言的基本概念、语言特点和编程技巧。
本课题的基本内容有:
1、记录通讯录内的人员姓名、地址、电话号码;
2、显示所有人员的信息;
3、根据姓名查找人员信息;
4、根据姓名删除人员信息;
5、能够将输入的记录保存为文件;
软件调试成功后需进行课程设计报告的撰写,课程设计报告的格式完全参照本科毕业设计(大论文)的格式。
课题来源
课题性质
使用计算机情况
自编
软件
40小时
系负责人签字:
申报人:
程强强
2011年11月10日
测试与光电工程学院
课程设计任务书
测控技术与仪器系090813班学号09081303姓名彭璜
课题名称:
基于Vc的通讯录
课题要求:
本课程设计旨在训练和提高学生综合运用c语言进行编程的能力,使学生更加系统的理解和掌握C语言的基本概念、语言特点和编程技巧。
本课题的基本内容有:
1、记录通讯录内的人员姓名、地址、电话号码;
2、显示所有人员的信息;
3、根据姓名查找人员信息;
4、根据姓名删除人员信息;
5、能够将输入的记录保存为文件;
课题进程:
2011.11.17-2011.12.24查阅相关资料2011.11.25-2011.12.8学习C语言编程
2011.12.9-2011.12.15编程调试程序2011.12.16-2011.12.22撰写课程设计论文指导教师:
程强强
摘要
C语言是近年在国内外得到迅速推广应用的一种语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
本设计主要阐述了通过使用C语言编程实现通讯录管理系统的基本功能。
该程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。
程序利用定义结构体类型structMessage将人员的所有信息封装在一个数组中,作为一个整体处理,非常方便。
用到的知识点是结构体类型定义结构提数组的的定义及应用。
另外还用到了大量的自定义函数。
本人设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找等必要的功能。
1记录通讯录内的人员的姓名、地址、电话号码。
2显示所有人员的信息。
3根据姓名查找人员信息。
④根据姓名删除人员信息。
⑤能够将输入的记录保存为文件。
关键字:
C语言通讯录管理结构体类型自定义函数
目录
一、绪言……………………………………………………………………………5
(一)设计目的……………………………………………………………………5
(二)设计任务……………………………………………………………………5
(三)设计思路……………………………………………………………………6
二、系统设计………………………………………………………………………6
(一)流程图设计…………………………………………………………………6
(二)源程序设计…………………………………………………………………7
三、系统调试………………………………………………………………………14
(一)系统调试………………………………………………………………14
(二)调试过程存在问题与解决办法…………………………………………15
四、分析与总结……………………………………………………………………15
五、致谢……………………………………………………………………………16
六、参考文献………………………………………………………………………17
七、附录……………………………………………………………………………17
一、绪言
C语言作为一门最通用的语言,在过去很流行,将来依然会如此。
从C语言
产生到现在,它已经成为最重要和最流行的编程语言之一。
在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同,用C语言编程的程序在TC中仍可以运行。
学习、掌握C语言是每一个计算机技术人员的基本功之一,也是当代大学生所要具备的基本知识。
C语言具有高级语言的强大功能,使用方便灵活,却有很多直接操作计算机硬件的功能(这些都是会汇编语言的功能),因此,C语言通常又被称为中级语言。
C编译的程序对语法检查并不像其他高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道在哪里的错误。
(一)设计目的
1、通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强.
2、通过设计和实现通讯录的设计,熟练掌握C程序的运行环境,训练基本编程能力、熟悉C语言开发,掌握系统编程的方法和技巧。
3、熟练掌握C语言,调用子程序和函数进行读写数据的操作。
程序编写过程中必须用到函数、指针、文件操作等C语言技能。
(二)设计任务
1、任务来源通讯录管理系统在日常生活中的应用也很广泛,比如在手机、液晶显示电话等通讯设备中。
可以用它代替纸质通讯簿,将其与通讯设备相结合具有方便、快捷等特点。
2、设计要求
流程图设计:
使用传统流程图或N-S流程图,有系统组成框图。
源程序设计:
使用C语言编写,有模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),程序清单中要有足够的注释,程序书写格式规范。
程序调试:
使用VC++6.0软件,上机调试必须通过,有调试方法,调试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
编写课程设计报告书:
用Word2003软件编制,样式、字体、段落、页面、页码等格式要求见课程设计模板。
(三)设计思路
1、设计方法根据设计任务书中的设计要求,本设计采用以下设计方法。
本系统首先设计出了主函数,然后根据去要实现的功能分别设计了输入、显示、查找、删除等功能的子函数。
通过主函数的调用来实现功能要求。
输入函数用来确定输入的记录数及项目内容。
显示函数是将是将输入的记录显示出来。
查找是调用find()函数将待查找姓名字符串和记录数组中的姓名字符串进行比较,如果比较相等则调用print()函数显示查找到的记录。
删除与查找相似,按姓名找到删除后再用字符串拷贝函数strcpy()将后一条记录的姓名拷贝到前一条,从而实现后续记录的前移。
最后对记录进行保存文件,运用到了文件的打开读写等知识。
2、设计方案分析根据设计任务书中的设计要求,可以设想几种几种方案,可以是简单的设计,也可以是较复杂的设计。
由于系统管理要处理大量的数据这些数据要以文件的形式储存外部介质(如磁盘)上的,需要时再从磁盘中调入到计算机内存中,处理完毕后输出到磁盘上存储起来。
这涉及到文件的知识,但由于本学期课时有限,文件的知识老师讲的不多,故本设计对于涉及文件读写功能的设计做了简化。
省去了一些需要利用到文件读取功能的子函数。
二、系统设计
(一)流程图设计
1、算法分析本程序是非数值计算型算法设计。
部分算法流程图如图一二所示。
对与记录通讯录内的人员的姓名、地址、电话号码这一功能的实现,我们可以使用C语言提供的结构体类型。
可以将这些信息封装在一个数组中作为一个整体处理。
由于它们是存放在字符数组中的,对于它们的查找、插入、删除我们FOR循环语句中嵌套使用字符串处理函数,如字符串拷贝函数strcpy()、字符串比较函strcmp()对与记录数据的保存使用到文件中指向文件的指针,是一个FILE型指针变fp量。
使用了一个比较常见的用法,这种用法可以在写文件之前先检验已打开的文件是否有错误,如写保护或磁盘已写满等。
用了NULL,也就是0,因为没有文件指针会等于0。
NULL是stdio.h中定义的一个宏。
2、流程图设计下面就是总的程序流程图:
开始执行main()函数
选择(c)
调用enter()函数
调用list()函数
调用search()函数
调用delete()函数
调用save()函数
调用print()函数
调用find()函数
调用menu_select()函数
(二)源程序设计
1、主函数和自定义函数源程序
源程序清单:
#include/*I/O函数*/
#include/*标准库函数*/
#include/*字符串函数*/
#include/*字符操作函数*/
#defineM100
typedefstruct/*定义数据结构*/
{
charname[20];/*姓名*/
charaddress[30];
chartele[20];}Message;
voidmain();
intenter(Messaget[]);/*输入记录*/
voidlist(Messaget[],intn);/*显示记录*/
voidsearch(Messaget[],intn);/*按姓名查找显示记录*/
intdeleted(Messaget[],intn);/*删除记录*/
voidsave(Messaget[],intn);/*记录保存为文件*/
voidprint(Messagetemp);/*显示单条记录*/
intfind(Messaget[],intn,char*s);/*按姓名查找记录*/
intmenu_select();/*菜单显示*/
/******以下是函数原型*******/
voidmain();
{
Messagemes[M];
intlength;/*保存记录长度*/
for(;;)
{
switch(menu_select())
{
case0:
length=enter(mes);break;/*输入记录*/
case1:
list(mes,length);break;/*显示全部记录*/
case2:
search(mes,length);break;/*查找记录*/
case3:
length=delete(mes,length);break;/*删除记录*/
case4:
save(mes,length);/*保存文件*/
case5:
exit(0);/*如返回值为0,则程序结束*/
}
}
}
menu_select()
{
chars[80];
intc;
printf("pressanykeyentermenu...\n");
printf("************MENU*************\n");
printf("0.Enterrecord\n");
printf("1.Listthefile\n");
printf("2.Searchrecordonname\n");
printf("3.Deletearecord\n");
printf("4.Savethefile\n");
printf("5.Quit\n");
printf("******************************\n");
do
{
printf("\nEnteryourchoice(0~5):
");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>5);/*选择项不在0~11之间重输*/
returnc;/*返回选择项,主程序根据该数调用相应的函数*/
}
intenter(Messaget[])
{
inti,n;
printf("\npleaseinputnum\n");/*提示信息*/
scanf("%d",&n);/*输入记录数*/
printf("pleaseinputrecord\n");
printf("nameaddresstelephone\n");
for(i=0;i{
scanf("%s%s%s",t[i].name,t[i].address,t[i].tele);
printf("--------------------\n");
}
returnn;
}
voidlist(Messaget[],intn)
{
inti;
printf("\n\n**********Message**********\n");
printf("nameaddresstelephone\n");
printf("--------------------\n");
for(i=0;iprintf("%-20s%-30s%-20s\n",t[i].name,t[i].address,t[i].tele);
}
voidsearch(Messaget[],intn)
{
chars[20];
inti=0;
printf("pleasesearchname\n");
scanf("%s",s);
i=find(t,n,s);
if(i>n-1)
printf("notfound\n");
else
print(t[i]);
}
voidprint(Messagetemp)
{
printf("\n\n********************\n");
printf("nameaddresstelephone\n");
printf("--------------------\n");
printf("%-20s%-30s%-20s\n",temp.name,temp.address,temp.tele);
printf("**********end**********\n");
}
voidsearch(Messaget[],intn)
{
chars[20];
inti=0;
printf("pleasesearchname\n");
scanf("%s",s);
i=find(t,n,s);/*调用find函数*/
if(i>n-1)
printf("notfound\n");/*如果整数i值大于n-1,说明没找到*/
else
print(t[i]);
}
voidprint(Messagetemp)
{
printf("\n\n********************\n");
printf("nameaddresstelephone\n");
printf("--------------------\n");
printf("%-20s%-30s%-20s\n",temp.name,temp.address,temp.tele);
printf("**********end**********\n");
}
/*查找函数,参数为记录数组和记录条数以及姓名s*/
intfind(Messaget[],intn,char*s)
{
inti;
for(i=0;i{
if(strcmp(s,t[i].name)==0)/*记录中的姓名和否相等*/待比较的姓名是
returni;
}
returni;
}
intdelete(Messaget[],intn)
{
chars[20];
intch=0;
inti,j;
printf("pleasedeletedname\n");
scanf("%s",s);
i=find(t,n,s);/*调用find函数,得到一个整数*/
if(i>n-1)
printf("notfoundnotdeleted\n");
else
{
print(t[i]);
printf("Areyousuredeleteit(1/0)\n");/*确认是否要删除*/
scanf("%d",&ch);
if(ch==1)
{
for(j=i+1;j{strcpy(t[j-1].name,t[j].name);/*将后一条记录的姓名拷贝到前一条*/
strcpy(t[j-1].address,t[j].address);/*将后一条记录的地址拷贝到前一条*/
strcpy(t[j-1].tele,t[j].tele);/*将后一条记录的电话号码拷贝到前一条*/
}
}
n--;
}
returnn;
}
voidsave(Messaget[],intn)
{
inti;
FILE*fp;/*指向文件的指针*/
if((fp=fopen("record.txt","wb"))==NULL)
{
printf("cannotopenfile\n");
exit
(1);
}
printf("\nSavingflie\n");/*输出提示信息*/
fprintf(fp,"%d",n);
fprintf(fp,"\r\n");
for(i=0;i{
fprintf(fp,"%-20s%-30s%-20s",t[i].name,t[i].address,t[i].tele);
fprintf(fp,"\r\n");
}
fclose(fp);/*关闭文件*/
printf("**********savesuccess**********\n");}/*显示保存成功*/
三、系统调试
(一)系统调试
系统调试在完成了通讯录管理系统的流程图设计和程序设计以后,便进入系统的调试阶段。
系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统,如本设计选用VC++6.0软件进行程序调试。
1、VC++6.0调试方法
1.启动VC,单击File菜单,并单击其子菜单New,在弹出的窗口中选择Win32ConsoleApplication,在右边Projectname下方的文本框中输入项目名称,在Location中选择项目存放的位置,可以选择默认目录,也可自己更改。
单击OK。
点击Finish按钮新建一个工程。
2.单击File菜单,并单击其子菜单New选择C++SourceFile选择AddtoProject前的复选框,在File下的文本框中输入文件名。
3.编写好程序后,对程序进行编译,单击Build菜单,选择Compile**.并单击改选项就可以进行编译。
若在屏幕下方的小窗口中显示**.obj-0error(s),0warning(s),则表明编译成功。
若error不为0,则程序有错误,应先找到错误并改正直到没有错误为止。
4.程序经过编译生成.obj的目标文件后还要对程序进行链接生成.exe文件,该文件生成后即可运行,运行程序之后,屏幕会出现一个合黑色窗口,运行结果显示其中。
本程序的运行结果如图所示。
2、调试结果分析程序调试的任务是发现和改正程序中的错误,使程序能正常运行。
编译系统能检查出程序中的语法错误。
语法错误分为两类:
一类是致命错误,以error表示,如果程序中有这类错误,就通不过编译,无法形成目标程序,更谈不上运行了。
另一类是轻微错误,以warning(警告)表示,这类错误不影响生成目标程序,但有可能影响运行的结果,因此也应当改正,使程序既无error,又无warning.
(二)调试过程存在问题与解决办法
1、调试存在的问题从调试信息窗口所示的信息中可以看到:
第51行有一个警告,意思是函数应该有一个返回值,void返回类型得忽略。
第153行有一个错误,意思是句法错误:
在“}”前丢了“;。
”
2、解决问题的办法双击调试信息窗口中的第1个报错行,这时在程序窗口中出现一粗箭头指向被报错的程序行(第51行),提示改错位置,在main前加void。
再用同样的方法找到第二个出错位置,在第153行的末尾加上分号。
再仔细阅读程序,认为应该没有问题了在再进行重新编译,此时编译信息告诉我:
0error(s),0warning(s),既没有致命错误(error)也没有警告性错误(warning)。
编译成功,这时产生一个.obj文件。
再得到目标程序后就可以对程序进行连接了,这时连接生成一个.exe的可执行文件,然后用Ctrl+F5来是实现程序的执行。
四、分析与总结
现在,C语言已不仅作为计算机专业工作者所使用,而且为广大计算机应用人员(包括大量非计算机专业出身的使用计算机的人们)所喜爱和使用。
掌握计算机知识和应用,无疑是培养新型人才的一个重要环节。
计算机既是现代科学技术的结晶,又是大众化的工具。
学习计算机知识不仅是为了掌握一种技能更重要的是:
它能启发人们对先进科技的向往,激发创新意识,推动对新知识的学习,培养自学能力,锻炼动手能力,锻炼动手实践的本领。
因此它是高等学校全面素质教育中极为重要的一部分。
我们不仅要学习好理论知识,更要更多的进行实践,在实践过程中我们会发现更多的问题,能更快的提高自己的实际水平。
我也通过此次的通讯录管理系统的设计,我对C语言的优越性有了个亲身的体会。
C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:
C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。
经过半个多月的努力,我完成了通讯录管理系统的设计,通过这次课程设计,我对很多的函数有了新的认识,也学会了运用多种函数,我也明白了写运用VC++6.0编写程序的基本过程和基本方法。
在写程序的过程中我又学到了曾经自己不知道的函数或是自己不会的函数的用法。
特别是文件的开启和关闭,读与写。
这次课程设计课总的来说让我受益匪浅。
在程序设计过程中遇到了很多的困难。
在程序一次一次的调试失败