通讯录管理设计.docx
- 文档编号:30168138
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:27
- 大小:358.92KB
通讯录管理设计.docx
《通讯录管理设计.docx》由会员分享,可在线阅读,更多相关《通讯录管理设计.docx(27页珍藏版)》请在冰豆网上搜索。
通讯录管理设计
湖南文理学院课程设计报告
课程名称:
通讯录管理工作
系部:
电气与信息工程学院
专业班级:
学号:
学生姓名:
指导教师:
完成时间:
2009-10-13
报告成绩:
评阅意见:
评阅教师日期
通讯录管理程序设计
一、设计题目、内容及要求
题目:
通讯录管理程序设计
内容:
本题目适合于个人通讯录的管理。
要求通讯录中包含编号、姓名、单位、通信地址、邮箱和联系电话等基本信息,程序具有数据录入、删除、修改、浏览、查找、排序以及数据保存等功能。
要求:
程序结构合理、算法准确、语法正确,并生成可执行文件。
二设计目的:
本次的课程设计目的,主要是设计一个通讯录,包含编号、姓名、单位、通信地址、邮箱和联系电话等基本信息,应该具有以下功能1.录入信息,将录入的信息导入链表
2.删除,将指定的信息(按姓名)删除并保存.
3.修改,将指定的信息(按姓名)修改并保存.
4.浏览,将入的全部信息显示出来.
5.查找,按姓名查找指定的信息.
6.保存,保存所录入,修改,删除,排序的信息.
三所用仪器设备:
电脑,编程软件
四具体设计
1程序设计过程
程序设计一般由两部分组成:
算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。
在通讯录管理程序中,由于预计记录数相对于一个单位的学生人数或职工人数来说不会太大,除了能够增加、保存外,更多的情况是查询,所以用静态数组保存数据,实现查询。
首先,定义一下各个标准库函数,建立一个结构体数组,定义各个功能所需的函数等。
然后设置主函数,程序采用模块化设计,主函数程序的入口,各模块独立,可分块调试,均由主函数控制调用。
控制功能的实现通过循环执行一个开关语句,该语句的条件值是通过调用主菜单得到的返回值(head),根据该值,调用相应得各功能函数。
分别编写showmenu()菜单,Appenditem()添加条目,print输出条目,Finditem1()查找条目(按姓名),Correct()修改信息,Removeitem()删除信息,Saveandfree()保存到文件等函数。
系统包括的功能模块,模块功能描述,各模块间的层次结构(即相互调用关系)以及模块之间的信息交换问题。
最终成为一个整体。
2实现的功能:
(1).本程序是一个简单的通讯管理系统。
(2).程序具有数据录入、删除、修改、浏览、查找、排序以及数据保存等功能。
:
(3).创建通讯录包括编号、姓名、单位、通信地址、邮箱和联系电话等基本信息,。
3流程图
五详细设计
1.定义标准库函数,建立结构体数组。
包括编号、姓名、单位、通信地址、邮箱和联系电话等基本信息。
如
#include
#include
#include
structTelephone
{
charnumber[200];
charname[20];/*姓名*/
charfia[20];
charaddrass[20];/*地址*/
charmail[20];/*邮箱*/
chartelephone[20];/*电话号码*/
structTelephone*next;
}student[50];
typedefstructTelephoneTEL;
TEL*head=NULL;
2.定义实现数据录入、删除、修改、浏览、查找、排序以及数据保存等功能所需要的函数,
voidshowmenu();/*菜单*/
voidAppenditem();/*添加条目*/
voidprint();/*输出条目*/
voidFinditem1();/*查找条目(按姓名)*/
voidCorrect();/*修改条目*/
voidRemoveitem();/*删除信息*/
voidSaveandfree();/*保存到文件*/
voidOpen();/*打开文件*/
3.分别编制各个功能所需的的函数,
(1)首先编制菜单,设置一个Open()函数,打开文件。
showmenu()菜单函数主要运用一个开关语句就能实现,菜单有7个选项,随便选择一个选项就能直接进入所要进的函数,如程序
charch;
Open();/*打开文件*/
while
(1)
{
showmenu();/*显示菜单*/
scanf("%c",&ch);
switch(ch)
{
case'1':
Appenditem();/*添加条目*/
break;
case'2':
print();/*输出条目*/
break;
case'3':
Finditem1();/*查找条目1.按姓名*/
break;
case'4':
Removeitem();/*删除信息*/
print();/*输出删除后的结果*/
break;
case'5':
Correct();/*修改信息*/
break;
case'0':
Saveandfree();/*保存并释放内存*/
exit(0);/*退出*/
break;
default:
printf("选择错误!
");
break;
}
}
}
然后编制输出函数,使其输出菜单选项。
(2)编制Appenditem()添加条目函数。
首先建立2个结构体指针*p1,*p2.并且利用p1=(TEL*)malloc(sizeof(TEL))申请结点,然后输入一系列信息,如编号、姓名、单位、通信、地址、邮箱、联系、电话等信息。
最后申请空间将其保存。
(3)编制print()输出函数,此函数主要是通过结构体指针实现的,将输入的数据一次通过printf将其显示出来。
(4)编制Finditem1()查找函数。
建立结构体指针TEL*p;并且定义一个数组charfindname[20];利用比较函数strcmp(),比较所要查找的节点中的姓名。
如果输入的姓名不存在,则只输出基本行,即编号、姓名、单位、通信、地址、邮箱、联系、电话。
如果存在则输出信息。
如
for(p=head->next;p!
=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
printf("%s\t%s\%s\t%s\t%s\t%s\n",p->number,p->name,p->fia,p->addrass,p->mail,p->telephone);
}
(5)Correct()函数旨在更改通讯录中的信息。
运用这个函数时先按姓名查找要更改的信息,利用比较函数strcmp(),比较所要查找的节点中的姓名。
找到之后再重新输入编号、姓名、单位、通信、地址、邮箱、联系、电话,并且覆盖原来的内容。
(6)Removeitem()函数用来删除信息,先按姓名查找要删除的信息。
利用比较函数strcmp(),比较所要查找的节点中的姓名。
找到之后释放姓名所在的结点。
如果不存在则输出:
“没有要删除的对象”。
此函数分3种情况,删除头结点,删除中间或尾结点。
所需算法不一样。
算法如下
if(strcmp(p->name,findname)==0)
{if(p==head)
head=p->next;/*删除头结点*/
else
pr->next=p->next;/*删除中间或尾结点*/
free(p);
}else
printf("没有要删除的对象\n");
(7)Saveandfree()函数用来保存链表信息到文件并释放内存空间,主要运用文件函数实现。
先将文件以“wb+”方式打开,再利用循环和fwrite()函数将内容写入文件中,写完之后关闭文件。
因为信息已保存,所以还要释放链表空间。
(8)Open()函数用来打开已存在的文件,它的功能是读取以存储的文件内容,在利用print()函数显示出来
程序代码
#include
#include
#include
structTelephone
{
charnumber[200];
charname[20];
charfia[20];
charaddrass[20];
charmail[20];
chartelephone[20];
structTelephone*next;
}student[50];
typedefstructTelephoneTEL;
TEL*head=NULL;
voidshowmenu();/*菜单*/
voidAppenditem();/*添加条目*/
voidprint();/*输出条目*/
voidFinditem1();/*查找条目(按姓名)*/
voidCorrect();/*修改条目*/
voidRemoveitem();/*删除信息*/
voidSaveandfree();/*保存到文件*/
voidOpen();/*打开文件*/
main()
{
charch;
Open();/*打开文件*/
while
(1)
{
showmenu();/*显示菜单*/
scanf("%c",&ch);
switch(ch)
{
case'1':
Appenditem();/*添加条目*/
break;
case'2':
print();/*输出条目*/
break;
case'3':
Finditem1();/*查找条目1.按姓名*/
break;
case'4':
Removeitem();/*删除信息*/
print();/*输出删除后的结果*/
break;
case'5':
Correct();/*修改信息*/
break;
case'0':
Saveandfree();/*保存并释放内存*/
exit(0);/*退出*/
break;
default:
printf("选择错误!
");
break;
}
}
}
/*菜单*/
voidshowmenu()
{
printf("\n*********************通讯录**********************\n");
printf("*\t1.录入信息*\n");
printf("*\t2.输出信息*\n");
printf("*\t3.按姓名查询*\n");
printf("*\t4.删除信息*\n");
printf("*\t5.修改信息*\n");
printf("*\t0.保存并退出!
*\n");
printf("*************************************************\n");
printf("\t请选择:
\n");
}
/*添加条目*/
voidAppenditem()
{
TEL*p1=NULL,*p2=NULL;
p1=(TEL*)malloc(sizeof(TEL));/*申请结点*/
printf("输入编号:
\n");
scanf("%s",p1->number);
printf("输入姓名:
\n");/*添加信息*/
scanf("%s",p1->name);
printf("输入单位:
\n");/*添加单位*/
scanf("%s",p1->fia);
printf("输入通讯地址:
\n");/*添加地址*/
scanf("%s",p1->addrass);
printf("输入邮箱:
\n");/*添加邮箱*/
scanf("%s",p1->mail);
printf("输入联系电话:
\n");/*添加电话号码*/
scanf("%s",p1->telephone);
p1->next=NULL;/*保存到链表*/
if(head==NULL)
{
head=(TEL*)malloc(sizeof(TEL));/*申请空间*/
head->next=p1;
}
else
{
for(p2=head;p2->next!
=NULL;p2=p2->next);/*找到结点尾*/
p2->next=p1;
}
printf("此信息已添加!
");
}
/*输出学生信息*/
voidprint()
{
TEL*p=NULL;
if(head==NULL)
{
printf("此通讯录中无记录,请输入记录后在使用本功能!
\n");
return;
}
printf("*******************通讯录*********************\n");/*输出信息*/
printf("编号\t姓名\t单位\t通信地址\t邮箱\t联系电话\n");
for(p=head->next;p!
=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->fia,p->addrass,p->mail,p->telephone);
}
/*查找信息1.按姓名*/
voidFinditem1()
{
TEL*p;
charfindname[20];
printf("请输入要查找的姓名:
\n");
scanf("%s",findname);
printf("********************通讯录*********************\n");
printf("编号\t姓名\t单位\t通信地址\t邮箱\t联系电话\n");
for(p=head->next;p!
=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->fia,p->addrass,p->mail,p->telephone);
}
}
/*修改信息*/
voidCorrect()
{
TEL*p1(TEL*head);
{
structTelephone*p1;
charname[20];
printf("输入要修改的人名:
\n");
scanf("%s",name);
p1=head;
intflag=0;
while(p1!
=NULL)
{
if(strcmp(p1->name,name)==0)
{
printf("输入新编号:
\n");
scanf("%s",p1->number);
printf("输入新姓名:
\n");/*添加新信息*/
scanf("%s",p1->name);
printf("输入新单位:
\n");/*添加新单位*/
scanf("%s",p1->fia);
printf("输入新通讯地址:
\n");/*添加通讯地址*/
scanf("%s",p1->addrass);
printf("输入邮箱:
\n");/*添加邮箱*/
scanf("%s",p1->mail);
printf("输入新联系电话:
\n");/*添加电话号码*/
scanf("%s",p1->telephone);
flag=1;
}
p1=p1->next;
}
}
printf("修改完成");
}
/*删除信息*/
voidRemoveitem()
{
charfindname[20];/*先查找后删除*/
TEL*p=head,*pr=head;
printf("请输入要删除的姓名:
\n");
scanf("%s",findname);
if(head==NULL)
{
printf("无此结点!
\n");
return;
}
while((strcmp(p->name,findname)!
=0)&&p->next!
=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(p->name,findname)==0)
{if(p==head)
head=p->next;/*删除头结点*/
else
pr->next=p->next;/*删除中间或尾结点*/
free(p);
}else
printf("没有要删除的对象\n");
printf("已删除");
}
/*保存链表信息到文件并释放内存空间*/
voidSaveandfree()
{
TEL*p=NULL;
FILE*fp;
char*Book="books.txt";
if(head==NULL)
{
printf("\n记录为空!
\n");
return;
}
else
p=head->next;
if((fp=fopen(Book,"wb+"))==NULL)
{
printf("\n打不开文件!
\n");
return;
}
while(p!
=NULL)/*保存信息*/
{
fwrite(p,sizeof(TEL),1,fp);
p=p->next;
}
printf("保存完毕!
");
fclose(fp);
/*释放链表空间*/
for(;head->next!
=NULL;)
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
/*文件信息输出到链表*/
voidOpen()
{
FILE*fp;
TEL*p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL)
{
printf("\n*******************通讯录******************\n");
return;
}
head=(TEL*)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(!
feof(fp))/*循环读取*/
{
p1=(TEL*)malloc(sizeof(TEL));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp);/*关闭文件*/
}
4调试与测试
1对程序进行初步检查,初步排除一些常识性的错误,比如说:
(1)忘记加分号:
(2)其他语法性错误,如部分标示符忘记声明等。
2经过编译(修改错误)、连接、执行,最终得到了零错误的正确程序。
3调试结果截图
六设计心得:
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程
通过此次C语言程序设计实践,我实在是获益不浅!
C语言是上个学期开的课程,所以这个学期并没怎么看过,被通知要进行课程设计。
当时有点懵,感觉学的东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为我们了。
当要开始设计的时候,还真不知从哪下手!
结果,第一次的上机,我傻坐着不知道该做什么,后来就写了几个预处理命令。
回去以后,我想,这样不行,这样下去还得了!
我就重新复习了一遍我们上个学期学习的内容,发觉自已有许多都遗忘了!
特别是有文件的操作,几乎是一遍空白!
温习过后,再找资料。
开始做题!
在课程设计的这几天里我们可以学到很多很多的的东西,课程设计不仅可以使我们巩固了以前所学过的知识,而且让我们学到了很多在书本上所没有学到过的知识。
通过这仅仅的几天课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,但是我们没有放弃,我们借助了老师、同学、网络的力量终于完成程序,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……所以导致了有的功能不能实现。
虽然这次课程设计很苦,很累,,但是我们确实收获很多,感谢老师,感谢领导给我们这次实战演练的机会,这次程序设计让我们受益匪浅。
通过实践的学习,我认到学好计算机要重视实践操作,通过长期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读和巩固课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
特别是要想作为一名创新型大学生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。
不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程
中我会更加注视实践操作,使自己便好地学好计算机。
七主要参考资料:
1申在明.刘岩C语言程序设计600例人民邮电出版社
2沈大林C语言程序设计案例教程中国铁道出版社
3谭浩强,张基温C语言程序设计教程(第3版)高等教育出版
4吕凤煮C语言基础教程——基础理论与案例清华大学出版社
5黄明、梁旭、万洪莉C语言课程设计电子工业出版社
八附全文详细图解
1open
2showmenu
3appenditem
4print
5finditem
6correct
7removeitem
8saveandfree
9open
1主体
2菜单将入的全部信息显示出来.
3添加信息
4将录入的信息导入链表
5按姓名查找指定的信息
6将指定的信息(按姓名)修改并保存
7将指定的信息(按姓名)删除并保存
8保存所录入,修改,删除,排序的信息.释放链表空间
9循环读取,然后关闭文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)