收藏 分享(赏)

1010420126 肖树林 面向对象程序设计.doc

上传人:dzzj200808 文档编号:2726891 上传时间:2018-09-26 格式:DOC 页数:17 大小:670.50KB
下载 相关 举报
1010420126  肖树林  面向对象程序设计.doc_第1页
第1页 / 共17页
1010420126  肖树林  面向对象程序设计.doc_第2页
第2页 / 共17页
1010420126  肖树林  面向对象程序设计.doc_第3页
第3页 / 共17页
1010420126  肖树林  面向对象程序设计.doc_第4页
第4页 / 共17页
1010420126  肖树林  面向对象程序设计.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、面向对象程序设计报告1课 程 设 计2011 2012 学年第二学期设计题目 职工工资管理系统设计 院(系) 计算机科学与信息工程系 专 业 软件工程 班 级 10104201 学号 1010420126 学生姓名 肖树林 设计时间 2012 年 6 月 25 日2012 年 6 月 29 日 指导教师 程海英 提交日期 2012 年 6 月 29 日 面向对象程序设计报告2上海应用技术学院课程设计任务书课程名称 面向对象程序设计 JAVA课程设计 课程代码 B704210设计题目 职工工资管理系统的设计 题目序号设计时间 2012 年 6 月 25 日 2012 年 6 月 29 日系(院)

2、计算机科学与信息工程系专业 软件工程 班级 10104201一、课程设计任务(条件) 、具体技术参数(指标)本课程设计是面向对象程序设计课程的后继教学环节,学好 JAVA 语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写 JAVA 实际应用程序。根据教材中人事管理应用程序框架,在此基础上按要求完成以下实际应用程序。职工工资管理系统课程设计题目:实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司内有 5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。技术人员的工资根据他当月工作的小时数来定,时薪 3

3、5 元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的 5%;文秘有 4000 元的基本工资,奖金视为当月工作情况而定;技术经理和销售经理都有 6000 元的固定工资,技术经理的工作业绩可分为 3 个等级,每级可获得1000 元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的 2%职工工资管理系统的设计:对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。从用户需求中,可以发现 5 种类型的职员都可以分别设计为一个类

4、。首先,他们都属于雇员,因此可以设计一个父类 employee(雇员) ,然后从中派生出 technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从 employee 类中派生出一个 manager(经理)类作为 techmanager(技术经理)和salesman(销售经理)类的父类。根据用户需要 employee 类应该拥有的属性有:编号、姓名、职务、月份和工资。Employee 类的服务可以包括 info() 、 search() 、countSalary() 、recordInfo()和

5、recordSalary() 。其中,info()函数用于接收用户输入的职工信息; search()函数用来根据职工名查找职工信息;countSalary() 函数为工资计算函数,但在父类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo()函数和 recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件 info.txt 和 salary.txt。具体的父类和派生类的定义如下图:面向对象程序设计报告3二.程序具体程序流程图程序入口创建一个对象集合 new Vector();WHILE(TRUE)循环,循环

6、一个主菜单,该菜单包括输入员工类型以及查询员工信息和退出功能.输入一个字符和菜单数据比较1.普通技术员工的初始化,将对象加入到VECTOR 中以及各种函数的初始化.2.普通销售员工的初始化,将对象加入到VECTOR 中以及各种函数的初始化3.秘书员工的初始化,将对象加入到VECTOR 中以及各种函数的初始化.4.技术经理的初始化,将对象加入到VECTOR 中以及各种函数的初始化5.销售经理的初始化,将对象加入到VECTOR 中以及各种函数的初始化6.查询员工信息7.退出程序循环功能菜单Public static void main (String args) ;8.查询全部员工信息面向对象程序

7、设计报告4员工类: Class EmployeesClass EmployeesprivateString number;private String name;private float salary;private String status;每个私有属性都配有 GET 和 SET 方法.public void info (Employees employee); public void search(Vector em);public void recordinfo(Vector em);public void countSalary();class Saleman extends Em

8、ployeesclass Secretary extends Employeesclass Saleman extends Employeesclass Manager extends EmployeesClass SalesManagere xtends Managerclass TechManager extends Manager定义父类的属性和方法,为子类提供资源。销售人员类: Class Saleman; class Saleman extends Employeesprivate float saleSum;private float saleRate=(float) 0.05;p

9、ublic float getSaleSum() return saleSum;public void setSaleSum(float saleSum) this.saleSum = saleSum;public void countSalary()Scanner s =new Scanner(System.in);System.out.println(“这个月该员工的销售总额是多少(元) :“);int saleSum = s.nextInt();setSalary(saleSum*getSaleRate();特有属性的定义和特有方法的实现面向对象程序设计报告5秘书类: Class Sec

10、retary;class Secretary extends Employeesprivate float basicSalary=4000;private float bonus;public float getBonus() return bonus;public void setBonus(float bonus) this.bonus = bonus;public void countSalary()Scanner s =new Scanner(System.in);System.out.println(“这个月给秘书发的奖金为多少(元):“);float bonus=s.nextFl

11、oat();setSalary(basicSalary+bonus);特有属性的定义和特有方法的实现经理类: Class Manager;class Manager extends Employeesprivate float basicSalary=6000;public float getBasicSalary() return basicSalary;public void setBasicSalary(float basicSalary) this.basicSalary = basicSalary;经理类虽然继承了父类,但是他是为了实现不同的经理而插入的一个中间类,这在面向对象思想中

12、很重要。面向对象程序设计报告6技术经理类: Class TechManager;class TechManager extends Managerprivate int hours;private int hoursalary=35;private int jobDegree;public int getHours() return hours;public void setHours(int hours) this.hours = hours;public void countSalary()Scanner s =new Scanner(System.in);System.out.print

13、ln(“这个月技术经理的技术工作等级(1-3):“);int jobDegree=s.nextInt();System.out.println(“这个月技术经理的技术工作时间(小时):“);int hours=s.nextInt();setSalary(getBasicSalary()+hours*getHoursalary()+jobDegree*1000);销售经理类: Class salesManager;class SalesManager extends Managerprivate int salesResult;private float salesResultRate= (fl

14、oat) 0.02;public int getSalesResult() return salesResult;public void setSalesResult(int salesResult) this.salesResult = salesResult;public void countSalary( )Scanner s =new Scanner(System.in);System.out.println(“这个月总销售额是(元):“);int salesResult=s.nextInt();setSalary(getBasicSalary()+salesResult*getSal

15、esResultRate();面向对象程序设计报告7三程序架构详细说明1首先我们编程针对的是面向对象思维,所以这对于我们如何管理整个程序结构是有很高的难度。先设计员工类,员工类里有姓名,职务,编号和月薪属性,外加员工输入信息函数和将信息写入文件函数以及一个没有实现的计算月薪的函数。属性有 GET 和 SET 方法。员工信息函数我主要采用的是文件输入输出流的形式。文件函数主要采用一个面向对象里的一个集合的方式,用循环遍历的方法将集合里的对象全部读出来,然后依次将各种信息存入文件。由于每个对象的月薪计算方法不一样,所以它没有实现,只让派生类生成的对应的方法去覆盖它。以上主要是针对员工类。2普通员工

16、类主要是继承了员工类,像秘书类,技术工人类,销售人员类,经理类都是采用了这样的方法,唯一的不同是各种不同的类的职能不同导致他们取得的月薪方法不一样,所以月薪方法要重写。月薪方法也是采用输入输出流的方式与客户交流,使得程序富有弹性。但是对于销售经理我们要注意的是他是按照其他销售人员的每月销售总额来确定自己最终的月薪的,所以这里要先对集合 VECTOR 里的所有对象循环遍厉一遍,找出所有的销售员工,将他们的销售总额想加,这是特别要注意的地方。3对于如何调用和初始化各种类,这主要关系到函数的入口(主函数)的设计。我先初始化一个集合里面的 VECTOR,然后再做一个功能菜单,然后通过输入的字符串判定应

17、调用什么功能,再依次来实例化各种类和调用相应的功能来实现程序。整个过程是循环进行的,当我们选择了退出函数,即函数退出。4.程序运行情况:输入数据:面向对象程序设计报告82.查询信息:3.存取数据四对于程序的进一步设想我的主要设想是:我存储信息的方式主要是采用文件来处理的,虽然能够很好得存储面向对象程序设计报告9和进行查询输入输出(我查询的主要方式是通过遍历集合 VECTOR 中的对象实现的) ,但是我很好奇我们是否能用数据库来实现呢?这对于数据的保存更新查询有重大作用。而且数据库是一种很流行的软件,如果一个程序能够连接数据库,那它的实用性会更高。思路如下:通过调用数据库的接口联系,在存信息的函

18、数中去连接数据库。由于时间的关系,我只能通过有限的自学 JAVA 知识,我只能做到这一步,打算在今后的学习当中再去实现。五程序的不足之处由于我采用的是 JAVA 语言,我们都知道 JAVA 不善于程序界面上的操作,它的强大功能主要在于服务器的运用,所以我没有采用界面,而是直接采用了命令行的方式。或许这对于操作员来说不是很上手,但是我已经把命令行做得很人性化了。希望能弥补没有界面带来的不足之处。六心得体会首先我想说这次编程让我明白了一个道理:要很好得理解面向对象思想,必须经常去编程,实践才是关键!这次面向对象思想编程让我很好得再一次理解了什么是面向对象,解决了很多思想上的问题。在编程过程中我也遇

19、到过很多棘手的问题,比如输入输出流,文件处理。 。 。 。 。 。幸好我课余时间很好地利用了工具书才能帮我很多,给我提升了很大的信心。这次编程我很高兴 JAVA 中有集合这种类,它结合了数据结构的特点,又有数组的影子,让我大大减少了编程过程中遇到的各种困难。说实话,我很感谢 JAVA,感谢面向对象。其实编程并不是件难事,语法不是问题,思想有了,程序也就出来了,是我很大的心得体会。七软件使用说明该软件必须在装有 Java 运行环境的平台上运行,像 JDK1.6,eclipse 整套最好都能安装上。 。 。该软件是在命令行的方式下运行。 。运行程序时,注意看提示语操作。八软件参考文献和源程序代码(

20、1) 面向对象程序设计 ,郑莉,清华大学出版社, (2) 面向对象程序设计 Java 语言,朱战立等编 西安电子科技大学出版社(3) 面向对象程序设计-Java,刘斌等编, 清华大学出版社 (4) 面向对象程序设计-Java 语言描述, Richard Johnson Baugh(美) 等著,蔡宇辉等译,机械工业出版社, 2003源程序显示:package ProgressStart;import java.io.*;import java.util.*;public class ProgressStart /* param args* throws IOException */面向对象程序设

21、计报告10public static void main (String args) throws IOException Vector em=new Vector() ; /建立集合向量while(true)/循环输入输出菜单System.out.println(“System.out.println(“1.普通技术工人(technician)“);System.out.println(“2.普通销售人员(salesman)“);System.out.println(“3.秘书(secretary)“);System.out.println(“4.技术经理(techmanager)“);Sy

22、stem.out.println(“5.销售经理(salesmanager)“);System.out.println(“6.查询员工信息(search information)“);System.out.println(“7.查询所有员工信息(search all)“);System.out.println(“8.退出(exit)“);System.out.println(“请输入员工类型编号(input number):“);Scanner s =new Scanner(System.in);String number =s.next();switch(number)/选择功能case “

23、1“:Technician Technician1=new Technician(1000);em.add(Technician1);Technician1.info(Technician1);Technician1.countSalary( );Technician1.recordinfo(em);Technician1.recordsalary(em);break;case “2“:Saleman saleman1=new Saleman(24288,(float) 0.2);em.add(saleman1);saleman1.info(saleman1);saleman1.countSa

24、lary();saleman1.recordinfo(em);saleman1.recordsalary(em);break;case “3“:Secretary secretary1=new Secretary(4000,500);em.add(secretary1);secretary1.info(secretary1);secretary1.countSalary();secretary1.recordinfo(em);secretary1.recordsalary(em);break;case “4“:TechManager thm=new TechManager(213,35,3);

25、em.add(thm);thm.info(thm);thm.countSalary();thm.recordinfo(em);thm.recordsalary(em);break;case “5“:SalesManager sm=new SalesManager(444332,(float) 0.02);em.add(sm);sm.info(sm);sm.countSalary();面向对象程序设计报告11sm.recordinfo(em);sm.recordsalary(em);break;case “6“:em.get(em.size()-1).search(em);break;case

26、“8“:System.exit(0);case “7“:em.get(em.size()-1).allShowInformation(em);break;default:System.out.println(“输入有误!“);System.out.println(); class Employees /员工类private String number;private String name;private float salary;private String status;public String getNumber() return number;public void setNumbe

27、r(String number) this.number = number;public String getName() return name;public void setName(String name) this.name = name;public float getSalary() return salary;public float setSalary(float salary) return this.salary = salary;public String getStatus() return status;public void setStatus(String sta

28、tus) this.status = status;public void info (Employees employee) BufferedReader bur=new BufferedReader(new InputStreamReader(System.in);面向对象程序设计报告12System.out.println(“请输入员工的编号:“); try employee.number= bur.readLine(); catch (IOException e) e.printStackTrace();System.out.println(“请输入员工的名字:“);try emplo

29、yee.name=bur.readLine(); catch (IOException e) e.printStackTrace();System.out.println(“请输入员工的职务:“);try employee.status=bur.readLine(); catch (IOException e) e.printStackTrace();public void search(Vector em)/查询员工信息int j=0;Scanner s=new Scanner (System.in);System.out.println(“请输入要找的人的编号:“);String numb

30、er=s.next();for(int i=0;i em) /写入文件FileWriter fw = null;try fw = new FileWriter(“D:/salary.txt“); catch (IOException e) e.printStackTrace();PrintWriter pw = new PrintWriter(fw);pw.println(“姓名“+“ “+“月薪“);for(int i=0;i em) throws IOException/写入文件信息FileWriter fw= new FileWriter(“D:/info.txt“);PrintWrit

31、er pw = new PrintWriter(fw);pw.println(“编号“+“ “+“姓名“+“ “+“职务“);for(int i=0;i em)/显示全部员工信息System.out.println(“显示全部员工的信息“);System.out.println(“number“+“ “+“name“+“ “+“status“+“ “+“salary“);for(int i=0;i=1elseSystem.out.println(“出始化出错,原因是输入的数据不符合规定 “);public TechManager(int hours,int hoursalary,int job

32、Degree)this.hours=hours;this.hoursalary=hoursalary;this.jobDegree=jobDegree;public void countSalary()面向对象程序设计报告17Scanner s =new Scanner(System.in);System.out.println(“这个月技术经理的技术工作等级 (1-3):“);int jobDegree=s.nextInt();System.out.println(“这个月技术经理的技术工作时间 (小时):“);int hours=s.nextInt();setSalary(getBasic

33、Salary()+hours*getHoursalary()+jobDegree*1000);class SalesManager extends Manager /销售经理类private int salesResult;private float salesResultRate= (float) 0.02;public float getSalesResultRate() return salesResultRate;public void setSalesResultRate(float salesResultRate) this.salesResultRate = salesResul

34、tRate;public int getSalesResult() return salesResult;public void setSalesResult(int salesResult) this.salesResult = salesResult;public SalesManager(int salesResult,float salesResultRate)this.salesResult=salesResult;this.salesResultRate=salesResultRate;public void countSalary( ) /结算工资Scanner s =new Scanner(System.in);System.out.println(“这个月总销售额是(元) :“);int salesResult=s.nextInt();setSalary(getBasicSalary()+salesResult*getSalesResultRate();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报