C课设报告.docx
- 文档编号:29724591
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:28
- 大小:338.48KB
C课设报告.docx
《C课设报告.docx》由会员分享,可在线阅读,更多相关《C课设报告.docx(28页珍藏版)》请在冰豆网上搜索。
C课设报告
青岛理工大学
C++面向对象课程设计报告
院(系):
计算机工程学院
专业:
计算机科学与技术专业
学生姓名:
__
班级:
___学号:
题目:
__航空售票系统_
起迄日期:
_2010.12.20——2010.12.31_
设计地点:
2#实验楼402
指导教师:
完成日期:
2010年12月31日
一、需求分析
1.1选题目的:
当今高速发展的社会下,航空逐渐成为大多数远程旅途人们的最好的选择,为了方便人们能够方便的对各航班进行查询及买票、退票因此选做次课题,同时也能提高自己的编程能力,掌握C++编程在数据库方面的应用,通过实际编程加深对基本原理的理解,为以后打下一个良好的基础。
1.2功能:
该程序能够实现对航班的查询、修改、删除和添加功能,对客户还有买票、退票功能,的同时能输出买票花费的钱数还能显示当前记录的前一条和后一条记录。
二、设计内容
2.1数据库设计
该数据库中只包含一个表,表中包含航班的信息如下表格
航班号
起点站
终点站
起飞时间
日期
头等舱
头等舱价格
公务舱
公务舱价格
经济舱
经济舱价格
航班号1
姓名
联系方式
头等舱1
公务舱1
经济舱1
2.2系统功能模块图
2.3主程序及其主要模块的流程图
2.4类图
CRecordset
public
CFlightsystemSet
public:
CFlightsystemSet(CDatabase*pDatabase=NULL);
virtualCStringGetDefaultConnect();
virtualCStringGetDefaultSQL();
virtualvoidDoFieldExchange(CFieldExchange*pFX);
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
CStringm_column1;
CStringm_column2;
CStringm_column3;
CStringm_column4;
CStringm_column5;
longm_column6;
longm_column7;
longm_column8;
longm_column9;
longm_column10;
longm_column11;
CStringm_column12;
longm_column13;
longm_column16;
CStringm_column14;
longm_column17;
longm_column15;
CRecordView
public
CFlightsystemView
public:
CFlightsystemDoc*GetDocument();
virtual~CFlightsystemView();
virtualCRecordset*OnGetRecordset();
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
voidRefreshData();
enum{IDD=IDD_FLIGHTSYSTEM_FORM};
CFlightsystemSet*m_pSet;
CStringm_dest;
intm_firstp;
intm_firsts;
intm_firsts1;
CStringm_from;
intm_lastp;
intm_lasts;
intm_lasts1;
CStringm_planeno;
CStringm_planeno1;
intm_secondp;
intm_seconds;
intm_seconds1;
CStringm_date;
CStringm_offtime;
intm_total;
CStringm_name;
intm_phone;
protected:
CFlightsystemView();
virtualvoidDoDataExchange(CDataExchange*pDX);virtualvoidOnInitialUpdate();
afx_msgvoidOnButtonBook();
afx_msgvoidOnButtonCheck();
afx_msgvoidOnButtonDelete();
afx_msgvoidOnButtonInsert();
afx_msgvoidOnButtonQuit();
afx_msgvoidOnRecordFirst();
afx_msgvoidOnRecordNext();
afx_msgvoidOnRecordPrev();
afx_msgvoidOnButtonChange();
2.5设计步骤
配置数据源
在配置数据源前要先建好相应的Access然后选择添加按钮如下图,选
数据库,然后配置ODBC数据源,“控制择MicrosoftAccessDriver(*.mdb)
面板”→“管理”→“数据源”,弹出下图点击完成
对话框。
最后选择数据库,添加上数据源名和说明点击确定
(2)建立工程
用MFCAppWizard(exe)创建一个新工程,如下图,命名为flightsystem
(3)设置工程属性
在MFCAppWizard(exe)中按照下列步骤单击下一步按钮,选中“数据库查看使用文
设置工程属性,设置工程属性为单文档模件支持”复选框,单击Datasource…按钮如下
式,选中“文档/查看体系结构支持”复选图操作
框,如下图
选中表点击OK,然后点击完成即可
(4)编辑对话框IDD_FLIGHTSYSTEM_FORM如下图
其中各控件的设置如下表
资源标志
标题
相关属性/事件
IDC_STATIC
航班号
IDC_EDIT_PLANENO
CStringm_planeno
IDC_STATIC
行程
IDC_EDIT_FROM
CStringm_from
IDC_EDIT_DEST
CStringm_dest
IDC_STATIC
起飞时间
IDC_EDIT_OFFTIME
CStringm_offtime
IDC_STATIC
头等舱数量
IDC_EDIT_FIRSTS
intm_firsts
IDC_STATIC
头等舱价格
IDC_EDIT_FIRSTP
intm_firstp
IDC_STATIC
公务舱数量
IDC_EDIT_SECONDS
intm_seconds
IDC_STATIC
公务舱价格
IDC_EDIT_SECONDP
intm_secondp
IDC_STATIC
经济舱数量
IDC_EDIT_LASTS
intm_lasts
IDC_STATIC
经济舱价格
IDC_EDIT_LASTP
intm_lastp
IDC_STATIC
航班号
IDC_EDIT_PLANENO1
CStringm_planeno1
IDC_STATIC
姓名
IDC_EDIT_NAME
CStringm_name
IDC_STATIC
联系方式
IDC_EDIT_PHONE
intm_phone
IDC_STATIC
头等舱
IDC_EDIT_FIRSTS1
intm_firsts1
IDC_STATIC
公务舱
IDC_EDIT_SECONDS1
intm_seconds1
IDC_STATIC
经济舱
IDC_EDIT_LASTS1
intm_lasts1
IDC_BUTTUN_INSERT
添加信息
CHangkongshoupiaoView:
:
OnButtonInsert
IDC_BUTTUN_DELETE
删除信息
CHangkongshoupiaoView:
:
OnButtonDelete
IDC_BUTTUN_CHANGE
修改信息
CHangkongshoupiaoView:
:
OnButtonChange
IDC_BUTTUN_CHECK
查询
CHangkongshoupiaoView:
:
OnButtonCheck
IDC_BUTTUN_BOOK
买票
CHangkongshoupiaoView:
:
OnButtonBook
IDC_BUTTUN_QUIT
退票
CHangkongshoupiaoView:
:
OnButtonQuit
命令键的响应函数如下表
资源标识
响应函数
ID_RECORD_FIRST
CFlightsystemView:
:
OnRecordFirst();
ID_RECORD_NEXT
CFlightsystemView:
:
OnRecordNext();
ID_RECORD_PREC
CFlightsystemView:
:
OnRecordPreve();
2.6关键程序代码
添加航空信息按钮代码
voidCFlightsystemView:
:
OnButtonInsert()
{
try
{
m_pSet->AddNew();//设置数据集为添加记录状态ERTQE
UpdateData(TRUE);//用当前控件的内容更新成员变量
m_pSet->m_column1=m_planeno;
m_pSet->m_column2=m_from;
m_pSet->m_column3=m_dest;
m_pSet->m_column4=m_offtime;
m_pSet->m_column5=m_date;
m_pSet->m_column6=m_firsts;
m_pSet->m_column7=m_firstp;
m_pSet->m_column8=m_seconds;
m_pSet->m_column9=m_secondp;
m_pSet->m_column10=m_lasts;
m_pSet->m_column11=m_lastp;
m_pSet->Update();//执行写入操作
m_pSet->Requery();//更新数据集
MessageBox("添加成功!
");
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);//如果数据库异常则报告相应错误
pe->Delete();
}
}
查询航空信息按钮代码
voidCFlightsystemView:
:
OnButtonCheck()
{
UpdateData(TRUE);//用当前控件的内容更新成员变量
m_pSet->MoveFirst();
while(m_pSet->m_column1!
=m_planeno)
m_pSet->MoveNext();
RefreshData();
MessageBox("查询成功!
");
}
修改航空信息按钮代码
voidCFlightsystemView:
:
OnButtonChange()
{
try
{
m_pSet->Edit();//设置数据集为修改数据状态
UpdateData(TRUE);//用控件的当前内容更新成员变量
m_pSet->m_column1=m_planeno;//把成员变量的值赋给相应的数据集成员
m_pSet->m_column2=m_from;
m_pSet->m_column3=m_dest;
m_pSet->m_column4=m_offtime;
m_pSet->m_column5=m_date;
m_pSet->m_column6=m_firsts;
m_pSet->m_column7=m_firstp;
m_pSet->m_column8=m_seconds;
m_pSet->m_column9=m_secondp;
m_pSet->m_column10=m_lasts;
m_pSet->m_column11=m_lastp;
m_pSet->Update();//执行写入操作
m_pSet->Requery();//更新数据集
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
}
}
删除航空信息按钮代码
voidCFlightsystemView:
:
OnButtonDelete()
{
try
{
m_pSet->Delete();//设置数据集为删除状态
m_pSet->Requery();//更新数据集
RefreshData();//更新视图
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
}
}
买票按钮代码
voidCFlightsystemView:
:
OnButtonBook()
{
CFlightsystemSet*m_p;
m_p=&GetDocument()->m_flightsystemSet;//打开新的数据集m_p
m_p=newCFlightsystemSet();
m_p->Open();
intcheck(0);//订票标记当为1时表示成功订票
m_pSet->AddNew();
UpdateData(TRUE);
m_total=0;//订票话费的金额,每次都先赋0
while(m_p->m_column1!
=m_planeno1)
m_p->MoveNext();
m_p->Edit();
if(m_p->m_column6>=m_firsts1&&m_firsts1!
=0)//比较订票额是否比余票额大,大的话则
{//计算相关信息
m_p->m_column6-=m_firsts1;
m_total+=m_firsts1*m_p->m_column7;
check=1;
}
elsem_firsts1=0;
if(m_p->m_column8>=m_seconds1&&m_seconds1!
=0)
{
m_p->m_column8-=m_seconds1;
m_total+=m_seconds1*m_p->m_column9;
check=1;
}
elsem_seconds1=0;
if(m_p->m_column10>=m_lasts1&&m_lasts1!
=0)
{
m_p->m_column10-=m_lasts1;
m_total+=m_lasts1*m_p->m_column11;
check=1;
}
elsem_lasts1=0;
if(check==1)
{
m_p->Update();//订票成功,则将对应数据集内容写入数据库
m_planeno=m_p->m_column1;//将数据集的内容赋给相应的成员变量
m_from=m_p->m_column2;
m_dest=m_p->m_column3;
m_offtime=m_p->m_column4;
m_date=m_p->m_column5;
m_firsts=m_p->m_column6;
m_firstp=m_p->m_column7;
m_seconds=m_p->m_column8;
m_secondp=m_p->m_column9;
m_lasts=m_p->m_column10;
m_lastp=m_p->m_column11;
m_pSet->m_column14=m_planeno1;
m_pSet->m_column12=m_name;
m_pSet->m_column13=m_phone;
m_pSet->m_column15=m_firsts1;
m_pSet->m_column16=m_seconds1;
m_pSet->m_column17=m_lasts1;
m_pSet->Update();//执行写入操作
UpdateData(FALSE);//将处理之后的航班信息显示出来
MessageBox("买票成功!
");
}
else
MessageBox("余票额不足,买票失败。
");
}
退票按钮代码
voidCFlightsystemView:
:
OnButtonQuit()
{
UpdateData(TRUE);
CFlightsystemSet*m_p;
m_p=&GetDocument()->m_flightsystemSet;
m_p=newCFlightsystemSet();
m_p->Open();
while(m_p->m_column12!
=m_name&&m_p->m_column13!
=m_phone)
m_p->MoveNext();
m_planeno1=m_p->m_column14;
m_firsts1=m_p->m_column15;
m_seconds1=m_p->m_column16;
m_lasts1=m_p->m_column17;
m_p->Delete();
MessageBox("已经成功退票!
");
m_pSet->MoveFirst();
while(m_pSet->m_column1!
=m_planeno1)
m_pSet->MoveNext();
m_pSet->Edit();
m_pSet->m_column6+=m_firsts1;
m_pSet->m_column8+=m_seconds1;
m_pSet->m_column10+=m_lasts1;
RefreshData();//显示退票之后对应航班信息
}
显示第一条记录命令代码
voidCFlightsystemView:
:
OnRecordFirst()
{
m_pSet->MoveFirst();
RefreshData();
}
显示下一条记录命令代码
voidCFlightsystemView:
:
OnRecordNext()
{
m_pSet->MoveNext();
RefreshData();
}
显示前一天记录命令代码
voidCFlightsystemView:
:
OnRecordPrev()
{
m_pSet->MovePrev();
RefreshData();
}
三、调试分析
3.1实际完成的情况说明
功能:
能实现查询、添加、删除、修改、买票、退票功能
支持的数据类型:
字段名称
字段类型
字段名称
字段类型
航班号
文本
经济舱
数字
起点站
文本
经济舱价格
数字
终点站
文本
航班号1
文本
起飞时间
文本
姓名
文本
日期
文本
联系方式
数字
头等舱
数字
头等舱1
数字
头等舱价格
数字
公务舱1
数字
公务舱
数字
经济舱1
数字
公务舱价格
数字
3.2.程序的性能分析
该程序能够较稳定的实现查询、添加、修改、删除、买票、退票功能,并能计算出买票花的钱数,并将对数据库的修改写入数据库中,从而完成对修改的保存,改程序中存在很多不足,由于自己对现实中的航空售票并不了解,没有过切实经历,因此程序是按照自己所想的写的,有些任意作为的感觉,不能完全满足“航空售票”应该有的一些功能。
3.3上机过程中出现的问题及解决方法
出现了数据集是只读的问题
解决方法:
刚开始建数据库时数据库中写了两个表,一个表对应航班信息,一个表对应买票客户的信息,当执行程序时就出现了数据集是只读的问题,把两个表综合成一个表就可以将该问题解决。
对数据库的修改无效
解决方法:
对数据库内容修改前要调用函数Edit();然后才能修改对应数据集的内容最后调用函数Update();将修改后的数据写入数据库,如果不调用Edit();函数则无法实现对数据库的修改。
买票时对应航班的信息没有修改
解决方法:
航班信息修改后要调用Update();函数将修改后的信息写入数据库,否则买票后对应航班的余票额没有减少。
删除无效问题
解决方法:
删除数据集时要调用Delete();函数,这样相应数据库中的元组才能被删除。
3.4程序中可以改进的地方说明
程序中买票函数可以进行适当的修改,当找到对应航班和对应的等级的票时直接进行数据处理,而不用再比较其他等级舱的票额是否符合要求,还有就是买票时可以不用再打开一个数据集而只用一个数据集进行处理,这样可以节省处理数据的时间。
寻找另一种方法解决数据集是只读的问题,然后在数据库中用两个表一个航班信息表记录航班信息,一个客户信息表记录买票客户信息,当有客户买票时对客户信息表进行添加操作,当客户退票时对客户信息表进行删除操作,同时修改相应的航班信息。
3.5.程序中可以扩充的功能及设计实现构想
用多窗口处理,建立一个登陆界面用于客户和管理员登陆系统,管理员登陆进行添加、删除、修改等操作,客户登陆可以进行买票、查询、退票操作,同时客户进行买票时可以输出所买票的航班号、舱位等级以及座号以便客户确认信息。
3.6.测试数据
添加航班信息
flight
航班号
起点站
终点站
起飞时间
日期
头等舱
头等舱价格
公务舱
公务舱价格
经济舱
经济舱价格
航班号1
姓名
联系方式
头等舱1
公务舱1
经济舱1
C555
青岛
南京
10:
50
2012-12-29
50
1400
50
990
50
800
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课设报告 报告