C++课程设计—航空售票管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内蒙古科技大学
本科生《C++程序设计》课程设计说明书
题目:航空售票管理系统
学生姓名:完美主义
学号:XXXXXXXX
专业:计算科学与技术
班级:计2010-1班
指导教师:XXX
【摘要】
随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。
然而,交通的快捷离不开信息的快捷。
随着随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。
在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就可以很好地满足我们的需求。
航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。
本文介绍了简易航空售票管理系统的实现过程。
【关键词】
航空售票管理系统动态数组类和对象文件操作运算符重载多文件结构
成绩评定标准
课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。
目录
第一章问题描述 (1)
第二章问题分析 (2)
2.1 阐述你对问题的理解、解决问题的方案说明 (2)
2.2 系统功能模块的划分 (2)
第三章数据模型 (4)
3.1 相关数据结构的说明 (4)
3.2 类的设计 (4)
3.3 程序结构说明,即程序各个部分之间如何协调来完成任务 (5)
3.4 全局变量,重要形式参数、局部变量等等,它们的命名及用途解释 (6)
第四章算法描述 (7)
4.1 解题算法的设计思路介绍 (7)
4.2 画出程序流程图 (7)
第五章设计总结 (13)
附录 (14)
参考文献 (33)
………………………………………………………………………………………………
………………………………………………………………………
1.1该航空售票管理系统必须用C++语言进行设计,要能体现C++语言的特性。
1.2该系统至少要能提供下列服务:
(1)录入航班信息,格式为:
可不定时地增加航班数据。
(2)浏览航班信息,可显示出所有航班,如果当前系统时间超过了某航班的起飞时间,则显示“此次航班已发出”的提示信息。
(3)查询路线:可按航班编号查询,可按起始站,终点站查询
(4)订票和退票功能
A:查询航班编号或站点。
当剩余座位数大于0,并且当前系统时间小于起飞时间时才能售票,售票后自动更新剩余座位数。
B:退票时,输入退票的班次,当本班航班未发出时才能退票,退票后自动更新剩余座位数。
从对问题的描述可以知道,我们需要建立的是具有能对数据录入,追加,浏览,检索和修改功能的软件。
由于乘客的数量较大且不固定,因此选择用动态数组来保存乘客的基本信息:航班号、起始站名、终点站名、起飞时间、经济参票价、余票量等等。
所以我们建立一个可以动态增长的数组,在必要的时候将数组的内容保存到文件中。
系统主要实现的操作和功能是:录入航班信息、浏览航班信息、查询航线、订票功能、退票功能。
要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
2.1 阐述你对问题的理解、解决问题的方案说明
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成.员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告以及系统使用说明书。
2.2 系统功能模块的划分
该系统总共包含四大功能模块:
一、更新航班信息功能模块
该模块为对航班信息的操作,仅向管理员开放使用,普通用户不能使用该功能对
航班信息进行操作,故进入该功能需进行身份验证。
该模块又被分为五个子功能模块——信息库的重建、信息的插入、修改、删除和清空数据。
二、浏览航班信息
完成将文件中的航班信息按照要求格式全部输出。
三、查询航班信息
可以实现按航班号和按站点的查询并将查询到的信息输出。
四、订票和退票系统
该模块根据订票和退票操作的相似性,将这两种操作放在一起。
另外,由于各模块函数是直接对文件进行操作,所以各功能模块是相互独立的。
第三章数据模型
3.1 相关数据结构的说明
本系统用到的容器主要是动态增长的vector ,使用该容器需用头文件#include <vector>,其通过语句vector <Flight> v_array;申请了一个可以动态增长的数组。
该数组的元素类Flight的对象,通过语句Flight fly; v_array.push_back(fly);可实现数组v_array 的增长。
该容器用来存放航班类Flight的对象,使用该容器可以可以存放个数不确定的对象,且可以方便地进行访问。
3.2 类的设计
程序中一共定义了两个类:Flight类和Traffic_system类。
在Flight类里定义了私有数据成员m_fnum[10]表示航班号,m_ftime[2]表示起飞时间,char m_fstar[18]表示起始站,m_fdestination[18]表示终点站,m_fprice表示票价,m_fseat表示票数;定义了共有的成员函数bool SetInfo()用来设置航班信息,friend istream& operator>>(istream& in, Flight& cp)用来重载提取运算符>>,friend ostream& operator<<(ostream& out, Flight& cp)用来重载插入运算符<<,void Display()用来输出航班信息,bool Book()用来订票,void Refund()用来退票,bool If_takeoff()用来判断是否起飞,bool If_deleted()用来判断该航班是否被删除,bool If_match(char (*p)[18], char ta)用来判断航班号或站点名是否相同。
另一个类为Traffic_system类,其中定义了私有数据成员m_sum和v_array,v_array 是数组名,用来存放航班类对象,m_sum表示数组v_array中航班类对象的个数;还定义了私有的成员函数void Read_file()用来读取文件,void Save_file()用来保存数据到文
件,以及公有的数据成员函数void Manage()用来管理航班信息,void Scan()用来浏览航班信息,int Search(int invoke = 0)完成查询功能,void BookRefund()用来订票和退票。
两个类之间是组合的关系,其中Flight类是Traffic_system类的子类。
3.3 程序结构说明,即程序各个部分之间如何协调来完成任务
程序的结构图如下:
如上图,程序中各功能模块所需的数据都直接取自文件,这样保证了各模块的独立性和数据的安全性。
并且只有相应的模块进行写的操作,并且数据的写入不必依赖其他模块,这样使用户可以仅使用其中某一项功能,而不必进行多余的操作。
3.4 全局变量,重要形式参数、局部变量等等,它们的命名及用途解释(1)整个程序中未使用全局变量。
(2)重要形参
A) 提取运算符重载函数istream& operator>>(istream& in, Flight& cp)中使用了形参in和cp,形参in为引用“istream&”,与该函数的返回值相同,故可以将该函数的返回值传给该形参,实现“>>”操作符的连续使用。
形参cp为引用“Flight&”,实现了对Flight 类对象的输入重载。
B) 插入运算符重载函数ostream& operator<<(ostream& out, Flight& cp)中使用了形参out和cp,其作用与上面类似。
C) 函数bool Flight::If_match(char (*p)[18], char ta)中使用了形参p 和ta,形参p为指向字符数组的指针,它用来指向一个大小为18的字符数组;形参ta为字符型,其作用是使该函数区分航班号和站点名两种比较。
D) 函数int Traffic_system::Search(int invoke = 0)中使用了形参invoke,该形参为int型并设置默认参数0,其作用为区分调用者,以便输出相应的提示信息。
第四章算法描述
4.1 解题算法的设计思路介绍
首先根据问题描述抽象出一个航班类,封装了航班的数据信息和方法。
数据里主要有航班的航班号、起飞时间、站点等信息,方法主要是对该类中数据的值的输入、输出对本班次机票的管理,对时间、站名等的核对,另外为了方便对文件的输出和读取,还以友元的形式重载了提取和插入运算符。
由于有航班有多组,为了方便管理各个对象,所以有定义了一个Traffic_system类,将Flight类的对象作为Traffic_system类的数据成员。
Traffic_system类中还定义了两个私有的成员函数完成对文件的读写。
共有的成员函数主要是Manage(),void Scan(),Search(int invoke = 0)和BookRefund(),用来完成系统的几大功能。
4.2 画出程序流程图
文件“航空售票管理系统v-1.0.cpp”中
主函数流程图——main()
文件“class/Traffic_system.cpp”中
类中Traffic_system中
浏览函数——void Scan()
查询函数——Search(int invoke = 0)
订票退票函数BookRefund()
第五章设计总结
此课程设计完成了对航线查询、订票、退票等功能的设计操作,并且为了插入和删除方便,运用动态数组做存储结构。
此课程设计还包含了清屏功能以及退出功能。
对程序在运行时输入错误操作的修改,提供了一定方便条件基本上能安全的运行,具备的功能符合题目的要求。
用了文件的操作,是此程序的最大优点。
程序写的还算简练,结构清晰,各个模块的分工和功能明确。
经过两周的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。
我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来通过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。
通过这次课设我对C++语言中的类的定义、运算符重载等知识有了进一步的理解,对流程图的画法更加熟练,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C++语言的重要性。
程序中运用了多文件结构,虽然程序不是太大,但多文件结构的使用是我模仿正规软件的结构来写的,我想这对我以后的提高有帮助。
另外,对程序的不断调试,是我的查错能力有了很大的提高。
附录
【程序清单】
文件——航空售票管理系统v-1.0.cpp
#include <fstream>
#include <iostream>
using namespace std;
#include "class/Traffic_system.h"
int main()
{
Traffic_system civil_aviation;
//若文件不存在,则新建文件
ofstream newfile( "flight information.txt", ios::app );
if (!newfile)
{
cerr << "文件\"flight information.txt\"无法打开!\n";
exit(2);
}
newfile.close();
int tab;
while(1)
{
cout << "\n>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎进入航空售票管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
<< "****** 主菜单:***********"
<< "****** 1——更新航班信息(需管理员身份验证)2——浏览航班信息***********"
<< "****** 3——查询航班信息4——订票和退票***********"
<< "****** 5——清屏0——退
出系统***********"
<<
"*************************************************************************** *****"
<< "你需要做什么?(选择0~4)" << endl;
cin >> tab;
while(!(tab == 1 || tab == 2 || tab == 3 || tab == 4 || tab == 5 || tab == 0))
{
cout << "请输入正确选择(0~4):";
cin >> tab;
}
switch(tab)
{
case 1:
{
civil_aviation.Manage();
break;
} //航线管理
case 2:
{
civil_aviation.Scan();
break;
} //订票办理
case 3:
{
civil_aviation.Search();
break;
} //退票办理
case 4:
{
civil_aviation.BookRefund();
break;
}
case 5: system("cls"); break;
case 0:return 0; //退出系统
}
}
}
文件——class/Traffic_system.h
#include <vector>
using namespace std;
#include "flight.h"
//用于对文件的操作
class Traffic_system
{
public:
Traffic_system()
{
m_sum = 0;
}
void Manage();//管理航班信息
void Scan();//浏览
int Search(int invoke = 0);//查询功能
void BookRefund();//订票和退票private:
void Read_file();//读取文件
void Save_file();//保存文件private:
int m_sum;//记录航班数
vector <Flight> v_array;//航班类数组};
文件——class/Traffic_system.cpp
#include <fstream>
#include <iostream>
using namespace std;
#include "Traffic_system.h"
//读取文件
void Traffic_system::Read_file()
{
ifstream file( "flight information.txt");
if (!file)
{
cerr << "文件\"flight information.txt\"无法打开!\n";
exit(1);
}
m_sum = 0;
while (!file.eof())
{
Flight fly;
v_array.push_back(fly);//
file >> v_array[m_sum++];
}
m_sum--;//
file.close();
}
//保存文件
void Traffic_system::Save_file()
{
ofstream file( "flight information.txt" , ios::trunc);
if (!file)
{
cerr << "文件\"flight information.txt\"无法打开!\n";
exit(2);
}
int i = -1;
while (++i < m_sum)
{
if (!v_array[i].If_deleted())
{
file << v_array[i];
}
}
file.close();
}
//管理航班信息
void Traffic_system::Manage()
{
char password[20];//用于存贮密码
int times = 3;
cout << "登录系统需验证密码!" << endl;
//验证密码。
三次错误后,就自动退出程序
do
{
times--;
cout << "请输入密码:(默认000)";
cin >> password;
if(strcmp(password, "000") == 0)//密码是“000”
{
times = -1;
break;
}
else if (times > 0)
cout << " 密码错误!\n 剩余" << times << "次机会!" << endl;
}while(times > 0);
if(times != -1)
{
cout << "对不起!\n 您不是管理员! 不能使用此系统!" << endl;
return;
}
system("cls");
while (1)
{
int tab;
cout << "\n******************************欢迎使用航班信息管理系统**************************\n"
<< "————————————————————————————————————————"
<< "\t**\t >>1——重新创建信息库\t\t >>2——插入信息**\n\t**\t >>3——修改信息\t\t >>4——删除信息**\n\t**\t >>5——删除全部\t\t >>0——退出管理**\n"
<< "————————————————————————————————————————"
<< "你需要做什么?(选择0~5)" << endl;
cin >> tab;
while(!(tab == 1 || tab == 2 || tab == 3 || tab == 4 || tab == 5 || tab == 0))
{
cout << "请输入正确选择(0~5):";
cin >> tab;
}
switch(tab)
{
case 1:
{
m_sum = 0;
Flight fly;
cout << "请进行信息录入。
按“+”结束!\n";
do
v_array.push_back(fly);//
while (v_array[m_sum++].SetInfo());
break;
}
case 2:
{
Read_file();
Flight fly;
cout << "请进行信息录入。
按“+”结束!\n";
do
v_array.push_back(fly);//
while (v_array[m_sum++].SetInfo());
break;
}
case 3:
{
char fnum[1][18];
Read_file();
cout << "请输入您要修改信息的航班号:";
cin >> fnum[0];
int i = 0;
for (; i < m_sum; i++)
{
if (v_array[i].If_match(fnum, '1'))
{
cout << "该航班的原信息为:\n"
<< " ———————————————————————————————————————\n"
<< "丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"
<< " ———————————————————————————————————————\n";
v_array[i].Display();
cout << "请输入正确信息!\n";
v_array[i].SetInfo();
m_sum++;//保持及总航线数不变
break;
}
if (i == m_sum)
{
cout << "抱歉!您要修改的信息不存在!" << endl;
return;
}
m_sum++;//
break;
}
case 4:
{
char fnum[1][18];
Flight empty;//声明"空"对象,用于删除
Read_file();
cout << "请输入您要删除航班的航班号:";
cin >> fnum[0];
int i = 0;
for (; i < m_sum; i++)
{
if (v_array[i].If_match(fnum, '1'))
{
cout << "您要删除的航班为:\n"
<< " ———————————————————————————————————————\n"
<< "丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"
<< " ———————————————————————————————————————\n";
v_array[i].Display();
v_array[i] = empty;
m_sum++;//保持及总航线数不变
break;
}
if (i == m_sum)
{
cout << "您要删除的信息不存在!" << endl;
return;
}
break;
}
case 5:m_sum = 1; break;
case 0:return;
}
cout << "《确认\\Y》《取消\\N》\n请选择:";
char yn;
do
{
cin >> yn;
}while(!(yn == 'Y' || yn == 'y' || yn == 'N' || yn == 'n' ));
if(yn == 'Y' || yn == 'y')
{
m_sum--;//对应m_sum++
Save_file();
cout << "操作成功!" << endl;
}
}
}
//浏览
void Traffic_system::Scan()
{
char c;
Read_file();
if (m_sum == 0)
{
cout << "暂无信息!请等待管理人员更新!";
return;
}
cout << "\t航班信息表:\n"
<< " ———————————————————————————————————————\n"
<< "丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"
<< " ———————————————————————————————————————\n";
for (int i = 0; i < m_sum; i++)
v_array[i].Display();
cout << "按任意键返回主菜单!";
cin >> c;
}
//查询功能
int Traffic_system::Search(int invoke)
{
int tab;
Read_file();
cout << "*************************************************************************\n *** >>1——按航班号查询>>2——按站点查询>>0——返回***\n*********************************************************************** **\n请选择(0~2):"
<< endl;
cin >> tab;
while(!(tab == 1 || tab == 2 || tab == 0))
{
cout << "请输入正确选择(0~2):";
cin >> tab;
}
char str[2][18], ta;
if (tab == 0)
return -1;
else if (tab == 1)
{
cout << "请输入航班号:";
cin >> str[0];
ta = '1';
}
else
{
cout << "请输入出发站:";
cin >> str[0];
cout << "请输入终点站:";
cin >> str[1];
ta = '2';
}
for (int i = 0; i < m_sum; i++)
{
if (v_array[i].If_match(str, ta))
{
cout << "您要查询的结果如下:\n"
<< " ———————————————————————————————————————\n"
<< "丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"
<< " ———————————————————————————————————————"
<< endl;
v_array[i].Display();
if (invoke == 0)
{
cout << "按任意键返回主菜单!";
char c;
cin >> c;
}
return i;
}
}
cout << "抱歉!您查询的航班不存在!" << endl;
return -1;
}
//订票和退票
void Traffic_system::BookRefund()
{
while (1)
{
cout
<< "**************************欢迎进入机票服务系统**********************\n\n"
<< "——————————————————————————————————\n"
<< "请选择:\t\t\t\t\t\t\t\t ***\n***\t >>1——订票\t>>2——退票\t>>0——返回主菜单***\n"
<< "——————————————————————————————————" << endl;
int tab;
cin >> tab;
while(!(tab == 1 || tab == 2 || tab == 0))
{
cout << "请输入正确选择(0~2):";
cin >> tab;
}
char ta;
switch(tab)
{
case 1:
{
cout << "请先查找该航班:" << endl;
int i;
i = Search(1);
if (i != -1 && v_array[i].Book())
{
cout << "《确认订票\\Y》《取消订票\\N》\n请选择:";
do
{
cin >> ta;
}while(!(ta == 'Y' || ta == 'y' || ta == 'N' || ta == 'n' ));
if(ta == 'Y' || ta == 'y')
{
Save_file();
cout << "订票成功!" << endl;
}
}
break;
}
case 2:
{
char str[1][18];
Read_file();
cout << "请输入航班号:";
cin >> str[0];
int i = 0;
for (; i < m_sum; i++)
{
if (v_array[i].If_takeoff())
continue;
if (v_array[i].If_match(str, '1'))
{
v_array[i].Refund();
cout << "《确认退票\\Y》《取消退票\\N》\n请选择:";
do
{
cin >> ta;
}while(!(ta == 'Y' || ta == 'y' || ta == 'N' || ta == 'n' ));
if(ta == 'Y' || ta == 'y')
{
Save_file();
cout << "退票成功!" << endl;
}
break;
}
}
if (i == m_sum)
{
cout << "不存在该航班或该航班已起飞!不能退票。
" << endl;
break;
}
}
case 0:return;
}
}
}
文件——class/ flight.h
class Flight
{
public:
Flight()
{
m_fnum[0] = '+';
}
bool SetInfo();//设置航班信息
friend istream& operator>>(istream& in, Flight& cp);//提取运算符重载
friend ostream& operator<<(ostream& out, Flight& cp);//插入运算符重载
void Display();//输出航班信息
bool Book();//订票
void Refund();//退票
bool If_takeoff();//判断是否起飞
bool If_deleted();//判断是否删除
bool If_match(char (*p)[18], char ta);//判断航班号或站点名是否相同
private:
char m_fnum[10];//航班号
int m_ftime[2];//起飞时间
char m_fstar[18];//起始站
char m_fdestination[18];//终点站
int m_fprice;//票价
int m_fseat;//票数
};
文件——class/ flight.cpp
#include <iostream>
#include <string>
#include <iomanip>
#include <ctime>//time.h in C
using namespace std;
#include <stdio.h>
#include "flight.h"
//<<运算符重载
istream& operator>>(istream& in, Flight& cp)
{
in >> cp.m_fnum >> cp.m_fstar >> cp.m_fdestination >> cp.m_ftime[0] >> cp.m_ftime[1] >> cp.m_fprice >> cp.m_fseat;
return in;
}
ostream& operator<<(ostream& out, Flight& cp)
out << cp.m_fnum << " " << cp.m_fstar << " " << cp.m_fdestination << " " << cp.m_ftime[0] << " " << cp.m_ftime[1] << " " << cp.m_fprice << " " << cp.m_fseat << "\n";
return out;
}
//获取系统时间
int get_systemtime()
{
time_t now;
struct tm *fmt;
time(&now);
fmt = localtime(&now);
return (fmt->tm_hour * 60 + fmt->tm_min);
}
//判断是否起飞
bool Flight::If_takeoff()
{
return (m_ftime[0] * 60 + m_ftime[1] <= get_systemtime());
}
//判断是否作废
bool Flight::If_deleted()
{
return m_fnum[0] == '-';
}
//判断航班号或站点名是否相同
bool Flight::If_match(char (*p)[18], char ta)
{
if (ta == '1')
return (!strcmp(m_fnum, p[0]));
else
return (!strcmp(m_fstar, p[0]) && !strcmp(m_fdestination, p[1]));
//设置航班信息
bool Flight::SetInfo()
{
cout << "输入航班号:";
cin >> m_fnum;
if (m_fnum[0] == '+')
return false;
cout << "起始站:";
cin >> m_fstar;
cout << "终点站:";
cin >> m_fdestination;
cout << "请输入起飞时间:(格式:03:05)";
scanf("%d:%d",m_ftime, m_ftime + 1);
cout << "票价:";
cin >> m_fprice;
cout << "余票:";
cin >> m_fseat;
return true;
}
//输出航班信息
void Flight::Display()
{
if (If_takeoff())
{
cout << "丨" << setiosflags(ios::left) << setw(10) << m_fnum << "丨" << setw(18) << m_fstar << "丨" << setw(18) << m_fdestination
<< "丨" << " 本次航班已经起飞!" << " 丨"
<< " ———————————————————————————————————————"
<< endl;
}
{
cout << "丨" << setiosflags(ios::left) << setw(10) << m_fnum << "丨" << setw(18) << m_fstar << "丨" << setw(18) << m_fdestination
<< "丨" << setiosflags(ios::right) << setw(2) << setfill('0') << m_ftime[0] << ":" << setw(2) << m_ftime[1] << setfill(' ')
<< " 丨" << setw(4) << m_fprice << "丨" << setw(5) << m_fseat << "丨" << resetiosflags(ios::right)
<< " ———————————————————————————————————————"
<< endl;
}
}
//订票
bool Flight::Book()
{
if (If_takeoff())
{
cout << "该航班已经起飞,停止售票!" << endl;
return false;
}
int count;
cout << "请输入订购的票数:";
cin >> count;
if (m_fseat < count)
{
cout << "余票不足!" << endl;
return false;
}
m_fseat -= count;
return true;
}
void Flight::Refund()
{
if (If_takeoff())
{
cout << "该航班已经起飞,停止退票!" << endl;
return;
}
int count;
cout << "请输入退订票数";
cin >> count;
m_fseat += count;
}
参考文献
[1] Bjarne Stroustrup, THE C++ PROGRAMMING LANGUAGE, Higher Education Press Pearson Education,2002
[2] [美]Walter Savitch著,周靖译,C++面向对象程序设计——基础、数据结构与编程思想,清华大学出版社,2004
[3] [美]Brian Overland著,董梁等译,C++语言命令详解,电子工业出版社,2000
[4] [美]AI Stevens著,林瑶等译,C++大学自学教程,电子工业出版社,2004
[5] 刁成嘉主编,面向对象C++程序设计,机械工业出版社,2004
[6] 刘瑞新主编,曹建春,沈淑娟,张连堂等编著,Visual C++面向对象程序设计程,机械工业出版社,2004
[7] 陈文宇,张松梅编著,C++语言教程,电子科技大学出版社,2004
[8] 张凯主编,付兴宏主审,VC++程序设计,大连理工大学出版社,2002。