通信录管理系统1.docx

上传人:b****5 文档编号:3418082 上传时间:2022-11-22 格式:DOCX 页数:25 大小:188.93KB
下载 相关 举报
通信录管理系统1.docx_第1页
第1页 / 共25页
通信录管理系统1.docx_第2页
第2页 / 共25页
通信录管理系统1.docx_第3页
第3页 / 共25页
通信录管理系统1.docx_第4页
第4页 / 共25页
通信录管理系统1.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

通信录管理系统1.docx

《通信录管理系统1.docx》由会员分享,可在线阅读,更多相关《通信录管理系统1.docx(25页珍藏版)》请在冰豆网上搜索。

通信录管理系统1.docx

通信录管理系统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&&i

if(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&&i

if(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&&i

if(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&&i

if(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&&i

if(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&&i

if(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日

评分等级

备注

评分等级有五种:

优秀、良好、中等、及格、不及格

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1