本系统是本人前后花了差不多一年的时间开发的一套模仿速达3000的进销存系统,几经修改完善,现在已经比较稳定了。具体的功能不多介绍了,如果你有意向的话,请下载我的系统安装。开发这套系统时,我是报着一腔热血,带着年轻的冲劲和不知天高地厚,希望能凭借自己的技术实现创业梦想。可以说当初我对软件追求的执着狂,是常人难以想象和相比的。我开发这套通用进销存系统时,几乎每天都是熬夜,经常到晚上1、2点,白天还要上班。后来产品开发发完毕,才逐渐的明白,光靠技术是不够的,还需要有市场推广能力,对于一穷二白的我来说,根本没这资金和实力去推广。以前一直觉得速达的系统做的很不错,很看不起其他几个软件厂商如小聪、精诚、顺和达等,觉得它们的系统做的很烂,所以很不服气,就这样诞生了我的这个长胜商务管理系统。这开发期间,所付出的艰辛,花费的心血,是常人很难以想象的。由于长期的熬夜,现在得了脊椎炎,年纪轻轻就腰疼了唉,体质也下降了。所以感觉很疲惫,正是由于过度的冲劲,导致现在想转行,不想搞软件了。我很希望有有实力的公司继续我的梦想,我一次性转让我的源码,然后我希望能靠这笔资金能开个小店,安安稳稳的过日子就行了。下载地址:www.wisen.cn,咨询QQ:67906994,手机:13631528153。本系统不仅是一套非常专业化的进销存管理系统,更是一套非常良好的系统框架,系统代码高度重用,具有非常高的技术价值。如果您觉得我的系统写的不错,您开价,我最后将转让给出价最高者,有诚意者建议见面当面谈,非诚者勿扰!我想本系统只转让一家,不卖多家,因为我希望你来完成我没法完成的事业,所以价格会比较高,我也希望能以此来实现我转行开店的期望。

解决方案 »

  1.   

    本人有4年delphi开发经验,对企业管理流程也相对熟悉,本系统是本人一个人独立开发的,代码质量比较高,您下载详细使用过就知道了,由于最近一个月腰痛的很,没精力,没再打理它了,现在特在此寻找买主,我能有5万的转让费,我想我熬了一年的夜,这要求一点都不多吧。其实我原本根本就没想过卖的,现在身体状况很差,因为没精力也没法再搞软件了,希望转行,才萌生这个念头的。
      

  2.   

    开发工具是Delphi6.0+SQL Server2000,使用的第三方控件是EhLib,并有改写TDBGridEh控件。顺便说明一下系统主要的特点:一是界面风格统一,本系统是在本人对窗体基类继承模式长期摸索的基础上,编写并几经修改了窗体基类,以实现风格统一和代码高度重用,各个功能模块都是在相应基类基础上继承的,代码量相对较小,所以系统主程序文件比较小。
    二、通用查询窗体,有相当的实用价值,很大程度上都参考了速达的设计。三、整个系统的设计上和实现效果都参考了速达3000系列的设计,应该说基本上包括了进销存业务的各个功能模块,具有比较高的参考价值,如果您是做管理软件这行的,应该对速达3000系列的产品会比较了解。
      

  3.   

    2、其他收货单的源码:
    unit OtherReceive;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Dialogs, Provider, DBClient, Menus, ADODB, DB,
      Buttons, ComCtrls, ToolWin, ExtCtrls, StdCtrls, Mask, DBCtrls, Grids,
      DBGrids, DBGridEh, DBCtrlsEh, DBLookupEh,
      AccountDBGridEh, SQLManager, MasterDetailEditDBBase;type
      TOtherReceiveForm = class(TBaseDBMasterDetailEditForm)
        Label_ReceiveType: TLabel;
        Label_BillCode: TLabel;
        DBEdit_BillCode: TDBEditEh;
        DataSetHCode: TWideStringField;
        DataSetHBillCode: TWideStringField;
        DataSetHBillDate: TDateTimeField;
        DataSetHNote: TWideStringField;
        Panel_Title: TPanel;
        Label_Code: TLabel;
        Label_BillDate: TLabel;
        DBDateTimeEdit_BillDate: TDBDateTimeEditEh;
        DBEdit_Code: TDBEditEh;
        DataSetDProductCode: TWideStringField;
        DataSetDProductPrice: TBCDField;
        DataSetDProductQuantity: TFloatField;
        DataSetDSumAmount: TCurrencyField;
        DataSetDProductName: TWideStringField;
        DataSetDProductUnit: TWideStringField;
        Label_WareHouse: TLabel;
        DataSetHWareHouseCode: TWideStringField;
        DataSetHWareHouseName: TWideStringField;
        DataSetHCreater: TWideStringField;
        DataSetHCreaterName: TWideStringField;
        Label_Creater: TLabel;
        DBText_Creater: TDBText;
        Label_Employee: TLabel;
        DBEdit_EmployeeName: TDBEditEh;
        DataSetHEmployeeCode: TWideStringField;
        DataSetHEmployeeName: TWideStringField;
        DataSetHReceiveTypeCode: TWideStringField;
        DataSetHReceiveTypeName: TStringField;
        DBLookupCombobox_ReceiveTypeName: TDBLookupComboboxEh;
        DBLookupCombobox_WareHouseName: TDBLookupComboboxEh;
        procedure DataSetHNewRecord(DataSet: TDataSet);
        procedure DBGridDColumns1EditButtonClick(Sender: TObject;
          var Handled: Boolean);
        procedure DataSetDBeforePost(DataSet: TDataSet);
        procedure DataSetDCalcFields(DataSet: TDataSet);
        procedure FormDestroy(Sender: TObject);
        procedure BitBtn_SaveClick(Sender: TObject);
        procedure DataSetDNewRecord(DataSet: TDataSet);
        procedure DBEdit_EmployeeNameEditButtons0Click(Sender: TObject;
          var Handled: Boolean);
        procedure BitBtn_ListClick(Sender: TObject);
      private
        { Private declarations }
        
      protected
        procedure InitDataSetInfo;override;
             
      public
        { Public declarations }
        class procedure Execute(const aKeyFieldValue:String='');
        
      end;var
      OtherReceiveForm : TOtherReceiveForm;
      
    implementationuses Global, ReferenceDataModule, ReferProduct,
      ReferEmployee, OtherReceiveListByReceiveType;{$R *.dfm}{ TOtherReceiveForm }class procedure TOtherReceiveForm.Execute(const aKeyFieldValue: String);
    begin
      If Not Assigned(OtherReceiveForm) then
        OtherReceiveForm:=TOtherReceiveForm.Create(Application);
      OtherReceiveForm.fLocateKeyFieldValue:=aKeyFieldValue;
      OtherReceiveForm.Show;
    end;procedure TOtherReceiveForm.InitDataSetInfo;
    begin
      DetailForeignKeyFieldName:='MasterCode';
      SerialCode:='I01';
      SQLManager.TableName:='TOtherReceiveH';
      SQLManager.KeyFieldName:='Code';
      SQLManager.FieldNameList.Add('Code');
      SQLManager.FieldNameList.Add('BillDate');
      SQLManager.FieldNameList.Add('ReceiveTypeCode');
      SQLManager.FieldNameList.Add('BillCode');
      SQLManager.FieldNameList.Add('WareHouseCode');
      SQLManager.FieldNameList.Add('EmployeeCode');
      SQLManager.FieldNameList.Add('Creater');
      SQLManager.FieldNameList.Add('Note');
        
      DetailSQLManager.TableName:='TOtherReceiveD';  
      DetailSQLManager.KeyFieldName:='ItemCode';
      DetailSQLManager.FieldNameList.Add('MasterCode');
      DetailSQLManager.FieldNameList.Add('ItemCode');
      DetailSQLManager.FieldNameList.Add('ProductCode');
      DetailSQLManager.FieldNameList.Add('ProductQuantity');
      DetailSQLManager.FieldNameList.Add('ProductPrice');
      
      inherited;
    end;procedure TOtherReceiveForm.DataSetHNewRecord(DataSet: TDataSet);
    begin
      inherited;
      DataSetH.FieldByName('BillDate').AsDateTime:=gSysManager.ServerDate;
      DataSetH.FieldByName('Creater').AsString:=gUser.UserCode;
    end;procedure TOtherReceiveForm.DBGridDColumns1EditButtonClick(Sender: TObject;
      var Handled: Boolean);
    begin
      inherited;
      gSysManager.GetForeignFieldValue(ReferProductForm,TReferProductForm,DataSetD,'ProductCode',
            DBGridD.InplaceEditor,EditState,'Stopped=0');
    end;procedure TOtherReceiveForm.DataSetDBeforePost(DataSet: TDataSet);
    begin
      inherited;
      If DataSetD.FieldByName('ProductCode').AsString='' then
      Begin
        gSysManager.MessageInfo('货品编号不能为空!');
        Abort;
        Exit;
      end;  
      If DataSetD.FieldByName('ProductQuantity').IsNull then
      Begin
        gSysManager.MessageInfo('货品数量不能为空!');
        Abort;
        Exit;
      end;    
      If DataSetD.FieldByName('ProductQuantity').AsFloat=0 then
      Begin
        gSysManager.MessageInfo('货品数量不能等于0!');
        Abort;
        Exit;
      end;
      If DataSetD.FieldByName('ProductQuantity').AsFloat<0 then
      Begin
        gSysManager.MessageInfo('货品数量必须大于0!');
        Abort;
        Exit;
      end;  
      If DataSetD.FieldByName('ProductPrice').IsNull then
      Begin
        gSysManager.MessageInfo('货品单价不能为空!');
        Abort;
        Exit;
      end;     
      If DataSetD.FieldByName('ProductPrice').AsFloat<0 then
      Begin
        gSysManager.MessageInfo('货品单价必须大于等于0!');
        Abort;
        Exit;
      end;     
    end;procedure TOtherReceiveForm.DataSetDCalcFields(DataSet: TDataSet);
    begin
      inherited;
      DataSetD.FieldByName('SumAmount').AsFloat:=
            DataSetD.FieldByName('ProductQuantity').AsFloat*DataSetD.FieldByName('ProductPrice').AsFloat;
    end;procedure TOtherReceiveForm.FormDestroy(Sender: TObject);
    begin
      inherited;
      OtherReceiveForm:=nil;
    end;procedure TOtherReceiveForm.BitBtn_SaveClick(Sender: TObject);
    begin
      if (DataSetH.FieldByName('BillDate').AsDateTime<=gPriorSettleDate) then
      begin
        gSysManager.MessageInfo('单据日期不能在当前业务期间之前!');
        DBDateTimeEdit_BillDate.SetFocus;
        Exit;
      end;
      If DataSetH.FieldByName('ReceiveTypeCode').AsString='' then
      begin
        gSysManager.MessageInfo('收货类型不能为空!');
        DBLookupCombobox_ReceiveTypeName.SetFocus;
        Exit;
      end;
      if DataSetH.FieldByName('WareHouseCode').AsString='' then
      begin
        gSysManager.MessageInfo('请输入收货仓库!');
        DBLookupCombobox_WareHouseName.SetFocus;
        Exit;
      end;
      if DataSetD.IsEmpty then
      begin
        gSysManager.MessageInfo('单据明细没数据,不能保存!');
        Exit;
      end;    
      inherited;
    end;procedure TOtherReceiveForm.DataSetDNewRecord(DataSet: TDataSet);
    begin
      inherited;
      DataSetD.FieldByName('ProductQuantity').AsFloat:=1;
    end;procedure TOtherReceiveForm.DBEdit_EmployeeNameEditButtons0Click(
      Sender: TObject; var Handled: Boolean);
    begin
      inherited;
      gSysManager.GetForeignFieldValue(ReferEmployeeForm,TReferEmployeeForm,DataSetH,'EmployeeCode',DBEdit_EmployeeName,EditState);
    end;procedure TOtherReceiveForm.BitBtn_ListClick(Sender: TObject);
    begin
      inherited;
      TOtherReceiveListByReceiveTypeForm.Execute;
    end;end.
      

  4.   

    做个说明:
    看了楼主贴的代码,和我臆测的差不多。做个很简单的假设,我从你的 TOtherReceiveForm 派生一个窗体。你的代码已经写死了,我需要重新定义逻辑该怎么办?我肯定得了解你这个父窗口的行为,否则肯定死。这只是很简单的一个问题,其他复杂的问题更是要追朔到根,甚至需要完全重写。这个代码怎么重用?对于一个稍微复杂一点的问题,比如这个软件,按照你的这种方式进行代码重用,肯定不能依照顺序逻辑进行继承,在基类中就需要考虑到后继发生的问题,需要很多的虚函数。而且一旦定稿后,如果你的企业逻辑一改变,嘿嘿,相应的重新定义基类吧。说了这么多,就是一个结论,完全不可能重用。重用应该是根本不需要修改已有的代码,而且也不需要了解实现的细节。像楼主的这种写法,如果需要重用,不了解库结构,不了解代码是完全不行的,除非不对这些代码进行重用。这也是我说的还是别提什么“更是一套非常良好的系统框架,系统代码高度重用,具有非常高的技术价值”。
      

  5.   

    代碼
    If DataSetD.FieldByName('ProductCode').AsString='' then
      Begin
        gSysManager.MessageInfo('货品编号不能为空!');
        Abort;
        Exit;
      end;  
    ...Abort之后帶個Exit有作用么?