VC++课程设计.docx
- 文档编号:6695152
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:15
- 大小:135.35KB
VC++课程设计.docx
《VC++课程设计.docx》由会员分享,可在线阅读,更多相关《VC++课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
VC++课程设计
目录:
1:
需求分析2
1.1需求背景2
1.2开发目标2
2:
概要设计2
2.1:
宾馆管理系统功能介绍2
2.2程序开发环境和基本开发软件2
2.2.1VC++开发软件2
2.2.2数据库开发软件2
2.2.3环境搭建2
2.3程序设计流程图3
3详细设计3
3.1系统总体实现和布局方案3
3.1.1主界面设置方案3
3.1.2主界面的具体实现3
3.2房间信息查看模块3
3.2.1房间信息模块设置方案3
3.2.2房间信息模块的具体实现3
3.3入住宾馆模块4
3.3.1入住宾馆模块设置方案4
3.3.2入住宾馆模块具体实现4
3.4退房模块4
3.4.1退房模块的设置方案4
3.4.2退房模块的具体实现4
3.5数据库的建立及更新5
3.5.1数据库的建立5
3.5.2数据库的更新5
4调试分析5
4.1对程序界面的调试5
4.2从Navicat操作数据库观测对程序的影响5
5用户使用说明5
6关键源程序代码6
6.1房间信息显示代码6
6.1.1初始房间信息显示6
6.1.2房间信息查询按钮6
6.2入住宾馆模块源代码6
6.2.1初始化模块代码6
6.2.2获取信息极其更新数据库代码6
6.3退房模块代码7
6.3.1父窗口退房代码7
6.3.2子窗口GRIDCTRL插件源代码8
7总结9
8附录9
程序的各个运行界面如下:
9
9参考文献12
1举一反三visualC++程序设计—实战训练12
2visualc++使用教程12
3XX百科12
1:
需求分析
1.1需求背景
在计算机高度普及的当代社会,无纸办公早已不是新鲜课题,计算已经深入到人们生活的各个领域,基于中小型条件有限的宾馆,需要一种操作简单,功能完善的应用程序对其进行管理,为此,我选择开发一款小型的宾馆管理系统。
1.2开发目标
对于小型的宾馆管理系统,要保证系统的稳定性和完善性,在环境发生变化时可以对程序进行必要的改动和发展
2:
概要设计
2.1:
宾馆管理系统功能介绍
宾馆管理主要分为房间信息查看,入住宾馆,退房明细三大部分。
房间信息查看是对房间的情况进行查看,可以分类别,或者具体到某一个房间的查看。
入住宾馆是对将要入住的客人进行信息登记,其中包括房间类型,房间号,入住人数,入住日期,退房日期,客人姓名,客人身份证号,联系方式等。
退房明细是在客人将要离开宾馆是对在宾馆内的消费进行显示,主要包括房间类型,房间号,居住时长,应付金额等信息。
对于整个系统,我们要建立一个信息完备的数据库对其信息进行存储和读取,我们应该确保数据库的容量和稳定性,
2.2程序开发环境和基本开发软件
2.2.1VC++开发软件
对于小型应用软件的开发,VC++6.0是不可多得的好工具,它易操作,并且有强大的调试和纠错功能,对于经验不多的开发者来说,VC++6.0应该是首先选择的工具
这款软件主要基于MFC(MicrosoftFoundationClasses)卡发环境,MFC是以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC中有大量的美观的使用控件,对于
程序界面的设计十分方便
2.2.2数据库开发软件
数据库我选择的是现在主流的MySQL数据库,是一款开源的小型关系型数据库管理系统,MySQL具有体积小,运行速度快,体积小,开源等特点,对于中小型的数据存取有十分突出的优势,并且十分稳定,据此我选择MySQL为程序存取数据
2.2.3环境搭建
VC++6.0可以应用于多平台
MySQL在MFC中的应用需要基于数据源,所以我们首先要配置MySQL的数据源,我们可以利用mysql-connector-c++-noinstall-1.0.5-win32对MySQL的数据源进行安装,然后再利用Navicat对数据库进行建表和查看
2.3程序设计流程图
3详细设计
3.1系统总体实现和布局方案
3.1.1主界面设置方案
主界面以简单为主,通过四个按钮分别实现不同的功能,分别定义三个与按钮对应的对话框,并为每个对话框设置具有代表性的独立的类
3.1.2主界面的具体实现
在每个按钮的代码中,我们可以分别为按钮对应的功能定义对话框对象。
当按钮被按下时候可以弹出对话框,这样做我们可以节约系统资源,系统访问数据库需要一定的资源,这样分模块可以让系统有目的的操作,也可以避免一些错误,增强系统的健壮性
3.2房间信息查看模块
3.2.1房间信息模块设置方案
为了美观,我将显示控件放在了对话框的上方,将操作文本和按钮放在显示控件的下面,以便观察,并且可以随时返回主界面进行其他操作
3.2.2房间信息模块的具体实现
对于可以显示所有房间和单个房间的列表,我们需要添加一个能同时显示多项的控件,以便操作,这里我选择的是DateGrid控件,这个控件的好处在于它可以将查询结果全部输入控件,不用人为的逐个插入,节省了人力和资源。
这个模块操作者还可以通过类别来查看具体某一类别的房间,当房间类别较多,并且单个类别党建较多时候可以通过类型来快速查看房间信息。
我为文本下拉菜单定义了一个CSring类型的变量,我可以通过这个变量查询房间中特定类别的所有房间。
我们还可以输入特定的房间来查看信息。
当有需要查看固定房间的信息时我们就需要用这个功能,来方便操作者的工作。
如果房间类型和所查房间不一致,那么不会显示任何信息。
如果需要多次查询,只要点击继续查询,就可以重新进行查询。
3.3入住宾馆模块
3.3.1入住宾馆模块设置方案
该模块是对信息的录入,需要对每个信息均设置一个变量,所以需要设置于录入信息等多的文本框,同时在确定录入的时候更新数据库。
3.3.2入住宾馆模块具体实现
本模块需要录入房间类型,房间号,入住人数,客人姓名,身份证号,入住时间,退房时间,联系方式,共交费用信息,并且在确定插入式调用SQL的Update语句进行查询,关于数据的分配方式和数据表结构的信息,我将在下面的数据库建立小节进行介绍。
这里的MySQL更新语句我选择分条写,虽然这样会增加编程者的工作量,但是会使程序容易理解,提高可读性,而且容易修改和添加。
这里的信息允许输入空信息,如果操作者没有完全录入信息,则顾客的信息会丢失。
如果需要连续录入,只要点击继续录入,就会重新调用入住宾馆的对话框,以节省工作时间,提高工作效率。
3.4退房模块
3.4.1退房模块的设置方案
退房模块分为两个窗口,两个窗口之间属于继承关系,父窗口主要是负责全部已利用房间的显示,子窗口用于显示具体要退房的房间的详细信息,父窗口的构造与房间信息显示模块的构造基本相同,同样是显示在对话框的上半部分,操作部分在窗口的下方,房间细则是给需要知道消费细则的用户设计的窗口,如果不需要,可以直接退房。
3.4.2退房模块的具体实现
对于父窗口,我一共设置了四个按钮,包括显示细则,全部清空,直接退房,返回,其中显示细则是与子模块相关联的按钮,可直接调用子窗口。
在父窗口中这里的MySQL语句我选择根据是否利用来查询,将所有被利用的房间全部显示出来,然后操作者根据这些显示的房间号来退房,如果输入错误或者未输入房间号,则会显示提示错误的对话框,以增强健壮性。
子窗口中,我添加了一个自定义控件,该控件是可以直接修改并且可以全部显示信息的控件,功能较DateGrid强大一些,子窗口中也包括退房按钮,这个功能的实现是根据父窗口在调用子窗口时候的参数决定的,而不是在子窗口中输入的,这样可以防止两次退房输入的房间号不一致,也节省了一步操作。
在父窗口或者子窗口调用退房功能之后,程序会随即更新数据库,将所有信息均置成初始状态,以便下一次的重新利用。
在对数据库进行操作之后,对显示控件也立即更新。
3.5数据库的建立及更新
3.5.1数据库的建立
为了将房间的信息与客人的信息可以分别操作,我在数据库里同时建立两个表格,一个存储所有的房间信息,以房间号为主键,另一个存储客人信息,也是以房间号作为主键,这样可以在执行MySQL语句时候以房间号作为链接查找一个房间的全部信息。
房间信息的一共包括房间号、房间类型、是否利用、入住人数、单日金额、入住时间、退房时间、以及居住时长,其中居住时长是根据入住时间-退房时间来决定的,无需人为输入,而单日金额是早已设定好的,不可更改,其他的信息需要在入住宾馆模块中输入。
客人信息表里包括房间号,客人姓名,客人身份证号,客人联系方式,这里对客人的信息保密的原则,在房间显示模块中并不同时显示客人信息,只有在退房时候才能看见客人的详细信息。
3.5.2数据库的更新
在入住酒店和退房时候都需要对数据库进行更新,不同的表在MySQL语句中体现,在更新完毕后与数据库的链接就失效了,避免重复操作造成错误。
4调试分析
4.1对程序界面的调试
当在主界面按下显示房间信息时,会弹出显示房间信息的窗口,里面会显示所有房间的信息。
首先当我们什么都不输入直接点击查询时,显示表会被刷新,会显示全部的信息。
当我们选择某一个类型而不输入具体房间号时,就会显示出这一类型的所有房间。
当我们输入具体某一房间号,无论选不选择类型,都会显示出该房间的信息,点击继续查询时,就会显示出所有的房间信息,复选框和文本框置空。
当在主界面按下入住宾馆按键是,会弹出录入信息的对话框,房间号的下拉菜单选项是根据房间类型的选项确定的。
分别按照文本类别输入信息,这里需要操作者对没一个信息都进行输入,然后单击确定或者继续输入。
客人的信息和房间的信息就同时被更新了,这是可以根据房间信息按钮进行查看。
当按下退房按钮是,我们会看到所有已经入住的房间的信息,操作者只需要在文本框里输入需要退房的房间号,就可以进行操作了,如果需要看明细可以点击房间明细按钮进行查看,房间明细里面包括了所有的包括房间和住户的所有信息.
4.2从Navicat操作数据库观测对程序的影响
在Navicat里操作数据库后,如果将房间的利用情况从‘否’改为‘是’,或者从‘是’改为‘否’,均会影响程序的运行,会影响退房时对房间的收集,但是不会对房间的录入产生影响
具体运行情况参看附录
5用户使用说明
在操作者录入信息时一定要全部输入,因为项目太多,如果为每一项都设置判断和提示会使效率大大降低,所以要求人为输入一定要正确
6关键源程序代码
6.1房间信息显示代码
6.1.1初始房间信息显示
m_combbox_place.ResetContent();
CStringh[4]={"单人房","标准房","三人间","总统套房"};//对下拉菜单进行初始化
for(inti=0;i<4;i++)
m_combbox_place.AddString(h[i]);
m_ado.Connect("DSN=c++","root","hit");
m_ado.getRecordSet((_bstr_t)"select*fromfjxx");//链接数据库更新全部数据
m_DataGrid1.SetRefDataSource((LPUNKNOWN)m_ado.m_recordSet);//为DataGrid控件更新数据
m_DataGrid1.Refresh();
6.1.2房间信息查询按钮
if(m_list_string.IsEmpty()&&m_edit1==0)//如果没有设置条件,全部查询
sql.Format("select*fromfjxx");
elseif(m_list_string.IsEmpty())//如果类型为空,根据具体房间查询
sql.Format("select*fromfjxxwherefjh='%d'",m_edit1);
elseif(m_edit1==0)//如果具体房间为空,根据类型查询
sql.Format("select*fromfjxxwherefjlx='%s'",m_list_string);//均不为空,共同查询
else
sql.Format("select*fromfjxxwherefjlx='%s'andfjh='%d'",m_list_string,m_edit1);
m_ado.getRecordSet((_bstr_t)sql);//执行MySQL语句
m_DataGrid1.SetRefDataSource((LPUNKNOWN)m_ado.m_recordSet);//更新控件
m_DataGrid1.Refresh();
6.2入住宾馆模块源代码
6.2.1初始化模块代码
m_ado.Connect("DSN=c++","root","hit");
m_fjlx_combo.ResetContent();
CStringh[4]={"单人房","标准房","三人间","总统套房"};//为第一个下拉栏设置项目
for(inti=0;i<4;i++)
m_fjlx_combo.AddString(h[i]);
6.2.2获取信息极其更新数据库代码
CStringh_year,h_month,h_day,m_tfrq,r_year,r_month,r_day,m_rzrq,m_rzrs;//定义CSrting类型进行操作
CStringmoney,m_jzsc;
money.Format("%d",m_gjfy_int);
m_rzrs.Format("%d",m_rzrs_int);
r_year.Format("%d",m_tfsj_time.GetYear());//获取时间年月日的操作
r_month.Format("%d",m_rzrq_time.GetMonth());
r_day.Format("%d",m_rzrq_time.GetDay());
h_year.Format("%d",m_rzrq_time.GetYear());
h_month.Format("%d",m_tfsj_time.GetMonth());
h_day.Format("%d",m_tfsj_time.GetDay());
intjzsc=(m_tfsj_time.GetMonth()-m_rzrq_time.GetMonth())*30+(m_tfsj_time.GetDay()-m_rzrq_time.GetDay());//获取入住时间
m_jzsc.Format("%d",jzsc);
m_tfrq=h_year+"-"+h_month+"-"+h_day;//构造退房以及入住的时间
m_rzrq=r_year+"-"+r_month+"-"+r_day;
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsettfrq='"+h_year+"-"+h_month+"-"+h_day+"'wherefjh="+m_fjh_list+""));//对数据库进行更新
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetrzrq='"+m_rzrq+"'wherefjh="+m_fjh_list+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetrzrs='"+m_rzrs+"'wherefjh="+m_fjh_list+""));//对数据库进行更新
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetsfly='是'wherefjh="+m_fjh_list+""));
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetkrxm='"+m_krxm_string+"'wherefjh="+m_fjh_list+""));//对数据库进行更新
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetsfzh='"+m_sfzh_string+"'wherefjh="+m_fjh_list+""));
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetsj='"+m_lxfs_string+"'wherefjh="+m_fjh_list+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetyjzs='"+money+"'wherefjh="+m_fjh_list+""));//对数据库进行更新
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetjzsc="+m_jzsc+"wherefjh="+m_fjh_list+""));
6.3退房模块代码
6.3.1父窗口退房代码
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsettfrq=''wherefjh="+m_tf_fjh+""));//数据库更新
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetrzrq=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetrzrs=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetsfly='否'wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetkrxm=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetsfzh=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatekrxxsetsj=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetyjzs=''wherefjh="+m_tf_fjh+""));
m_ado.ExecuteFunc((_bstr_t)("updatefjxxsetjzsc=''wherefjh="+m_tf_fjh+""));
m_ado.getRecordSet((_bstr_t)"select*fromfjxxwheresfly='是'");
m_DataGrid2.SetRefDataSource((LPUNKNOWN)m_ado.m_recordSet);//更新插件信息
m_DataGrid2.Refresh();
6.3.2子窗口GRIDCTRL插件源代码
m_Grid.EnableDragAndDrop(TRUE);
m_Grid.SetTextBkColor(RGB(0xFF,0xFF,0xE0));
m_Grid.SetRowCount(10);
m_Grid.SetColumnCount(m_nCols);
m_Grid.SetFixedRowCount(m_nFixRows);
m_Grid.SetFixedColumnCount(0);
chargridHeader[9][20]={"房间号","房间类型","基本价格","顾客姓名","身份证号","联系方式","入住日期","退房日期","总价"};
for(intcol=0;col { GV_ITEMItem; Item.mask=GVIF_TEXT|GVIF_FORMAT; Item.row=0; Item.col=col; Item.nFormat=DT_LEFT|DT_WORDBREAK|DT_NOPREFIX; Item.strText=gridHeader[col]; m_Grid.SetItem(&Item); m_Grid.SetRowHeight(col,32); m_Grid.SetColumnWidth(col,92); } UpdateData(TRUE); CStringgetparent=((CWytfDlog*)GetParent())->m_tf_fjh; charh[10]; CStringvalue; m_ado.Connect("DSN=c++","root","hit"); m_ado.getRecordSet((_bstr_t)("select*fromfjxxwherefjh="+getparent+""));//输出房间信息 m_ado.getStringValue("sfly",h); m_Grid.SetItemText(1,0,getparent); m_ado.getStringValue("fjlx",h); m_Grid.SetItemText(1,1,h);//房间类型 intdrfj=m_ado.getIntValue("drfj"); inttotle,sumday; sumday=m_ado.getIntValue("jzsc"); totle=drfj*sumday; value.Format("%d",totle); m_Grid.SetItemText(1,8,value);//总价 m_ado.getStringValue("rzrq",h);//入住日期 m_Grid.SetItemText(1,6,h); m_ado.getStringValue("tfrq",h);//退房日期 m_Grid.SetItemText(1,7,h); value.Format("%d",drfj); m_Grid.SetItemText(1,2,value);//基本价格 m_ado.getRecordSet((_bstr_t)("select*fromkrxxwherefjh="+getparent+"")); m_ado.getStringValue("krxm",h); m_Grid.SetItemText(1,3,h);//客人姓名 m_ado.getStringValue("sfzh",h); m_Grid.SetItemText(1,4,h);//身份证号 m_ado.getStringValue("sj",h); m_Grid.SetItemText(1,5,h);//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)