资源描述
大连东软信息学院
三级项目报告
课程名: JAVA语言程序设计
实践项目: 采购管理系统项目
学 院: 大连东软信息学院
组长姓名:
指导教师: 邵欣欣
2013年6月10日
第1章 构思
请对系统的需求进行详细的介绍(150字以上)
正文(以下章节凡语言描述部分都依照此格式要求)(格式要求:空两格、小四号宋体,1.5倍行距)
公司想投资研发新产品,生产制造并进行市场销售此种商品借此盈利。根据这样的问题,如何根据市场需求选择此种商品就成了需要解决的重要问题。于是借用随机数与switch选择语句结合,最终的选择结果用以模拟对市场进行调研的结果。由名为顺风耳的市场调查员来完成此工作,最后根据他的调查结果开发并生产新产品。
系统中有一个抽象的商品类(Goods),作为其子类的父类,定义所有产品所共有的属性和方法。之后每个商品作为该商品类的一个子类,定义其附加的属性、构造方法以及方法,并实现商品类中的抽象方法,用以模拟实现每一件商品的研发生产和销售过程。本小组项目中总共包含一个商品类Goods和六个具体的商品类Computer, XBox,Camera,Keyboard,Mobile phone作为该商品类的子类,实现具体商品的研发生产和销售过程。
同时小组程序中还包含两个类。Market Inquirer类用以模拟市场行情的变化,并返回热销产品的名称。Factory类用以返回创建该热销产品的对象,并用以实现具体的商品类中的研发,生产和销售的方法。最终用boss类创建各个类的对象并调用对应方法,最终实现该管理系统进行市场调研并根据调研结果开发新产品的目的。
第2章 设计
2.1应用的知识点
(1)类与对象的创建,包括属性定义,方法定义和对象的创建。
(2)访问权限修饰符的使用,包括默认修饰符和private,protected和public。方法和构造方法修饰符一般用public,属性一般为private,对于私有属性用访问器和设置器方法进行访问和修改。
(3)无参构造方法的定义,给类中的属性对象赋初始值。创建对象中调用该构造方法,用于对象的初始化。
(4)构造方法与一般方法的区别。
(5)对方法的调用:对象调用和类调用,有返回值的方法对方法的调用就当做处理一个值,没有返回值的调用就当做处理一条语句。
(6)类的继承。Java是单重继承,每个类都有一个父类,未定义的则继承Object类。子类可以继承父类的属性和构造方法,子类可以添加新的属性和方法,子类可以重新定义父类的属性和方法。
(7)子类是父类的特例,子类的对象也可以看做父类的对象。
(8)子类中定义了一个与父类方法头相同的方法,称为方法的覆盖。子类方法与父类方法的修饰符可以不同,但是子类方法只能扩大父类方法中的访问权限。
(9)抽象类只能用于继承,不能用于创建对象。
(10)抽象方法(abstract修饰)只有方法头没有方法体,只能定义在抽象类中,强制抽象方法必须在其子类中被实现。
(11)子类中必须覆盖抽象类中的全部抽象方法。
(12)this关键字用来指代当前类中的当前对象,可用来调用当前对象的成员。(this可以用来调用当前的构造方法,但必须写在构造方法中的第一条)。
(13)Java包的引入。
(14)数组的声明,初始化以及应用。
(15)字符串的声明,初始化以及String类中的常用方法。
2.2功能介绍
项目主要通过作为父类的抽象类goods和作为子类的具体商品类Mobile Phone等的编写,模拟实现具体商品的研发生产制造功能。同时通过Market Inquire类实现模拟市场调研结果,用Factory类辅助实现测试类功能的Boss类,利用多态性,创建对象并实现各个具体商品类之中研发,生产和销售的方法。
同时本小组还利用极其有限的图形用户界面设计的知识在程序实现目的功能的基础之上进行了少部分的功能添加。导入JAVA中JDK中的抽象窗口工具集的Swing包,实践一个简单的“显示调研结果”事件处理。
- 3 -
第3章 实施
3.1类的编写
GOOD类
package 产品管理;
public abstract class Goods {
protected String gno;
protected String gname;
protected double gprice;
abstract void research();
/**
* 生产制造
*/
abstract void product();
/**
* 投入市场
*/
abstract void sell();
}
package 产品管理;
fatory类
public class Factory {
public static Goods fatory(String which) {
if (which.equalsIgnoreCase("camera")) {
return new Camera();
} else if (which.equalsIgnoreCase("computer")) {
return new Computer();
} else if (which.equalsIgnoreCase("mobilephone")) {
return new MobilePhone();
} else if (which.equalsIgnoreCase("XBox")) {
return new XBox();
} else if (which.equalsIgnoreCase("Keyboard")) {
return new Keyboard();
} else {
return null;
}
}
}
Keyboard类
package 产品管理;
public class Keyboard extends Goods {
protected String brand;
protected String type;
protected int a;
Keyboard() {
brand = "联想";
type = "K123";
gname = "键盘";
gprice = 68;
}
public void research() {
for (int i = 0; i <= 100; i++) {
a = (int) (Math.random() * 2 + 1);
System.out.println(brand + type + gname + "正在研究开发中....");
if (a == 1) {
System.out.println(brand + type + gname + "研发成功!");
break;
} else
System.out.println(brand + type + gname + "研发失败!即将进行重新研发……");
}
}
public void product() {
a = (int) (Math.random() * 10000);
System.out.println(brand + type + gname + "产品制造生产中……");
System.out.println(brand + type + gname + "已制造成功!" + "\n" + "共生产了" + a
+ "件" + brand + type + gname);
}
public void sell() {
System.out.println(brand + type + gname + "产品热销中……");
System.out.println(brand + type + gname + "已经销售一空!");
System.out.println("商品型号为:" + type);
System.out.println("商品名称为:" + gname);
System.out.println("商品品牌为:" + brand);
System.out.println("商品市场价格为:" + gprice);
}
}
MarketInquirer类
package 产品管理;
public class MarketInquirer {
String name;
MarketInquirer(String name) {
this.name = name;
}
/**
* 该方法模拟市场行情的变化,并返回热销产品的名称!
*/
public String inquirer() {
switch ((int) (Math.random() * 6)) {//多重选择
case 0:
report("相机");
return "camera";
case 1:
report("电脑");
return "computer";
case 2:
report("手机");
return "mobilephone";
case 3:
report("XBox");
return "XBox";
case 4:
report("键盘");
return "Keyboard";
default:
report("键盘");
return "Keyboard";
}
}
private void report(String hotFruit) {
System.out.println("市场调研员" + name + "报告:经过周密调研,今年" + hotFruit
+ "会有好销路,请生产!");
}
}
MobilePhone类
package 产品管理;
public class MobilePhone extends Goods {
/**
* 添加需要的属性和构造方法
*/
protected String brand;
protected int a;
MobilePhone() {
brand = "HTC";
gno = "111";
gname = "智能手机";
gprice = 1230;
}
/**
* 实现父类中的research()
*/
public void research() {
for (int i = 0; i <= 100; i++) {
a = (int) (Math.random() * 2 + 1);
System.out.println(brand + gno + gname + "正在研究开发中……");
if (a == 1) {
System.out.println(brand + gno + gname + "研发成功!");
break;
} else
System.out.println(brand + gno + gname + "研发失败!即将进行重新研发……");
}
}
/**
* 实现父类中的product()
*/
public void product() {
a = (int) (Math.random() * 10000);
System.out.println(brand + gno + gname + "正在制造生产中……");
System.out.println(brand + gno + gname + "已经制造成功!" + "\n" + "共生产了" + a
+ "件" + brand + gno + gname);
}
/**
* 实现父类中的sell()
*/
public void sell() {
System.out.println(brand + gno + gname + "正在市场销售中……");
System.out.println(brand + gno + gname + "已经销售一空!");
System.out.println();
System.out.println("商品品牌为:" + brand);
System.out.println("商品型号为:" + gno);
System.out.println("商品名称为:" + gname);
System.out.println("商品价格为:" + gprice);
}
}
Xbox类
package 产品管理;
public class XBox extends Goods {
protected int b;
XBox() {
gno = "10120900128";
gname = "XBox360";
gprice = 1800;
System.out.println("商品批号为:" + gno);
System.out.println("商品名为:" + gname);
System.out.println("市场价为:" + gprice);
}
int[] a = new int[2];
int i = 0;
void num() {
a[i] = (int) (Math.random() * 2) + 1;
}
void research() {
for (int i = 0; i <= 100; i++) {
System.out.println(gno + gname + "正在研究中……");
num();
if (a[i] == 1)
System.out.println(gno + gname + "研发失败!即将进行重新研发……");
else {
System.out.println(gno + gname + "研发成功!");
break;
}
}
}
void product() {
b = (int) (Math.random() * 10000);
System.out.println(gno + gname + "正在生产中……");
System.out.println(gno + gname + "生产结束!" + "\n" + "共生产了" + b + "件"
+ gno + gname);
}
void sell() {
System.out.println(gno + gname + "市场销售中……");
System.out.println(gno + gname + "已经销售一空!");
}
}
Camera类
package 产品管理;
public class Camera extends Goods {
/**
* 添加需要的属性和构造方法
*/
protected String style;
protected int a;
Camera() {
gno = "00001";
gname = "相机";
style = "sony";
gprice = 200;
}
/**
* 实现父类中的research()
*/
public void research() {
for (int i = 0; i <= 100; i++) {
a = (int) (Math.random() * 2 + 1);
System.out.println(gno + style + gname + "正在研究开发中....");
if (a == 1) {
System.out.println(gno + style + gname + "研发成功!");
break;
} else
System.out.println(gno + style + gname + "研发失败!即将进行重新研发……");
}
}
/**
* 实现父类中的product()
*/
public void product() {
a = (int) (Math.random() * 10000);
System.out.println(gno + style + gname + "正在制造生产中....");
System.out.println(gno + style + gname + "已经制造成功!" + "\n" + "共生产了" + a
+ "件" + gno + style + gname);
}
/**
* 实现父类中的sell()
*/
public void sell() {
System.out.println(gno + style + gname + "正在市场销售中....");
System.out.println(gno + style + gname + "已经销售一空!");
System.out.println();
System.out.println("商品型号为:" + gno);
System.out.println("商品名称为:" + gname);
System.out.println("商品类型为:" + style);
System.out.println("商品市场价格为:" + gprice);
}
}
Computer类
package 产品管理;
public class Computer extends Goods {
/**
* 添加需要的属性和构造方法
*/
protected String style;
protected int a;
Computer() {
gno = "1000";
gname = "笔记本电脑";
style = "戴尔";
gprice = 5500;
}
/**
* 实现父类中的research()
*/
public void research() {
for (int i = 0; i <= 100; i++) {
a = (int) (Math.random() * 2 + 1);
System.out.println(gno + style + gname + "正在研究开发中....");
if (a == 1) {
System.out.println(gno + style + gname + "研发成功!");
break;
} else
System.out.println(gno + style + gname + "研发失败!即将进行重新研发……");
}
}
/**
* 实现父类中的product()
*/
public void product() {
a = (int) (Math.random() * 10000);
System.out.println(gno + style + gname + "正在制造生产中……");
System.out.println(gno + style + gname + "已经制造成功!" + "\n" + "共生产了" + a
+ "件" + gno + style + gname);
}
/**
* 实现父类中的sell()
*/
public void sell() {
System.out.println(gno + style + gname + "正在市场销售中……");
System.out.println(gno + style + gname + "已经销售一空!");
System.out.println();
System.out.println("商品型号为:" + gno);
System.out.println("商品名称为:" + gname);
System.out.println("商品品牌为:" + style);
System.out.println("商品市场价格为:" + gprice);
}
}
3.2 主程序的编写
package 产品管理;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Boss implements ActionListener{
/**
* 公司根据市场调查员的反馈,安排一年的生产计划!
* @param args
*/
JFrame frame;
JDialog dialog;
JButton button;
String sname=" ";
public static void main(String args[]){
System.out.println("请输入调研员姓名:");
String sname = "顺风耳";
Boss jd=new Boss();
jd.go();
sname="优秀市场调研员"+sname+"的调研结果为公司带来了巨大经济收益!";
System.out.println(sname);
}
public void go(){
MarketInquirer mi = new MarketInquirer(sname= MyInput.readString());
String hotFruit = mi.inquirer();
Goods g = Factory.fatory(hotFruit);
frame=new JFrame("调研员");
dialog=new JDialog(frame,"调研反馈",true);
JButton button1=new JButton(sname);
JPanel contentPane=new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(button1,BorderLayout.CENTER);
frame.setContentPane(contentPane);
frame.pack();
frame.setVisible(true);
dialog.getContentPane().add(new JLabel("今年会有好销路的产品是:"+hotFruit));
dialog.setSize(250,150);
button =new JButton("查看调研结果");
button.addActionListener(this);
Container cp=frame.getContentPane();
cp.add(button,BorderLayout.EAST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250,150);
frame.setVisible(true);
g.research();
g.product();
g.sell();
}
public void actionPerformed(ActionEvent e){
dialog.setVisible(true);
}
}
- 13 -
第4章 运行
4.1程序的运行结果
4.2错误的解决方式
从其他包里拖入MyInput
Import 调用语句
- 14 -
小组成员贡献率
学号
姓名
个人贡献权重
填表要求:
1.根据个人表现给定单个成绩;
2.个人成绩计算公式:
个人成绩=项目组成绩×个人贡献权重/项目组个人最高贡献权重
3. 小组成员个人贡献权重总和为100%,数据精确到个位。
三级报告成绩
成 绩
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按年度计划分配率分配制造费用的方法适用于(季节性生产企业)
- 16 -
展开阅读全文