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

上传人:b****5 文档编号:8636946 上传时间:2023-02-01 格式:DOCX 页数:16 大小:104.12KB
下载 相关 举报
c语言课程设计报告 通讯录设计.docx_第1页
第1页 / 共16页
c语言课程设计报告 通讯录设计.docx_第2页
第2页 / 共16页
c语言课程设计报告 通讯录设计.docx_第3页
第3页 / 共16页
c语言课程设计报告 通讯录设计.docx_第4页
第4页 / 共16页
c语言课程设计报告 通讯录设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

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

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

c语言课程设计报告通讯录设计

第一章作者简介

作者,曹新晴,女,河北石家庄人,现为地球科学学院资源环境与城乡规划管理专业06级在读本科生。

我是女生中比较爱运动的类型,喜欢羽毛球和篮球,喜欢畅快运动后那种洒脱的感觉,可以把所有的烦闷和忧伤统统用自己挥舞的手臂和奔跑的步伐甩掉,然后不再疲惫、精力充沛地迎接可能的挑战或挫折。

运动让我更加自信,更加勇敢。

用朋友的话,是那种有点倔强的自信,是“咬定青山不放松”的坚持吧,让我一路上跌跌撞撞地走到了现在。

所以,我更加珍惜这里的学习机会。

我发挥自己的兴趣,运用自己的毅力,和一些志同道合的战友一起起早奋斗,在去年拿到了国家篮球三级裁判员的证书,这是对我的努力的肯定。

当然,我还会在自己的路上再接再厉,争取获得更大的进步。

有时候,我也会选择跑步来释放,因为大学孤身在外,很多问题都等着你去解决,而多数情况是要独自面对,所以我们要有自己的排解压力的方式。

一张一弛,才会游刃有余,这就是我的处世哲学。

上学期,我在韩涛老师的指导下学习了计算机C语言课程,对利用C程序进行编程的一般思想、方法和格式的规范性有了初步的认识和了解,并通过自己的刻苦学习在试卷上取得了不错的成绩。

希望通过这次课程设计,把所学的知识在实际中得到运用。

 

第二章报告摘要

实习报告中主要介绍了程序编写的过程,整个管理系统的组成,各个功能模块如何发挥作用等,这些都在报告正文中有所体现。

实习报告分了五个部分来写,即作者简介、报告摘要、报告目录、报告正文和总结。

其中报告目录清晰明了地展示报告的顺序;报告正文是最重要的一个部分,这个部分详细地介绍了这个程序设计的设计思想和方法,包括:

题目要求、系统的需求分析、系统的总体设计和系统的详细设计。

 

第三章报告目录

一.题目要求…………………………………………………………………………………3

 

二.需求分析…………………………………………………………………………………3

 

三.总体设计…………………………………………………………………………………3

 

四.详细设计…………………………………………………………………………………3

1.主函数…………………………………………………………………………………3

2.各功能模块设计…………………………………………………………………5

⑴输入模块………………………………………………………………………………6

⑵添加模块………………………………………………………………………………6

⑶显示模块………………………………………………………………………………7

⑷删除模块………………………………………………………………………………7

⑸查询模块………………………………………………………………………………8

⑹修改模块………………………………………………………………………………9

⑺保存模块………………………………………………………………………………10

 

一.题目要求

设计具有数据插入、修改、删除、显示和查询功能的电话簿管理系统。

⑴数据包括:

人名、工作单位、电话号码和E-mail地址。

⑵可对记录中的姓名和电话号码进行修改。

⑶可增加或删除记录。

⑷可显示所有保存的记录。

⑸可按人名或电话号码进行查询。

二.需求分析

根据题目的要求,程序应该采用结构体数组和文件系统实现。

应该有动态的存储空间和文件输入、输出等操作功能;在程序中应该包括添加、显示、删除、查询和修改以及保存和退出的功能;另外还应提供键盘式选择菜单实现功能选择。

三.总体设计

根据上面的分析,可以将程序系统的设计分为如下几个模块:

添加、显示、删除、查询、修改和退出。

四.详细设计

1.主函数

主函数的设计一般比较的简单,只提供输入,功能处理和输出部分的函数调用。

其中个功能模块用菜单方式选择。

菜单部分也可以写成函数。

[流程图]

[程序]

main()/*****************主函数*****************/

{intn;/**********变量保存选择菜单数子***************/

creat();

do

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

printf("\n\n\t*************WELCOMETOUSE!

***************\n");

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

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

printf("\n\t\t1.Addapieceofmeg");

printf("\n\t\t2.Listallthemeg");

printf("\n\t\t3.Deleteapieceofmeg");

printf("\n\t\t4.Findapieceofmeg");

printf("\n\t\t5.Alterapieceofmeg");

printf("\n\t\t6.SaveandQuit");

printf("\n\t\t7.Createanaddressbook");

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

printf("\t********InputYourChoice:

****************\n");

scanf("%d",&n);

switch(n)/*****************输入n的在1-6之间执行switch************/

{case1:

Add();/*添加模块*/

break;

case2:

List();/*显示模块*/

break;

case3:

Delete();/*删除模块*/

break;

case4:

Find();/*查询模块:

分为名字查询(0)和电话号码查询

(1)*/

break;

case5:

Alter();/*修改模块:

分为修改名字(0)和修改电话号码

(1)*/

break;

case6:

exit(0);/*退出模块*/

break;

case7:

creat();/*带回链表起始地址*/

fclose(fp);

default:

/**********输入的n不在1-6之间执行default************/

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

printf("\n\tThenumshouldbe1-6!

!

!

\n");

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

break;

}

}while

(1);

}

2.各功能模块设计

[数据结构]

通讯录的数据信息:

人名、工作单位、电话号码、E-mail地址均可以采用字符型数组;可以采用结构体的形式,把各信息作为结构的成员,由于通讯录要具有添加、查找、和删除的功能,所以整个通讯录采用链表比较容易的实现以上功能。

用结构体变量作为链表中的接点是最合适的。

结构体变量可以是指针类型,我们可以用这个指针类型的成员来存放下一个结点的地址。

结构体的类型如下:

structpersons{typedefstructp{

charname[10]charname[10];

charaddr[20];charaddr[20];

charphnum[20];charphnum[20];

charemail[20];charemail[20];

}persons[MAX];structp*next;

}p,*linklist;

structpersons类型为每个链表成员;typedefstructp为一个动态的结点,它的成员next存放下一个结点的地址。

以下为各模块分析时要用的指针:

linklisthead=NULL,t=NULL;/**************定义头指针和尾指针*************/

p*s,*p0,*p1,*p2,*p3,*p4,*p5;

inti;

charname1[10],ch;

charstr1[20];

FILE*fp;/********************定义文件指针***********************/

(1)输入模块

[程序]

voidcreat()/*将文件的信息读入结构体数组在转存入链表中*/

{intj;

longk;

fp=fopen("people.txt","r+");/****************打开文件**********************/

if(fp!

=NULL)

{for(i=1;i

{j=fgetc(fp);

if(j==EOF)

return;

k=i-1;

fseek(fp,k*sizeof(structpersons),0);/************读取一个人的信息***************/

fread(&persons[i],sizeof(structpersons),1,fp);

s=(linklist)malloc(sizeof(p));/**************装存入链表中***********/

strcpy(s->name,persons[i].name);

strcpy(s->addr,persons[i].addr);

strcpy(s->phnum,persons[i].phnum);

strcpy(s->email,persons[i].email);

if(head==NULL)/***********用尾插法将其插入链表中**********/

head=s;

else

{t->next=s;

t=s;}

}}

else

{fp=fopen("people.txt","w");i=1;/*****不能打开另开辟一个文件*****/

}

}

⑵添加模块

由于运用的是链表的形式,且通讯录只是按照输入的先后循序排序,所以对添加的信息采用插入末端的方式,同时添加也使用于空通讯录的信息输入。

[程序]

voidAdd()/*******向通讯录中添加(或输入)一个人的信息*********/

{s=(linklist)malloc(sizeof(p));s->next=NULL;

printf("\n\n\t*********Pleaseinputthesb'smessage:

**********");

printf("\n\n\t\tname:

");

scanf("%s",s->name);

printf("\n\n\t\tAddr:

");

scanf("%s",s->addr);

printf("\n\n\t\tphnum:

");

scanf("%s",s->phnum);

printf("\n\n\t\temai:

");

scanf("%s",s->email);

if(head==NULL)

head=s;/*******若通讯录为空则添加在头指针之后相当于输入信息*********/

else

{t->next=s;/***********添加到链表的末尾************/

t=s;}

}

⑶显示模块

链表的一大好处是只要定义了头指针,则所有的信息就很容易的找到,指针会一环扣一环的找到每个信息,显示出每个信息,直到最后到位指针结束。

[程序]

voidList()/*****************显示所有的信息*******************/

{p0=head;/**************p0指向头指针*******************/

while(p0!

=NULL)/****************通讯录不为空******************/

{printf("\tname:

%s",p0->name);

printf("\taddr:

%s",p0->addr);

printf("\tphnum:

%s",p0->phnum);

printf("\temail:

%s\n",p0->email);

p0=p0->next;/**************p0向后移一个位置*****************/

}

}

⑷删除模块

删除一个人的信息相当于是删除链表中的一个结点。

在删除后又要保证链表不间断,如同手牵手排队的小孩,一个离队后,它两侧的小孩又自动地把手牵起来,保证不间断即把结点从链表中分离开来,只要撤销原来的链表关系即可。

[流程图]

要删除地信息

[程序]

voidDelete()/************定义一个删除的函数***************/

{charname0[10];

p1=head;

printf("\n\t**********Pleaseinputaname:

*************\n");/*输入要删除人的姓名*/

printf("\n\t\tname0:

");

gets(name0);

scanf("%s",name0);

while((strcmp(name0,p1->name)!

=0)&&(p1!

=NULL))/*根据各种情况判断可能性*/

{p2=p1;

p1=p1->next;}/***************指针向后移一个位置****************/

if(strcmp(name0,p1->name)==0)/******找到要删除的位置*******/

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

elsep2->next=p1->next;

printf("\n\t**************Deletesuccess!

******************\n");}

else

printf("\n\t**************Deletefail!

******************\n");/*没找到要删除的位置*/

}

⑸查询模块

按照题目的要求查询可以分为姓名查询和电话号码查询

[流程图]

输入0(姓名查询)输入1(电话号码查询)

NN

YY

[程序]

voidFind()/***********定义一个查询的函数**************/

{intn;

charphnum1[20],name1[10];

printf("\n\t*******Searchbynameorphpnum?

*****name(n=0)\phnum(n=1)*********\n");

printf("*******Inputthenumberof'n':

*************\n");

scanf("%d",&n);/*******************选择查询方式******************/

if(n==0)/****************姓名查询***************/

{printf("\n\tname:

");

p3=head;

gets(name1);

scanf("%s",&name1);/*****************输入姓名***************/

while((strcmp(name1,p3->name)!

=0)&&(p3!

=NULL))/*根据各种情况判断可能性*/

p3=p3->next;

if(p3->name==NULL)/**************没有找到**************/

{printf("\n\t**************Cannotfindthemessage!

**********");}

elseif(strcmp(name1,p3->name)==0)/******找到信息并输出******/

{printf("\n\t*********Foundthemessage:

**********\n");

printf("\n\tname:

%s",p3->name);

printf("\taddress:

%s",p3->addr);

printf("\temail:

%s",p3->email);

printf("\tphnum:

%s",p3->phnum);

}

}

elseif(n==1)/***************电话号码查询***************/

{printf("\n\tphnum1");

p3=head;

gets(phnum1);

scanf("%s",&phnum1);/****************输入电话号码***************/

while((strcmp(phnum1,p3->phnum)!

=0)&&(p3!

=NULL))/*根据各种情况判断可能性*/

p3=p3->next;

if(p3->phnum==NULL)/***************没有找到**************/

{printf("\n\t************Cannotfindthemessage!

***********");}

elseif(strcmp(phnum1,p3->phnum)==0)/******找到信息并输出******/

{printf("\n\n\t**********Foundthemessage:

*********");

printf("\n\tname:

%s",p3->name);

⑹修改模块

按照题目的要求查询可以分为修改姓名和修改电话号码,修改模块的设计思路和查询模块的思路基本上相同。

[流程图]

1

0

NN

YY

[程序]

voidAlter()/***************定义一个修改的函数*****************/

{intm;charphnum2[20],name2[10];

printf("\n\n\t****Whichmessagedoyouwanttoalter?

*******name(m=0)\phnum(m=1)*********\n");

printf("************Inputthenumberof'm':

******************\n");

scanf("%d",&m);/*******************选择修改内容******************/

if(m==0)/*********************修改姓名*********************/

{printf("\n\tname:

");

scanf("%s",&name2);/**************输入要修改的姓名***************/

p4=head;

while((strcmp(name2,p4->name)!

=0)&&(p4!

=NULL))/*根据各种情况判断可能性*/

p4=p4->next;

if(p4==NULL){printf("\n\t*********Cannotfindthemame!

**********\n");}

elseif(strcmp(name2,p4->name)==0)/********找到要修改的姓名********/

{printf("\n\n\t*********Inputthenewnessage:

************\n");

printf("\n\n\n\t\tname:

");

canf("%s",&name2);/**********输入新的信息**********/

strcpy(p4->name,name2);/*******新的姓名修改成功*******/

printf("\n\n\t************Alteredsuccess!

************\n");}

}

elseif(m==1)/***************修改电话号码***************/

{printf("\n\tphnum:

");

scanf("%s",&phnum2);/************输入要修改的电话号码***************/

p4=head;

while((strcmp(phnum2,p4->phnum)!

=0)&&(p4!

=NULL))/*根据各种情况判断可能性*/

p4=p4->next;

if(p4==NULL)

{printf("\n\t************Cannotfindthephnum!

*********\n");}

elseif(strcmp(phnum2,p4->phnum)==0)/******找到要修改的电话号码*****/

{printf("\n\n\t**********Inputthenewnessage:

*********\n");

printf("\n\n\n\t\tphnum:

");

scanf("%s",&phnum2);/**********输入新的信息**********/

strcpy(p4->phnum,phnum2);/*******新的电话号码修改成功*******/

printf("\n\n\t************Alteredsuccess!

************\n");}

}

}

⑺保存模块

[程序]

voidSave()/************定义一个保存信息的函数************/

{intj;

fp=fopen("people.txt","w");

for(p5=head,j=0;p5!

=NULL;j++,p5=p5->next)/*将信息装出入结构体数组在出入链表中*/

{strcpy(persons[j].name,p5->name);

strcpy(persons[j].addr,p5->addr);

strcpy(persons[j].phnum,p5->phnum);

strcpy(persons[j].email,p5->email);

fwrite(&persons[j],sizeof(structpersons),1,fp

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

当前位置:首页 > 职业教育 > 其它

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

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