C语言实验报告.docx
《C语言实验报告.docx》由会员分享,可在线阅读,更多相关《C语言实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
C语言实验报告
C语言集中上机
实习报告
指导教师:
纪良浩
姓名:
梁皓
学号:
2012211516
班级:
0401204
时间:
2013年5月27日
实验题目通讯录
1、实验目的
为综合应用C语言程序设计理论知识、进一步提高自己综合解决问题、协调工作的能力和良好的软件开发习惯,所以设计一个个人通讯录管理系统,拥有对数据的各种操作功能,实现对通讯录的管理,从而巩固C语言程序设计。
二、实验内容
1.通讯录需求分析
2.通讯录总体设计
3.通讯录算法设计
4.通讯录代码编写
5.程序测试
6.实验心得体会
三、实践过程
1.通讯录应实现以下功能:
添加:
添加通讯录记录
显示:
显示通讯录记录
删除:
删除通讯录记录
查询:
查询通讯录记录
修改:
修改通讯录记录
保存:
将信息保存到文件
2.功能实现分析
首先该程序需要一个主菜单设计如下
添加:
可以添加通讯录记录,依次输入姓名、电话号码、通讯地址、邮政编码后,会提示是否继续添加。
显示:
可以以表格形式输出所有通讯录里的记录
删除:
输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
查询:
可以选择用姓名、电话、地址三种方式查询
修改:
输入欲修改的那个人的名字后,再依次输入姓名、电话号码、通讯地址、邮政编码即可完成修改
保存:
输入文件名(带后缀名)后,即可将通讯录信息保存到文件
分别将其设计后大概为:
①添加:
②显示:
YY
N
N
③删除:
④查询(以姓名为例):
当然在代码的实现方面我也遇到了很多困难,毕竟这也是有一定难度的,也别是对于我这种很低端的人来说。
首先遇到的困难是程序该如何设计,第一步真的很难迈出。
做一件事情首先要有完整计划才能事半功倍,当然写一个程序,一个良好的程序设计是必须的。
在这里我去查找了很多资料和C语言教科书。
成功的解决了这个问题。
后来再如何判断是否存在此人这一位问题中遇到了瓶颈,后来经过查资料,同学讨论解决了该问题。
做菜单也遇到了一点困难,最后通过XX知道了解到可以用f(;;)做菜单在内置break等语句实现菜单功能。
⑤修改:
当然在编写代码中业余到了很难
4.程序测试
1.主菜单显示
2.添加功能
选择Y继续程序
选择N结束添加。
3.显示记录
4.查询记录(以姓名查询为例)
5.删除记录
6.修改记录
7.保存记录
8.退出程序
五、实验心得
在这次的C语言上机实验中,我收获颇丰。
不仅巩固了以前学习的C语言的知识同时锻炼了自己的动手操作能力和综合解决问题、协调工作的能力和养成了良好的软件开发习惯。
6、源代码
#include
#include/*standardlibrary标准库头文件*/
#include
typedefstruct
{
charname[10];/*姓名*/
charnum[15];/*号码*/
charpostcode[20];/*邮政编码*/
charadds[30];/*地址*/
}Person;
Personper[80];/*定义结构体*/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");
printf("\t\t通讯录\n");/*\t横向跳到下一制表位置*/
printf("\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\t0.退出程序\n");
printf("\n");
printf("请您选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');/*判断C的大小,如果不是0-6.则循环上一过程*/
return(c-'0');
}
intInput(Personper[],intn)/*输入功能函数*/
{inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
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].postcode);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Personper[],intn)/*显示函数*/
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("姓名电话号码通讯地址邮政编码\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-8s%-13s%-15s%-15s\n",per[i-1].name,per[i-1].num,per[i-1].adds,per[i-1].postcode);
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].name,per[j+1].name);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].postcode,per[j+1].postcode);
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
voidQuery_a_record(Personper[],intn)/*查找函数*/
{
intm;
printf("\t\n请选择查询方式:
\n");
printf("\n");
printf("\t1------姓名\n");
printf("\t2------电话\n");
printf("\t3------地址\n");
printf("\t4------返回\n");
printf("\n");
printf("请选择(1-4):
");
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电话号码:
%s\n",per[i].num);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcode);
}
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此人姓名:
%s\n",per[i].name);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcode);
}
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此人姓名:
%s\n",per[i].name);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t邮政编码:
%s\n",per[i].postcode);
}
}
voidChange(Personper[],intn)/*修改记录功能函数*/
{
chars[20];
inti=0;
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&i{
i++;
}
if(i==n)
{
scanf("\t%s",s);
while(strcmp(per[i].num,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t邮政编码:
%s\n",per[i].postcode);
}
if(n==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此人姓名:
%s\n",per[i].name);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t邮政编码:
%s\n",per[i].postcode);
}
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t姓名:
");
scanf("\t%s",per[i].name);
printf("\t电话号码:
");
scanf("\t%s",per[i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[i].adds);
printf("\t邮政编码:
");
scanf("\t%s",per[i].postcode);
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,"%-8s\t%-13s\t%-15s\t%-15s\n",per[i].name,per[i].num,per[i].adds,per[i].postcode);
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(per,n);
break;
case2:
printf("\n\t\t\t通讯录记录表\n");/*显示记录*/
Display(per,n);
break;
case3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(per,n);/*删除记录*/
printf("\t");
system("pause");
break;
case4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(per,n);/*查找记录*/
printf("\t");
system("pause");
break;
case5:
printf("\n\t修改通讯录中的记录\n");
Change(per,n);/*修改数据*/
printf("\t");
system("pause");
break;
case6:
printf("\n\t保存功能\n");
WritetoText(per,n);/*保存数据*/
printf("\t");
system("pause");
break;
case0:
printf("\n\t\t谢谢使用,再见!
\n");/*结束程序*/
printf("\n\t\t");
system("pause");
exit(0);/*无条件的退出程序*/
}
}
}
7、参考文献
谭浩强,C程序设计(第二版),北京:
清华大学出版社。
陈朔鹰,C语言程序设计习题集,北京:
人民邮电出版社。