通信录管理系统1.docx
《通信录管理系统1.docx》由会员分享,可在线阅读,更多相关《通信录管理系统1.docx(25页珍藏版)》请在冰豆网上搜索。
通信录管理系统1
程序设计报告
(2010/2011学年第二学期)
题目:
通信录管理系统
专业
学生姓名_
班级学号__
指导教师
指导单位______________
日期
一、课题内容和要求
设一个通信录由以下几项数据信息构成:
数据项类型
姓名字符串
地址字符串
邮政编码字符串
电话号码字符串
1、试为通信录数据定义类型和定义通信录变量,实现:
存取、显示、
删除记录、查询记录等功能。
2、通讯录文件中,当录入了重复的姓名和电话号码时,则提示数据录
入重复并取消录入;当通信录中超过15条信息时,存储空间已满,
提示不能再录入新数据,录入的新数据能按递增的顺序自动进行条
目编号。
3、修改功能:
选中某个人的姓名时,可对此人在通讯录中的相应数据
进行修改。
4、删除功能:
选中某个人的姓名时,可对此人在通讯录中的相应数据
进行删除,并自动调整后续条目的编号。
5、主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进
行多次选择执行。
二、需求分析
主要包括以下几种功能:
存取:
存取通信录信息
显示:
显示通信录信息
删除:
删除通信录信息
查询:
查询通信录信息
修改:
修改通信录信息
三、概要分析
(1)工作流程图:
1、存储
2、显示
3、删除
4、查询
5、修改
(2)程序模块图(框架):
(3)存储结构:
typedefstruct
{
charscore;
charname[10];
charphone[15];
charzc[20];
charadds[20];
}person;
四、源程序代码
#include
#include
#include
typedefstruct
{
charscore;
charname[10];
charphone[15];
charzc[20];
charadds[20];
}person;
personpe[80];
intmenu()
{
intc;
do{
system("cls");
printf("***********通信录***********\n\n");
printf("1.存储记录\n\n");
printf("2.显示记录\n\n");
printf("3.删除记录\n\n");
printf("4.查询记录\n\n");
printf("5.修改记录\n\n");
printf("0.退出程序\n\n");
printf("请选择(0-5):
");
scanf("%d",&c);
}while(c<0||c>6);
returnc;
}
intinput(personper[],intn)
{
inti=0,j;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t姓名:
");
scanf("%s",per[i].name);
for(j=0;j
{
if(strcmp(per[i].name,per[j].name)==0)
{
printf("\t姓名重复,取消录入!
\n");
system("pause");
gotorepeat;
}
}
printf("\t电话号码:
");
scanf("%s",per[i].phone);
for(j=0;j
{
if(strcmp(per[i].phone,per[j].phone)==0)
{
printf("\t电话号码重复,取消录入!
\n");
system("pause");
gotorepeat;
}
}
printf("\t邮政编码:
");
scanf("%s",per[i].zc);
printf("\t地址:
");
scanf("%s",per[i].adds);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("%c",&sign);
i++;
per[i-1].score=i;
if(i>=15)
{printf("\t存储空间已满,不能再录入新数据!
\n");
system("pause");
repeat:
break;
}
}
returni;
}
voiddisplay(personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");
printf("编号姓名电话号码邮政编码地址\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-10d%-10s%-15s%-14s%-30s\n",per[i-1].score,per[i-1].name,per[i-1].phone,per[i-1].zc,per[i-1].adds);
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
intdelete_a_record(personper[],intn)
{
chars[30];
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].zc,per[j+1].zc);
strcpy(per[j].phone,per[j+1].phone);
}
printf("\t\t已经成功删除!
\n");
return(n-1);
}
voidquery_a_record(personper[],intn)
{
intm;
printf("\n请选择查询方式:
\n");
printf("\t----------------------\n");
printf("\t|1--------姓名|\n");
printf("\t|2--------电话号码|\n");
printf("\t|3--------邮政编码|\n");
printf("\t|4--------地址|\n");
printf("\t|0--------返回|\n");
printf("\t----------------------\n");
printf("请选择(0-4):
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4&&m!
=0)
{
printf("输入错误!
请重新选择:
");
scanf("%d",&m);
}
if(m==1)
{
chars[10];
inti=0;
printf("请输入想查询的姓名:
");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通信录中没有此人!
\n");
return;
}
printf("\t电话号码:
%s\n",per[i].phone);
printf("\t邮政编码:
%s\n",per[i].zc);
printf("\t此人地址:
%s\n",per[i].adds);
};
if(m==2)
{
chars[20];
inti=0;
printf("请输入想查询的电话号码:
");
scanf("\t%s",s);
while(strcmp(per[i].phone,s)!
=0&&iif(i==n)
{
printf("\t通信录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t邮政编码:
%s\n",per[i].zc);
printf("\t此人地址:
%s\n",per[i].adds);
};
if(m==3)
{
chars[10];
inti=0;
printf("请输入想查询的邮政编码:
");
scanf("\t%s",s);
while(strcmp(per[i].zc,s)!
=0&&iif(i==n)
{
printf("\t通信录中没有此人!
\n");
return;
}
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t电话号码:
%s\n",per[i].phone);
printf("\t此人地址:
%s\n",per[i].adds);
};
if(m==4)
{
chars[30];
inti=0;
printf("请输入想查询的地址:
");
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].zc);
printf("\t电话号码:
%s\n",per[i].phone);
};
}
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%s",per[i].name);
printf("\t电话号码:
");
scanf("\t%s",per[i].phone);
printf("\t邮政编码:
");
scanf("\t%s",per[i].zc);
printf("\t地址:
");
scanf("\t%s",per[i].adds);
printf("\t修改成功!
");
}
voidmain()
{
intn=0;
for(;;)
{
switch(menu())
{
case1:
printf("\n\t存取记录到通讯录\n");
n=input(pe,n);
break;
case2:
printf("\n\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;
case0:
printf("\n\t\t谢谢使用,再见!
\n");
printf("\n\t\t");
system("pause");
exit(0);
}
}
}
五、测试数据及其结果分析
(1)主菜单
(2)存储
(3)显示
(4)删除
删除后记录:
(5)查询
(6)修改
修改后的记录
六、调试过程中的问题
(1)关于exit
exit好象在stdio.h里面,所以要有包含头文件
return是返回函数调用,如果返回的是main函数,则为退出程序
exit是在调用处强行退出程序,运行一次程序就结束
-------------------------------------------------------------------
return
是返回
函数返回
而exit是退出
-------------------------------------------------------------------
exit
(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值
exit(0)表示正常退出
(2)跳出多个循环
在储存环节时,输入重复要取消跳出循环。
一开始我用的是break,但只能跳出一个循环,跳多个时就没有用了。
后来,我查了资料,发现可以通过goto完成这个功能。
(3)界面显示问题
一开始,我不懂得清屏,界面总是很乱。
每次操作完后,界面总是多了一个主菜单,很难看。
后来,我请教了同学,他建议我用system(“cls”),才解决了这个问题。
接着,我又上网查了system的用法,发现还有system(“pause”)有暂停功能,这个功能也使我设计的程序的界面显示更加清爽漂亮。
七、课程设计总结
本次的C程序设计实验是我进入大学以来第一次独立设计并成功的大实验。
在实验中,我发现了自己的许多缺陷与不足。
平时没有掌握好的知识在这次实验中都暴露了出来。
在不断地思考和总结,以及不断查阅资料和上级运行,和一次又一次地尝试的过程中,我终于解决了其中的大部分问题,但还是有一些问题无法解决。
但我相信,在今后的学习过程中能解决它们。
总的来说,这次程序设计实验,我还是有很大的收获的。
我不但进一步地熟悉和掌握了C语言,还懂得了程序设计的设计思想、结构构想和书写风格。
这次最深刻的体会就是,书上和老师教的内容是很有限的,如果真的想学会C语言和其他科目,我们需要的不但是老师的教导,更需要自己的不断努力,去请教他人,积极地去了解和掌握更多的知识,而不能被动学习,这样我们才能学得更好。
最后,我要感谢在实验中帮助我的老师和同学,以及为我们安排这次实验的学校领导,是他们让我更好地了解了C语言,懂得了应该如何去学习!
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
2011年4月9日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格