小型通讯录的设计c语言.docx
《小型通讯录的设计c语言.docx》由会员分享,可在线阅读,更多相关《小型通讯录的设计c语言.docx(15页珍藏版)》请在冰豆网上搜索。
![小型通讯录的设计c语言.docx](https://file1.bdocx.com/fileroot1/2023-1/31/00b766ec-48f4-4275-9c38-4fb7d2b551c1/00b766ec-48f4-4275-9c38-4fb7d2b551c11.gif)
小型通讯录的设计c语言
高级语言(C)课程设计
题目:
小型通讯录设计
院(系、部):
信息工程
姓名:
班级:
指导教师签名:
2008年12月18日·北京
目录
一、任务书*************************************2
二、总体设计***********************************2
三、模块划分及功能*****************************2
四、算法说明***********************************2
五、流程图*************************************5
六、源程序清单*********************************6
七、程序测试***********************************27
八、结论、体会及建议***************************28
附:
参考文献资料********************************28
一、任务书
题目6:
小型通讯录设计
功能:
实现简单的通讯录信息管理,基本信息包括编号、姓名、电话、手机、邮编、地址和关系(如朋友、亲友、同事、同学等)
基本要求:
1.设计简单的菜单,能够进行系统功能选择。
2.实现信息的录入功能。
3.在已有信息的基础上添加新的记录。
4.删除指定编号的记录。
5.修改指定编号的记录
6.实现信息的浏览功能
7.按编号查询功能
8.按手机号排序功能
二、总体设计
利用structperson定义数据结构,用void声明函数,用开关语句switch,case分开事件进行程序,实现系统功能选择,利用if,while语句判断函数,for语句实现循环,利用printf和scanf进行输出与输入,用gets()输入字符串,最终实现通讯录功能。
三、模块划分及功能
主模块:
main()/*主函数*/
其他模块:
模块一:
creat()读入记录
模块二:
List()显示记录
模块三:
Delete()删除记录
模块四:
Find()按人名查找记录
模块五:
Find1()按编号查找记录
模块六:
Input()输入记录
模块七:
Alter()改变记录
模块八:
Paixu()排列记录
模块九:
Save()保存记录
四、算法说明
1:
定义结构体变量,进行函数声名。
#include/*I/O函数*/
#include/*字符串操作函数*/
#definemaxlen100/*输入人数最大量*/
2以下是函数声明:
voidcreat()/*读入记录*/
voidList()/*显示记录*/
voidDelete()/*删除记录*/
voidFind()/*按人名查找记录*/
voidFind1()/*按编号查找记录*/
voidInput()/*输入记录*/
voidAlter()/*改变记录*/
voidPaixu()/*排列记录*/
voidSave()/*保存记录*/
3开关语句
{switch(menu())/*调用主菜单函数,返回值整数作开关语句的条件*/
{case1:
voidList()break;/*显示记录*/
case2:
voidDelete()break;/*删除记录*/
case3:
voidFind()break;/*按人名查找记录*/
case4:
voidFind1()break;/*按编号查找记录*/
case5:
voidInput()break;/*输入记录*/
case6:
voidAlter()break;/*改变记录*/
case7:
voidPaixu()break;/*按手机号降序排列记录*/
case8:
voidSave()break;/*保存记录*/
case9:
/*退出*/
4for语句为选择法排序
for(a=0;a{for(b=a+1;b{if(strcmp(k[a].phone,k[b].phone>0))/*若前者长度大于后者则进行交换*/
{f=k[b];
k[b]=k[a];
k[a]=f;
}
}
}
按编号查找记录
{printf("\n\n\tpleaseinputthenumber:
");
p9=head;
gets(number1);
while(strcmp(number1,p9->number)!
=0&&p9!
=NULL)/*判断输入的数字编号与已有的是否相等,如不相等则退出循环*/
p9=p9->next;
if(p9==NULL)
{printf("\n\n\tItisnotexitintheaddr-book!
");
}
else
{printf("name:
%s",p9->name);/*输出相应信息*/
printf("number:
%s",p9->number);
printf("addr:
%s",p9->addr);
printf("tel:
%s",p9->tel);
printf("phone:
%s",p9->phone);
printf("postnumber:
%s",p9->postnum);
printf("guanxi:
%s\n",p9->guanxi);
}
}
五、流程图
退出系统
六、源程序清单
#include
#include
#definemaxlen100
structpersons
{charname[15];
charnumber[10];
charaddr[20];
chartel[10];
charphone[15];
charpostnum[10];
charguanxi[15];
}persons[maxlen];
structm
{charname[15];
charnumber[10];
charaddr[20];
chartel[10];
charphone[15];
charpostnum[10];
charguanxi[15];
}k[maxlen],f;
typedefstructlnode
{charname[15];
charnumber[10];
charaddr[20];
chartel[10];
charphone[15];
charpostnum[15];
charguanxi[15];
structlnode*next;
}listnode,*linklist;
linklisthead=NULL,r=NULL;
listnode*s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
inti,a,b,n=0;
charname1[15],ch;
charred[20];
charnumber1[10];
charstr1[20];
FILE*fp;
voidcreat()
{intj;
longk;
fp=fopen("lms.txt","r+t");
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(listnode));
strcpy(s->name,persons[i].name);
strcpy(s->number,persons[i].number);
strcpy(s->addr,persons[i].addr);
strcpy(s->tel,persons[i].tel);
strcpy(s->phone,persons[i].phone);
strcpy(s->postnum,persons[i].postnum);
strcpy(s->guanxi,persons[i].guanxi);
if(head==NULL)
head=s;
else
r->next=s;
r=s;}
}
else
{fp=fopen("lms.txt","w");i=1;
}
}
voidList()
{p1=head;
while(p1!
=NULL)
{printf("\nname:
%s",p1->name);
printf("number:
%s",p1->number);
printf("addr:
%s",p1->addr);
printf("tel:
%s",p1->tel);
printf("phone:
%s",p1->phone);
printf("postnumber:
%s",p1->postnum);
printf("guanxi:
%s",p1->guanxi);
p1=p1->next;
}
}
voidDelete()
{printf("\n\n\tpleaseinputthename:
");
gets(name1);p4=head;
if(strcmp(p4->name,name1)==0)
{p4=p4->next;
head=p4;
}
else
{while(strcmp(p4->next->name,name1)!
=0)
{printf("\t\tDon'tfindthispeople");
break;}
}
}
voidFind()
{printf("\n\n\tpleaseinputthename:
");
p0=head;
gets(name1);
while(strcmp(name1,p0->name)!
=0&&p0!
=NULL)
p0=p0->next;
if(p0==NULL)
{printf("\n\n\tItisnotexitintheaddr-book!
");
}
else
{printf("name:
%s",p0->name);
printf("number:
%s",p0->number);
printf("addr:
%s",p0->addr);
printf("tel:
%s",p0->tel);
printf("phone:
%s",p0->phone);
printf("postnumber:
%s",p0->postnum);
printf("guanxi:
%s\n",p0->guanxi);
}
}
voidFind1()
{printf("\n\n\tpleaseinputthenumber:
");
p9=head;
gets(number1);
while(strcmp(number1,p9->number)!
=0&&p9!
=NULL)
p9=p9->next;
if(p9==NULL)
{printf("\n\n\tItisnotexitintheaddr-book!
");
}
else
{printf("name:
%s",p9->name);
printf("number:
%s",p9->number);
printf("addr:
%s",p9->addr);
printf("tel:
%s",p9->tel);
printf("phone:
%s",p9->phone);
printf("postnumber:
%s",p9->postnum);
printf("guanxi:
%s\n",p9->guanxi);
}
}
voidInput()
{s=(linklist)malloc(sizeof(listnode));
printf("\n\n\tpleaseinputthesb'sxinxi:
");
printf("\n\n\t\tname:
");
scanf("%s",s->name);
printf("\n\n\t\tnumber:
");
scanf("%s",s->number);
printf("\n\n\t\tAddr:
");
scanf("%s",s->addr);
printf("\n\n\t\ttel:
");
scanf("%s",s->tel);
printf("\n\n\t\tphone:
");
scanf("%s",s->phone);
printf("\n\n\t\tpostnumber:
");
scanf("%s",s->postnum);
printf("\n\n\t\tguanxi:
");
scanf("%s",s->guanxi);
if(head==NULL)
head=s;
else
r->next=s;
r=s;
}
voidAlter()
{
intj;
printf("\n\n\tPleaseinputthename:
");
gets(name1);
p3=head;
while(strcmp(name1,p3->name)!
=0&&p3!
=NULL)
p3=p3->next;
if(p3==NULL)
printf("\n\n\tItisnotexitintheaddr-book!
");
else
{printf("\n\n\tpleaseinputthenewmeg!
");
printf("\n\n\t\tname:
");
scanf("%s",&red);
strcpy(p3->name,red);
printf("\n\n\t\tnumber:
");
scanf("%s",&red);
strcpy(p3->number,red);
printf("\n\n\t\tAddr:
");
scanf("%s",&red);
strcpy(p3->addr,red);
printf("\n\n\t\ttel:
");
scanf("%s",&red);
strcpy(p3->tel,red);
printf("\n\n\t\tphone:
");
scanf("%s",&red);
strcpy(p3->phone,red);
printf("\n\n\t\tpostnumber:
");
scanf("%s",&red);
strcpy(p3->postnum,red);
printf("\n\n\t\tguanxi:
");
scanf("%s",&red);
strcpy(p3->guanxi,red);
}
}
voidPaixu()
{p8=head;
i=0;
while(p8!
=NULL)
{strcpy(k[i].name,p8->name);
strcpy(k[i].number,p8->number);
strcpy(k[i].addr,p8->addr);
strcpy(k[i].tel,p8->tel);
strcpy(k[i].phone,p8->phone);
strcpy(k[i].postnum,p8->postnum);
strcpy(k[i].guanxi,p8->guanxi);
p8=p8->next;
i++;
n=n+1;
}
for(a=0;a{for(b=a+1;b{if(strcmp(k[a].phone,k[b].phone)>0)
{f=k[b];
k[b]=k[a];
k[a]=f;
}
}
}
for(i=0;i{
printf("\nname:
%s",k[i].name);
printf("number:
%s",k[i].number);
printf("addr:
%s",k[i].addr);
printf("tel:
%s",k[i].tel);
printf("phone:
%s",k[i].phone);
printf("postnumber%s",k[i].postnum);
printf("guanxi:
%s",k[i].guanxi);
}
}
voidSave()
{intj;
fp=fopen("lms.txt","w");
for(p2=head,j=0;p2!
=NULL;j++,p2=p2->next)
{strcpy(persons[j].name,p2->name);
strcpy(persons[j].number,p2->number);
strcpy(persons[j].addr,p2->addr);
strcpy(persons[j].tel,p2->tel);
strcpy(persons[j].phone,p2->phone);
strcpy(persons[j].postnum,p2->postnum);
strcpy(persons[j].guanxi,p2->guanxi);
fwrite(&persons[j],sizeof(structpersons),1,fp);
}
}
voidmain()
{creat();
do
{printf("\n\t***********************************************\n");
printf("\tWELCOMETOUSEAddressbook\n");
printf("\t**********************************************");
printf("\n\t\tPleasemakeachoicebelow:
");
printf("\n\t\t1.Listallthemeg");
printf("\n\t\t2.Deleteapieceofmeg");
printf("\n\t\t3.Findapieceofmegusename");
printf("\n\t\t4.Findapieceofmegusenumber");
printf("\n\t\t5.Addapieceofmeg");
printf("\n\t\t6.Alterapieceofmeg");
printf("\n\t\t7.listofphone");
printf("\n\t\t8.Save");
printf("\n\t\t9.Createanaddressbook");
printf("\n\t\t0.Quit");
printf("\n\tInputYourChoice:
");
ch=getchar();
switch(ch)
{case'1':
List();
break;
case'2':
Delete();
break;
case'3':
Find();
break;
case'4':
Find1();
break;
case'5':
Input();
break;
case'6':
Alter();
break;
case'7':
Paixu();
break;
case'8':
Save();
break;
case'9':
creat();
break;
case'0':
exit(0);
break;
default:
printf("\n\t********************************************\n");
printf("\n\tThenumshould0-9!
!
!
\n");
printf("\n\t********************************************\n");
break;
}
}while
(1);
}
七、程序测试
该程序可以实现某人通讯录管理,能够进行系统功能选择,实现信息的录入功能,在已有信息的基础上添加新的记录,删除、修改、查询指定遍号人的记录,进行排序,达到题目要求。
八、结论、体会及建议
经过几个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的不足之处,对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
在实践中,有些问题遇到了之后想了好久,但也没有想出解决问题的方法,感觉很着急,这时应该请教老师或同学,看看他们是怎么来分析这个问题的,了解之后自己总结一下,重新构思问题,想出解决的办法,最后落实行动,检验一下自己的想法是否正确。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践。
以上就是我的一些感受。
最后感谢帮助过我的同学和老师,没有大家的帮助,我就不会取得今天的成绩。
附:
参考文献资料
苏小红等.C语言大学实用教程.电子工业出版社.2004
苏小红等.C语言大学实用教程习题与实验指导.电子工业出版社.2004
互联网上查阅的相关资料