《C++》课程设计报告.docx
《《C++》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《C++》课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
《C++》课程设计报告
C++课程设计报告
课题:
通讯录管理系统
专业班级:
计科10101班
学号:
201017010118
姓名:
刘瑶
同组姓名:
杨卫、何野
指导教师:
屠添翼
评阅意见:
评定成绩:
指导老师签名:
年月日
1课程设计的目的和意义
(一)课程设计目的:
运用数据结构中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。
用C语言编写一个通讯录管理系统软件,要求能实现通讯录管理系统中增加新记录,删除记录,显示通讯录的所有信息,按名字查询信息,保存通讯录,保存于文件供输出或打印。
其中,输入的每条记录包括有姓名(name)电话号码(telephone)。
(二)课程设计的意义:
通过此次课程设计,我们可以学到以下几个要点:
1、有利于基础知识的理解
通过《C++面向对象程序设计》的学习,学生进一步掌握了一些关于编程的基础知识和基本技能,具备了在日常生活与学习中应用编程技术解决问题的基本态度与基本能力。
但是,学生对于程序的内涵,程序与文档、数据的区别,计算机运行的机理等知识内容的理解比较肤浅。
学生如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。
2、有利于逻辑思维的锻炼
在许多常规学科的日常教学中,我们不难发现这样一个现象,不少学生的思维常常处于混乱的状态。
写起作文来前言不搭后语,解起数学题来步骤混乱,这些都是缺乏思维训练的结果。
程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
3、有利于与其他学科的整合
在程序设计中,我们可以解决其它学科有关问题,也利用其它课程的有关知识来解决信息技术中比较抽象很难理解的知识。
在信息技术课中整合其它学科的知识,发挥信息技术的优势。
例如,在编写“通讯录管理系统”程序时,由于要写流程图,我就复习了数学的相关知识,起到意想不到的效果。
4、有利于治学态度的培养
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。
2需求分析
设计题目:
实现通讯录管理系统
设计要求:
自学C语言中有关链表及外部文件的内容,设计出通讯录管理系统。
要求如下所述:
1、为存储通讯录信息,需定义一个结构体类型,成员包括序号、姓名、电话号码,并建立链表,定义该结构体类型的指针,用于指向各结点;
2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。
这其中要用到对链表的删除、插入等知识。
删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加。
查询功能要能够提供按不同方式查询的功能,如按姓名或年龄、电话等查询。
3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。
4、将通讯录保存在文件中;
5、能够按表格方式输出通讯录信息。
系统功能需求分析:
由于通讯录涉及到多个不同类型的数据组合成一个有机的整体,故考虑到使用结构体来表述。
又链表能够动态地进行存储分配的一种结构,根据需要开辟新的内存,没有浪费系统的内存资源,故采用链表结构。
由于系统比较复杂,采用模块化方式可以大大减少编译时的困难。
整个程序包括主函数在内共使用了13个函数,分别实现了,创建、查找、删除、存储、读取等功能。
3系统(项目)设计
一、总体设计
(一)分析研究
本系统的程序总体设计分为好友信息管理系统,分组信息管理系统和群信息管理系统三大模块,用以实现对通讯录管理系统的一整套服务。
下面介绍各模块功能。
3-1-1.主菜单:
它是由好友信息管理\分组信息管理\群组信息管理\系统退出组成。
进入主菜单后,用户可以自己根据需要进行操作选择。
3-1-2.好友信息管理:
好友信息管理模块主要是对用户进行增添、删除、修改、保存、查看这些操作,增添是添加用户的姓名、编号、电话号码、邮编等基本信息。
3-1-3.分组信息管理:
分组信息管理理模块主要是用于好友的分组,用户需输入自己好友的姓名,通过好友的姓氏找出好友的相关信息。
3-1-4.群组信息管理:
群组信息管理模块是用方便户可以查询自己常用的联系好友信息,用户可以根据常联系人的姓名等迅速找出自己常用好友的位置及其相关信息。
(二)程序的框架图,如图3.1所示:
图3.1通讯录管理系统结构图
(三)、程序主流程图,如图3.2所示:
<四>.个人负责模块及功能分析:
(1).
(2).
1.增加分组信息:
录入新的分组的基本信息,包括姓名和编号;
2.保存分组信息:
将录入的新的分组信息保存在文件中,以便下次再打开系统时,录入的分组信息还在;
3.删除分组信息:
可以将不用的或已经废除的好友信息删除;
4.读取分组信息:
将保存在文件中的分组信息读取出来;
5.查询分组信息:
根据需要按不同的条件进行查询好友信息,如输入编号或者输入姓名进行查询。
4系统实现
登入分组管理模块界面如图4.1所示。
图4.1分组管理模块
进入界面后有提示1-5键分别对通讯录的增加,删除,修改,保存以及查看等,以下为用户管理模块中各个子模块的关键代码和解释。
①.2键的增加通讯录模块部分代码:
voidFcxxList1:
:
Add_Fcxx()//增加通讯录到链表的尾部。
{
chara3[2];
intn;
cout<<"请输入所增加的人数:
";
cin.getline(a3,2,'\n');
n=atoi(a3);
if(n<=0)
return;
for(inti=1;i<=n;i++)
{
Fcxx1*q=newFcxx1();
cout<<"请输入第"<
if(input(q)==1)
{
i--;
deleteq;
continue;
}
if(head==NULL)
head=q;
else
{
intt=0;
Fcxx1*p=head;
while(p->next!
=NULL)
{
if(p->name[0]==q->name[0])
{
t=1;
break;
}
p=p->next;
}
if(t==1)
{
Fcxx1*d=p->next;
p->next=q;
q->next=d;
}
else
{
p->next=q;
}
}
}
}
②.3键删除通讯录信息模块部分代码:
voidFcxxList1:
:
delete_Fcxx()//删除通讯录。
{
if(head==NULL)
{
cout<<"还没有通讯录!
"<return;
}
chara2[2];
intn;
cout<<"请输入所删除的人数:
";
cin.getline(a2,2,'\n');
n=atoi(a2);
if(n<=0)
return;
for(inti=1;i<=n;i++)
{
if(head==NULL)
{
cout<<"还没有通讯录!
"<return;
}
else
{
if(head==NULL)
{
cout<<"还没有通讯录!
"<return;
}
cout<<"请输入要删除的通讯录的编号:
";
charnum1[20];
cin.getline(num1,20,'\n');
if(head->next==NULL)
{
if(strcmp(num1,head->number)!
=0)
{
cout<<"你输入的编号不存在!
"<}
else
{
Fcxx1*p=head;
head=NULL;
deletep;
cout<<"该通讯录已删除,并且该系统已经没有通讯录了!
"<return;
}
}
else
{
if(strcmp(head->number,num1)==0)
{
Fcxx1*p=head;
head=head->next;
deletep;
cout<<"该通讯录已经删除!
"<}
else
{
intt=0;
Fcxx1*a1=head,*a2,*a3;
do
{
a2=a1->next;
a3=a2->next;
if(strcmp(a2->number,num1)==0)
{
t=1;
a1->next=a3;
deletea2;
}
a1=a1->next;
}while(a3!
=NULL);
if(t==0)
cout<<"没有该编号!
"<else
cout<<"该通讯录已经删除!
"<}
}
}
}
}
③.4键修改通讯录模块部分代码:
voidFcxxList1:
:
alter_Fcxx()//修改通讯录信息。
{
if(head==NULL)
{
cout<<"该系统还没有通讯录!
"<return;
}
else
{
chara1[2];
intn;
cout<<"请输入所要修改的人数:
";
cin.getline(a1,2,'\n');
n=atoi(a1);
if(n<=0)
return;
for(inti=1;i<=n;i++)
{
charnum2[20];
cout<<"请输入第"<
";
cin.getline(num2,20,'\n');
Fcxx1*p=head;
do
{
if(strcmp(p->number,num2)==0)
{
cout<<"请输入所修改新邮编:
";
cin>>p->yb;
cout<<"请输入所修改的新电话号码:
";
cin>>p->dhhm;
cout<<"请输入所修改的新QQ号:
";
cin>>p->qq;
cout<<"修改成功!
"<cout<<"--------------------------------"<break;
}
else
p=p->next;
}while(p!
=NULL);
}
}
}
④.5键显示全部通讯录信息模块部分代码:
voidFcxxList1:
:
export_all_Fcxx()//显示所有的通讯录
{
if(head==NULL)
cout<<"\n还没有通讯录!
\n"<else
{
Fcxx1*p=head;
cout<<"-----------------------------------------------"<cout<<"|编号|姓名|电话号码|邮编|QQ号码|"<printf1(p);
while(p->next!
=NULL)
{
p=p->next;
printf1(p);
}
cout<<"----------------------------------------\n";
}
}
⑤.1键保存信息模块部分代码:
voidFcxxList1:
:
Save(charfileName[])//保存信息到文件
{
//打开文件
ofstreamoFile(fileName,ios:
:
out|ios:
:
binary);
if(!
oFile)
{
cout<<"文件"<"<return;
}
Fcxx1*p=head;
while(p!
=NULL)
{
oFile.write((char*)p,sizeof(*p));
Fcxx1*q=p;
p=p->next;
deleteq;
}
cout<<"保存成功!
"<oFile.close();
}
⑥.读取模块信息的实现:
intFcxxList1:
:
Load(charfileName[])//读取文件信息
{
head=NULL;
Fcxx1*p;
ifstreamiFile(fileName,ios:
:
in|ios:
:
binary);
if(!
iFile)
{
cout<<"文件"<"<return1;
}
while(iFile.peek()!
=EOF)
{
p=newFcxx1();
iFile.read((char*)p,sizeof(Fcxx1));
Add_Fcxx(p);
}
cout<<"读取成功!
"<iFile.close();
return0;
}
5系统调试
下面是通讯录管理系统—分组信息模块的一些调试界面:
1.如图5-1是登录界面:
图5-1分组信息管理登陆界面
2.如图5-2是分组信息增加界面:
图5-2分组信息增加调试界面
3.修改模块信息调试界面,如图5-3:
图5-3修改模块信息调试界面
4.查询信息模块调试界面,如图5-4:
图5-4查询信息模块调试界
5.删除分组信息模块调试界面,如图5-5:
图5-5删除分组信息模块调试界面
6.保存分组信息模块调试界面,如图5-6:
图5-6保存分组信息模块调试界面
小结
随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫不疑问成为人们常用的日常工具,对于一个经常使用计算机的人来说,如何用好软件是一个很重要的问题,它对人们日常的很多操作有很大的帮助,对于一个技术人员,经常会接触到原代码,这就必须学会使用C语言,虽然现在大多数的软件的设计是通过其他高级语言以及采用系统集成软件编译,但它们的核心还是离不开使用C语言来构建。
本通讯录信息管理系统用计算机管理电子通讯录的一种计算机应用技术的创新。
现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理,通讯录管理系统是典型的信息管理系统。
通讯录管理系统是典型的信息管理系统,本系统主要完成对通讯信息的管理,包括添加、修改、删除,查询,以及排序等方面。
系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能。
通过两周的课程设计使我对编程有了更深的认识和理解,也使我更加明白通过C++对通讯录进行编程组建管理系统的重要性和方便性。
用C++对系统进行模块化结构和基本的编程,不仅可以使整个程序变得更加清晰明白,可以是整个通讯录很容易进行其基本功能,如:
查询、增加、修改、删除、读取、保存等。
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
在这次设计过程中,体现出自己单独设计通讯录管理系统的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢我们的屠添翼老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次管理系统的每个实验细节和每个数据,都离不开老师您的细心指导。
而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。
参考文献
【1】谭浩强.C语言程序设计(第2版).北京:
清华大学出版社2008.11
【2】陈维兴,林小茶.C++面向对象程序设计教程(第3版).北京:
清华大学出版社.2009.6
【3】网站:
【4】网站:
附录源程序
//FcxxList1.cpp:
implementationoftheFcxxListclass.
//
//////////////////////////////////////////////////////////////////////
#include"FcxxList1.h"
#include"iomanip"
#include"iostream"
#include"Fcxx1.h"
#include"fstream"
usingnamespacestd;
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
FcxxList1:
:
FcxxList1()
{
head=NULL;
}
FcxxList1:
:
~FcxxList1()
{
}
voidFcxxList1:
:
Fcxx_manage_choose(charfileName[])//通讯录管理总函数
{
if(Load(fileName)!
=0)
{
cout<<"通讯录管理系统启动失败!
\n";
return;
}
else
{
cout<<"\t\t\t欢迎进入通讯录分组系统\n\n\n\n";
cout<<"操作完成后,请选择安全退出并保存,否则数据将会丢失!
!
!
!
\n\n\n\n"<chars2[2];
intn2;
for(;;)
{
cout<<"1->安全退出并保存"<cout<<"2->增加通讯录"<cout<<"3->删除通讯录"<cout<<"4->修改通讯录"<cout<<"5->显示所有的通讯录"<cout<<"请选择(1--5):
";
cin.getline(s2,2,'\n');
cout<<"----------------------------\n";
n2=atoi(s2);
switch(n2)
{
case1:
Save(fileName);return;
case2:
Add_Fcxx();break;
case3:
delete_Fcxx();break;
case4:
alter_Fcxx();break;
case5:
export_all_Fcxx();break;
default:
cout<<"你的选择有误,请从新选择!
"<}
}
}
}
voidFcxxList1:
:
printf1(Fcxx1*s)//输出通讯录函数
{
cout<<"----------------------------------------\n";
cout<<"|"<number<<"|"<name<<"|"<dhhm<<"|"<qq<<"|"<yb<}
intFcxxList1:
:
input(Fcxx1*s)//输入通讯录函数
{
cout<<"请输入编号:
";
charnum[20];
cin.getline(num,20,'\n');
Fcxx1*k=head;
while(k!
=NULL)
{
if(strcmp(k->number,s->