个人通讯录管理系统课程研究与设计开发报告.docx
《个人通讯录管理系统课程研究与设计开发报告.docx》由会员分享,可在线阅读,更多相关《个人通讯录管理系统课程研究与设计开发报告.docx(14页珍藏版)》请在冰豆网上搜索。
个人通讯录管理系统课程研究与设计开发报告
C语言程序设计
课程设计报告
个人通讯录管理系统设计
专业__网络工程________班级___(3)班___________
学号__3148119322姓名__吴道金_
学号_3148119319_姓名_林东垚___
学号_3148119359_姓名__林家勇__
学号__3149119349__________姓名___上官景铨___________
福建工程学院软件学院
2015年月日
(正文部分)
一、需求分析
建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
功能要求
(1)通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。
(2)输入功能:
可以一次完成若干条信息的输入。
(3)显示功能:
完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示)
(4)查找功能:
可以按姓名等多种方式查找通讯信息
(5)增加、删除、修改功能:
完成通讯录信息的多种更新
二、总体设计
三、详细设计
voidmenu()。
/*菜单*/
voidAdd()。
/*添加记录*/
voidprint()。
/*输出记录*/
voidFind()。
/*查找记录(按姓名)*/
voidDelete()。
/*删除记录*/
voidSaveFree()。
/*保存到文件*/
voidCreat()。
/*打开文件*/
四、程序源代码
#include
#include
#include
structlist
{
charname[20]。
charaddr[20]。
charnum[20]。
charqq[10]。
charphnum[20]。
charemail[30]。
structlist*next。
}。
typedefstructlistLIST。
LIST*head=NULL。
voidmenu()。
/*菜单*/
voidAdd()。
/*添加记录*/
voidprint()。
/*输出记录*/
voidFind()。
/*查找记录(按姓名)*/
voidDelete()。
/*删除记录*/
voidSaveFree()。
/*保存到文件*/
voidCreat()。
/*打开文件*/
voidmain()
{
charc。
Creat()。
/*打开文件*/
while
(1)
{
menu()。
/*显示菜单*/
scanf("%c",&c)。
switch(c)
{
case'1':
Add()。
break。
/*添加记录*/
case'2':
print()。
break。
/*输出条目*/
case'3':
Find()。
break。
/*查找条目1.按姓名*/
case'4':
Delete()。
/*删除信息*/
print()。
break。
/*输出删除后的结果*/
case'0':
SaveFree()。
/*保存并释放内存*/
exit(0)。
/*退出*/
break。
default:
printf("选择错误!
")。
break。
}
}
}
/*菜单*/
voidmenu()
{
printf("\n*****************通讯录系统*********************\n")。
printf("***********\t1.添加记录*******************\n")。
printf("***********\t2.输出记录*******************\n")。
printf("***********\t3.查询记录*****************\n")。
printf("***********\t4.删除记录*******************\n")。
printf("***********\t0.保存并退出!
****************\n")。
printf("************************************************\n")。
printf("\t请选择将要进行的操作:
\n")。
}
/*添加记录*/
voidAdd()
{
LIST*p1=NULL,*p2=NULL。
p1=(LIST*)malloc(sizeof(LIST))。
/*申请结点*/
printf("输入姓名:
\n")。
/*添加信息*/
scanf("%s",p1->name)。
printf("输入地址:
\n")。
scanf("%s",p1->addr)。
printf("输入学号:
\n")。
scanf("%s",p1->num)。
printf("请输入qq号:
\n")。
scanf("%s",p1->qq)。
printf("输入电话:
\n")。
scanf("%s",p1->phnum)。
printf("请输入email:
\n")。
scanf("%s",p1->email)。
p1->next=NULL。
/*保存到链表*/
if(head==NULL)
{
head=(LIST*)malloc(sizeof(LIST))。
/*申请空间*/
head->next=p1。
}
else
{
for(p2=head。
p2->next!
=NULL。
p2=p2->next)。
/*找到结点尾*/
p2->next=p1。
}
printf("此记录已添加!
")。
}
/*输出学生信息*/
voidprint()
{
LIST*p=NULL。
if(head==NULL)
{
printf("这是一个新记录,请添加记录\n")。
return。
}
printf("**************通讯录系统*********************\n")。
/*输出信息*/
printf("姓名\t\t地址\t学号\t\tqq\t\t电话\t\temail\n")。
for(p=head->next。
p!
=NULL。
p=p->next)
printf("%s\t\t%s\t%s\t%s\t%s\t%s\n",p->name,p->addr,p->num,p->qq,p->phnum,p->email)。
}
/*查找信息1.按姓名、2、按学号*/
voidFind()
{
LIST*p。
charname1[20],num1[20]。
inti。
printf("请输入查找方式1、按姓名;2、按学号")。
scanf("%d",&i)。
if(i==1)
{
printf("请输入要查找的姓名:
\n")。
scanf("%s",name1)。
printf("**************通讯录系统*********************\n")。
printf("姓名\t\t地址\t学号\tqq\t电话\t\temail\n")。
for(p=head->next。
p!
=NULL。
p=p->next)
{
if(strcmp(p->name,name1)==0)
printf("%s\t\t%s\t%s\t%s\t%s\t%s\n",p->name,p->addr,p->num,p->qq,p->phnum,p->email)。
}
}
elseif(i==2)
{
printf("请输入要查找人的学号:
\n")。
scanf("%s",num1)。
printf("**************通讯录系统*********************\n")。
printf("姓名\t\t地址\t学号\tqq\t电话\temail\n")。
for(p=head->next。
p!
=NULL。
p=p->next)
{
if(strcmp(p->num,num1)==0)
printf("%s\t\t%s\t%s\t%s\t%s\t%s\n",p->name,p->addr,p->num,p->qq,p->phnum,p->email)。
}
}
else
printf("请选择1和2两哥数字\n")。
}
/*删除信息*/
voidDelete()
{
charname1[20]。
/*先查找后删除*/
LIST*p=head->next,*pr=head->next。
printf("请输入要删除的姓名:
\n")。
scanf("%s",name1)。
if(head->next==NULL)
{
printf("无此节点!
\n")。
return。
}
while((strcmp(p->name,name1)!
=0)&&p->next!
=NULL)
{
pr=p。
p=p->next。
}
if(strcmp(name1,p->name)==0)/*输出删除信息*/
{
printf("%s\t\t%s\t%s\t%s\t%s\t%s\n",p->next->name,p->next->addr,
p->next->num,p->next->qq,p->next->phnum,p->next->email)。
if(p==head->next)
head->next=p->next。
else
pr->next=p->next。
free(p)。
}
printf("此记录已删除!
")。
}
/*保存链表信息到文件并释放内存空间*/
voidSaveFree()
{
LIST*p=NULL。
FILE*fp。
char*Book="list.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(LIST),1,fp)。
p=p->next。
}
printf("保存完毕!
")。
fclose(fp)。
/*****释放链表空间*****/
for(。
head->next!
=NULL。
)
{
p=head->next。
head->next=head->next->next。
free(p)。
}
free(head)。
}
/*文件信息输出到链表*/
voidCreat()
{
FILE*fp。
LIST*p1=NULL,*p2=NULL,*temp=NULL。
if((fp=fopen("addresslist.txt","rb+"))==NULL)
{
printf("\n****************这是一个新的通讯录管理系统******************\n")。
return。
}
head=(LIST*)malloc(sizeof(LIST))。
head->next=NULL。
temp=p2=head。
while(!
feof(fp))/*循环读取*/
{
p1=(LIST*)malloc(sizeof(LIST))。
temp=p2。
p2->next=p1。
p2=p1。
fread(p1,sizeof(LIST),1,fp)。
}
temp->next=NULL。
fclose(fp)。
/*关闭文件*/
}
五、程序运行结果测试
六、结论与心得
通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。
它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。
同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因为我们学习知识就是为了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等
吴道金:
文本排版及构图
林家勇:
程序程序运行测试
林东垚:
程序分析
上官景铨:
程序注释
七、致谢