c++通讯录设计郭海军.docx
《c++通讯录设计郭海军.docx》由会员分享,可在线阅读,更多相关《c++通讯录设计郭海军.docx(23页珍藏版)》请在冰豆网上搜索。
c++通讯录设计郭海军
计算机科学与技术学院
《C高级语言程序设计》课程设计报告
(2014/2015学年第1学期)
学生姓名:
郭海军
学生专业:
计算机科学与技术专业
学生班级:
计算机16302班
学生学号:
201326040207
指导教师:
李建伟
2015年 1 月 9 日
计算机科学与技术学院
课程设计任务书
课程设计名称
《C高级语言程序设计》课程设计
课程设计题目
小型通讯录程序
学生姓名
郭海军
专业班级
计算机132602班
学号
201326040207
课程设计任务内容
[问题描述]
设计一个实用的小型通讯录程序,具有添加,查询和删除功能。
由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。
电话号码可由字符和数字组成
[基本要求]
(1)系统以菜单方式工作
(2)信息录入功能
(3)信息浏览功能
(4)信息查询功能
(5)信息修改功能
(6)系统退出功能
[测试要求]
(1)具有添加,查询和删除功能、
(2)能正常运行、设计简便的小型通讯录程序、
指导老师:
李伟健
时间:
2015年1月12日
计算机科学与技术学院
课程设计成绩评审表
课程设计名称
《C高级语言程序设计》课程设计
课程设计题目
小型通讯录软件
学生姓名
郭海军
专业班级
计算机132602班
同组人
学号
201326040207
指导教师
设计成绩
评价内容
签字:
时间:
2015年1月12日
(1)设计问题描述与分析
一问题描述
世界的发展天翻地覆,而作为社会主角的我们之间的联系可为更加密切,因此,人与人之间的联系很重要,发展的快,事情固然也就多,这时就需要引入我们的通讯录帮忙了,所以,通讯录的需求是我们现当代所不可缺少的东西。
使用专业的流程图绘制框架图,让通讯录中各个版块都能够清晰的展现在系统中,增删查改也是必须的品质之一,一切为服务大众。
二问题分析
(1)保存通讯录。
输入联系人的姓名、电话号码、家庭详细地址等,并将它们一一存放在对应的数组当中去。
(2)显示通讯录:
将记录联系人姓名、电话号码的数组中的数据一一输出到屏幕上供使用。
(3)查询通讯录。
分别按联系人姓名和联系人的电话号码进行查询,查询时将输入的联系人信息通过循环与相应数组成员一一进行比较。
(4)修改通讯录。
输入需要修改记录的联系人姓名,通过循环查找到该记录后,再输入新数据替代原有数据。
(5)添加通讯录。
判断输入的电话号码是否重复,若不重复再将输入的信息添加到对应的数组中每输入一组数据,记录数增1。
(6)删除通讯录。
分别按联系人姓名和电话号码进行删除
(2)算法设计与流程图
(1)功能模块图
图
(1)
(2)查询联系人流程图
NOYES
YES
NO
(3)程序设计编码与测试
(1)程序代码:
#include
#include
#include
#include
#defineN100voidinput();//添加新用户函数
voidamend();//修改用户信息函数
voiddelete_client();//删除用户信息函数
voiddemand_client();//用户信息查询函数
voidcollect_telephone();//用户信息汇总函数
voidsave_client(structtelephonemessage);//保存函数
voiddemand_name();//按用户名查询
voiddemand_telephone();//按电话号码查询
structtelephone
{
charclient_name[20];
charclient_address[30];
charclient_telephone[15];
};//添加新用户函数
voidinput()
{
structtelephonemessage;
charreply='y';
charsave='y';
while(reply=='y')
{printf("用户姓名:
");
scanf("%s",message.client_name);
printf("电话号码:
");
scanf("%s",message.client_telephone);save_client(message);
printf("要继续吗?
(y/n):
");
scanf("%c",&reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
}//保存函数
voidsave_client(structtelephonemessage)
{
FILE*fp;
fp=fopen("message.dat","a+");
if(fp!
=NULL)
{
fwrite(&message,sizeof(structtelephone),1,fp);
}
else
{
printf("\n打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
}//修改用户信息函数
voidamend()
{
structtelephonemessage;
FILE*fp;
charamend_name[20];
charreply='y';
charfound='y';
charsave='y';
intsize=sizeof(structtelephone);
while(reply=='y')
{
found='n';
fp=fopen("message.dat","r+w");
if(fp!
=NULL)
{
system("cls");
printf("\n请输入要修改的姓名:
");
scanf("%s",amend_name);
while((fread(&message,size,1,fp))==1)
{
if((strcmp(amend_name,message.client_name))==0)
{
found='y';
break;
}
}
if(found=='y')
{printf("==========================================\n");
printf("\n用户姓名:
%s\n",message.client_name);
printf("\n电话号码:
%s\n",message.client_telephone);
printf("==========================================\n");
printf("修改用户信息:
\n");
printf("\n用户姓名:
");
scanf("%s",message.client_name);printf("\n电话号码:
");
scanf("%s",message.client_telephone);
printf("\n要保存吗?
(y/n):
");
scanf("%c",&save);
if(save=='y')
{
fseek(fp,-size,1);
fwrite(&message,sizeof(structtelephone),1,fp);
}
}
else
{
printf("无此人信息!
\n");
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?
(y/n):
");
scanf("%c",&reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
}//删除用户信息函数
voiddelete_client()
{
structtelephonemessage[100];//源文件为structtelephonemessage[N];
structtelephonetemp_str;
structtelephonedelete_str;
inti=0,j=0;
charreply='y';
charfound='y';
charconfirm='y';
chardelete_name[20];
FILE*fp;
while(reply=='y')
{
system("cls");
fp=fopen("message.dat","r");
if(fp!
=NULL)
{
i=0;
found='n';
printf("\n请输入姓名:
");
scanf("%s",delete_name);
while((fread(&temp_str,sizeof(structtelephone),1,fp))==1)
{
if((strcmp(delete_name,temp_str.client_name))==0)
{
found='y';
delete_str=temp_str;
}//查找要删除的记录
else
{
message[i]=temp_str;
i++;
}//将其它无关记录保存起来
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
if(found=='y')
{
printf("==========================================\n");
printf("用户姓名:
%s\n",delete_str.client_name);
printf("电话号码:
%s\n",delete_str.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此人信息,按任意键返回……\n");
getchar();
break;
}
printf("确定要删除吗?
(y/n):
");
scanf("%c",&confirm);
if(confirm=='y')
{
fp=fopen("message.dat","w");
if(fp!
=NULL)
{
for(j=0;j
{
fwrite(&message[j],sizeof(structtelephone),1,fp);
}
printf("记录已删除!
!
!
\n");
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
}
printf("要继续吗?
(y/n):
");
scanf("%c",&reply);
}
printf("按任意键返回主菜单……\n");
getchar();
}
//用户信息查询函数
voiddemand_client()
{
intchoice=1;
while(choice!
=3)
{
system("cls");
printf("电话查询菜单\n");
printf("1按联系人姓名查询\n");
printf("2按联系人电话号码查询\n");
printf("3返回主菜单\n");
printf("请选择(1-3):
");
scanf("%d%*c",&choice);
if(choice>3)
{
printf("请输入1-6之间的整数\n");
printf("按任意键返回菜单……\n");
getchar();
continue;
}
if(choice==1)
{
demand_name();
}
elseif(choice==2)
{
demand_telephone();
}
}
}//按用户名查询
voiddemand_name()
{
structtelephonemessage;
FILE*fp;
charamend_name[20];
charreply='y';
charfound='y';
while(reply=='y')
{
found='n';
fp=fopen("message.dat","r+w");
if(fp!
=NULL)
{
system("cls");
printf("\n请输入姓名:
");
scanf("%s",amend_name);
while((fread(&message,sizeof(structtelephone),1,fp))==1)
{
if((strcmp(amend_name,message.client_name))==0)
{
found='y';
break;
}
}
if(found=='y')
{printf("==========================================\n");
printf("用户姓名:
%s\n",message.client_name);printf("电话号码:
%s\n",message.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此人信息!
\n");
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?
(y/n):
");
scanf("%c",&reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
}//按电话号码查询
voiddemand_telephone()
{
structtelephonemessage;
FILE*fp;
chartelephone[20];
charreply='y';
charfound='y';
while(reply=='y')
{
found='n';
fp=fopen("message.dat","r+w");
if(fp!
=NULL)
{
system("cls");
printf("\n请输入电话号码:
");
scanf("%s",telephone);
while((fread(&message,sizeof(structtelephone),1,fp))==1)
{
if((strcmp(telephone,message.client_telephone))==0)
{
found='y';
break;
}
}
if(found=='y')
{printf("==========================================\n");
printf("用户姓名:
%s\n",message.client_name);printf("电话号码:
%s\n",message.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此电话号码的有关信息!
\n");
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?
(y/n):
");
scanf("%c",&reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
}//用户信息汇总函数
voidcollect_telephone()
{
structtelephonemessage;
FILE*fp;
fp=fopen("message.dat","r");
if(fp!
=NULL)
{
system("cls");
printf("\n用户姓名\t\t电话号码\n");
while((fread(&message,sizeof(structtelephone),1,fp))==1)
{
printf("\n%-24s",message.client_name);printf("%-12s\n",message.client_telephone);
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("按任意键返回主菜单……\n");
getch();
}voidmain()
{
charchoice[10]="";
intlen=0;
while(choice[0]!
='7')
{printf("\t==========ghj电话本号码查询系统=============\n");printf("\t\t1、添加新联系人\n");
printf("\t\t2、修改联系人信息\n");
printf("\t\t3、删除联系人信息\n");
printf("\t\t4、联系人信息查询\n");
printf("\t\t5、联系人信息汇总\n");
printf("\t\t7、退出\n");
printf("\t=========================================\n");
printf("请选择(1-7):
");
scanf("%s",choice);
len=strlen(choice);
if(len>1){
printf("请输入1-6之间的整数\n");
printf("按任意键返回主菜单……\n");
getchar();
getchar();
continue;
}switch(choice[0]){case'1':
input();break;
case'2':
amend();break;
case'3':
delete_client();break;
case'4':
demand_client();break;case'5':
collect_telephone();
break;default:
break;}}}
(2)测试结果正常(演示结果如下):
图
(1)
图
(2)
图(三)
(4)设计过程总结与分析
从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里头不时的有一种喜悦。
这让我认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去寻找资料去学习,同时我们还应向他人请教,与同学相互讨论,从而更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用通讯系统的基本方法,提高了书写程序设计开发文档的能力。
同时在软件的设计过程中遇到很多的困难。
一次一次的调试失败下曾经想过要放弃。
我最后还是让自己坚持啦下来,毫不畏惧困难,在同学的帮助与讲解下我总算是顺利完成软件的设计!
虽然在调试程序遇到拉很多的困难,当软件调试成功时那种喜悦的感觉没有什么东西可以代替。
在程序的编写过程中我发现我自己有很多的知识漏洞和缺陷,需要进一步努力学习来完善自己。
而这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的。
当我抽到通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,除了链表本身特别难以外,我也觉得这个不一定要用链表,于是改变了编程思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
其实,文件这个知识我们并没有学过,但通过看书,也可以得知,虽然说文件难以理解,但是比起链表来说,我觉得指针相对而言要容易很多,知识要记要背的东西比较多,因此这个程序我选择了用文件而不是用链表来解决。
这一周的实践让我受益匪浅,在此我要感谢孜孜不倦指导我们的三位老师,感谢在我困惑时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合方面又得到了一次很好的锻炼,让我们得到很大的收获。