个人通讯录管理c语言课程设计 2.docx
《个人通讯录管理c语言课程设计 2.docx》由会员分享,可在线阅读,更多相关《个人通讯录管理c语言课程设计 2.docx(23页珍藏版)》请在冰豆网上搜索。
个人通讯录管理c语言课程设计2
安徽工业大学
《C语言课程设计》实习综合报告
课题名称:
个人通讯录管理系统
实习成员:
王刚
学号:
109074372
专业班级:
网络工程103班
指导教师:
郑啸老师
一.问题描述……………………………………………..2
二.各功能流程图与设计思路…………………………..3
2.1显示模块……………………………………….……3
2.2查找模块……………………………………………4..
2.3添加模块…………………………………………..…6
2.4删除模块………………………………………..……8
2.5修改模块…………………………………………..…9
三、文件的读取与保存…………………………………….11
四、程序源代码……………………………………….……12
五、调试与运行结果…………………………………….…18
六、计算机学院课程设计评定意见……………………….24
一.问题描述
设计通讯录包含以下功能:
(1)通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。
(2)输入功能:
可以一次完成若干条信息的输入。
(3)显示功能:
完成全部通讯录信息的显示。
(4)查找功能:
可以按姓名等多种方式查找通讯信息。
(5)增加、删除、修改功能:
完成通讯录信息的多种更新。
二.各功能流程图与设计思路
Menu菜单:
运用switch()进行操作:
case'1':
显示功能,list()函数
说明:
利用for循环,逐个输出已保存的内容
代码如下:
//*****************显示通讯录中的内容*************
voidlist()
{printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
for(i=0;i{if(rec[i].name[0])
{printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
}
}printf("\t\t\t----------------END--------------\n");
}
case'2':
查找功能,search()函数
说明:
先用switch让操作者选择是按姓名查找还是按编号查找,然后再按操作者的输入,逐个判断是否有操作者要查的联系人信息,若有则输出此人信息,若没有则输出“通讯录中没有您要查找的联系人”
代码如下:
//*****************查找联系人的信息********************
voidsearch()
{charxm[10];
charch;
intd;
printf("→1.按姓名查找\n");
printf("→2.按编号查找\n");
printf("请选择...\n");
ch=getchar();
getchar();
switch(ch)
{case'1':
printf("输入查找的姓名\n");
gets(xm);
for(i=0;i{if(strcmp(xm,rec[i].name)==0)
{printf("\t\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆☆\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
break;}
}
if(i==m)
printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");
break;
case'2':
printf("输入查找的编号\n");
scanf("%d",&d);
for(i=0;i{if(d==rec[i].num)
{printf("\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
break;
}
}
if(i==m)
printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");
break;
default:
printf("输入错误!
!
");
}
getchar();
}
case'3':
增加功能,app()函数
说明:
按照屏幕的提示,依次输入要添加联系人的各项信息,并保存到结构体当中,输入完成后,提示是否继续添加,若是,则进入循环,若否,则结束。
代码如下:
//*******************添加联系人*******************
voidapp()
{charan;
puts("当前通讯录中的内容\n");
list();
do
{rec[m].num=m+1;
printf("请按照提示输入新添加记录的各项信息\n");
printf("姓名:
");
gets(rec[m].name);
printf("\n电话:
");
gets(rec[m].tel);
printf("\n手机:
");
gets(rec[m].celtel);
printf("\n工作单位:
");
gets(rec[m].dw);
printf("\nEMAIL:
");
gets(rec[m].email);
printf("\nQQ:
");
gets(rec[m].qq);
puts("\n这是新添加联系人的信息!
\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[m].num,rec[m].name,
rec[m].tel,rec[m].celtel,rec[m].dw,rec[m].email,rec[m].qq);
m++;
puts("\t\t\t☆☆☆☆☆新纪录输入完成!
☆☆☆☆☆\n");
puts("☆继续添加吗?
(y/n)");
an=getchar();
getchar();
}while(an=='y');
}
case'4':
删除功能,dele()函数;
说明:
输入要删除的编号,判断是否存在,若不存在就要重新输入,若存在,则利用循环进行删除操作,从要删除的编号开始,逐个由后一项往前一项覆盖。
代码如下:
//*****************删除联系人的记录********************
voiddele()
{inta;
intn=0;
list();
do
{n++;
if(n>1)
{printf("没有此记录,请重新输入...\n");}
printf("删除几号记录?
\n");
scanf("%d",&a);
}while(a>m&&a>0||a<0);
if(a!
=m+1)
{for(i=a;i{rec[i-1]=rec[i];
rec[i-1].num=i;
}
m--;
list();
printf("\t\t\t☆☆☆☆☆完成删除!
☆☆☆☆☆\n");
}
getchar();
}
case'5':
修改功能,correct()函数;
说明:
输入修改的编号,判断是否存在,若存在则输出此人初始信息,再按提示输入修改后的新信息,若不存在,则结束操作。
代码如下:
//*******************修改联系人的信息*****************
voidcorrect()
{charxm[10];
boolk=1;
list();
printf("输入要修改联系人的姓名:
");
gets(xm);
for(i=0;i{if(strcmp(xm,rec[i].name)==0)
{k=0;
printf("\n这是您要修改联系人的初始信息\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
printf("请输入修改后的电话号码:
");
gets(rec[i].tel);
printf("\n请输入修改后的手机:
");
gets(rec[i].celtel);
printf("\n请输入修改后的工作单位:
");
gets(rec[i].dw);
printf("\n请输入修改后的EMAIL:
");
gets(rec[i].email);
printf("\n请输入修改后的QQ:
");
gets(rec[i].qq);
list();
printf("\t\t\t☆☆☆☆☆修改完成!
☆☆☆☆☆\n");
break;}
}
if(k)
printf("输入有误,通讯录中没有此联系人信息\n");
}
三.文件的读取与保存
读取:
//***************从文件读记录到通讯录中*****************
voidload()
{FILE*fp;
if((fp=fopen("tongxunlu.txt","rb"))==NULL)
{printf("Can'topenfile\n");
exit(0);}
for(i=0;i{if(fread(&rec[i],sizeof(structrecord),1,fp)!
=1)
{if(feof(fp))break;
printf("Filereaderror!
\n");}
rec[i].num=i+1;
m++;
}
list();
printf("\t\t\t☆☆☆☆☆读取成功!
☆☆☆☆☆\n");
fclose(fp);
}
保存:
//******************保存通讯录内容到文件中*************
voidsave()
{FILE*fp;
if((fp=fopen("tongxunlu.txt","wb"))==NULL)
{printf("Can'topenfile");
exit(0);}
list();
for(i=0;iif(fwrite(&rec[i],sizeof(structrecord),1,fp)!
=1)
printf("Filewreteerror!
\n");
fclose(fp);
printf("\t\t\t☆☆☆☆☆保存成功!
☆☆☆☆☆\n");
}
四.程序源代码
#include
#include
#include
#defineSIZE100
inti,m=0;//m为当前通讯录中的记录数
charmenu();//选单
voidlist();//显示
voidsearch();//查找
voidapp();//增加
voiddele();//删除
voidcorrect();//修改
voidsave();//保存
voidload();//读入
structrecord//结构体包含的联系人信息
{intnum;//在通讯录中的编号
charname[10];//联系人姓名
chartel[12];//联系人电话号码
charceltel[12];//联系人手机号码
chardw[20];//联系人工作单位
charemail[20];//联系人邮箱
charqq[12];//联系人QQ
}rec[SIZE];
voidmain()
{charchoice;
charan;
while
(1)
{choice=menu();
switch(choice)
{case'1':
printf("显示通讯录中的内容\n");
list();break;
case'2':
printf("查找联系人\n");
search();break;
case'3':
printf("增加联系人记录\n");
app();break;
case'4':
printf("删除记录\n");
dele();break;
case'5':
printf("修改联系人信息\n");
correct();break;
case'6':
printf("保存通讯录到TXT文件\n");
save();break;
case'7':
printf("从TXT文件中读取记录\n");
load();break;
case'8':
printf("即将退出通讯录管理系统...\n");
printf("是否保存刚才进行的操作y/n?
\n");
an=getchar();
if(an=='y')
{save();}
printf("(按任意键退出)");
break;
default:
printf("输入错误!
!
");
}
if(choice=='8')break;
printf("\n按任意键返回....\n");getchar();
}
}
//*********************菜单**********************
charmenu()
{charc;
printf("------------☆欢迎使用☆------------\n\n");
printf("*************简易通讯录*************\n");
printf("☆1.显示通讯录\n");
printf("☆2.查找联系人\n");
printf("☆3.增加联系人\n");
printf("☆4.删除联系人\n");
printf("☆5.修改通讯录\n");
printf("☆6.保存到文件\n");
printf("☆7.从文件读取\n");
printf("☆8.退出此系统\n");
printf("************************************\n");
printf("\n请选择………\n\n");
c=getchar();
getchar();
returnc;
}
//*****************显示通讯录中的内容*************
voidlist()
{printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
for(i=0;i{if(rec[i].name[0])
{printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
}
}printf("\t\t\t----------------END--------------\n");
}
//*******************添加联系人*******************
voidapp()
{charan;
puts("当前通讯录中的内容\n");
list();
do
{rec[m].num=m+1;
printf("请按照提示输入新添加记录的各项信息\n");
printf("姓名:
");
gets(rec[m].name);
printf("\n电话:
");
gets(rec[m].tel);
printf("\n手机:
");
gets(rec[m].celtel);
printf("\n工作单位:
");
gets(rec[m].dw);
printf("\nEMAIL:
");
gets(rec[m].email);
printf("\nQQ:
");
gets(rec[m].qq);
puts("\n这是新添加联系人的信息!
\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[m].num,rec[m].name,
rec[m].tel,rec[m].celtel,rec[m].dw,rec[m].email,rec[m].qq);
m++;
puts("\t\t\t☆☆☆☆☆新纪录输入完成!
☆☆☆☆☆\n");
puts("☆继续添加吗?
(y/n)");
an=getchar();
getchar();
}while(an=='y');
}
//*****************查找联系人的信息********************
voidsearch()
{charxm[10];
charch;
intd;
printf("→1.按姓名查找\n");
printf("→2.按编号查找\n");
printf("请选择...\n");
ch=getchar();
getchar();
switch(ch)
{case'1':
printf("输入查找的姓名\n");
gets(xm);
for(i=0;i{if(strcmp(xm,rec[i].name)==0)
{printf("\t\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆☆\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
break;}
}
if(i==m)
printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");
break;
case'2':
printf("输入查找的编号\n");
scanf("%d",&d);
for(i=0;i{if(d==rec[i].num)
{printf("\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
break;
}
}
if(i==m)
printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");
break;
default:
printf("输入错误!
!
");
}
getchar();
}
//*****************删除联系人的记录********************
voiddele()
{inta;
intn=0;
list();
do
{n++;
if(n>1)
{printf("没有此记录,请重新输入...\n");}
printf("删除几号记录?
\n");
scanf("%d",&a);
}while(a>m&&a>0||a<0);
if(a!
=m+1)
{for(i=a;i{rec[i-1]=rec[i];
rec[i-1].num=i;
}
m--;
list();
printf("\t\t\t☆☆☆☆☆完成删除!
☆☆☆☆☆\n");
}
getchar();
}
//*******************修改联系人的信息*****************
voidcorrect()
{charxm[10];
boolk=1;
list();
printf("输入要修改联系人的姓名:
");
gets(xm);
for(i=0;i{if(strcmp(xm,rec[i].name)==0)
{k=0;
printf("\n这是您要修改联系人的初始信息\n\n");
printf("编号姓名电话\t手机\t工作单位\tEMAIL\t\tQQ\n");
printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,
rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
printf("请输入修改后的电话号码:
");
gets(rec[i].tel);
printf("\n请输入修改后的手机:
");
gets(rec[i].celtel);
printf("\n请输入修改后的工作单位:
");
gets(rec[i].dw);
printf("\n请输入修改后的EMAIL:
");
gets(rec[i].email);
printf("\n请输入修改后的QQ:
");
gets(rec[i].qq);
list();
printf("\t\t\t☆☆☆☆☆修改完成!
☆☆☆☆☆\n");
break;}
}
if(k)
printf("输入有误,通讯录中没有此联系人信息\n");
}
//******************保存通讯录内容到文件中*************
voidsave()
{FILE*fp;
if((fp=fopen("tongxunlu.txt","wb"))==NULL)
{printf("Can'topenfile");
exit(0);}
list();
for(i=0;iif(fwrite(&rec[i],sizeof(structrecord),1,fp)!
=1)
printf("Filewreteerror!
\n");
fclo