《C++》课件项目4 学生通讯录管理系统.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《C++》课件项目4 学生通讯录管理系统.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ C+课件项目4 学生通讯录管理系统 课件 项目 学生 通讯录 管理 系统
- 资源描述:
-
1、项目项目4 学生通讯录管理系统学生通讯录管理系统课件目录4.1 项目情景14.2 知识准备24.3 项目解决34.4 知识拓展44.1 项目情景 一天小X找老师请假,在老师的办公室发现老师在为找不到某个同学的电话号码而愁眉苦脸,也没敢请假就直接回来了。郁闷之际,忽然来了灵感。为老师设计个“学生通讯录管理系统”吧,他迫不及待的找到小Z说了自己的想法,有着共同爱好的他们怎么能阻挡住这种冲动。回主目录回主目录4.1 项目情景 于是他们开始分析于是他们开始分析(1)通讯录里面放的是学生。我们需要学生是一种自己能够定义的类型。(2)学生有很多。我们需要有一个东西能够存放很多学生,而不是一个学生。(3)学
2、生有姓名、手机等信息。我们需要学生类型能够按照自己的需要添加信息。(4)存的学生数据要长期保存。我们需要将通讯录的数据保存到文件中,不是像以前在屏幕上显示一下没有保存。(5)通讯录要有的基本功能是记录的添加、删除与查询。使用前面的模块化方法,定义不同的函数完成不同的功能。回主目录回主目录4.2 知识准备4.2.1 结构体 4.2.2 一维数组 4.2.3 输入输出流 回主目录回主目录4.2.1 结构体 一条学生通讯录记录可能包括学生的姓名、性别、联系电话等信息。很明显,这些数据信息的类型是不同的,应该使用不同类型的变量来描述这些数据,例如姓名是字符串,性别是bool型等。但是,如果单独使用不同
3、的变量来定义这些属性,则难以体现出它们之间的内在联系,因此,我们需要把这几个数据存储在一起,作为一个整体来处理它们。C+提供了这样一种数据类型:结构体,它相当于数据库中的“记录”。回子目录回子目录4.2.1 结构体4.2.1.1 结构体定义 4.2.1.2 定义结构体变量 4.2.1.3 结构体类型变量的使用 4.2.1.4 结构体变量的初始化 回子目录回子目录4.2.1.1 结构体定义结构体类型的定义格式如下:struct 结构体类型名数据类型 成员名1;/结构体成员1数据类型 成员名2;/结构体成员2数据类型 成员名n;/结构体成员3;回子目录回子目录4.2.1.1 结构体定义说明:(1)
4、在声明结构体时,首先指定struct关键字和结构体类型名,然后使用一对大括号将若干个结构体成员的数据类型描述括起来,最后用分号结束。(2)必须在声明一种结构体的任何变量之前声明这种结构,否则,就会出现编译错误。回子目录回子目录4.2.1.1 结构体定义下面定义描述一个学生通讯录信息的结构体类型,包括:学生姓名、年龄、性别等信息。struct Student string Name;int Age;char Sex;string Tel;/分号不能省略小结:(1)结构体类型是用户自行构造的。(2)结构体由若干不同的基本数据类型的数据构成。(3)结构体属于C+语言的一种数据类型,与整型、实型相当。
5、因此,定义它时不分配空间,只有用它定义变量时才分配空间。回子目录回子目录4.2.1.2 定义结构体变量 C+语言中定义结构体类型变量的一般语法格式如下:struct 结构体名 成员表列表;struct 结构体名 变量名;例如,利用前面定义的学生结构体Student定义学生结构体的变量。Student student1;/定义一个结构体变量student1Student student2,student3;/同时定义两个结构体变量回子目录回子目录4.2.1.2 定义结构体变量 除了上面常用的定义格式,下面将介绍另外两种定义格式。1.在定义类型的同时定义变量 定义的一般形式如下:struct 结构
6、体名 成员表列;变量名;2.直接定义结构类型变量 定义的一般形式如下:struct /没有结构体名 成员表列;变量名;回子目录回子目录4.2.1.3 结构体类型变量的使用 结构体变量是不同数据类型的若干数据的集合体。在程序中使用结构体变量时,一般情况下不能把它作为一个整体参加数据处理,而参加各种运算和操作的是结构体变量的各个成员。结构体变量的成员用以下一般形式表示:结构体变量名.成员名 在定义了结构体变量后,就可以对结构体变量的每个成员赋值。例如,为前面定义的结构体变量student1赋值。student1.Name=孙奇振;student1.Age=16;student1.Sex=F;回子目
7、录回子目录4.2.1.4 结构体变量的初始化结构体变量的初始化 与其他类型变量一样,也可以给结构体的每个成员赋初值,这称为结构体变量的初始化。有两种初始化形式。1.在定义结构体变量时进行初始化。结构体名 变量名=初始数据表;2.在定义结构体类型时进行结构体变量的初始化。struct 结构体名 成员表列;变量名=初始数据表;例如,定义学生结构体变量并进行初始化。Student student1=李晓,18,F;回子目录回子目录4.2.1.4 结构体变量的初始化结构体变量的初始化#include#include using namespace std;struct Student string N
8、ame;int Age;char Sex;string Tel;void main()Student Stu1;Stu1.Name=张三;Stu1.Age=17;Stu1.Sex=f;Stu1.Tel=13800000000;cout“姓名:Stu1.Nameendl;cout年龄:Stu1.Ageendl;cout性别:Stu1.Sexendl;cout电话:Stu1.Telendl;例例4.1 4.1 结构体变量的使用。结构体变量的使用。回子目录回子目录4.2.1.4 结构体变量的初始化结构体变量的初始化运行结果如图所示:回子目录回子目录4.2.2 一维数组 在程序设计中,有时候要用到很多
9、的数据,而数据总是存放在变量中的。那么就需要很多的变量。然而,变量多了就变得难以管理了。对于很多数据,如果数据类型相同,且彼此间存在一定的顺序关系,为了便于处理,引入了数组类型。数组是一组有序数据的集合,数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。数组中的元素在内存中存放顺序是连续的。数组名代表数组元素在内存中的起始地址,即第一个元素的地址。数组可以分为一维数组,二维数组和字符数组,下面介绍一维数组的基本内容。回子目录回子目录4.2.2 一维数组4.2.2.1 一维数组的定义 4.2.2.2 一维数组的访问 4.2.2.3 一维数组的初始化 4.2
10、.2.4 结构体数组 回子目录回子目录4.2.2.1 一维数组的定义一维数组的定义 一维数组的定义格式如下:类型标识符 数组名元素个数;说明:(1)类型标识符,可以是基本数据类型,也可以是用户自定义的数据类型。(2)其中元素个数为一个整型常量表达式,它表示数组元素的个数即数组的长度。例如,下面给出了常用数组的定义。char name20;/定义一个字符型的数组int num3;/定义一个整型的数组float x3,y4;/同时定义了两个浮点型数组 第2行,表示定义了一个一维整型数组,数组名为num,数组共有3个元素,它们是:a0、a1、a2。一定要切记,数组元素的下标是从0开始的,对于我们此处
11、声明的数组没有a3这个元素。回子目录回子目录4.2.2.2 一维数组的访问 使用数组时,只能分别对数组的各个元素进行操作。数组要先定义后使用,数组元素的访问格式如下:数组名下标例如:int num3;num0=100;/将整数100存入数组num的第1个单元中例例4.2 数组的定义与使用。数组的定义与使用。#includeusing namespace std;void main()int a5;int i;for(i=0;i=0;i-)coutai=aiendl;/遍历输出数组元素运行结果如图所示:回子目录回子目录4.2.2.3 一维数组的初始化 数组可以在声明时进行初始化。数组初始化时数组
12、元素初始化值放在“”,“”号中,各值之间用“,”号分开。如果“”,“”号中初始值的个数比所声明的数组元素少,则不够的部分系统自动补0。声明数组时“”,“”号中可以不写元素的个数,编译器会自动根据初始化表中元素的个数确定数组的长度。例如:int a3=0,1,2;/a0=0,a1=1,a2=2 int a5=1,2,3;/a0=1,a1=2,a2=3,a3=0,a4=0 int a=1,2,3;/a0=1,a1=2,a2=3回子目录回子目录4.2.2.3 一维数组的初始化例4.3 求5个学生的C+课程的总分和平均分。void main()int i;float score5;/定义数组score
13、 float s=0.0,avg;cout请输入5个学生的C+成绩:endl;for(i=0;iscorei;s+=scorei;avg=s/5;cout总分是:sendl;cout平均分是:avg”从流中提取数据。(3)流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。2cout(1)cout是console output的缩写,意为“在控制台(终端显示器)的输出”。(2)程序中的变量通过流提取符“”从流中提取数据。(3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据。回子目录回子目录4.2.3.1 标准输入输出流3.cerrcerr是无缓冲标准错误输出
14、流,cerr是console error的缩写,意为“在控制台(显示器)显示出错信息”。cerr与cout的区别:(1)cerr不能重定向,只能输出到显示器。(2)cerr不能被缓冲,直接输出到显示器。4.clogclog是缓冲标准错误输出流,是console log的缩写,意为“在控制台(显示器)显示日志信息”。clog 与 cerr区别:clog能被缓冲,缓冲区满时输出。cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。回子目录回子目录4.2.3.1 标准输入输出流例4.4 求两个数的除法,如果除数为0,提示出错。i
15、nt main()int x,y;coutxy;if(y=0)cerr除数为零,出错!endl;/将出错信息插入cerr,屏幕输出 else coutx/yendl;回子目录回子目录4.2.3.2 文件流 在C+语言中,文件被看成是字符序列,即文件是由一个个的字符数据顺序组成的,是一个字符流。要对文件进行I/O,必须首先创建一个流,然后将这个流与文件相关联,即可在打开文件后,对文件进行读/写操作。操作完成后,再关闭这个文件。文件流是一个I/O中非常重要的一个内容,它的输入是指从磁盘文件流向内存,它的输出是指从内存流向磁盘。fstream.h头文件包括三个流类:输入文件流类ifstream、输出
16、文件流类ofstream和输入/输出文件流类fstream。其功能如表所示。流类名功能ifstream用于文件的输入ofstream用于文件的输出fstream用于文件的输入与输出回子目录回子目录4.2.3.2 文件流1.文件的打开 C+语言中,定义了成员函数open()用于打开文件。open()函数是上述三个流类的成员函数,其原型定义在fstream.h中。打开文件应先定义一个流类的对象,然后使用open()函数打开文件。open()函数原型为:void open(const unsigned char*,int mode,int access=filebuf:openprot);open(
17、)函数第一个参数用来传递文件名,第二个参数指定文件的打开方式,这些参数是定义在抽象类中,常用如表4-2所示:表4-2 文件打开模式方式含义ios:in打开一个文件进行读操作ios:out打开一个文件进行写操作ios:app使输出追加到文件尾部ios:ate文件打开时,文件指针位于文件尾ios:trunc如果文件存在,则清除该文件的内容,文件长度压缩为0ios:binary以二进制方式打开文件,默认方式是文本字节流回子目录回子目录4.2.3.2 文件流打开文件有两种方法:(1)首先建立流对象,然后调用open()函数连接外部文件。流类 对象名;对象名.open(文件名,打开方式);(2)调用流类
18、带参数的构造函数,建立流对象的同时连接外部文件。流类 对象名(文件名,打开方式);回子目录回子目录4.2.3.2 文件流例4.5 打开D盘下的文件txl.txt。(1)打开一个已有文件txl.txt,准备读:ifstream infile;/建立输入文件流对象 infile.open(d:txl.txt,ios:in);/连接文件,指定打开方式(2)打开(创建)一个文件txl.txt,准备写:ofstream outfile;/建立输出文件流对象 outfile.open(d:txl.txt,ios:out);/连接文件,指定打开方式(3)打开一个文件txl.txt,进行读写操作:fstrea
19、m rwfile;rwfile.open(d:txl.txt ,ios:in|ios:out);小结:(1)打开一个输入文件流,必须说明类型为 ifstream 的对象。(2)打开一个输出文件流,必须说明类型为ofstream 的对象。(3)要建立输入和输出的文件流,必须说明类型为 fstream 的对象。(4)可以用或运算符“|”连接两个表示打开方式的标识常量。回子目录回子目录4.2.3.2 文件流2.文件的关闭 函数close()的作用是关闭一个文件与输入/输出文件流的联系。使用完一个文件后,应该把它关闭。close()函数是流类中的成员函数,它不带参数,没有返回值。调用close()函数
20、的格式如下:流对象名.close();例如:关闭例4.5中(1)的文件。infile.close();/关闭与流in相联接的文件 说明:close()函数一次只能关闭一个文件,文件使用完后应及时关闭。回子目录回子目录4.2.3.2 文件流3.ofstream ofstream类用于执行文件的输出操作,使用时的一般过程如下:(1)打开文件:创建ofstream流类的对象,建立流对象与指定文件的关联。(2)从文件读入:用ofstream的“”以及其他的输入函数读文件中的数据。(3)关闭文件:用ofstream的成员函数close关闭流对象,取消流对象与文件的关联。回子目录回子目录4.2.3.2 文
21、件流例4.6 向D盘文件my1.txt保存数据。void main()ofstream ost;/创建输出流对象 ost.open(D:my1.txt);/建立文件关联,缺省为文本模式 ost12endl;/向流插入数据 ost30”以及其他的输入函数读文件中的数据。关闭文件:用ifstream的成员函数close关闭流对象,取消流对象与文件的关联。在进行输入操作前要判断文件是否正确打开。代码如下:if(!in_file)/或if(in_file.fail()./处理打开失败回子目录回子目录4.2.3.2 文件流例4.7 将例4.6存入D盘文件my1.txt中的数据读取并显示。void mai
22、n()ifstream ist(d:my1.txt);/创建输入流对象并建立关联 if(!ist)/或if(ist.fail()cerr x y;/从流提取数据 cout “x“t”y“endl;cout x “t”y endl;/向显示器输出数据回子目录回子目录4.2.3.2 文件流5.fstream fstream类用于对某个文件同时执行读写操作,使用时的一般过程如下:(1)打开文件:创建fstream流类的对象,建立流对象与指定文件的关联。(2)从文件读入:用fstream的“”以及其他的输入输出函数读文件中的数据。(3)关闭文件:用fstream的成员函数close关闭流对象,取消流对
23、象与文件的关联。回子目录回子目录4.2.3.2 文件流文件流例4.8 定义一个学生结构体,将结构体数组的信息输出到文件,再从文件中读取数据做为输入到结构体数组。struct Student/结构体的定义也可以写在stdafx.h文件中char name20;int age;void main()fstream f;Student st1N;Student st23;int i;cout 请输入 2 个人的姓名和年龄:endl;/通过键盘输入for(i=0;i st1i.name st1i.age;f.open(D:1.txt,ios:out|ios:app);4.2.3.2 文件流文件流/将数
24、组中数据输出到文件for(i=0;i2;i+)f st1i.name t st1i.age st2i.name st2i.age;i+;f.close();4.3 项目解决项目解决 根据前面的分析,该项目-通讯录管理系统主要应具备以下功能:输入学生信息,输出学生信息,查询学生信息,添加学生信息,删除学生信息以及关闭通讯录等功能。回主目录回主目录4.3 项目解决项目解决 根据功能模块图,我们可以做出系统程序流程图。开始列出一个操作目录,选择要操作的编号选择要操作的编号一 输入学生信息二 输出学生信息四 追加记录五 删除记录六 退出系统列出一个操作目录选择要操作的编号结 束三 查询学生信息回主目录
25、回主目录4.3 项目解决项目解决1.定义学生类型及存放通讯录的学生数组 根据前面所学的结构体的知识,定义一个学生结构体类型和部分项目所需要的全局变量。/定义学生类型struct Student char Name20;int Age;char Sex;char Tel13;/定义学生数组struct Student st100;/最多可以存100个学生int Num=0;/保存现有系统中实际存在的人数fstream ftxl;/公共的文件int fNum=0;/保存文件中已经存在的记录数 回主目录回主目录4.3 项目解决项目解决2.定义输入函数,完成最初学生记录的输入(1)函数原型:InStu
展开阅读全文