数据库原理与应用实验报告姓名:NB学号:NBXXXX班级:NBXXXX实验指导教师:XXX课程主讲教师:XXX报告提交日期:XXX年X月XX日实验成绩:问题引入:小型商场管理系统,部分模型如下:商品库(Goods):ProductID主键ProviderID外键字段名标题数据类型字段宽度小数位数ProductID商品编码字符型(C)100ProductName商品名称字符型(C)300SalePrice售货单价数值型(N)92Standard商品规格字符型(C)200Description商品描述字符型(C)1000供应商库(Provider):字段名标题数据类型字段宽度小数位数ProviderID供应商编码字符型(C)70ProviderName姓名字符型(C)600ZipCode邮政编码字符型(C)60Contacts联系人字符型(C)80Telephone电话字符型(C)140Account帐号字符型(C)200Bank开户行字符型(C)600Holder户名字符型(C)600库存库(Stock):字段名标题数据类型字段宽度小数位数ProductID商品编码字符型(C)100StockDate进货日期日期型(D)80StockQuantity进货数量数值型(N)60StockPrice进货单价数值型(N)92Inventory库存数量数值型(N)60ProviderID供应商编码字符型(C)70销售库(Sale):字段名标题数据类型字段宽度小数位数SaleID销售编码数值型(N)100ProductID商品编码字符型(C)100SaleDate销售日期日期型(D)80SalePrice销售单价数值型(N)92SaleQuantity销售数量数值型(N)60ClientID客户编码字符型(C)70Discount折扣数值型(N)10EmployeeID员工编码字符型(C)40客户库(Client):字段名标题数据类型字段宽度小数位数ClientID客户编码字符型(C)70Address地址字符型(C)600ZipCode邮政编码字符型(C)60Contacts联系人字符型(C)80Telephone电话字符型(C)140员工库(Employee):字段名标题数据类型字段宽度小数位数EmployeeID员工编码字符型(C)40EmployeeName姓名字符型(C)80Authority权限字符型(C)60Password密码字符型(C)60试设计商品录入界面,要求录入供应商编码时,不需要直接输入编码,而是选择已经录入的供应商编码,而且商品编码不能为空值(即不录入),或者是录入已经存在的商品编码。实验任务:1、根据已知的小型商场管理系统的部分模型在SQL中创建一个实验数据库2、对于已建立好的表设计商品录入界面,要求录入供应商编码时,不需要直接输入编码,而是选择已经录入的供应商编码,而且商品编码不能为空值(即不录入),或者是录入已经存在的商品编码。任务分析:1.根据老师所设计的小型商场管理系统模型在SQL中建立出相应的表,并自行设计出表间联系。2.利用支持ODBC接口的高级程序设计语言编程实现简单的数据库应用程序,为了设计出商品录入界面,决定采用MFC编程,并用到MFC中封装好的CRecordset类进行数据库的录入操作。实验流程:在SQLSERVER中设计表,并针对不同属性设计表中的主键及外键。配置SQLServer服务器的ODBC数据源。利用MFC编程根据实验要求设计登录界面。实验步骤:一、在SQL中设计相关的表1.实验代码:/*************************************创建表**********************************//*****************************************************************************/createtableGoods(ProductIDvarchar(10)primarykey,ProductNamevarchar(30)notnull,SalePriceNumeric(9,2)notnull,Standardvarchar(20)notnull,Descriptionvarchar(100),ProviderIDvarchar(7)notnull,Foreignkey(ProviderID)referencesProvider(ProviderID));/*商品库(Goods)表创建*/createtableProvider(ProviderIDvarchar(7)primarykey,ProviderNamevarchar(60)notnull,ZipCodevarchar(6)notnull,Contactsvarchar(8)notnull,Telephonevarchar(14)notnull,Accountvarchar(20)notnull,Bankvarchar(60)notnull,Holdervarchar(60)notnull);/*供应商库(Provider)表创建*/createtableStock(ProductIDvarchar(10)primarykey,StockDatedatetimenotnull,StockQuantityNumeric(6,0)notnull,StockPriceNumeric(9,2)notnull,InventoryNumeric(6,0)notnull,ProviderIDvarchar(7)notnull,Foreignkey(ProviderID)referencesProvider(ProviderID));//建立外部码ProviderID/*库存库(Stock)表创建*/createtableClient(ClientIDvarchar(7)primarykey,Addressvarchar(60)notnull,ZipCodevarchar(6)notnull,Contactsvarchar(8)notnull,Telephonevarchar(14)notnull);/*客户库(Client)表创建*/createtableEmployee(EmployeeIDvarchar(4)primarykey,EmployeeNamevarchar(8)notnull,Authorityvarchar(6)notnull,Passwordvarchar(6)notnull);/*员工库(Employee)表创建*/createtableSale(SaleIDNumeric(10,0)primarykey,ProductIDvarchar(10)notnull,SaleDatedatetimenotnull,SalePriceNumeric(9,2)notnull,SaleQuantityNumeric(6,0)notnull,ClientIDvarchar(7)notnull,DiscountNumeric(1,0)notnull,EmployeeIDvarchar(4)notnull,Foreignkey(ProductID)referencesGoods(ProductID),Foreignkey(ClientID)referencesClient(ClientID),Foreignkey(EmployeeID)referencesEmployee(EmployeeID));/*销售库(Sale)表创建*/2.数据库关系图:二、配置ODBC数据源关于数据源的配置,在参照百度上他人经验以及《北邮程序设计实践》书中的内容进行了配置,添加SQLServer中之前建立的名为“Mall”的数据库。ODBC数据源配置后的截图:三、设计MFC的录入界面根据实验要求,自己设计出一个录入界面,其中应包含所有关于应录入商品的属性,关于MFC的界面设计,此为先修课程-程序设计中的授课内容。注意的是,实验要求中供应商编码应为先行录入,且是下拉列表的形式,所以MFC界面设计时也针对供应商编码属性的设计额外花费了一些心思去设计。设计后的MFC界面截图:四、为MFC程序添加MFCODBC使用者类,并配置数据源在先前的步骤中已经为设计好的商场管理数据库配置了数据源,现在只需在MFC中与已匹配好对的数据源建立联系。添加MFCODBC使用者类,并在数据源中选中相应的数据库—MAL,同时选中需要编辑的表—GOODS表。配置数据源时的部分步骤截图:五、MFC主程序设计:1.关于供应商编码的录入,由于实验要求中不是自己写入,而是选择已经录入的编码,又因为供应商编码是GOODS表的外键,存在外键约束,所以先在SQLSERVER中拟写入相关表的数据,对于供应商编码先录入数据:“1”、“2”、“3”,然后在MFC中为下拉控件添加相应的程序:2.对于其他编辑框录入相关的属性值,并将这些从编辑框读取的值与数据库对象值进行赋值操作:3.异常处理:在实验要求中明确要求录入时的商品编码不能为空值,或者是已经存在的商品编码,针对此二者要求,在录入时,有个检查机制的设计:4.实验运行结果分析:A、未执行录入时数据库中已录入的数据:B、录入正确的数据:C、倘若录入空值:D、倘若录入重复值:结论:根据以上四个运行的结果分析可知,本程序实现了基本的实验要求~六、实验总结:本实验针对小型商场管理的部分模型设计了数据库以及其相应的窗口界面程序,相较于前几次的数据库实验,此次数据库实验难度较大,为此,我也花费了较多的时间研究ODBC编程,虽然在设计过程中会比较痛苦,但是成功之后加深了许多关于数据库ODBC设计的理解,这也让我很高兴、自豪。但同时这个实验做完后,本学期的数据库课程也要画下句号,感谢老师们为我们验收作业,指点我们。也希望之后自己会在数据库编程中更加深入,能做出让自己得意的作品!