产品信息管理系统数据库实现.docx
《产品信息管理系统数据库实现.docx》由会员分享,可在线阅读,更多相关《产品信息管理系统数据库实现.docx(20页珍藏版)》请在冰豆网上搜索。
产品信息管理系统数据库实现
产品信息管理系统
——数据库实现
班级:
姓名:
学号:
1产品信息管理系统的简介
产品信息管理系统是在VisualC++环境下的数据库编程,后台使用Access数据库,在产品信息管理系统界面,可以根据需要进行相应的操作。
管理员可以对产品信息进行添加、删除、修改等操作,避免了很多不必要的麻烦,也可以对产品信息进行查询,方便管理。
2数据库访问技术简介
ODBS,即开放数据库互连,它提供了一组标准应用程序编程接口,用户可使用SQL语句实现对数据库管理系统的访问。
ODBC应用程序通过ODBCAPI访问不同数据源的数据,每个不同的数据源都由一个ODBS驱动程序支持。
用户可使用ODBC环境中的驱动程序管理器,实现驱动程序与ODBS数据源的连接。
这样在使用数据库操作指令时,由ODBS选中的驱动程序提供转换,解释成ODBS环境下的数据库表的具体操作。
当用户的应用程序与一个数据源建立连接时,ODBS驱动管理器会为VisualC++数据库程序装入合适的驱动程序。
ODBC体系架构如下:
应用程序--ODBC驱动程序管理器--ODBC驱动程序--各种关系数据库
3通过ODBC访问数据库
图3-1ODBC访问数据库结构图
4数据库设计
Access:
(1)第一步:
创建一个新的空数据库
打开MicrosoftOfficeAccess2003→点击菜单栏中“文件”→选择“新建”→在右边窗口选择其中的“空数据库”→选择保存的地址并为数据库命名。
图4-1db1数据库
(2)第二步:
在空数据库中创建表
在新建的空数据库中选择“表”→选择“新建”→选择“设计视图”→“确定”→在字段名称和数据类型中填入相应数据→保存。
产品信息管理系统所要建立的Access数据库所要的数据以及数据类型如下:
ProductID(数字类型,字段大小:
长整型)
ProductName(文本类型,字段大小:
40)
SupplierID(数字类型,字段大小:
长整型)
CategoryID(数字类型,字段大小:
长整型)
QuantityPerUnit(文本类型,字段大小:
20)
UnitPrice(货币类型)
UnitsInStock(数字类型,字段大小:
整型)
UnitsOnOrder(数字类型,字段大小:
长整型)
ReorderLevel(数字类型,字段大小:
整型)
Discontinued(是/否类型)
图4-2Products设计视图
(3)第三步:
在表中填入数据
在建立的数据库“表”中→双击选择刚建立的表→在表中相应位置填入相应数据(注意数据类型及格式)→保存。
图4-3新建Products表
图4-4写入数据
5建立ODBC数据源
在“开始”中选择“控制面板”→“管理工具”→“数据源(ODBC)”→在“用户DSN”中→选择“添加”→选择“MicrosoftAccessDriver(*.mdb)”→完成→在弹出的窗口中选择建立的数据库位置并填入要建立的数据源名称→确定。
图5-1创建数据源
图5-2选择数据库
图5-3数据源名称
6客户端应用程开发
6.1产品信息管理系统的功能结构图
图6-1产品信息管理系统功能结构图
6.2用VC++6.0创建有数据库支持的应用程序框架
打开MicrosoftVisualC++6.0→在菜单栏中的“文件”中选择“新建”→在弹出的窗口中“文件”中选择“MFCAppWizard[exe]”→填入工程名称:
→“Products”→“确定”→在弹出的窗口中选择“单文档”→点击“下一步”→“查看数据库使用文件支持”选择“数据源…”
图6-2新建工程
图6-3选择查看数据库使用文件支持
在弹出的窗口中Datasource的“ODBC”选择建立的数据源并在Recordsettype中的“Dynaset”→“OK”→在弹出的窗口中选择数据库名称→“OK”→“下一步”→“完成”。
图6-4选择数据源名称
6.3设计菜单和工具条
在Dialog的IDD_PRODUCTS_FORM中使用控件工具栏绘制出下图窗口:
图6-5绘制窗口
在Dialog中新建一个名为IDD_PRODUCTS_FIND的窗口并用Controls工具栏绘制出下图窗口:
图6-6绘制查找条件窗口
将Menu的IDR_MAINFRAME中的菜单栏如下图如下图所示:
图6-6数据维护
图6-7记录
将Toolbar中的IDR_MAINFRAME中的工具栏用右侧系统提供的工具栏设计如下图所示:
图6-8工具栏
在创建的菜单栏和工具栏按键中的属性的ID栏中填入相应的ID、标明和提示,如“ID_DATA_ADD”、“增加[&A]”、“新增一条记录\n增加”。
6.4设计CRecordView的模板
在ResourceView中,双击Dialog中的IDD_PRODUCTS_FORM,设计模板如图所示:
图6-9设计模板
6.5将CRecordView的模板中的控件和数据集字段关联
1、在上图面板中点击右键→选择“添加类向导”→在弹出的窗口中选择MemberVariables下的所需要关联的ID,如“IDC_EDIT_PRODUCTSID”→“AddVariables”→“membervariablesname”中选择相对应的ID名称→“OK”如下图所示:
图6-10双击ID
图6-11增加成员变量
最后完成,点击“确定”,即可将CRecordView的模板中的控件和数据集字段关联
6.6数据浏览功能实现
在ProductsView.cpp中添加类向导,写入相应的程序即可实现。
(1)浏览“第一条记录”的实现
在ProductsView.cpp中添加类向导:
点击右键→选择“添加类向导”→在弹出的窗口中选择MessageMaps→点击ObjectsIDs中的”ID_RECORD_FIRST”→双击Messages中的“COMMAND”和“UPDATE_COMMAND_UI”→确定
图6-12建立第一条记录类向导
在voidCProducts2View:
:
OnRecordFirst()添加程序如下:
voidCProducts2View:
:
OnRecordFirst()
{
//TODO:
Addyourcommandhandlercodehere
m_pSet->MoveFirst();
UpdateData(false);
}
在voidCProducts2View:
:
OnUpdateRecordFirst(CCmdUI*pCmdUI)添加程序如下:
voidCProducts2View:
:
OnUpdateRecordFirst(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode&&!
(m_pSet->IsBOF()));
}
编译后,点击
,在出现的界面中,点击菜单栏记录中“第一条记录”或者
图标即可查看第一条记录的信息。
(2)浏览“下一条记录”的实现
在ProductsView.cpp中添加类向导
图6-12建立下一条记录类向导
在voidCProducts2View:
:
OnRecordNext()添加程序如下:
voidCProducts2View:
:
OnRecordNext()
{
//TODO:
Addyourcommandhandlercodehere
if(m_pSet->IsEOF())
{
OnRecordLast();
return;
}
m_pSet->MoveNext();
UpdateData(false);
}
在voidCProducts2View:
:
OnUpdateRecordNext(CCmdUI*pCmdUI)添加程序如下:
voidCProducts2View:
:
OnUpdateRecordNext(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode&&!
(m_pSet->IsEOF()));
}
编译后,点击
,在出现的界面中,点击菜单栏记录中“下一条记录”或者
标即可查看下一条记录的信息。
(3)浏览上一条记录的实现
在ProductsView.cpp中添加类向导
图6-13建立上一条记录类向导
在voidCProducts2View:
:
OnRecordNext()添加程序如下:
voidCProducts2View:
:
OnRecordNext()
{
//TODO:
Addyourcommandhandlercodehere
if(m_pSet->IsEOF())
{
OnRecordLast();
return;
}
m_pSet->MoveNext();
UpdateData(false);
}
在voidCProducts2View:
:
OnUpdateRecordPrev(CCmdUI*pCmdUI)添加程序如下:
voidCProducts2View:
:
OnUpdateRecordPrev(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode&&!
(m_pSet->IsBOF()));
}
编译后,点击
,在出现的界面中,点击菜单栏记录中“上一条记录”或者
图标即可查看上一条记录的信息。
(4)浏览最后一条记录的实现
在ProductsView.cpp中添加类向导
图6-14建立上一条记录类向导
在voidCProducts2View:
:
OnRecordLast()添加程序如下:
voidCProducts2View:
:
OnRecordLast()
{
//TODO:
Addyourcommandhandlercodehere
m_pSet->MoveLast();
UpdateData(false);
}
在voidCProducts2View:
:
OnUpdateRecordLast(CCmdUI*pCmdUI)添加程序如下:
voidCProducts2View:
:
OnUpdateRecordLast(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode&&!
(m_pSet->IsEOF()));
}
编译后,点击
,在出现的界面中,点击菜单栏记录中“最后一条记录”或者
图标即可查看最后一条记录的信息。
6.7增加、修改、删除记录功能实现
在ProductsView.cpp中建立增加、修改、删除记录功能的类向导
图6-15建立增加、删除、修改类向导
分别需要添加的程序如下:
voidCProducts2View:
:
OnDataAdd()
{
//TODO:
Addyourcommandhandlercodehere
if(m_pSet->CanAppend())
{
m_pSet->AddNew();
m_addMode=true;
UpdateData(false);
}
}
voidCProducts2View:
:
OnDataEdit()
{
//TODO:
Addyourcommandhandlercodehere
if(m_pSet->CanAppend())
{
m_pSet->Edit();
m_editMode=true;
}
}
voidCProducts2View:
:
OnDataDelete()
{
//TODO:
Addyourcommandhandlercodehere
if(MessageBox("真的要删除当前记录吗?
","删除提示",
MB_YESNO|MB_ICONWARNING)==IDYES)
{
m_pSet->Delete();
//OnRecordNext();
UpdateData(false);
}
}
voidCProducts2View:
:
OnUpdateDataAdd(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode);
}
voidCProducts2View:
:
OnUpdateDataEdit(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode);
}
voidCProducts2View:
:
OnUpdateDataDelete(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode
&&!
m_pSet->IsBOF()&&!
m_pSet->IsEOF());
}
点击数据维护中的增加、修改、删除,或者点击图标按钮
、
、
就可以进行相应的操作。
6.8记录查找功能实现
在customerView.cpp中添加类向导
图6-16增加查找功能的类向导
在voidCProducts2View:
:
OnRecordFind()中添加程序如下:
voidCProducts2View:
:
OnRecordFind()
{
//TODO:
Addyourcommandhandlercodehere
CProductsFindDlgfindDlg;
if(findDlg.DoModal()==IDOK)
{
//m_pSet->Close();
CStringfilterString="ProductName='";
filterString+=findDlg.m_strProductsName;
filterString+="'";
m_pSet->m_strFilter=filterString;
//m_pSet->Open();
m_pSet->Requery();
UpdateData(false);
}
}
在voidCProducts2View:
:
OnUpdateRecordFind(CCmdUI*pCmdUI)添加程序如下:
voidCProducts2View:
:
OnUpdateRecordFind(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(!
m_addMode&&!
m_editMode
&&m_pSet->GetRecordCount()>0);
}
编译后,点击
,在出现的界面中,点击查找或者
按钮即可查找需要产品的信息,在出现的的对话框中输入ProductsName,点击确定查找,点击取消,则取消查找。
7开发总结
通过这次VisualC++程序的设计与实践,让我更加熟悉的掌握C++的使用与如何设计和设计系统的思路,同时把老师上课讲的东西理解的更深了。
所谓听是一回事,做事一回事,的确。
在程序设计过程中遇见不少问题,如英文数据之间的空格是否有,就会产生很大的偏差,还有数据库数据与C++中数据的切合不当也是会有许多错误的。
由于老师和同学的指导,我也学到了很多不知道的知识。
出师表
两汉:
诸葛亮
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。
诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体;陟罚臧否,不宜异同。
若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:
愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:
愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。
先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。
侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也
。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。
先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。
后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。
受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。
今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。
此臣所以报先帝而忠陛下之职分也。
至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。
若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。
臣不胜受恩感激。
今当远离,临表涕零,不知所言。