C语言程序设计实训报告之通讯录管理.docx
《C语言程序设计实训报告之通讯录管理.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实训报告之通讯录管理.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言程序设计实训报告之通讯录管理.docx](https://file1.bdocx.com/fileroot1/2022-11/24/001f9d94-8b3d-4c02-bcc1-8d0e8ffe4323/001f9d94-8b3d-4c02-bcc1-8d0e8ffe43231.gif)
C语言程序设计实训报告之通讯录管理
青岛大学软件技术学院
C语言程序设计实训报告
姓名任XX
专业软件技术
班级软件技术班
指导教师白伟青
2011年7月14日
1问题定义与描述
1.1问题定义
通讯录管理系统
1.2问题描述
✧该程序应该能够提供添加、删除和修改通讯录信息的功能;
✧基本信息包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;
✧能够提供安不同方式查询的功能;如按姓名、年龄或电话等查询;
✧能将通讯录保存在文件中;
✧能够输出通讯录信息;
✧并且界面友好,易于操作。
2总体设计
2.1主要功能模块
添加:
添加通讯录记录。
显示:
显示通讯录记录。
删除:
删除通讯录记录。
查询:
查询通讯录记录。
修改:
修改通讯录记录。
保存:
将信息保存到文件。
2.2数据类型定义
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charage[8];/*年龄*/
charadds[20];/*住址*/
}Person;
2.3函数定义
intmenu_select()
intInput(Personper[],intn)
voidDisplay(Personper[],intn)
intDelete_a_record(Personper[],intn)
voidQuery_a_record(Personper[],intn)
voidChange(Personper[],intn)
voidWritetoText(Personper[],intn)
3详细设计
3.1每个模块的功能
✧添加:
可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
✧显示:
可以以表格形式输出所有通讯录里的记录
✧删除:
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
✧查询:
可以选择用姓名、电话、地址三种方式查询
✧修改:
输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
✧保存:
输入文件名(带后缀名,如.txt)后,即可将通讯录信息保存到文件
3.2流程图
添加模块:
可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加,如图3.1。
N
Y
图3.1添加通讯录记录
显示模块:
输出所有通讯录里的记录,如图3.2。
图3.2显示通讯录记录
删除模快:
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容,如图3.3。
图3.3删除通讯录记录
查询模块:
可以选择用姓名、电话、地址三种方式查询,如图3.5。
图3.4查询通讯录记录(以姓名查询方式为例)
修改模块:
输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改,如图3.5。
图3.5修改通讯录记录
保存模块:
,输入文件名(带后缀名)后,即可将通讯录信息保存到文件。
如图3.7
图3.7保存通讯记录
4程序测试
4.1测试主菜单界面
主界面如图4.1
图4.1主界面
4.2测试添加界面
进入添加界面,如图4.2。
图4.2添加界面
4.3测试显示界面
进入显示界面,如图4.3。
图4.3显示界面
4.4测试删除界面
进入删除界面,如图4.4。
图4.4删除界面
4.5测试查询界面
进入查询界面,如图4.5。
图4.5查询界面
4.6测试修改界面
进入修改界面,如图4.6。
图4.6修改界面
4.7测试保存界面
进入保存界面,如图4.7。
图4.7保存界面
5心得体会
这次的C语言程序实设计实训是对我们进入大学以来学习C语言程序设计成果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心。
本次C语言的实训让我对C语言的学习又有了更深入的了解,也让我更深刻地领悟“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实训让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实训中遇到了很多以前没有遇到过的问题。
但在老师同学的帮助下,我顺利的结束了本次实习。
并且,通过一种题材两中方式的学习,我掌握了更多的知识。
书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C语言程序。
此次编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在老师同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。
已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。
最后,要感谢学校为我们提供这次实训机会,也要感谢老师的帮助与支持。
6参考文献
[1]刘振安,刘燕君.《C程序设计课程设计》[M].北京:
机械工业出版社,2004年9月
[2]谭浩强.《C程序设计》(第三版).清华大学出版社,2005年7月
[3]严蔚敏,吴伟民.《数据结构》(C语言版).清华大学出版社,1997年4月
[4]张岳新.《VisualC++程序设计》.苏州大学出版社,2007年12月
[5]徐宝文,《TheCProgrammingLanguage》.机械工业出版社,2004年1月
[6]黄明,梁旭,周绍斌.《VisualC++信息系统设计与开发实例》.机械工业出版社,2005年3月
[7]ALKELLEY等著,麻志毅译.《C语言解析教程》.北京:
机械工业出版社,2002年
[8]李志球,《实用C语言程序设计教程》.北京:
电子工业出版社,1999年
[9]王立柱,《C/C++与数据结构》.北京:
清华大学出版社,2002年
[10]李大友,《C语言程序设计》.清华大学出版社,1999年
7附录
#include
#include
#include
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charage[8];/*年龄*/
charadds[20];/*住址*/
}Person;
Personpe[80];
intmenu_select()
{
charc;
do{
system("cls");
printf("\t***************************************************************\n");
printf("欢迎进入通讯录管理系统\n");
printf("\t***************************************************************\n");
printf("添加记录:
1\n"
"显示记录:
2\n"
"删除记录:
3\n"
"查询记录:
4\n"
"修改记录:
5\n"
"保存记录:
6\n"
"退出:
0\n");
printf("\t***************************************************************\n");
printf("\t\t请选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
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++;
}
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("\t***************************************************************\n");
printf("编号姓名年龄电话号码通讯地址电子邮箱\n");
printf("\t***************************************************************\n");
for(i=1;i{
printf("\t%-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("\t***************************************************************\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");
printf("\t*****************\n");
printf("\t姓名:
1\n");
printf("\t电话:
2\n");
printf("\t地址:
3\n");
printf("\t返回:
4\n");
printf("\t*****************\n");
printf("\t请选择:
");
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;
FILE*fp;/*定义文件指针*/
charfilename[20];/*定义文件名*/
printf("\t保存到文件\n");/*输入文件名*/
printf("\t请输入所保存的文件名:
");
scanf("\t%s",filename);
if((fp=fopen(filename,"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");
}
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");
break;
case0:
printf("\n\t\t谢谢使用,再见!
\n");/*结束程序*/
printf("\n\t\t");
system("pause");
exit(0);
}
}
}