设计一个电子通讯录程序课程设计.docx
《设计一个电子通讯录程序课程设计.docx》由会员分享,可在线阅读,更多相关《设计一个电子通讯录程序课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
设计一个电子通讯录程序课程设计
长沙学院
课程设计说明书
题目
设计一个电子通讯录程序
系(部)
计算机科学与技术系
专业(班级)
姓名
学号
指导教师
起止日期
2010年1月4日到2010年1月8日
程序设计基础课程设计任务书
一、题目:
设计一个电子通讯录程序
二、目的与要求
1.目的:
(1)使学生更加系统地理解和掌握C++语言的基本概念、语言特点和编程技巧。
(2)使学生应用C++语言在程序设计方面得到系统锻炼,为将来VC进行软件开发打下良好基础。
(3)提高学生建立程序文档、归纳总结的能力。
2.基本要求:
(1)要求用C++模块化设计的思想来完成程序的设计;
(2)培养上机动手能力,巩固分支结构和循环结构,应用函数和数据结构的知识。
(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。
(4)程序调试通过后,完成程序文档的整理,加必要的注释。
3.创新要求
在基本达到题目要求外,进行创新设计,如界面优美、功能更加完善(如增加按生日先后排序的功能),用不同的cpp文件来实现等。
4.书写设计报告的要求
设计报告中包含以下几个方面:
1、设计题目
2、总体设计
1)用自顶而下或自底而上的方法,划分功能模块。
2)确定各模块的算法
3、根据算法画出流程图
4、列出程序清单,并加以必要的注释
5、写出调试程序的方法
6、指出所设计问题的不足和改进方案
5.课程设计材料的装订顺序为:
1)设计说明书封面
2)课程设计任务书
3)课程设计鉴定表
4)目录
5)设计报告书正文
三、设计内容及其基本原理和设计方法
1.问题描述:
电子通讯录功能如下:
1.Read
2.Append
3.Delete
4.Search
5.Isert。
说明:
上图是电子通讯录的主菜单,利用它,将能够轻松地录入一个朋友的性别、出生日期、通讯地址、电话号码,而且它还提供了浏览、删除、检索和插入功能。
1)添加:
在原有数据资料的基础上按顺序增加记录;2)删除:
给出删除位置,执行删除后,查询是否被删除,显示通讯录的内容;3)查询:
给出姓名,列出该记录的信息。
4)插入:
给出插入位置,执行插入后,查询是否被插入,显示通讯录的内容;
2.解决方案:
用线性表顺序表设计电子通讯录的结构,为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定义所需要的各项信息。
一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子通讯录的基本结构。
四、主要技术问题的描述
对于电子通讯录这样一张线性表来说,内容的录入和显示是必不可少的操作。
可构造函数Data_Input()完成了信息的录入工作:
可以构造Data_Show()完成信息的显示工作。
五、课程设计时间:
18周
六、课程设计的考核方式及评分方法
1.考核方式
课程设计结束时,在机房当场验收。
1)教师提供测试数据,检查运行结果是否正确。
2)回答教师提出的问题。
3)学生提交课程设计文档(A4纸打印)
2.评分方法
上机检查:
书面报告=7:
3,没有通过上机检查的其成绩直接记录不及格
指导教师签名:
日期:
教研室主任签名:
日期:
系主任签名:
日期:
长沙学院课程设计鉴定表
姓名
学号
专业
班级
设计题目
设计一个电子通讯录程序
指导教师
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
摘要
本程序是一个电子通讯录。
用于实现对好友通讯信息的记录以及基本的管理。
本程序在完美实现改程序应有的功能的同时还增加了很多的人性化设计,比如温馨的提示。
本程序在界面上改变了程序执行时的单一色彩的缺陷,做到了丰富多彩,美观大方!
关键词:
电子通讯录;人性化设计;美观
1设计内容与要求…………………………………………………………………………………5
2.设计说明…………………………………………………………………………………………7
2.1问题描述与功能设计…………………………………………………………………………7
2.2算法与数据结构………………………………………………………………………………7
2.3函数定义………………………………………………………………………………………10
2.4界面设计………………………………………………………………………………………10
2.5编码……………………………………………………………………………………………10
2.6测试……………………………………………………………………………………………10
3总结…………………………………………………………………………………………………12
参考文献……………………………………………………………………………………………13
附录A源代码………………………………………………………………………………………14
附录B流程图………………………………………………………………………………………27
1设计内容与要求
我设计的是一个电子通讯录程序,用于管理通讯信息。
本程序的要求分为“基本要求”和“创新要求”部分,具体如下:
基本要求:
(1)要求用C++模块化设计的思想来完成程序的设计;
(2)培养上机动手能力,巩固分支结构和循环结构,应用函数和数据结构的知识。
(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。
(4)程序调试通过后,完成程序文档的整理,加必要的注释。
创新要求
在基本达到题目要求外,进行创新设计,如界面优美、功能更加完善(如增加按生日先后排序的功能),用不同的cpp文件来实现等。
2.设计说明
2.1问题描述与功能设计
本程序是一个电子通讯录,主要实现对朋友的通讯信息的记录和管理。
能够轻松地录入一个朋友的性别、出生日期、通讯地址、电话号码,而且它还提供了浏览、删除、检索和插入功能。
1)添加:
在原有数据资料的基础上按顺序增加记录;2)删除:
给出删除位置,执行删除后,查询是否被删除,显示通讯录的内容;3)查询:
给出姓名,列出该记录的信息。
4)插入:
给出插入位置,执行插入后,查询是否被插入,显示通讯录的内容。
对于该问题我用线性表顺序表设计电子通讯录的结构,为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定义所需要的各项信息。
一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子通讯录的基本结构。
该通讯录功能如下清单
1.建立通讯录
对通讯录进行录入,实现通讯录最基本的功能建立一个通讯录,进行信息的记忆。
2.查看通讯录
对已有的通讯信息进行查看,读取信息。
3.查找联系人
当通讯录中信息太多时,用户可以使用该功能进行对联系人的查找。
方便快捷!
4.修改联系人
当联系人的信息有所更改、变动。
用户可以使用该功能进行更改联系人信息。
5.删除联系人
如果联系人的信息因某种原因,用户不再需要,可以使用该功能删除!
6.增加联系人
该功能用于解决在建立通讯录后,要增加新的联系人信息。
2.2算法与数据结构
本程序的算法可以根据程序要实现功能进行算法说明。
1.建立通讯录
建立通讯录是在函数person*create(int)中实现的。
本质上是一个链表的建立。
首先我们需要三个指针person*head,*tail=NULL,*temp=NULL进行链表数据的保存。
建立表头对指针head分配内存,head=newperson。
对分配内存是否成功进行判断if成功,进行数据的输入。
else内存分配不成功,结束程序!
然后进行表体的建立,因为要输入多次,而且次数是清楚地,所以我用for循环为主体结构,进行表体的建立及朋友信息的录入。
2.查看通讯录
查看通讯录实质是对链表的遍历。
并且是在函数voidoutPut(person*curPer)中实现。
循环次数不确定,我选择while循环对数据进行输出。
while(curPer)及当curPer不为空(NULL)时,一直循环。
当当前指针为空(curPer==NULL)时,跳出循环体。
这样就实现了通讯录的查看功能。
3.查找联系人
本功能的实质就是传入一个关键词(及朋友姓名),然后在链表中进行查找。
找到后对该节点进行输出。
具体算法是:
同时传入两个参数进入person*search(person*curPer,charx[20])函数。
如果curPer不为空,就进入while循环,if(strcmp(x,curPer->name)==0)就对curPer保存的数据进行输出。
如果直到curPer==NULL还没有得到(strcmp(x,curPer->name)==0),那么就输出“无此朋友信息!
”
该功能算法解说完毕!
!
4.修改联系人
本功能的实质和“查找联系人”的功能相同。
就是传入一个关键词(及朋友姓名),然后在链表中进行查找。
找到后对相应数据进行修改!
首先传入两个参数到函数voidrevise(person*curPer,charx[20])中。
当curPer不为空时进入while循环体。
if(strcmp(x,curPer->name)==0)就对curPer储存的信息进行编码如图2-2-1。
当输入相应的代码,在if语句的控制下,就可以进行相应的数据的修改。
5.删除联系人
删除联系人,查找到该联系人,链表调整,删除指定节点!
把删除联系人的姓名和表头同时传入函数person*del(person*head,charx[20]),用while循环对链表进行条件遍历。
当当前节点的姓名等于传入姓名,跳出循环体。
然后对当前节点和前节点进行判断。
如果当前节点为空。
无此朋友信息。
如果前节点为空,删除的是表头。
其他情况删除为表体。
最后返回head到主函数即可。
6.增加联系人
在增加联系人这一模块中,因为通讯录是无序的没必要排序,我利用的是加在链表的表尾的方法。
把表头传入函数person*insert(person*head),然后定义三个指针person*newPer,*prePer=NULL,*curPer=head,用while循环找到表尾,再为newPer分配内存空间,if分配成功进行数据的输入。
else不成功,返回主函数。
7.桌面输出
本模块就是一个简单的cout语句,但经过输出控制做出了漂亮的桌面。
8.退出系统
本功能的算法很简单。
适用于用户确认退出此程序的界面。
If-else语句控制。
当用户输入相应的代码。
程序执行退出系统还是返回!
数据结构表
structbirthday
{
intyear;
intmonth;
intday;
};
structmessage
{
charaddress[30];
intpostCode;
};
structperson
{
charname[20];
charsex[5];
birthdaybirth;
messagemes;
person*next;
};
序号
成员名
数据类型
字段含义
1
nane
Char[20]
名字
2
sex
Char[5]
性别
3
birth
birthday
生日
4
mes
message
通讯信息
5
year
int
年
6
month
int
月
7
day
int
日
8
address
char[30]
通讯地址
9
postCode
int
通讯邮编
2.3函数定义
我总共定义了八个函数分别用于1.建立通讯录2.查看通讯录3.查找联系人4.修改联系人5.删除联系6.增加联系人7.桌面输出8.退出系统
函数名分别为person*create(intm)、voidoutPut(person*curPer)、person*search(person*curPer,charx[20])、voidrevise(person*curPer,charx[20])、person*del(person*head,charx[20])、person*insert(person*head)、intclose()、voidtabletop()。
2.4界面设计
本程序有一个用户桌面它包括所有的功能。
当完成一个功能后按任意键可以返回用户桌面。
本程序的界面加了颜色的。
不再是单一的黑白二色。
给用户视觉上的冲击。
我还运用了windows.h中的清屏函数。
让界面更加清爽。
不是乱七八糟的输入输出数据。
总的来说,我对本程序的界面设计很满意!
!
2.5编码
system("pause");
system("cls");
system("color0D");
在我的程序中大量用到system("pause")、system("cls")、system("color0D")。
这三个语句主要功能是实现对屏幕的处理,达到一种界面漂亮的效果不会再界面上积累大量的输入输出数据。
system("pause")实现的是暂停,只有你按任意键时程序才会继续。
system("cls")实现的是清屏功能,当一个功能执行完后,在该语句的控制下,屏幕上的老旧信息会被清理掉。
system("color0D")实现的是改变屏幕前景和背景色。
2.6测试
测试的内容有以下信息:
1.建立通讯录
建立两个人的通讯录。
姓名
性别
生日
通讯地址
通讯邮编
张三
男
199011
湖南省长沙市长沙大学
100100
李四
男
199171
湖南省湘潭市湘潭大学
100101
2.查看通讯录
3.查找联系人
分别查找张三、刘小妹。
(正常输出为张三可查到,刘小妹不可查到)
4.修改联系人
修改张三生日为1990111
5.删除联系人
删除李四。
6.增加联系人
姓名
性别
生日
通讯地址
通讯邮编
刘小妹
女
199011
湖南省长沙市长沙大学
100100
我对该程序进行以上测试。
所有测试均正常。
1.可以建立通讯录。
2.可以查看联系人如图2-6-1。
3.可以找到张三信息如图2-6-2,不可以找到刘小妹信息如图2-6-3。
4.可以修改张三生日为1990111。
5可以删除李四信息。
6.可以增加刘小妹信息。
3总结
在本次课程设计中我制作了一个电子通讯录。
我在拿到该题目时我非常高兴。
因为它的本质是一个链表的题目。
而且解决的方法很简单,就是链表的建立、遍历、插入、删除、查找。
只要把每个模块的代码写完用一些变量名把它们串联在一起就行了。
很快我完成了所有模块的编写。
调试只有小细节的问题。
但是我的界面不好看。
所以我查阅了我收藏的C++资料。
我发现了windows.h这个头文件。
我可以用里面的清平函数、改变颜色的函数和暂停函数。
我对我的程序进行了改进。
很明显我的程序美观多了。
我还告诉了班上的同学。
他们也用了,都说很好!
在课程设计中我学会的是知识的融合,一学期所学的知识本是零零散散的一些碎片,在本次课程设计中得到了融合,知识的交融,变零为整。
还有大家在一起讨论题目的快乐,高度集中精力认真的干一件事。
人只有在不断地思考才会有进步。
这也是人生的意义!
参考文献
[1]王挺.c++程序设计[M]。
北京:
清华大学出版社,2005.
[2]钱能.C++程序设计教程[M].北京:
清华大学出版社,2005:
315-324,415-418,423.
附录A源代码
Main.cpp
#include
#include
#include
structbirthday
{
intyear;
intmonth;
intday;
};
structmessage
{
charaddress[30];
intpostCode;
};
structperson
{
charname[20];
charsex[5];
birthdaybirth;
messagemes;
person*next;
};
#include"mbox.cpp"
intmain()
{
intn,m;
charx[20];
person*perOne=NULL;
do
{
system("color0D");//改变背景颜色或者前景色
tabletop();
cin>>n;
system("cls");
if(n==1)//建立联系人
{
cout<<"请要输入朋友的人数:
"<cin>>m;
if(m>0)
{
perOne=create(m);
outPut(perOne);
}
}
elseif(n==2)//输出联系人
{
outPut(perOne);;
}
elseif(n==3)//查找联系人
{
cout<<"请输入要查找人的姓名:
"<cin>>x;
search(perOne,x);
}
elseif(n==4)//修改联系人
{
cout<<"请输入要修改人的姓名:
"<cin>>x;
revise(perOne,x);
}
elseif(n==5)//删除联系人
{
cout<<"请输入要删除人的姓名:
"<cin>>x;
perOne=del(perOne,x);
}
elseif(n==6)//增加联系人
insert(perOne);
elseif(n==0)//进入关闭系统
n=close();
else//提示输入有误
{
cout<<"对不起,您输入有误!
!
请重新输入!
!
"<system("pause");
}
}
while(n!
=0);
cout<<"谢谢使用本系统!
!
祝您愉快!
!
"<return0;
}
mbox.cpp
//++++++++++++++tabletop+++++++++++++++
//实现桌面的输出
voidtabletop()
{
cout<<<"*************************************************************************"<<<"********************欢迎进入电子通讯录系统*******************************"<<<"*************************************************************************"<<<<<<<<<<<<"请输入相应的代码:
"<}
//+++++++++++++++create+++++++++++++++++++++++
//建立一个通讯录
person*create(intm)
{
person*head,*tail=NULL,*temp=NULL;
//建立表头
head=newperson;
if(head==NULL)
{
cout<<"内存分配不成功!
!
"<return0;
}
else
{
cout<<"请输入第一位朋友信息:
"<<<"姓名:
"<cin>>head->name;
cout<<"性别:
"<cin>>head->sex;
cout<<"生日:
年(空格)月(空格)日"<cin>>head->birth.year>>head->birth.month>>head->birth.day;
cout<<"请输入通讯地址:
"<cin>>head->mes.address;
cout<<"请输入通讯邮编:
"<cin>>head->mes.postCode;
head->next=NULL;
tail=head;
system("cls");//清理屏幕
}
//建立表体
for(inti=0;i{
cout<<"请输入第"<
"<temp=newperson;
if(temp==NULL)
{
cout<<"内存分配不成功!
!
"<return0;
}
else
{
cout<<"姓名:
"<cin>>temp->name;
cout<<"性别:
"<cin>>temp->sex;
cout<<"生日:
年(空格)月(空格)日"<cin>>temp->birth.year>>temp->birth.month>>temp->birth.day;
cout<<"请输