资源描述
精品文档就在这里
-------------各类专业好文档,值得你下载,教育,管理,论文,制度,方案手册,应有尽有--------------
--------------------------------------------------------------------------------------------------------------------------------------------
管理信息系统课程
设计报告
指导教师: 郭剑毅
学 院 : 信息工程与自动化学院
专 业 : 自动化07B
组 长 :王志鹏(200710401208)
组 员 :彭兴勇(200710401121)
组 员 :何运龙(200710401239)
超市销售管理系统
摘要:超市销售管理系统在现代社会中的应用十分广泛,它是用Java开发的基于windows的小型数据库管理软件。后台数据库的设计采用SQL server 2000,这些流行软件的应用也使系统更容易维护而且操作简单。该系统使用结构化方法,按照系统调查、系统分析、系统设计、系统实施的步骤,采用结构化的编程方法而完成的。在设计中,对系统总体方案的设计,采用了“自上而下”的方法,而对于信息系统具体业务采用了“自下而上”的方法。尤其是数据窗口这一方便而简洁操纵数据库的智能化对象,从而建立一套完善科学的管理信息系统,对超市进行进货、销售发货、库存等实现全面、动态、及时的管理。因此,该设计的方案基本上满足了系统的业务需求,具有一定的可用性。
1、 需求分析
1.1、应用背景
最初的超市资料管理,都是靠人力来完成的。但近几年我国超市经营规模日趋扩大,销售额和门店数量大幅度增加,而且许多超市正在突破以食品为主的传统格局,向品种多样化发展。小型超市在业务上需要处理大量的库存信息,还要时刻更新产品的销售信息,不断添加商品信息,并对商品各种信息进行统计分析。因此,在超市管理中引进现代化的办公软件,实现超市庞大商品的控制和传输,从而方便销售行业的管理和决策,为超市和超市管理人员解除后顾之忧。
1.2、设计目标
开发这个系统的目的就是帮助超市管理部门提高工作效率。通过本管理系统软件,能帮助超市工作人员利用计算机,极为方便的对超市的有关数据进行管理、输入、输出、查找等有关操作,使杂乱的超市数据能够具体化、直观化、合理化等。
2、数据库表格设计:
作为Windows数据库家族中出类拔萃的成员,SQL Server2000这种关系型数据库管理系统能够满足各种类型的企业客户和独立软件供应商构建商业应用程序的需要。SQL的主要功能之一是实现数据库查询。你使用查询来取得满足特定条件的信息。在逻辑查询中,你可以包括特殊的运算符如AND、OR和NOT,你使用这些运算符来选择特定的记录。例如,你可以用AND来限制查询结果。SQL的另一主要功能是数据更新,它通过INSERT、DELETE、UPDATE等语句实现。另外,利用SQL Server我们可以很轻松地进行建表、维护等数据库操作。[2]
2.1、系统数据流程图描述
系统数据流程图如下所示。
商品基本信息
超
市
管
理
人
员
数
据
库
商品报表
商品销售信息
销售报表
商品销售历史信息
浏览与录入管理
2.2、系统设计具体实现
目的:设计系统结构,根据需求分析给出的功能得出系统体系结构。如划分模块。
目标:通过本系统软件,能帮助超市管理人员利用计算机,快速方便的对商品信息管理进行维护、输入、输出、查找的所需操作。
运行环境
操作系统:Windows2000/XP或更高的版本。
2.3、模块具体分析
商品信息数据录入模块:主要用于商品基本信息的录入与初始化。实体E-R图
如下:
商品信息录入
商品名称
商品单价
编号
商品库存
商品销量
商品信息数据E-R图
2.4、 程序逻辑
模块功能实现的算法流程图(数据录入)。
输入信息
条件
数
据
库
显示提示信息
退出
不符合条 件
数据录入模块流程图
定义数据库:
商品基本信息:
3、系统运行与调试
3.1、数据复制
数据复制实际上是为了提高查询处理的本地性,对同一数据复制多个副本,根据需要将副本存放在不同的电脑中.
数据信息包括商品名、库存量、商品单价等.通过事务提交的方式保证避免由于其它一些电脑故障造成的在数据库更新过程中数据的不一致.
3.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.Connect”DAQING”,”8a”,”1111”
生成SQLSerwr对象,传递服务器名、用户名和口令
Set myDB=mySw.Databases(”DAQING”)
MyDv Type=SQLDMODevice_DiskDump备份设备的类型
myDv.Name = ”ZxDB_ baekup”
myDv.Physical.location=”D:\中心数据库备份\ZxDB—back.Up”’ 备份设备的逻辑位置
On ErrorResume Next
mySvr.BackupDevices.Add myDv
On Error GoTo 0
myBK.Database=”DAQING”
myBK.Devices = “ZxDB_backup”
myBK.Initialize = True
myBK.SQLBackup mySvr
mySvr.
BackupDcwices.Remove ”DB_backup”
mySw.DisConnect
3.3、系统测试
3.3.1、测试的意义
在开发软件系统的过程中,面对错综复杂的问题,人的主观认识不可能完全符合客观现象,与工程密切相关的各类人员之间的通讯和配合也不可能完美无缺,因此,在软件生命周期的每个阶段都不可避免地会产生错误。在每个阶段结束之前通严格的技术审查,尽可能早的发现所有差错。此外,在编码过程中还会不可避免地引入新的错误。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。
3.3.2、 本系统的测试结果
进入主界面后,对系统进行操作。先正确输入信息,点击查询按钮后,发现系统运行正常,结果显示正确;然后错误输入某些信息,或者进行某些错误操作,发现有的能够给出错误提示,并返回让用户重新操作,有的则直接显示错误信息,而后自动退出系统。这说明软件的某些地方容错性不够完善,影响了它的易操作性。于是着手进行修改。后重新进行测试,结果显示软件的容错性基本达到了用户要求。经过对各个子系统全部功能项的不同测试,结果显示以基本达到设计要求。
参考文献
[1]黄晓东.Java课程设计案例精编. [M].中国水利水电出版社,2004
[2] 王晟, 马里杰 SQL Server数据库开发经典案例解 [M].北京:清华大学出版社,2006
[3]常利,肖立洪 Delphi 6 编程--数据库篇 [M].中国电力出版社,2002
主要程序清单:
DBConnection用于数据库连接:
//BDConnection类,用于连接数据库
import java.sql.*;
public class DBConnection {
Connection conn=null;//连接对象conn
Statement stmt=null;
ResultSet rs=null;
public DBConnection(){
try{
//加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
String connURL="jdbc:odbc:Goods";//Goods是数据源
conn=DriverManager.getConnection(connURL,"","");//连接数据库
stmt=conn.createStatement();//创建statement对象
}catch(Exception ex){//异常处理
ex.toString();
}
}
ResultSet executeQuery(String sql){//执行查询调用executeQuer方法
try{
rs=stmt.executeQuery(sql);
}catch(Exception e){
e.toString();
}
return rs;//返回rs的值供SCUI使用
}
/*void executeUpdate(String sql){//执行其他操作调用executeUpdate方法
try{
stmt.executeUpdate(sql);
}catch(SQLException e){
e.toString();
}
}*/
void close(){
try{
stmt.close();
conn.close();//关闭连接
}catch(SQLException e){//异常处理
e.toString();
}
}
}
SCUI.java用于创建用户图形界面:
//SCUI.java类,用于创建用户图形界面
//import java.awt.*; //导入包
import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.sql.*;
import java.awt.Color;
public class SCUI extends JFrame implements ActionListener{//继承JFrame类,实现接口
// 定义SCUI的属性
BorderLayout borderLayout1=new BorderLayout();//定义两个按钮
JButton jbquery=new JButton();
JButton jbok=new JButton();
JButton jcancel=new JButton();
JButton jclean=new JButton();
JPanel jPanel2=new JPanel();//使用默认的布局管理器创建新面板,即创建容器
JLabel jLabel1=new JLabel();//七标签
JLabel jLabel2=new JLabel();
JLabel jLabel3=new JLabel();
JLabel jLabel4=new JLabel();
JLabel jLabel5=new JLabel();
JLabel jLabel6=new JLabel();
JLabel jLabel7=new JLabel();
JLabel jLabel8=new JLabel();
JLabel jLabel9=new JLabel();
JTextField id=new JTextField();//文本框
JTextField name=new JTextField();
JTextField txtprice=new JTextField();
JTextField sid=new JTextField();
JTextField num=new JTextField();
JTextField price=new JTextField();
JTextField pay=new JTextField();
JTextField repair=new JTextField();
ResultSet rs=null;//从数据库里读出的数据集合放rs
String sprice="";//用于保存价格的变量
float dprice=0;//该变量用来累计价格
public SCUI(){//构造函数
try{
jbInit();
}catch(Exception exception){
exception.printStackTrace();
}
}
private void jbInit() throws Exception{
setResizable(true);//设置对话框大小可以调整
getContentPane().setLayout(borderLayout1);
this.setTitle("销售前台管理系统");//窗口名字
jPanel2.setLayout(null);//新面板置空,即容器为空
jPanel2.setBackground(Color.pink);//容器背景
jLabel1.setText("商品序列号:");//标签名称
jLabel1.setBounds(new Rectangle(60,103,80,30));//标签位置和大小
jLabel2.setText("商品名:");
jLabel2.setBounds(new Rectangle(60,175,70,15));
jLabel3.setText("商品价格:");
jLabel3.setBounds(new Rectangle(60,144,70,15));
jLabel4.setText("查询条件:");
jLabel4.setBounds(new Rectangle(30,27,86,22));
jLabel5.setText("请输入商品序列号:");
jLabel5.setBounds(new Rectangle(60,52,120,24));
jLabel6.setText("购买数量:");
jLabel6.setBounds(new Rectangle(60,209,70,15));
jLabel7.setText("总价:");
jLabel7.setBounds(new Rectangle(60,240,70,15));
jLabel8.setText("付款:");
jLabel8.setBounds(new Rectangle(60,270,70,15));
jLabel9.setText("找零:");
jLabel9.setBounds(new Rectangle(60,300,70,15));
id.setEditable(false);//文本框设置为不可编辑性
id.setBounds(new Rectangle(150,109,125,22));//文本框位置和大小
name.setEditable(false);
name.setBounds(new Rectangle(150,143,124,22));
txtprice.setEditable(false);
txtprice.setBounds(new Rectangle(150,174,125,23));
sid.setBounds(new Rectangle(150,80,125,23));
num.setText("1");//默认情况下数量为1
num.setBounds(new Rectangle(150,205,125,23));
price.setBounds(new Rectangle(150,235,125,23));
price.setEditable(false);
pay.setEditable(true);
pay.setBounds(new Rectangle(150,265,124,22));
repair.setEditable(false);
repair.setBounds(new Rectangle(150,295,124,22));
jbquery.setBounds(new Rectangle(300,78,79,23));
jbquery.setText("查询");
jbquery.addActionListener(this);
jbok.setBounds(new Rectangle(300,265,79,23));
jbok.setText("结算");
jbok.addActionListener(this);
jcancel.setBounds(new Rectangle(400,78,79,23));
jcancel.setText("上一步");
jcancel.addActionListener(this);
jclean.setBounds(new Rectangle(400,265,79,23));
jclean.setText("清空");
jclean.addActionListener(this);
this.getContentPane().add(jPanel2,java.awt.BorderLayout.CENTER);//初始化jPane2这个容器
//在容器jPanel2里添加控件
jPanel2.add(jLabel1);
jPanel2.add(jLabel2);
jPanel2.add(jLabel3);
jPanel2.add(jLabel4);
jPanel2.add(jLabel5);
jPanel2.add(jLabel6);
jPanel2.add(jLabel7);
jPanel2.add(jLabel8);
jPanel2.add(jLabel9);
jPanel2.add(id);
jPanel2.add(name);
jPanel2.add(txtprice);
jPanel2.add(sid);
jPanel2.add(jbquery);
jPanel2.add(jbok);
jPanel2.add(num);
jPanel2.add(price);
jPanel2.add(pay);
jPanel2.add(repair);
jPanel2.add(jcancel);
jPanel2.add(jclean);
this.setBounds(400, 200, 500, 400);//设置窗口框的弹出的位置和大小
this.setVisible(true);//设定窗口可见
//int x=screen.width; /*取得显示器窗口的宽度*/
//int y=screen.height; /*取得显示器窗口的高度*/
//this.setSize(450,480); //setSize(x,y); /*让系统窗口平铺整个显示器窗口*/
//int xcenter=(x-500)/2;
//int ycenter=(y-500)/2;
//this.setLocation(xcenter,ycenter);/*显示在窗口中央*/
}
public static void main(String[] args){//main函数,程序入口
new SCUI();//自己调用自己来实现所设定的窗口
}
public void actionPerformed(ActionEvent e){//事件监听
if(e.getSource()==jbquery){//查询事件源
String s=sid.getText().trim();
//构建查询命令
String sql="select * from 商品信息 where 商品编号="+s;//通过商品编号进行查询
DBConnection db=new DBConnection();
rs=db.executeQuery(sql);//通过查询命令从数据库读取数据并放到rs变量里
if(rs==null){//没找到指定商品则显示
JOptionPane.showMessageDialog(null,"没有找到!");
id.setText(null);//没找到则各文本框不显示任何结果
txtprice.setText(null);
name.setText(null);
return;//结束事件
}
if(!(num.getText().matches("\\d+"))){//数量至少为一位数字
JOptionPane.showMessageDialog(null,"请输入购买量!");
return;//结束事件
}
try{//异常处理
while(rs.next()){//测试本条数据是否为空
id.setText(rs.getString(1).trim());//id里存放商品序列号
txtprice.setText(rs.getString(2).trim());//txtprice里存放商品名称
name.setText(rs.getString(3).trim());//name里存放商品价格,这里写反了
}
sprice=name.getText().trim();//将价格放在sprice文本框里显示
dprice+=Double.parseDouble(sprice)*Double.parseDouble(num.getText());//计算购买商品的总价格,转换为double型
rs.close();//关闭数据库连接
price.setText(""+dprice);//将价格改为字符串形式输出
sid.setText(null);
num.setText("1");//点击查询之后将数量回复为1
}catch(Exception ex){//发生异常则捕捉并显示
JOptionPane.showMessageDialog(null,"读取数据出错!");
sid.setText(null);
}
pay.setText(null);//点击查询后将付款和找零清空准备下次计算
repair.setText(null);
}
else if(e.getSource()==jbok){//获得结算事件源
String snum=num.getText();//数量输入在snum里
if(!(snum.matches("\\d+"))){//数量至少为一位数字
JOptionPane.showMessageDialog(null,"输入错误!");
return;//结束事件
}
float dpay=Float.parseFloat(pay.getText().trim());//定义一个临时变量dpay来完成找零计算
dpay-=dprice;//计算表达式
if(dpay>=0)
repair.setText(""+dpay);
else{
JOptionPane.showMessageDialog(null,"金额不足!");
return;//结束事件
}
id.setText(null);//发生结算事件时将上面的文本框清空
txtprice.setText(null);
name.setText(null);
dprice=0;
}
else if(e.getSource()==jcancel){
sprice=name.getText().trim();//将价格放在sprice文本框里显示
dprice-=Float.parseFloat(sprice)*Float.parseFloat(num.getText());//计算购买商品的总价格,转换为double型
price.setText(""+dprice);
id.setText(null);
txtprice.setText(null);
name.setText(null);
/*float val=Float.parseFloat(name.getText().trim());
if(val==0){
JOptionPane.showMessageDialog(null,"禁止操作!");
return;//结束事件
}*/
}
else if(e.getSource()==jclean){
id.setText(null);
txtprice.setText(null);
name.setText(null);
pay.setText(null);
repair.setText(null);
dprice=0;
price.setText(null);
}
}
}
3、通过活动,使学生养成博览群书的好习惯。
B比率分析法和比较分析法不能测算出各因素的影响程度。√
C采用约当产量比例法,分配原材料费用与分配加工费用所用的完工率都是一致的。X
C采用直接分配法分配辅助生产费用时,应考虑各辅助生产车间之间相互提供产品或劳务的情况。错
C产品的实际生产成本包括废品损失和停工损失。√
C成本报表是对外报告的会计报表。×
C成本分析的首要程序是发现问题、分析原因。×
C成本会计的对象是指成本核算。×
C成本计算的辅助方法一般应与基本方法结合使用而不单独使用。√
C成本计算方法中的最基本的方法是分步法。X
D当车间生产多种产品时,“废品损失”、“停工损失”的借方余额,月末均直接记入该产品的产品成本
中。×
D定额法是为了简化成本计算而采用的一种成本计算方法。×
F“废品损失”账户月末没有余额。√
F废品损失是指在生产过程中发现和入库后发现的不可修复废品的生产成本和可修复废品的修复费用。X
F分步法的一个重要特点是各步骤之间要进行成本结转。(√)
G各月末在产品数量变化不大的产品,可不计算月末在产品成本。错
G工资费用就是成本项目。(×)
G归集在基本生产车间的制造费用最后均应分配计入产品成本中。对
J计算计时工资费用,应以考勤记录中的工作时间记录为依据。(√)
J简化的分批法就是不计算在产品成本的分批法。(×)
J简化分批法是不分批计算在产品成本的方法。对
J加班加点工资既可能是直接计人费用,又可能是间接计人费用。√
J接生产工艺过程的特点,工业企业的生产可分为大量生产、成批生产和单件生产三种,X
K可修复废品是指技术上可以修复使用的废品。错
K可修复废品是指经过修理可以使用,而不管修复费用在经济上是否合算的废品。X
P品种法只适用于大量大批的单步骤生产的企业。×
Q企业的制造费用一定要通过“制造费用”科目核算。X
Q企业职工的医药费、医务部门、职工浴室等部门职工的工资,均应通过“应付工资”科目核算。X
S生产车间耗用的材料,全部计入“直接材料”成本项目。X
S适应生产特点和管理要求,采用适当的成本计算方法,是成本核算的基础工作。(×)
W完工产品费用等于月初在产品费用加本月生产费用减月末在产品费用。对
Y“预提费用”可能出现借方余额,其性质属于资产,实际上是待摊费用。对
Y引起资产和负债同时减少的支出是费用性支出。X
Y以应付票据去偿付购买材料的费用,是成本性支出。X
Y原材料分工序一次投入与原材料在每道工序陆续投入,其完工率的计算方法是完全一致的。X
Y运用连环替代法进行分析,即使随意改变各构成因素的替换顺序,各因素的影响结果加总后仍等于指标的总差异,因此更换各因索替换顺序,不会影响分析的结果。(×)
Z在产品品种规格繁多的情况下,应该采用分类法计算产品成本。对
Z直接生产费用就是直接计人费用。X
Z逐步结转分步法也称为计列半成品分步法。√
A按年度计划分配率分配制造费用,“制造费用”账户月末(可能有月末余额/可能有借方余额/可能有贷方余额/可能无月末余额)。
A按年度计划分配率分配制造费用的方法适用于(季节性生产企业)
---------------------------------------------------------精品 文档---------------------------------------------------------------------
展开阅读全文