通讯录系统课程设计实验报告.docx
《通讯录系统课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《通讯录系统课程设计实验报告.docx(37页珍藏版)》请在冰豆网上搜索。
通讯录系统课程设计实验报告
1系统可行性分析…………………………………………………………………………2
1.1软硬件环境……………………………………………………………………………2
1.11软件环境…………………………………………………………………………2
1.12硬件环境………………………………………………………………………2
1.2系统可行性分析分类…………………………………………………………………2
1.21技术可行性………………………………………………………………………2
1.22经济可行性……………………………………………………………………2
1.23管理可行性………………………………………………………………………2
2需求规格说明书……………………………………………………………………………2
2.1模块要求………………………………………………………………………………3
2.2设计要求………………………………………………………………………………3
2.3设计要求功能分析……………………………………………………………………3
3设计规格说明书……………………………………………………………………………3
3.1通讯录总的流程图……………………………………………………………………4
3.2创建通讯录的流程图………………………………………………………………4
3.3添加通讯录记录的流程图……………………………………………………………5
3.4查找联系人记录的流程图………………………………………………………5
4测试策略与方案…………………………………………………………………………6
4.1测试类型………………………………………………………………………………6
4.2测试项目………………………………………………………………………………7
4.3测试环境与配置………………………………………………………………………7
4.4输入数据设置………………………………………………………………………7
4.5输入功能设置………………………………………………………………………8
5课程设计总结……………………………………………………………………………10
参考文献…………………………………………………………………………………10
附件:
程序源代码…………………………………………………………………………11
1系统可行性分析
1.1软硬件环境分析
1.11软件环境
用户端windows2000windows2003windowsxpwin7
服务器端windowsxp及以上的操作系统
编程语言:
c++
1.12硬件环境
有高性能的电子计算机,大容量的存储装置,个人电脑及连接起来的网线等,组成信息资源共享的计算机网络等
1.2系统可行性分析分类
1.21技术可行性可以用C语言和相应的软硬件环境实现
1.22经济可行性在经济上,用此系统加强了通讯系统信息管理效率,可以省人力资源的开支
1.23管理可行性分析在工作上,获取信息量相对较大,开发了此系统,提高了获取信息的效率,方便信息储存和修改及以后随时查找信息
系统分析结论该系统是一个比较人性化的管理系统
2需求规格说明书
2.1模块要求:
第一个模块——主函数main()的功能是:
根据选单的选项调用各函数,并完成相应的功能。
第二个模块——Menu()的功能是:
显示英文提示选单。
第三个模块——Quit()的功能是:
退出选单。
第四个模块——Create()的功能是:
创建新的通讯录。
第五个模块——Add()的功能是:
在通讯录的末尾,写入新的信息,并返回选单。
第六个模块——Find()的功能是:
查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
第七个模块——Alter()的功能是:
修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
第八个模块——Delete()的功能是:
删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
第九个模块——List()的功能是:
显示通讯录中的所有记录。
;
2.2设计要求:
2.21每条信息至包含:
姓名(NAME)、性别(GENDER)、电话(TEL)、城市(CITY)邮编(EIP)几项。
2.22作为一个完整的系统,应具有友好的界面和较强的容错能力
2.3系统功能需求分析:
创建:
创建新的通讯录添加:
添加通讯录记录
查询:
查询通讯录记修改:
修改通讯录记录
删除:
删除通讯录记录显示:
显示通讯录记录
3设计规格说明书
3.1总体设计分析流程图
12345678
breakbreakbreakbreakbreakbreakbreakbreak
3.2部分模块设计分析
3.21创建:
创建新建的通讯录流程图
真
假
3.22添加:
添加新的通讯录记录流程图
真
假
3.23查找:
按姓名查找的流程图
真假
4测试策略与方案
4.1测试类型
测试类型
测试内容
测试目的
所用的测试工具和方法
功能测试
测试创建,添加和查找
的功能
核实所有功能均已正常实现
1.流程检验
2.数据精确
采用黑盒测试
用户界面测试
1.导航、链接、页面结构
2.友好性、易用性、合理性、一致性、正确性等
核实各个窗口风格都与基准版本保持一致,或符合可接受标准,能够保证用户界面的友好性、易操作性,而且符合用户操作习惯
4.2测试项目
组装测试:
看程序是否按设计的流程运行。
确认测试:
利用各种类型的数据,测试系统的健壮性。
4.3测试环境与配置
资源名称/类型
配置
测试PC(2台)
硬盘在250GB,内存2GB
应用软件
MicrosoftOffice,VC++6.0
功能测试工具
界面测试工具
4.4输入数据测试
测试目标:
增加通讯录成员,输入数据是否合理。
测试方法:
1.姓名:
2.性别:
男
女
3.城市:
三个汉字
20个汉字
其他非法字符
4.电话:
八个数字
十一个数字
5.邮编:
4.5功能测试
测试目标:
检查通讯录系功能是否正确,完善。
测试方法:
创建新的通讯录当输入0时退出创建
在软件中点击‘查询’,出现查询对话框,输入查询条件,则界面显示符合条件的记录。
若输出不存在的电话号码,则结果显示如下:
若输入存在的电话号码,则结果显示如下:
在软件中点击‘增加’,出现增加对话框,此时输入各个域的内容,再点击对话框中的‘增加’按纽,则在数据库中增加了一个新记录,并在界面中的数据库列表列出增加后的记录。
、
5课程设计总结
虽然做过几个关于数据结构实验报告,但我还是第一次做课程设计,而且第一次参见团队编程。
刚开始的时候因为把各个模块分隔开,让我们有点无所适从,后来我们小组认真研究了题目,翻阅了一些资料商量出了主题思路,整个程序才有了支架。
接下来就是分配模块,我所分配的三个模块是创建通讯录,添加通讯录和查询通讯录,刚开始觉的三个模块还蛮好编程的,后来发现自己平时没有掌握好的知识在这次实验中彻底暴露出来,不仅编程过程磕磕绊绊,几度中断;而且编程成品后漏洞百出。
经过不断思考,不断查阅资料和上机运行,向同学请教,才终于解决其中大部分问题,使这几个模块逐渐趋于完整,当然还存在一些问题没有解决比如输入数据的格式并没有给予适当的限制,界面也并不是太完美有点凌乱,由于我只知道上课听讲,下课就把课本丢一边没有去深究课本里知识的缘故,导致所有的知识点都是一知半解的。
接下来的问题是把三个人的模块合起来的时候,整体构架的一些瑕疵,删删改改又耗费不少时间。
尽管程序还有许多漏洞,还有一些遗憾,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
课程设计的实验报告是比较难写的,没写过这样的报告,老师给出的格式虽然很详细,但是越是详细,越是难以理解。
参考文献
【1】严蔚敏吴伟民.数据结构(C语言版).清华大学出版社,2010,33,334.
【2】谭浩强张基温.C语言程序设计教程.高等教育出版社,1991,1,324.
附程序源代码
#include
#include
#include
#include
#include
#defineLENsizeof(structrecord)//计算字节//
#defineNULL0
intnum;//通讯录文件中的联系人计数器
structrecord
{
charname[100];
chargender[100];
chartel[100];
charcity[100];
chareip[100];
structrecord*next;
};
structrecord*head;
voidmenu();//显示英文提示选单函数
voidcreat();//创建新的通讯录
voidadd();//将某联系人增加到通讯录中
voidfind();//综合查询某联系人的通讯信息
voidalter();//修改通讯录中某联系人的信息
voiddeleteb();//删除通讯录中某联系人的信息
voidlist();//显示通讯录中的所有记录
voidsave();//用于将对通讯录的更新保存到文件中
voidload();//创建新的通讯录
voidquit(int*f);//退出选单
voidshifang();//释放内存函数声明
voidmain()
{
intchoic;
head=NULL;
intflag=1;
printf("使用说明:
在当通讯录中存在信息时每次使用通讯录前应先加载通讯录文件!
\n");
while(flag)
{
menu();
scanf("%d",&choic);
switch(choic)
{
case1:
{
if(head==NULL)
creat();//创建
else
{
shifang();
creat();//重新创建
}
}
break;
case2:
{add();
save();//将追加的记录保存到文件中
}
break;
case3:
find();
printf("\t");
system("pause");//使系统暂停
break;
case4:
{alter();
save();//将修改后的记录保存到文件中
}
printf("\t");
system("pause");
break;
case5:
deleteb();
printf("\t");
system("pause");
break;
case6:
load();break;
case7:
quit(&flag);break;
case8:
list();
printf("\t");
system("pause");
break;
}
}
}
voidmenu()
{
system("cls");
printf("\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t※※\n");
printf("\t\t※欢迎使用通讯录※\n");
printf("\t\t※※\n");
printf("\t\t※1.创建新的通讯录2.增加联系人※\n");
printf("\t\t※※\n");
printf("\t\t※3.查询联系人信息4.修改联系人信息※\n");
printf("\t\t※※\n");
printf("\t\t※5.删除某联系人信息6.加载通讯录文件※\n");
printf("\t\t※※\n");
printf("\t\t※7.退出选单8.显示通讯录中所有记录※\n");
printf("\t\t※※\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf("\n\t\t请输入您选择的操作:
");
}
voidcreat()/*函数voidcreat()创建联系人的个人信息*/
{
structrecord*p1,*p2;
charname[100];
num=0;
p1=head=(structrecord*)malloc(LEN);
p2=p1;
system("cls");
printf("请输入姓名,性别,电话,城市及邮编(结束操作请按0号键)\n");
getchar();
printf("输入姓名:
");
gets(name);
if(strcmp(name,"0")!
=0&&name)
{
strcpy(p1->name,name);
printf("输入性别(男or女):
");
gets(p1->gender);
printf("输入8位电话号码或11位手机号(0-9):
");
gets(p1->tel);
printf("输入所在城市:
");
gets(p1->city);
printf("输入邮编(0-9):
");
gets(p1->eip);
p1->next=NULL;
while
(1)
{
num=num+1;//通讯录文件中的联系人计数器增1
if(num==1)
head=p1;
else
p2->next=p1;
p2=p1;
printf("请输入姓名:
");
gets(name);
if(strcmp(name,"0")==0)//当输入姓名为0时则表示此次对记录的录入结束
{
break;
}
else//继续录入
{
p1=(structrecord*)malloc(LEN);
strcpy(p1->name,name);
printf("输入性别(男or女):
");
gets(p1->gender);
printf("输入8位电话号码或11位手机号(0-9):
");
gets(p1->tel);
printf("输入所在城市:
");
gets(p1->city);
printf("输入邮编(0-9):
");
gets(p1->eip);
p1->next=NULL;
}
}
p2->next=NULL;
save();
return;
}
else
return;
}
voidlist()//用于输出通讯录中的所有联系人信息的函数
{
structrecord*p;
if(head!
=NULL)//通讯录非空时,列出所有联系人信息
{system("cls");
p=head;
printf("本通讯录现在共有%d人:
\n",num);
printf("---姓名-------性别------手机--------城市---------邮编\n");
while(p!
=NULL)
{
printf("==%s",p->name);printf("");
printf("%s",p->gender);printf("");
printf("%s",p->tel);printf("");
printf("%s",p->city);printf("");
printf("%s",p->eip);printf("\n");
p=p->next;
}
printf("==================================\n");
}
else//当通讯录为空时,给出提示信息
printf("通讯录为空,无法输出!
");
}
voidadd()//增加记录函数
{
structrecord*p0,*p1,*p2;
system("cls");//进行系统清屏
charname[100],ch;
p1=head;
printf("请输入所要增加的联系人的各项信息:
\n");
getchar();//吸收回车符或空格
printf("请输入姓名:
");
gets(name);
if((strcmp(name,"0")==0)&&name)
{
printf("姓名不能为0,增加失败!
\n");
return;
}
else
{
p0=(structrecord*)malloc(LEN);
strcpy(p0->name,name);
printf("输入性别(男or女):
");
gets(p0->gender);
printf("输入8位电话号码或11位手机号(0-9):
");
gets(p0->tel);
printf("输入所在城市:
");
gets(p0->city);
printf("输入邮编(0-9):
");
gets(p0->eip);
num=num+1;
if(head==NULL)
{
head=p0;
p0->next=NULL;
return;
}
else
{
while(strcmp(p0->name,p1->name)>0&&(p1->next!
=NULL))//查找结点所应添加的相应位置
{
p2=p1;
p1=p1->next;
}
if(strcmp(p0->name,p1->name)<0||strcmp(p0->name,p1->name)==0)//把结点有序地增加到链表中
{
if(head==p1)
{
head=p0;//把结点添加到表头
}
else
{
p2->next=p0;
}
p0->next=p1;
}
else//把结点添加到表尾
{
p1->next=p0;
p0->next=NULL;
}
printf("\n是否继续添加?
(Y/N):
");
ch=getchar();
if((ch=='y')||(ch=='Y'))
add();
return;
}
}
}
voiddeleteb()//删除记录
{
system("cls");
structrecord*p,*q;
charsname[100],ch;
p=head;
if(head==NULL)
{
printf("通讯录为空!
无法删除!
\n");
return;
}
printf("请输入欲删除记录的姓名:
");
scanf("%s",sname);
while(strcmp(p->name,sname)!
=0&&p->next!
=NULL)//查找节点并删除该节点
{
q=p;
p=p->next;
}
if(strcmp(p->name,sname)==0)
{
printf("%s的通讯内容如下:
\n",sname);
printf("---姓名-------性别------手机--------城市---------邮编\n");
printf("==================================\n");
printf("==%s",p->name);printf("");
printf("%s",p->gender);printf("");
printf("%s",p->tel);printf("");
printf("%s",p->city);printf("");
printf("%s",p->eip);printf("\n");
printf("==================================\n");
getchar();//吸收回车键和空格
printf("您确认要删除此人的通讯记录吗?
(Y/N):
");
ch=getchar();
if((ch=='Y')||(ch=='y'))
{
if(p==head)//当通讯录中只有一条记录时
head=p->next;
else
q->next=p->next;
num=num-1;//通讯录文件中的联系人计数器减1
printf("删除成功!
\n");
save();//保存到文件中
}
elseif((ch=='N')||(ch=='n'))
return;
}
else
{
printf("通讯录中无此人信息!
\n");
}
return;
}
voidquit(int*f)//退出选单
{
*f=0;
printf("谢谢您本次的使用!
\n");
}
voidsave()//将通讯录写入文件的函数
{
FILE*fp;
structrecord*p1;
chartong[100];
if(head==NULL)
{
fp=fopen("tongxun.txt","w");
fp=NULL;//将通讯录文件清空
return;
}
getchar();//吸收回车键和空格
printf("请输入要保存通讯录的文件名:
");
gets(tong);
fp=fopen("tongxun.txt","w");
if(fp==NULL)
{
printf("打开通讯录文件失败!
\n");
return;
}
p1=head;
fprintf(fp,"姓名性别手机城市邮编\n");
for(;p1!
=NULL;)
{
fprintf(fp,"%s%s%s%s%s\n",p1->name,p1->gender,p1->tel,p1->city,p1->eip);
p1=p1->next;
}
printf("保存完毕!
\n");
fclose(fp);
}
voidload()//文件加载函数
{
FILE*fp;
chartong[100];
structrecord*p1,*p2;
system("cls");
getchar();
printf("正在加载通讯录文件!
\n");