《某店积分更新记录管理毕业设计论文.doc》由会员分享,可在线阅读,更多相关《某店积分更新记录管理毕业设计论文.doc(82页珍藏版)》请在三一办公上搜索。
1、毕业设计(论文)某店积分更新记录管理论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:某店积分更新记录管理摘 要计算机诞生以来,对数据的管理一直是计算机应用中最为重要的环节,数据库管理系统便是这一环节中坚力量。在.NET平台推出以后,由于其通用语言基础结构和规范性,让不同语言开发的程序员们都能得心应手地在.NET平台下进行高效的程序开发,ADO.NET框架对数据库管理系统的访问控制是相当的灵活和方便,减少了程序员们操作数据库底层代码,让程序员的精力完全集中到逻辑代码开发之中。因此,采用.NET平台开发管理信息系统是一个明智的选择。某店积分更新记录管理前台采用.NET
2、,后台采用SQL 2000,语言使用C#。实现的系统功能是对用户消费和追加的积分进行更新,并对积分变化进行记录。程序模块读取临时积分表,通过返回临时积分表的数据对积分表,用户状态表,积分奖励记录表进行更新,并对积分累积记录表进行更新,系统着重于对更新失败和程序异常时进行处理。关键词:计算机应用;数据库管理系统;积分更新记录;.NET平台;ADO.NET;C#;SQL2000 The Shops Integral Update Record Management AbstractData management is always the most important link of the co
3、mputers application, since the invention of the computer, and the database management system is a very important in this link. After the .NET was launched, for its common language structure and standard, programmers of all languages carry on the procedure high effectively under the .NET platform. Th
4、e structure of ADO.NET give a flexible and suitable manage to the access control of database management system, this reduce the chance of operating lower layer code, and make programmer pay more attention to logical code development. Therefore it is wise to choice the .NET platform to development ma
5、nagement information.NET is used as onstage,SQL 2000 is used as backstage and C# is used as developing language in the Integral to update records management. The function of system is to update the integral of consuming and producing, and carries on the record of the integral changing information. W
6、hen the program module read the temporary integral table, it updated the integral table, the user condition table, the integral reward data sheet through returns the data of temporary integral table. This system pay more attention to dealing with update failure and procedure exceptionally when carri
7、ed on processing.Key words: Computer Applications; Database management system; Integral Update Record; .NET platform; ADO.NET; C#; SQL2000 目 录论文总页数:33页1 引 言22 模块需求分析22.1 模块功能需求22.2 客户对模块性能要求22.3 模块开发需求23 系统开发设计分析23.1 系统设计模式23.2 模块功能分析23.2.1 积分表的更新23.2.2 新入会员积分表的更新23.2.3 老用户卡片遗失情况下的更新23.2.4 当日积分变化进行记
8、录23.3 程序流程及分析23.4 模块的详细设计23.4.1 模块主要对象的定义23.4.2 数据库结构设计24 模块的实现过程分析24.1 积分更新类具体实现24.2 积分累计记录类具体实现25 系统运行结果25.1 积分更新类测试结果25.2 积分累计记录更新类测试结果2结论2参考文献2附录2致谢2声明21引 言随着.NET平台的推出,其强大的功能和多语种的支持无疑给程序员们提供了一个更为广大的开发平台,其即时编译能力在执行效率上毫不逊于当今其它流行编程平台,通用语言规范使得不同语言定义的类能够相互引用,大大地增加了代码的重用性,使得软件开发速度得到质的提高。其中C#综合了JAVA,C+
9、,VB等语言的优点成为Microsoft新一代开发平台下的生力军,在此平台下开发的各种管理应用系统纷纷出现,百货店当然也少不了它。以前消费者都是通过现金交易来购买商品,消费者无意要带大量的现金在身上,这样做既不方便也不安全,为了让消费者消费不再单单依赖于现金进行交易,以及为消费者提供优惠的政策,相应地需要一套积分系统对消费者积分进行必要的管理,从而不但可以方便消费者的购物还能提高购物的趣味性,并通过奖励积分方法激起消费者在百货店的购物兴趣。系统模块主要负责对消费者当日消费和追加的积分进行更新和累计记录管理,对消费者遗失卡片的情况,卡号进行更改并对原有积分进行保留,最大程度上保护消费者的利益。2
10、模块需求分析2.1模块功能需求模块对用户当日消费或者追加的积分进行更新,这种更新不是即时更新,而是在指定的时间间隔后对积分信息进行更新。同时要对新增加的会员信息进行初始化,并添加新会员信息,对老会员遗失积分卡情况进行卡号的再发行,参照原卡信息对再发行的积分卡信息进行更新。所有积分累积变化都应有所记录,模块程序的启动以及结束都要输出日志记录使得程序执行与否有据可查,对于程序的意想不到异常终止也应该输出到日志记录中,从而便于管理者查出异常原因,并即时采取措施。2.2客户对模块性能要求 实现模块所有功能 模块重用性强 模块稳定性和容错能力强 模块能稳定运行 模块能即时响应2.3模块开发需求积分管理系
11、统是对日软件外包的一个实际项目,系统所有的工作都要求在日文操作系统下进行,客户要求选用.NET作为开发所用平台,为了使系统达到最好性能,所以开发所用的一套工具都使用Microsoft公司的开发产品,C#其融合JAVA ,C+,VB等语言的优点是我们选择它作为开发语言的原因之一。以下列出模块开发基本需求:1.硬件需求:微型计算机一台2.操作系统:Windows 2000(日文)3.开发语言:C#.NET4.数据库:Microsoft SQL Server 20005.其他软件需求:Visual Studio2003集成开发环境 3系统开发设计分析3.1系统设计模式根据用户对模块功能需求描述,初步
12、设计5张数据表:1) 临时积分表:用于记录用户当日和前日为更新到积分表中的数据,主要有当日积分,前日积分,更新区分等字段,系统会定时将当日积分累加到前日积分,最后积分更新时才会写入用户积分表。2) 积分表:记录用户积分信息,主要有消耗积分,追加积分,奖励积分,累积积分等字段。3) 用户状态表:记录用户优先等级,入会店铺等信息。4) 奖励积分表:记录用户得到的奖励积分以及奖励理由。5) 积分历史记录表:记录用户当日积分变化,主要有当日消耗积分,当日追加积分,现有积分,当日奖励积分等字段。模块通过读取临时积分表分别对其它四张表进行更新或者添加操作。遵照临时表对其它表进行操作的模式,进行模块设计。3
13、.2模块功能分析3.2.1积分表的更新对当日用户积分进行时间段更新,因为不是即时更新,记录积分表可见有两张,一张是应该用来记录当日时间段用户积分变化的临时积分表,另一张表则是用户的积分表,积分表的更新应该按照临时积分表的数据进行更新。3.2.2新入会员积分表的更新对于新入会员则起先应在临时表中记录,当积分表进行更新的时候,才将其添加入积分表中,并对新会员入会信息进行记录,则必需要会员表。3.2.3老用户卡片遗失情况下的更新还有种情况便是用户卡片丢失的情况,需要对卡片进行再发行,要将原来用户所有信息移植到新卡片中,由此应在临时积分表中设计一个用于区分更新的字段来识别用户积分表更新情况,还有就是再
14、发行的时候会员的以前的ID就不能再用了,系统还设计到了一个奖励积分表,应该把奖励积分表的ID更新成新卡的ID号。3.2.4当日积分变化进行记录最后还应对用户当日积分变化进行记录,则相应需要一张积分记录表,根据临时表进行更新。3.3程序流程及分析模块程序流程如图1:程序类临时积分表积分表奖励积分表会员表积分累积表图1模块处理流程图该流程说明(详细流程图见附录):1.依次读取临时积分表里的记录,对每一条记录根据其更新区分字段进行相应处理。2.用临时表读出的记录的会员ID字段对会员表进行读取,如无记录则对会员表进行添加。3.临时表读出的记录的更新区分不属于卡片再发行的时候,对积分表进行更新或者添加。
15、4.临时表读出的记录的更新区分属于卡片再发行的时候,对积分表进行更新或者添加,并对奖励积分表会员ID进行更新。5.临时表读出的记录对当日积分历史记录表进行更新或者添加。3.4 模块的详细设计系统的开发设计由下面这些基本模块构成:1. 数据库后台操作类 SkyConnect;2. 共用文件读取类 IniFile;3. 共用文件 Common.ini;3.4.1模块主要对象的定义模块使用到的类如图2所示:FSPB1220FSPB1210IniFileSkyConnectInI文件数据库图2类调用逻辑图模块FSPB1210和FSPB1220通过类IniFile和类SkyConnect进行对文件和数据
16、库的访问。图各类一览表:表1模块类说明表命名空间类名说明百貨店POS情報管理.FSPB1210FSPB1210用户积分更新百貨店POS情報管理.FSPB1220FSPB1220积分累积更新百貨店POS情報管理IniFile共通文件读取百貨店POS情報管理SkyConnect数据库操作模块中SkyConnect类是用作数据库操作的,其将所有数据库操作所要用到的返回对象都封装在其中,这样就不用再在其它类中声明数据库连接对象对数据库进行连接操作,只需要声明SkyConnect的实例既可,该类SkyConnect声明的对象定义表如下表:表2 SkyConnect类对象定义表对象名称类型说明ConnSq
17、lConnection数据库连接对象CommSqlCommandSQL语言执行对象ReaderSqlDataReader按条读取数据库对象daSqlDataAdapter适配器对象dsDataSet按块读取数据库对象_disposingBool资源释放与否标记对于整个系统而言,所涉及到的属性较多,因此建立一个文件存储系统的属性值,每个模块通过相应方法调用对应的属性。通过类IniFile需要从配置文件Common.ini中读取的属性值,如果文件不存在或者读取失败都要输出错误日志记录,读取的属性大概如下表:表3 IniFile类读取属性表Common.ini中的属性值对应的参数说明SqlConne
18、ction_String_SqlConnection_String数据库连接字符串FilePath_FilePath文件路径Member_Kari_Data_H_Member_Kari_Data_H文件名Pos_Item_Pos_Item文件名Pos_Torihiki_Pos_Torihiki文件名URIAGE_KEI_URIAGE_KEI文件名Member_Ment_Data_H_Member_Ment_Data_H文件名Point_Ment_Data_H_Point_Ment_Data_H文件名Member_Data_Member_Data文件名Bonus_Rule_Bonus_Rule文
19、件名Out_Member_PreFIX_Out_Member_PreFIX文件名Item_Data_Item_Data文件名Out_Shohin_PreFIX_Out_Shohin_PreFIX文件名Pos_Data_Pos_Data文件名Out_Pos_PreFIX_Out_Pos_PreFIX文件名LogFile_LogFile文件名POINT_RIREKI_CSV_POINT_RIREKI_CSV文件名POINT_JNL_CSV_POINT_JNL_CSV文件名POS_TORIHIKI_CSV_POS_TORIHIKI_CSV文件名POS_ITEM_CSV_POS_ITEM_CSV文件名
20、SEISAN_CSV_SEISAN_CSV文件名HANBAI_CSV_HANBAI_CSV文件名由于模块FSPB1210和模块FSPB1220无需对文件进行操作,唯一需要的是对数据库管理系统服务器连接所需的连接字符串进行读取,即用到的字符串是SqlConnection_String,其它的文件只是通过声明类IniFile实例进行文件存在与否的判断,但是如果上面所列文件中有一个不存在的话,模块就会输出错误信息到日志数据库中去,即使没有用到这些文件也要输出文件不存在的错误信息,这是遵从共通文件读取要求规范所必需要的。 3.4.2数据库结构设计数据库技术在计算机软件邻域研究中一直是非常重要的主题,在
21、积分管理系统中,数据库的结构设计占非常重要的地位,设计好坏与数据库中数据的读取起很大影响作用。而且应该以数据的统计算法相结合,以数据的读取统计方便为目的。在积分更新和积分累计记录模块中,相应的数据库表结构如下:表4 临时积分数据表字段名称数据类型长度是否为空字段说明备注MEMBER_CODEchar13否会员编号OLD_MEMBER_CODEchar13是旧会员编号用于卡片再发行YUTAI_RANKchar2是优待等级YDAY_POINTnumeric8是前日所有积分前日为止所有积分NOW_POINTnumeric8是当前积分当前为止所有积分YDAY_TUKI_KAIAGE_Mnumeric1
22、0是前月购买金额前月为止所有积分TUKI_KAIAGE_Mnumeric10是当月购买金额OUT_POINTnumeric6是当日消耗积分OUT_KAIAGE_Mnumeric10是当日减算金额OUT_RIYU_CODEchar2是减算原因ADD_POINTnumeric6是当日添加积分ADD_KAIAGE_Mnumeric10是当日添加金额ADD_RIYU_CODEchar2是添加原因UPD_KBNchar1是更新区分1注册2修改3删除4卡片再发行DATA_KBNchar1是发生地区分0分店1总店UPD_YMDHMSchar20是更新日期YYYYMMDDHHMMSSUPD_TANTOUcha
23、r6是更新担当者之所以要建立临时表是因为模块更新是定时更新而不是即时更新,临时表的主要作用是记录当日和前日用户数据的,这些数据都还没来得及更新到积分表中去,而临时表自己也会定时地将当日积分累加到前日积分中去,即字段NOW_POINT值累加到YDAY_POINT字段中去,ADD_POINT也会定时地向NOW_POINT进行累加,在临时表中会员有两个ID,一个是旧ID,一个是新ID他的作用在于如果会员卡片丢失了就需要对会员注册一个新ID以供用户使用,其中UPD_KBN字段是比较重要的字段,它是用来进行更新区分的,即会员到底是第一次注册,还是会员要求注销自己的帐号,还是由于卡片丢失需要重新办理卡片等
24、。表5 会员状态表字段名称数据类型长度是否为空字段说明备注MEMBER_CODEchar13否会员编号OLD_MEMBER_CODEchar13是旧会员编号DOMINANT_CODEchar3是会员等级编号TENPO_CODEchar6是店铺编号OLD_DOMINANT_CODEchar3是会员旧等级编号OLD_TENPO_CODEchar6是旧店铺编号UPD_KBNchar1是更新区分MSTS_AUTO_IDint15否自动编号会员状态表主要是用于记录会员的一些入会信息,在临时表中的会员是否是第一次注册,如果是第一次的话就需要对其信息进行添加到会员状态表中去,不是的话就不需要添加。表6 用户
25、积分表字段名称数据类型长度是否为空字段说明备注MEMBER_CODEchar13否会员编号OLD_MEMBER_CODEchar13是旧会员编号YUTAI_RANKchar2是优待等级NOW_POINTnumeric8是当前积分RUIKEI_POINTnumeric8是累积积分OUT_RUIKEI_POINTnumeric8是消耗累计积分ADD_RUIKEI_POINTnumeric8是追加累计积分KIHON_RUIKEI_POINTnumeric8是基本累积积分BONUS_RUIKEI_POINTnumeric8是奖励累积积分KAIAGE_Rchar8是最后消费时间YYYYMMDDTUKI_
26、KAIAGE_Mnumeric10是当月购买金额BEFORE_TUKI_KAIAGE_Mnumeric10是前月购买金额KAIAGE_Fnumeric5是购买次数KAIAGE_Mnumeric10是购买金额MEMBER_WARIBIKI_Mnumeric10是会员打折累积金额KOUNYU_Mnumeric10是买进累积金额MUKOU_KBNchar1是无效区分0有效1无效ADD_YMDHMSchar20是注册时间YYYYMMDDHHMMSSADD_TANTOUchar6是注册担当者UPD_YMDHMSchar20是更新时间YYYYMMDDHHMMSSUPD_TANTOUchar6是更新担当者S
27、YSTEM_UPD_YMDHMSchar20是系统更新时间YYYYMMDDHHMMSS积分表则是记录从会员注册之日起到现在,会员积分总的变化,如会员总的消耗积分,总的追加积分,总的奖励积分,最后一次消费时间,打折了好多金额,消费的次数等能反应出会员是否是一个老客户还是不怎么经常光顾的新客户。表7 奖励积分表字段名称数据类型长度是否为空字段说明备注SHORI_YMchar6否处理月份YYYYMMMEMBER_CODEchar13否会员编号TUKI_KAIAGE_Mnumeric10是当月购买金额BONUS_POINTnumeric8是奖励积分BONUS_KUBNnumeric4是奖励区分SYST
28、EM_UPD_YMDHMSchar14是系统更新时间YYYYMMDDHHMMSS奖励积分表用来记录用户受到奖励的积分数,以及为什么受到奖励,让管理者有据可查。表8 当日积分历史记录表字段名称数据类型长度是否为空字段说明备注MEMBER_CODEchar13否会员编号YMDchar8否日期YYYYMMDDYUTAI_RANKchar2是优待等级KIHON_POINTnumeric6是当前基本积分BONUS_POINTnumeric6是奖励积分ADD_POINTnumeric6是添加积分OUT_POINTnumeric6是消耗积分NOW_POINTnumeric8是当日积分UPD_YMDHMSch
29、ar14是更新日期YYYYMMDDHHMMSSUPD_TANTOUchar6是更新担当者当日积分历史记录表则是用于记录用户当日记录变化的,其主键是MEMBER_CODE和YMD联合起来的主键,可见每当依照临时表对其它表进行更新时,临时表中每条用户的数据都会备份到当日积分历史记录表中来。模块程序处理过程都是参照临时积分表对其它5个表进行数据库更新,添加删除等工作,程序开始以及结束都要输出相应的日志,但发生异常现象时应输出错误日志到数据库的LOG中去。读取临时表时应该注意每次读取记录条数,以免数据量过大引起服务器系统崩溃。4模块的实现过程分析4.1积分更新类具体实现先在FSPB1210类构造函数里
30、创建数据库连接类和共通文件类:public FSPB1210()/共通情報取得(INI) INI=new IniConfig();if(INI.ErrorString!=1&INI.ErrorString!=2&INI.ErrorString!=3)skyConnect1=new SkyConnect();/因为SkyConnect类中会使用到IniConfig类进行INI共同文件的读取,所以要先判断INI文件是否存在,以及文件能否打开和正确读取INI中的字段项,这样才能保证SkyConnect类正常运行。程序首先要读取INI共同文件,如果读取失败需要输出失败原因,并结束程序,因为程序的所有数
31、据库操作都封装在SkyConnect类中的,而SkyConnect类也需要INI文件的读取,固输出错误日志时候需要自己单独创建数据库连接代码。这段代码如下: SlConnection con1=new SqlConnection(server=192.192.192.238;uid=sa;pwd=123456;database=tokyosuper);SqlCommand com1=new SqlCommand(insert FSPTB_LOG(P_Sel,P_Msg,P_AppNM,P_FuncNM,P_JobNM,P_ErrDetail,P_INIFile)values(L,FSP.INI
32、,FSPB1210,UpData,SK-XUFENG,FSP.INI,Common.ini),con1);以下是更新积分程序具体实现的主要逻辑代码:do DatatableKARI=skyConnect1.GetDataTablePage(select *from FSPTB_POINT_KARI,i,100);if( DatatableKARI.Rows.Count!=0)foreach (DataRow DatarowKARI in DatatableKARI.Rows)DataSetDatasetMember=skyConnect1.GetDataSet(select *from FSP
33、TB_MEMBER_STATUS where MEMBER_CODE= + + DatarowKARIMEMBER_CODE.ToString() + );if(DatasetMember.Tables0.Rows.Count=0) FSPTB_MEMBER_STATUS(DatarowKARI);if (DatarowKARIUPD_KBN.ToString()= 4) DataSet DatasetPOINTJ = skyConnect1.GetDataSet(select *from FSPTB_POINT where OLD_MEMBER_CODE= + + DatarowKARIOL
34、D_MEMBER_CODE.ToString() + );if(DatasetPOINTJ.Tables0.Rows.Count!=0)DataRow DatarowPOINTJ=DatasetPOINTJ.Tables0.Rows0;DataSet DatasetKARIJ = skyConnect1.GetDataSet(select *from FSPTB_POINT_KARI where OLD_MEMBER_CODE= + + DatarowKARIOLD_MEMBER_CODE.ToString() + ); DataRow DatarowKARIJ=DatasetKARIJ.Ta
35、bles0.Rows0; DataSet DatasetPOINTX = skyConnect1.GetDataSet(select *from FSPTB_POINT where MEMBER_CODE= + + DatarowKARIMEMBER_CODE.ToString() + );if(DatasetPOINTX.Tables0.Rows.Count=0) FSPTB_CARDZ(DatarowKARI,DatarowPOINTJ,DatarowKARIJ);else DataRow DatarowPOINTX=DatasetPOINTX.Tables0.Rows0; FSPTB_C
36、ARDG(DatarowKARI,DatarowPOINTJ,DatarowKARIJ,DatarowPOINTX);elsereturn 0;DataSet DatasetBONUS = skyConnect1.GetDataSet(select *from FSPTB_POINT_BONUS where MEMBER_CODE= + DatarowKARIOLD_MEMBER_CODE + );if(DatasetBONUS.Tables0.Rows.Count!=0)DataRow DatarowBONUS=DatasetBONUS.Tables0.Rows0;FSPTB_POINT_B
37、ONUS(DatarowBONUS,DatarowKARI);elseDataSet DatasetPOINT = skyConnect1.GetDataSet(select *from FSPTB_POINT where MEMBER_CODE= + + DatarowKARIMEMBER_CODE.ToString() + );DataTable DatatablePOINT=DatasetPOINT.Tables0;if(DatatablePOINT.Rows.Count=0)FSPTB_POINTZ(DatarowKARI);elseDataRow DatarowPOINT=Datat
38、ablePOINT.Rows0;FSPTB_POINTG(DatarowKARI,DatarowPOINT);else return 0; i=i+100;while(DatatableKARI.Rows.Count=100);catch(Exception E)skyConnect1.SqlExecute(insert FSPTB_LOG(P_Sel,P_Msg,P_AppNM,P_FuncNM,P_JobNM,P_ErrDetail,P_INIFile)values(L,履歴更新,FSPB1210,UpData,SK-XUFENG,+E.Message+,Common.ini);final
39、lyskyConnect1.SqlExecute(insert FSPTB_LOG(P_Sel,P_Msg,P_AppNM,P_FuncNM,P_JobNM,P_ErrDetail,P_INIFile)values(E,終了,FSPB1210,UpData,SK-XUFENG,終了,Common.ini);this.Dispose();说明:int 1=0;DataTable DatatableKARI;doDatatableKARI=skyConnect1.GetDataTablePage(select *from FSPTB_POINT_KARI,i,100)if( DatatableKA
40、RI.Rows.Count!=0) elsereturn 0;i=i+100;while(DatatableKARI.Rows.Count=100)这段代码是表示一次从临时积分表中读取100条记录,用于避免数据量读取过大造成系统崩溃,是处理过程的精髓所在,skyConnect1.GetDataTablePage()将返回一个有100条或者100条以下的记录条数。if(DatasetMember.Tables0.Rows.Count=0) FSPTB_MEMBER_STATUS(DatarowKARI);判断会员状态表中是否有这个会员的信息,如果没有,则用于对会员状态表进行添加,FSPTB_ME
41、MBER_STATUS(DatarowKARI);这个函数的具体实现请见附录。 if (DatarowKARIUPD_KBN.ToString()= 4) /会员卡片再发行更新处理else /普通更新处理 用于更新区分,当该条临时表积分记录更新区分字段值为“4”的时候是会员遗失卡片的情况,否则便是一般的更新。两种更新的具体实现请见附录。4.2积分累计记录类具体实现积分累计记录类的实现大概思路和积分更新类相同,因为它们更新的参照物都是以临时积分表为基础的,首先都要通过skyConnect1.GetDataTablePage()一次从临时表中读取100条记录,直到将表中的记录读取完毕为止,程序开始正常运行时需要输入开始日志,正常运行结束也需要输入结束日志,出现异常需要输出异常信息,它们都是通过skyConne