通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
![通讯录管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/19/2d195222-ff4e-4d0d-8a74-eed5c6506596/2d195222-ff4e-4d0d-8a74-eed5c65065961.gif)
通讯录管理系统
湖南工学院
课程设计报告
课程设计题目:
通讯录管理系统
学生姓名:
蔡俊鹏
班级:
软件0901
专业:
软件技术
指导教师:
戴成秋
2010年1月1日
目录
一、设计需求说明··············3
二、概要设计··············4
三、程序源代码············5
四、运行结果及截图···············12
五、心得体会·············14
六、附录················14
一、设计需求说明
1、设计题目及要求:
建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;
能够提供添加、删除和修改通讯录信息的功能;
能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;
将通讯录保存在文件中;
能够按表格方式输出通讯录信息。
2、系统功能需求分析:
主要包含一下多种功能:
添加:
添加通讯录记录
显示:
显示通讯录记录
删除:
删除通讯录记录
查询:
查询通讯录记录
修改:
修改通讯录记录
保存:
将信息保存到文件
二、概要设计
系统功能模块:
添加:
可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
显示:
可以以表格形式输出所有通讯录里的记录
删除:
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
查询:
可以选择用姓名、电话、地址三种方式查询
修改:
输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
保存:
输入文件名(带后缀名)后,即可将通讯录信息保存到文件
三、源程序代码
#include
#include
#include
FILE*fp;
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charage[8];/*年龄*/
charadds[20];/*住址*/
}Person;
voidreadtext()
{
system("cls");
charcInput;
FILE*pReadFile=fopen("C:
\\通讯录.txt","r");//打开文件
if(pReadFile==NULL)
printf("文件不存在,打开失败");
while((cInput=fgetc(pReadFile))!
=EOF)//从文件读入一个字符,如果到文件尾部,则返回EOF(-1)
printf("%c",cInput);
fclose(pReadFile);//关闭文件
}
Personpe[80];
intmenu_select()
{
inti;
charc;
do{
//system("cls");
printf("\t\t*****通讯录*****\n");
printf("\t\t\n");
printf("\t\t1.添加记录\n");
printf("\t\t2.显示记录\n");
printf("\t\t3.删除记录\n");
printf("\t\t4.查询记录\n");
printf("\t\t5.修改记录\n");
printf("\t\t6.保存记录\n");
printf("\t\t7.查看保存的通讯录\n");
printf("\t\t0.退出程序\n");
printf("\t\t请您选择(0-7):
");
scanf("%d",&i);
//c=getchar();
//}while(c<'0'||c>'6');
//return(c-'0');
}while(i<0||i>7);
return(i);
}
intInput(Personper[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%d",&per[n+i].score);
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t电话号码:
");
scanf("\t%s",per[n+i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[n+i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[n+i].email);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
system("cls");
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("编号姓名年龄电话号码通讯地址电子邮箱\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
intDelete_a_record(Personper[],intn)
{
chars[20];
inti=0,j;
printf("\t请输入想删除记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return(n);
}
for(j=i;j{
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].age,per[j+1].age);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].email,per[j+1].email);
per[j].score=per[j+1].score;
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
voidQuery_a_record(Personper[],intn)
{
intm;
printf("\t\n请选择查询方式:
\n");
printf("\t\n");
printf("\t1姓名\n");
printf("\t2电话\n");
printf("\t3地址\n");
printf("\t4返回│\n");
printf("\t\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
if(m==1)
{
chars[20];
inti=0;
printf("\t请输入想查询的姓名:
");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(m==2)
{
chars[20];
inti=0;
printf("\t请输入想查询的电话:
");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(m==3)
{
chars[20];
inti=0;
printf("\t请输入想查询的地址:
");
scanf("\t%s",s);
while(strcmp(per[i].adds,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t电子邮箱:
%s\n",per[i].email);
};
}
voidChange(Personper[],intn)
{
chars[20];
inti=0;
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t编号:
");
scanf("\t%d",&per[i].score);
printf("\t姓名:
");
scanf("\t%s",per[i].name);
printf("\t年龄:
");
scanf("\t%s",per[i].age);
printf("\t电话号码:
");
scanf("\t%s",per[i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[i].email);
printf("\t修改成功!
");
}
voidWritetoText(Personper[],intn)
{
inti=0;
if((fp=fopen("C:
\\通讯录.txt","w"))==NULL)
{
printf("\t无法打开文件\n");
system("pause");
return;
}
fprintf(fp,"******************************************通讯录******************************************\n");
fprintf(fp,"编号姓名年龄电话号码通讯地址电子邮箱\n");
fprintf(fp,"------------------------------------------------------------------------------------------\n");
while(i{
fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email);
i++;
}
fprintf(fp,"------------------------------------------------------------------------------------------\n");
fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
fclose(fp);/*关闭文件*/
printf("保存成功!
\n");
printf("文件保存在C盘目录下“通讯录.TXT”");
}
voidmain()/*主函数*/
{
intn=0;
for(;;)
{
switch(menu_select())
{
case1:
printf("\n\t添加记录到通讯录\n");/*添加记录*/
n=Input(pe,n);
break;
case2:
printf("\n\t\t\t通讯录记录表\n");/*显示记录*/
Display(pe,n);
break;
case3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);/*删除记录*/
printf("\t");
system("pause");
break;
case4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(pe,n);/*查找记录*/
printf("\t");
system("pause");
break;
case5:
printf("\n\t修改通讯录中的记录\n");
Change(pe,n);/*修改数据*/
printf("\t");
system("pause");
break;
case6:
printf("\n\t保存功能\n");
WritetoText(pe,n);/*保存数据*/
printf("\t");
system("pause");
system("cls");
break;
case0:
printf("\n\t\t谢谢使用,再见!
\n");/*结束程序*/
printf("\n\t\t");
system("pause");
exit(0);
case7:
system("cls");
readtext();
break;
}
}
}
四、运行结果及截图
1.显示主菜单界面
2.添加界面
3.显示界面
4.删除界面
5.查询界面
6.修改界面
修改后,通讯记录的显示记录:
7.保存界面
8.查看保存的通讯录
五、心得体会
写通讯录对于我来说是个巨大的挑战充分把所学的东西和实际生活结合起来。
运用了结构体数组特别是用了C语言的文件,这点尤为重要,因为上个学期的C语言老师任老师并没有讲“文件”这个章节,我自己搜资料试着把文件写出来所谓的数据库就是在文件的基础上发展出来的但是我学的不好我的文件系统有缺陷,只能添加和读取,不能够更新因为每次启动程序变量会置零,其实我可以用一个文件把下标记住,每次都调用它但是我觉得太麻烦而且我也没有什么时间我以后会继续努力解决这个问题的另外写通讯录对自己逻辑上的编排起到了重要的影响对我的后讯学习很有帮助!
六、参考文献
电子工业出版社朱站立版《《数据结构》》
清华大学出版社谭浩强版《《C程序设计》》