哪些牙适合种植:小型超市管理系统

来源:百度文库 编辑:中财网 时间:2024/04/26 20:02:49
摘要:小型超市管理系统在现代社会中的应用十分广泛,它是用delphi开发的基于windows的小型数据库管理软件。后台数据库的设计采用SQL server 2000,这些流行软件的应用也使系统更容易维护。该系统使用结构化方法,按照系统调查、系统分析、系统设计、系统实施的步骤,采用结构化的编程方法而完成的。在设计中,对系统总体方案的设计,采用了“自上而下”的方法,而对于信息系统具体业务采用了“自下而上”的方法。尤其是数据窗口这一方便而简洁操纵数据库的智能化对象,从而建立一套完善科学的管理信息系统,对超市进行进货、销售发货、库存等实现全面、动态、及时的管理。因此,该设计的方案基本上满足了系统的业务需求,具有一定的可用性。

  关键词: 数据表;SQL server 2000;控件绑定ODBC数据源

  1、 需求分析

  1.1应用背景

  最初的超市资料管理,都是靠人力来完成的。但近几年我国超市经营规模日趋扩大,销售额和门店数量大幅度增加,而且许多超市正在突破以食品为主的传统格局,向品种多样化发展。小型超市在业务上需要处理大量的库存信息,还要时刻更新产品的销售信息,不断添加商品信息,并对商品各种信息进行统计分析。因此,在超市管理中引进现代化的办公软件,实现超市庞大商品的控制和传输,从而方便销售行业的管理和决策,为超市和超市管理人员解除后顾之忧。

  1.2设计目标

  开发这个系统的目的就是帮助超市管理部门提高工作效率。通过本管理系统软件,能帮助超市工作人员利用计算机,极为方便的对超市的有关数据进行管理、输入、输出、查找等有关操作,使杂乱的超市数据能够具体化、直观化、合理化等。

  2、总体方案设计

  2.1系统的目标

  小型超市管理系统能减少很多不必要的资源,不用象以前那样用冗余的纸张式管理。大大节省了管理人员的工作量,并且计算机的存储与系统快速查询功能大大提高了,提高管理人员的效率。

  方便快捷的操作界面,提高工作效率。

  2.2系统处理流程

  1.启动系统,激活登陆口令界面;

  2.通过验证后,对系统进行初始化;

  3. 进入系统,通过事件驱动机制激活相应的功能模块,并执行相应的功能;

  4.通过关闭系统事件,激活关闭系统模块,退出系统。

  系统处理流程如图2.2所示:

  密码 是 图2.2系统处理流程图

  2.3系统功能模块设计

  通过对上面有关小型超市管理系统的功能需求分析以后,可知小型超市管理系统的功能有:系统管理,商品管理,销售管理。系统功能菜单按以下方法进行设计。

  小型超市管理系统

  系统管理

  用户管理

  备份管理

  ------------

  退出系统

  商品管理

  商品管理

  商品报表

  销售管理

  销售商品

  销售报表

  销售历史

  ------------

  今日盘点

  系统功能模块设计如图2.3所示:

  图2.3 系统功能模块设计层次图

  2.4系统设计分析

  用户管理:添加用户账号,密码,类型等信息。

  备份管理:数据库的备份,数据库还原。

  商品管理:商品的信息录入,包括商品的编号、名称、单价、单位等。

  销售管理:商品的销售信息,销售金额等。

  销售历史:商品的销售时间,销售数量等。

  今日盘点:商品的当日销售总额。

  3、数据库设计

  作为windows数据库家族中出类拔萃的成员,SQL Server2000这种关系型数据库管理系统能够满足各种类型的企业客户和独立软件供应商构建商业应用程序的需要。SQL的主要功能之一是实现数据库查询。你使用查询来取得满足特定条件的信息。在逻辑查询中,你可以包括特殊的运算符如AND、OR和NOT,你使用这些运算符来选择特定的记录。例如,你可以用AND来限制查询结果。SQL的另一主要功能是数据更新,它通过INSERT、DELETE、UPDATE等语句实现。另外,利用SQL Server我们可以很轻松地进行建表、维护等数据库操作。[2]

  3.1系统数据流程图描述

  系统数据流程图分别由图3.1所示。

  图3.1 浏览与录入管理

  3.2数据字典:

  是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明。

  下面是超市管理系统几个数据元素的字典卡片与具体数据卡片的含义:

  名称:商品信息表

  描述:商品的基本信息 名称: 商品销售报表

  描述:商品销售情况 3.3系统设计具体实现

  目的:设计系统结构,根据需求分析给出的功能得出系统体系结构。如划分模块。

  目标:通过本系统软件,能帮助超市管理人员利用计算机,快速方便的对商品信息管理进行维护、输入、输出、查找的所需操作。

  运行环境

  操作系统:windows2000/XP或更高的版本。

  支持环境:Borland Delphi7。

  3.4模块具体分析

  商品信息数据录入模块:主要用于商品基本信息的录入与初始化。实体E-R图

  如下:

  3.4 商品信息数据E-R图

  3.5出错处理设计

  本系统采用了典型的人-机对话模式,若操作失败则弹出对话框(如:出错信息等)。

  出错处理对策:用户可以根据弹出的对话框的提示信息进行相应的处理。

  安全保密设计:本系统设计了密码验证登陆窗口,具有权限控制。

  3.6程序逻辑

  模块功能实现的算法流程图(数据录入)。

  图3.6数据录入模块流程图

  4.1功能模块简介

  4.1.1系统功能维护模块

  用户管理:设定本系统的系统操作员,可以一个也可以多个管理员。

  口令管理:在不退出系统的情况下,凭借原来的密码,可以修改管理员密码。

  退出系统:在使用完系统之后,可以退出系统。

  4.1.2基本资料管理模块

  商品资料管理:商品资料的添加、删除、编辑。

  资料管理:新增、删除和编辑。

  初期建帐:对采集到的数据在后台进行数据库管理。

  4.1.3商品流通管理模块

  进货管理:当超市进货的时候,分为以下几个步骤:商品编号录入后台数据库 在价格定义模块中使商品编号码和价格相对应,即使商品编号码一个码一个价格,保存之后,后台数据库中库存自动更新。

  库存管理:当进货时,库存自动增加,当销售时,库存自动减少。

  库存报警:设定库存的上限和下限值之后,当库存不符合要求的时候,系统报警。

  盘点管理:系统自动产生盘点信息。

  4.1.4销售实时控制模块

  由于超市要实时交易,所以对交易有一个界面实时控制商品的流出,当操作员扫描一个物品的条形码之后,输入数量,再扫描下一个物品,输入数量,直到客户需要的物品输入完之后,点击一个按钮,系统自动产生每个货物应付款,总应收款,实收款和找零信息,并控制打印机打印一张热敏纸收据。此时,在系统的后台数据库中自动减少相应库存。

  4.1.5报表生成模块

  报表生成模块将担当起智能化的报表生成的任务。此模块将利用SQL server 2000和数据库功能,一步一步地完成所要求的动态统计结果。可以完成商品基本信息报表、销售报表等不同条件下任意组合而成的报表,能够以快速、准确等优点取代人工操作,提高了管理工作效率。

  4.1.6查询模块

  可以根据某个条件进行查询,如:日期\产品等,查询日销售量\产品销售量等。

  4.1.7本软件可以实现的功能如下:

  用户管理,包括用户的添加、删除、密码和权限的修改;

  商品管理,商品的添加、删除、修改、销量统计和分类查询;商品报表;

  销售商品:通过输入货物编号和数量实现商品销售,并提供库存判断、找零计算等功能;销售报表和销售历史;

  今日盘点,告诉用户当天的销售额是多少;

  5、系统运行与调试

  5.1数据复制

  数据复制实际上是为了提高查询处理的本地性,对同一数据复制多个副本,根据需要将副本存放在不同的电脑中.

  数据信息包括商品名、库存量、销售量、商品单价、生产日期、生产厂家等.通过事务提交的方式保证避免由于其它一些电脑故障造成的在数据库更新过程中数据的不一致.

  5.2.数据库备份

  对数据库进行备份是一项很重要的工作,本系统采用在启动数据上传模块的同时自动备份数据库的方法,从而既提高了数据库的可靠性和安全性,同时也减轻了数据库管理员的工作,降低了备份的复杂性.当数据库中的数据遭到破坏需要恢复时,可以从自动备份中恢复.

  本系统利用SQL DMO(DatabaseManagement Object)实现数据库备份.SQLDistributed Management Framework

  (SQL—DMF,即SQL分布式管理框架)是一组集成API 和服务, 用与管理SQLServer.SQL_DMO是SQL_DMF中的一个组件.本系统实现数据库备份程序示例如下:

  Dim mySvr As New SQLDMO.SQLServer

  Dim myDB As SQLDMO.Database

  DimmyBKAs New SQLDMO.Backup

  Dim myDv As New

  SQLDMO.BaekupDevice

  Set mySvr=New SQLDMO.SQLServer

  mySvr.C and user_pass="'+edit1.Text+'" '); ADOQuery1.Open; if ADOQuery1.Eof then begin LogTimes := LogTimes+1; if messagebox(handle,'您填写的用户或密码有错误!是否重新输入?','出错提示',mb_iconinformation+mb_okcancel)=IDcancel then application.Terminate;

  if LogTimes>=3 then

  begin

  messagebox(handle,'对不起,登录次数超过3次,程序自动关闭!','非法登录',MB_ICONWARNING+mb_ok);

  application.Terminate;

  end;

  end

  else

  begin

  UserType := ADOQuery1.FieldByName('user_type').AsString;

  UserName := ADOQuery1.FieldByName('user_name').AsString;

  LogTimes := 0;

  ADOQuery1.Free;

  Form1.Hide;

  form2.ShowModal;

  end;

  end

  else

  messagebox(handle,'您没有填写用户和密码!','出错提示',mb_iconinformation+mb_ok)

  end;

  procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

  begin

  if key=#13 then Edit1.SetFocus;

  end;

  procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

  begin

  if key=#13 then Image4Click(self);

  end;

  procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

  begin

  if (ssleft in shift) then

  begin

  releasecapture;

  perform(wm_syscommand, $f012, 0);

  end;

  end;

  procedure TForm1.Image2Click(Sender: TObject);

  begin

  application.Terminate;

  end;

  procedure TForm1.Image3Click(Sender: TObject);

  begin

  application.Minimize;

  end;

  end.

  数据库还原,备份

  unit UnitDbBuckup;

  interface

  uses

  windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, Gauges, ExtCtrls, StdCtrls;

  type

  TFrameDbBuckup = class(TFrame)

  Image1: TImage;

  GroupBox1: TGroupBox;

  Image2: TImage;

  Image3: TImage;

  SaveDialog1: TSaveDialog;

  Gauge1: TGauge;

  OpenDialog1: TOpenDialog; procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation uses UnitLogin; {$R *.dfm} procedure TFrameDbBuckup.Image2Click(Sender: TObject); var i: integer; begin try if not savedialog1.Execute then exit; if FileExists(savedialog1.FileName+'.mdb') then begin if Messagebox(handle,'存在数据库重名,是否覆盖?','存盘选项',mb_iconquestion+mb_yesno)=IDNo then Exit;

  end

  else

  begin

  for i:=Gauge1.MinValue to Gauge1.MaxValue do

  Gauge1.Progress := i;

  CopyFile(PChar(DataFile),PChar(SaveDialog1.FileNam e+'.mdb'),True);

  Messagebox(handle,'数据库备份成功!','备份数据',mb_iconinformation+mb_ok);

  end;

  except

  Messagebox(handle,'警告:数据库备份失败!','存盘错误',mb_iconwarning+mb_ok);

  end;

  end;

  procedure TFrameDbBuckup.Image3Click(Sender: TObject);

  var

  i: integer;

  begin

  try

  if not opendialog1.Execute then exit;

  if Messagebox(handle,'警告:现有数据有可能丢失,确定还原?','确定还原',mb_iconquestion+mb_yesno)=IDNo then Exit;

  for i:=Gauge1.MinValue to Gauge1.MaxValue do

  Gauge1.Progress := i;

  Messagebox(handle,'数据库还原成功!','还原数据',mb_iconinformation+mb_ok);

  except

  Messagebox(handle,'警告:数据库还原失败!','读取错误',mb_iconwarning+mb_ok);

  end;

  end;

  end.

  商品信息

  unit UnitProdList;

  interface

  uses

  windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Grids, DBGrids, DB, ADODB, ExtCtrls, StdCtrls, Mask, DBCtrls;

  type

  TFrameProdList = class(TFrame)

  Image1: TImage;

  ADOQuery1: TADOQuery;

  DataSource1: TDataSource;

  DBGrid1: TDBGrid;

  GroupBox1: TGroupBox;

  Image2: TImage;

  Image3: TImage;

  Image4: TImage;

  Label1: TLabel;

  DBEdit1: TDBEdit;

  Label2: TLabel;

  DBEdit2: TDBEdit;

  DBEdit3: TDBEdit;

  Label3: TLabel;

  DBEdit4: TDBEdit;

  Label4: TLabel;

  DBEdit5: TDBEdit;

  Label5: TLabel;

  Image5: TImage;

  Image6: TImage;

  GroupBox2: TGroupBox;

  Label6: TLabel;

  Edit1: TEdit;

  Image7: TImage;

  Label7: TLabel; procedure Image2Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); function IsAllNum(s:string):bool; procedure Label7Click(Sender: TObject); procedure DBEdit1KeyPress(Sender: TObject; var Key: Char); procedure DBEdit2KeyPress(Sender: TObject; var Key: Char); procedure DBEdit3KeyPress(Sender: TObject; var Key: Char); procedure DBEdit4KeyPress(Sender: TObject; var Key: Char); procedure DBEdit5KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} procedure TFrameProdList.Image2Click(Sender: TObject); begin {添加商品}

  Image2.Enabled := False;

  Image3.Enabled := False;

  Image4.Enabled := False;

  DBEdit1.Color := clWhite;

  DBEdit2.Color := clWhite;

  DBEdit3.Color := clWhite;

  DBEdit4.Color := clWhite;

  DBEdit5.Color := clWhite;

  DBEdit1.Enabled := True;

  DBEdit2.Enabled := True;

  DBEdit3.Enabled := True;

  DBEdit4.Enabled := True;

  DBEdit5.Enabled := True;

  Image5.Visible := True;

  Image6.Visible := True;

  DBEdit1.SetFocus;

  ADOQuery1.Append;

  end;

  procedure TFrameProdList.Image5Click(Sender: TObject);

  begin

  {提交数据}

  if (DBEdit1.Text<>'') and (DBEdit2.Text<>'') and (DBEdit3.Text<>'') and (DBEdit4.Text<>'') and (DBEdit5.Text<>'') then

  ADOQuery1.Post

  else

  if messagebox(handle,'您的输入不正确(空值),放弃输入?','检查输入',mb_iconquestion+mb_yesno)=IDyes then

  ADOQuery1.Cancel

  else

  exit;

  Image2.Enabled := True;

  Image3.Enabled := True;

  Image4.Enabled := True;

  DBEdit1.Color := $00FFF0DC;

  DBEdit2.Color := $00FFF0DC;

  DBEdit3.Color := $00FFF0DC;

  DBEdit4.Color := $00FFF0DC;

  DBEdit5.Color := $00FFF0DC;

  DBEdit1.Enabled := False;

  DBEdit2.Enabled := False;

  DBEdit3.Enabled := False;

  DBEdit4.Enabled := False;

  DBEdit5.Enabled := False;

  Image5.Visible := False;

  Image6.Visible := False;

  end;

  procedure TFrameProdList.Image3Click(Sender: TObject);

  begin

  if messagebox(handle,'删除的商品不能被恢复,是否删除?','确认删除',mb_iconquestion+mb_yesno)=IDyes then ADOQuery1.Delete;

  end;

  procedure TFrameProdList.Image4Click(Sender: TObject);

  begin

  {修改用户}

  Image2.Enabled := False;

  Image3.Enabled := False;

  Image4.Enabled := False;

  DBEdit1.Color := clWhite;

  DBEdit2.Color := clWhite;

  DBEdit3.Color := clWhite;

  DBEdit4.Color := clWhite;

  DBEdit5.Color := clWhite;

  DBEdit1.Enabled := True; DBEdit2.Enabled := True; DBEdit3.Enabled := True; DBEdit4.Enabled := True; DBEdit5.Enabled := True; Image5.Visible := True; Image6.Visible := True; DBEdit1.SetFocus; ADOQuery1.Edit; end; procedure TFrameProdList.Image6Click(Sender: TObject); begin {放弃提交}

  ADOQuery1.Cancel;

  Image2.Enabled := True;

  Image3.Enabled := True;

  Image4.Enabled := True;

  DBEdit1.Color := $00FFF0DC;

  DBEdit2.Color := $00FFF0DC;

  DBEdit3.Color := $00FFF0DC;

  DBEdit4.Color := $00FFF0DC;

  DBEdit5.Color := $00FFF0DC;

  DBEdit1.Enabled := False;

  DBEdit2.Enabled := False;

  DBEdit3.Enabled := False;

  DBEdit4.Enabled := False;

  DBEdit5.Enabled := False;

  Image5.Visible := False;

  Image6.Visible := False;

  end;

  procedure TFrameProdList.Image7Click(Sender: TObject);

  var

  sqlstr:string;

  begin

  if Edit1.Text<>'' then

  begin

  sqlstr := 'select * from t_prod where prod_name like "%' + Edit1.Text + '%"';

  if IsAllNum(Edit1.Text) then sqlstr := sqlstr + ' or prod_id=' + Edit1.Text;

  ADOQuery1.Close;

  ADOQuery1.SQL.Clear;

  ADOQuery1.SQL.Add(sqlstr);

  ADOQuery1.Open;

  end

  else

  messagebox(handle,'请输入查询条件!','检查输入',mb_iconwarning+mb_ok)

  end;

  procedure TFrameProdList.Edit1KeyPress(Sender: TObject; var Key: Char);

  begin

  if key=#13 then Image7Click(self);

  end;

  function TFrameProdList.IsAllNum(s:string):bool;

  var

  i:integer;

  begin

  for i := 1 To Length(s) do

  if (s[i] < '0') or (s[i] > '9') then

  begin

  IsAllNum := False;

  Exit;

  end;

  IsAllNum := True;

  end;

  procedure TFrameProdList.Label7Click(Sender: TObject);

  var

  sqlstr: string;

  begin

  sqlstr := 'select * from t_prod';

  ADOQuery1.Close;

  ADOQuery1.SQL.Clear;

  ADOQuery1.SQL.Add(sqlstr);

  ADOQuery1.Open;

  end;

  procedure TFrameProdList.DBEdit1KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then DBEdit2.SetFocus; end; procedure TFrameProdList.DBEdit2KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then DBEdit3.SetFocus; end; procedure TFrameProdList.DBEdit3KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then DBEdit4.SetFocus; end; procedure TFrameProdList.DBEdit4KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then DBEdit5.SetFocus; end; procedure TFrameProdList.DBEdit5KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then Image5Click(Self); end; end