c语言课程设计通讯录.docx

上传人:b****3 文档编号:5876865 上传时间:2023-05-09 格式:DOCX 页数:14 大小:19.88KB
下载 相关 举报
c语言课程设计通讯录.docx_第1页
第1页 / 共14页
c语言课程设计通讯录.docx_第2页
第2页 / 共14页
c语言课程设计通讯录.docx_第3页
第3页 / 共14页
c语言课程设计通讯录.docx_第4页
第4页 / 共14页
c语言课程设计通讯录.docx_第5页
第5页 / 共14页
c语言课程设计通讯录.docx_第6页
第6页 / 共14页
c语言课程设计通讯录.docx_第7页
第7页 / 共14页
c语言课程设计通讯录.docx_第8页
第8页 / 共14页
c语言课程设计通讯录.docx_第9页
第9页 / 共14页
c语言课程设计通讯录.docx_第10页
第10页 / 共14页
c语言课程设计通讯录.docx_第11页
第11页 / 共14页
c语言课程设计通讯录.docx_第12页
第12页 / 共14页
c语言课程设计通讯录.docx_第13页
第13页 / 共14页
c语言课程设计通讯录.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c语言课程设计通讯录.docx

《c语言课程设计通讯录.docx》由会员分享,可在线阅读,更多相关《c语言课程设计通讯录.docx(14页珍藏版)》请在冰点文库上搜索。

c语言课程设计通讯录.docx

c语言课程设计通讯录

电气信息工程学院

课程设计报告

 

2010—2011学年第2学期

课程名称C语言课程设计

设计题目实用的小型通讯录

学生姓名

指导老师刘跃峰

学号

专业班级电子信息科学与技术

 

一、课程设计目的

1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2、通过课程设计,学会设计数据结构。

其中包括对结构数组、数据文件等知识的运用。

3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。

4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。

5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。

6、通话课程设计,培养分析问题、解决实际问题的能力。

二、课程设计内容及要求

课程设计通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:

(1)录入:

联系人信息包括:

姓名,电话。

以结构数组或数据文件的形式存放通讯录信息。

(2)更新:

能插入、修改、删除通讯录信息。

(3)浏览:

按录入先后为序进行通讯录信息浏览。

(4)查询:

能实现指定联系人信息查询或指定电话号码查询功能。

(5)系统以菜单方式工作,界面友好,易于操作,容错性好。

三、总体设计

1、模块化设计

为实现系统功能,本程序主要分为六个模块。

它们分别为:

录入联系人信息、删除联系人信息、查询联系人信息、增加联系人信息、浏览所以联系人信息、退出该程序。

这六个函数再通过主函数调用分别得以实现。

主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。

然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。

其它各个函数的功能分别如下:

Enter函数用于录入通讯录中学生的信息;

Delet函数用于对通讯录中指定信息的删除;

Search函数用于对通讯录中指定信息的查询;

Add函数用于在通讯录中插入信息;

Modify函数用于对联系人进行修改;

Load函数用于对通讯录中所有信息进行浏览;

Quit函数用于退出系统。

四、详细设计

(1)数据结构设计

本程序中,运用了多种数据结构。

首先对于通讯录中各项详细信息的记录用了结构体数组的形式,然后又运用switch语句来实现对分函数调用的开关功能,在文件的保存过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘,也可以从磁盘中讲文件内容读入内存中。

结构体及其成员如下:

structpeople

{

charname[10];

charnum[20];

charaddr[50];

}pe[100];

(2)模块接口设计

本程序执行的入口是main函数,然后是菜单函数,在菜单函数中对选项进行选择以后,接下来在do-while语句中再套用switch语句实现对各个函数的调用。

被调用的函数都是没有形参的,但是通过对数据文件的使用,可以使得每一次的函数调用都能够讲忘记保存到磁盘中,而不需要返回值。

最后,再从main函数中结束整个程序的运行。

其中涉及到被调用的函数有:

voidload(top);//保存函数

voiddisplay();//删出函数

voidnew_addrBook();//新建函数

voidslstore();//增加函数

voidmodify();//修改函数

voidsearch();//查找函数

voidload();//浏览函数

voidquit();//退出函数

#include/*头文件*/

#include

#include

#include

#defineLENsizeof(ADDR)

typedefstructnode

{

charname[20];

longtel;

structnode*next;

}ADDR;

ADDR*top;

intn=0;

menu_select()/*菜单选择:

*/

{

intcn,i=0;

do

{printf("\n\tmenu\n");

for(i=0;i<30;i++){printf("=");}

printf("\n\t1-save\n\t2-load\n\t3-display\n\t4-slstore\n\t5-delectrecord\n");

printf("\t6-search\n\t7-link\n\t8-buildnew\n\t9-menuhandle\n");

printf("\t10-menuselect\n\t11-freenodes\n\t12-quitprogram:

\n");

for(i=0;i<30;i++){printf("=");}

printf("\npleaseInputyourchoice1-12--:

");

scanf("%d",&cn);

}while(cn<0||cn>12);

returncn;

}

voidsave(ADDR*top)/*save函数*/

{FILE*fp;

ADDR*p1=top;

if((fp=fopen("E:

\\sname.txt","w+"))==NULL)

{printf("cannotopenthefile\n");

return;

}

if(p1!

=NULL)

do

{fprintf(fp,"%s,%ld\n",p1->name,p1->tel);

p1=p1->next;

}while(p1!

=NULL);

fclose(fp);

printf("savesuccessful!

\n");

}

voidload(ADDR*top)/*文件读取*/

{externn;

inti;

FILE*fp;

ADDR*p1,*p2;

p1=p2=(ADDR*)malloc(LEN);

top=p1;

fp=fopen("E:

\\sname.txt","r");

for(i=0;i

{fscanf(fp,"%s%,ld\n",p1->name,&p1->tel);

p2->next=p1;

p2=p1;

p1=(ADDR*)malloc(LEN);

}

p2->next=NULL;

printf("readsuccessful!

\n");

}

voiddisplay()/*显示链表内存:

*/

{

ADDR*p3=top;

printf("Nowoutputtherecord\n");

if(p3!

=NULL)

do

{printf("%s\t%ld\n",p3->name,p3->tel);

p3=p3->next;

}while(p3!

=NULL);

elseprintf("Listempty!

\n");

}

ADDR*slstore()/*添加信息:

*/

{

ADDR*p1;

ADDR*p0=(ADDR*)malloc(LEN);

inta;

p1=top;

printf("Inputinsertname&telphone:

\n");

scanf("%s%ld",p0->name,&p0->tel);

if(top==NULL)

{printf("theoriginisempty!

\n");

top=p0;

p0->next=NULL;

}

else

{while(p1->next!

=NULL)

p1=p1->next;

p1->next=p0;

p0->next=NULL;

}

n++;

display();

printf("Doyouwantcontinuetoadd:

1-yes\t2-no\n");

scanf("%d",&a);

if(a==1)slstore(top);

elsereturn(top);

}

ADDR*delete_record(ADDR*top)/*删除记录:

*/

{

charc[20];

longm;

inti,b;

ADDR*p2,*p1=top;

if(top==NULL)

{printf("\nlistisempty!

");

return(top);

}

printf("Nowinputyourdeletenameortelphonenumber:

\n");

scanf("%s",c);

printf("%s",c);

if(c[0]<'a')

{m=i=0;

while(c[i])

{b=c[i]-'0';

m=m*10+b;

i++;

}}

if(c[0]<'a')

{while(m!

=p1->tel&&p1->next!

=NULL)

{p2=p1;p1=p1->next;}

if(m==p1->tel)

{if(p1==top)top=p1->next;

elsep2->next=p1->next;

printf("delete:

%ld\n",m);

n=n-1;}

elseprintf("%ldnothavebeenfound!

",m);}

else

{while(strcmp(c,p1->name)&&p1->next!

=NULL)

{p2=p1;p1=p1->next;}

if(strcmp(c,p1->name)==0)

{if(p1==top)top=p1->next;

elsep2->next=p1->next;

printf("delete:

%s\n",c);

n=n-1;

}

elseprintf("%snothavebeeenfound!

",c);

}return(top);

}

ADDR*find_record(ADDR*top)/*查找信息:

*/

{ADDR*p;

longx;

intcount=0,i,b;

chars[15],e;

printf("pleaseinputyoursearchednameortelphonenumber:

\n");

scanf("%S",s);

if(s[0]<'a')

{x=i=0;

while(s[i])

{b=s[i]-'0';

x=x*10+b;

i++;}

}

p=top;

while(p!

=NULL)

{

if(x!

=p->tel||(strcmp(s,p->name)==0))

{printf("youfindtheperson\nname\ttelphone\n");

printf("%s\t%ld\n",p->name,p->tel);

count++;

break;

}

p=p->next;

}

if(count==0)

printf("Nofoundthe%sperson\n",s);

printf("Doyouwanttocontinue:

pressy-yes\n");

scanf("%c",&e);

if(e=='y')

find_record(top);

return(top);

}

voidlink_files()/*连接文件:

*/

{FILE*in,*out;

charinfile[10],outfile[10];

printf("Entertheinfilename:

\n");

scanf("%s",infile);

printf("Entertheoutfilename:

\n");

scanf("%s",infile);

if((in=fopen(infile,"r"))==NULL)

{printf("cannotopentheinfile");

exit(0);

}

if((out=fopen(outfile,"w"))==NULL)

{printf("cannotopentheoutfile");

exit(0);

}

while(!

feof(in))fputc(fgetc(in),out);

fclose(in);

fclose(out);

}

ADDR*new_addrBook(ADDR*top)/*新建通讯录:

*/

{

ADDR*p1,*p2;

n=0;

p1=p2=(ADDR*)malloc(LEN);

printf("Nowwillbuildnewaddressbook!

\n");

printf("pleaseinputallyourinformation:

\n");

printf("name\ttelphonenumber\n");

scanf("%s%ld",p1->name,&p1->tel);

top=NULL;

while(p1->tel!

=0)

{n=n+1;

if(n==1)top=p1;

elsep2->next=p1;

p2=p1;

p1=(ADDR*)malloc(LEN);

scanf("%s%ld",p1->name,&p1->tel);

if(p1->tel==0)printf("nowinputover\n");

}

p2->next=NULL;

return(top);

}

voidfree_nodes(ADDR*top)/*释放内存*/

{

free(top);

top=NULL;n=0;

}

voidquit(ADDR*top)/*结束程序*/

{

ADDR*p0=top;

ADDR*p=NULL;

intw;

if(p0==NULL)

{printf("Norecord!

\nGoodbay\n");

exit(0);

}

else

{printf("Doyouwantsavetherecordintothefile?

1-yes\tothers-no:

\n");

scanf("%d",&w);

}

if(w==1)

{save(top);

printf("Nowtheinformationsaved\nGoodbay\n");

}exit(0);

}

voidhandle_menu()

{

for(;;)

{switch(menu_select())

{case1:

save(top);break;

case2:

load(top);break;

case3:

display(top);break;

case4:

top=slstore(top);break;

case5:

top=delete_record(top);break;

case6:

find_record(top);break;

case7:

link_files();break;

case8:

top=new_addrBook(top);break;

case9:

handle_menu(top);break;

case10:

menu_select();break;

case11:

free_nodes(top);break;

case12:

quit(top);break;

}}}

voidmain()/*主函数*/

{printf("welcometoentertheprogram:

");

handle_menu();

}

五、调试与测试

(1)调试过程中的主要问题

由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。

对于本程序的调试运行,总体上情况良好。

但是,其中也出现了一些小问题:

在这次程序调试中我还发现了return;与break;的不同作用,其中break是只能用来结束它本身所在的本层循环,而return则是结束调用函数,让程序返回到主函数;还有用getchar()来接收输入字符时的回车符及让系统暂停,用ctrl+break来让系统暂停等。

六、课程设计总结:

经过一个多星期的编写,终于将它完成了。

本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。

在刚开始的几次调试中曾经出现过不能运行,运行出现死循环,不会正确输出结果等等问题。

尤其那个结点,本来就不怎么懂,经过我看资料及同学的帮助,这些问题得到克服,并且使程序的功能也得到了一定的完善。

现在它的基本功能管理等都可以正确运行,并且给出正确答案。

虽然课程设计很苦很累,有时候还很令人抓狂,不过现在回想起来它给我的并不只是痛苦的回忆,它不仅让拉近了我和同学间的距离,而且对我们学习计算机语言还是很有意义的。

通过这次的课程设计,让我明确了学习C语言的目的和重要性,在以后的时间里,我会更加努力的把C语言学好,为以后学习更高级的计算机语言打下好的基础,并通过与老师同学的交流来不断的提升自己的编程和开发能力!

 

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2