



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计20182018 学年第二学期设计题目职工工资管理系统设计院(系)计算机科学与信息工程系专业软件工程班级 10104201学号 1010420186学生姓名肖树林设计时间2018年 6 月 25日2018 年 6月 29日指导教师程海英提交日期2018 年 6 月 29 日上海应用技术学院课程设计任务书课程名称面向对象程序设计JAVA课程设计课程代码B7042101/18设计题目职工工资管理系统的设计题目序号设计时间2018 年 6月 25 日 2018 年 6月29日计算机科学与信息工10104201系(院)专业软件工程班级程系一、课程设计任务(条件)、具体技术参数(指标)本课程设计
2、是面向对象程序设计课程的后继教案环节,学好JAVA 语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写JAVA 实际应用程序。根据教材中人事管理应用程序框架,在此基础上按要求完成以下实际应用程序。职工工资管理系统课程设计题目:实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司内有5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。技术人员的工资根据他当月工作的小时数来定,时薪35 元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;文秘有4000 元的基本工资,奖金视为当月工作情况而定
3、;技术经理和销售经理都有6000 元的固定工资,技术经理的工作业绩可分为3 个等级,每级可获得1000 元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的2%职工工资管理系统的设计:对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。从用户需求中,可以发现5 种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个父类employee(雇员),然后从中派生出technician (技术人员)类,salesman
4、(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee 类中派生出一个manager(经理)类作为techmanager(技术经理)和salesman(销售经理)类的父类。根据用户需要employee 类应该拥有的属性有:编号、姓名、职务、月份和工资。 Employee 类的服务可以包括info ()、 search()、 countSalary()、 recordInfo ()和recordSalary ()。其中,info() 函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;countSal
5、ary() 函数为工资计算函数,但在父类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo() 函数和 recordSalary() 函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info.txt 和 salary.txt。具体的父类和派生类的定义如下图:2/18二.程序具体程序流程图Public static void main (String args) 。程序入口创建一个对象集合new Vector<Employees>() 。WHILE(TRUE) 循环 ,循环一个主菜单,该菜单包循环功能菜单括输入员工类
6、型以及查询员工信息和退出功能.输入一个字符和菜单数据比较. 普通技术 员2. 普通销售员3.秘书员工4.技术经理查5.销售经理退查询工的初始化 ,将工的初始化 ,将的初始化 ,将的初始化 ,将的初始化 , 将出询全对象加入到对象加入到对象加入到对象加入到对象加入到程员部VECTOR 中以VECTOR 中以VECTOR 中VECTOR 中VECTOR 中序工员及各种函数的及各种函数的以及各种函以及各种函以及各种函初始化 .初始化数的初始化 .数的初始化信工数的初始化信息息3/18员工类 : Class Employeesprivate String number 。private
7、String name。privatefloat salary 。privateString status。每个私有属性都配有GET 和 SET 方法 .Class Employeespublic void info (Employees employee) 。 public void search(Vector<Employees> em) 。 public void recordinfo(Vector<Employees> em)。public void countSalary() 。销售人员类 :Class Saleman。class Saleman extend
8、s Employeesprivate float saleSum 。privatefloatsaleRate=(float)0.05。public float getSaleSum() return saleSum。publicvoidsetSaleSum(float saleSum) 特有属性的定义和特有方法的实现秘书类 :Class Secretary。class Saleman extends Employeesclass Secretary extendsEmployeesClass SalesManagere xtends Managerclass Manager extends E
9、mployeesclass TechManager extends Managerclass Saleman extends Employees定义父类的属性和方法,为子类提供资源。publicvoidcountSalary()Scanners=newScanner(System.in)。这个月该员工的销售总额是多少 (元 ): ") 。intsaleSum=s.nextInt() 。setSalary(saleSum*getSaleRate() 。4/18class Secretary extends Employeespublic void countSalary()Scanne
10、r s=newScanner(System.in)。private float basicSalary=4000 。System.out.println("这个月private float bonus 。给秘书发的奖金为多少 (元 ): ") 。public float getBonus() float bonus=s.nextFloat() 。return bonus。setSalary(basicSalary+bonus)。publicvoidsetBonus(float bonus) this.bonus=特有属性的定义和特有方法的实现经理类 :Class Manag
11、er。class Manager extends Employeesprivate float basicSalary=6000 。public float getBasicSalary() return basicSalary。public void setBasicSalary(float basicSalary) this.basicSalary = basicSalary 。类 了 经, 实 理这 现 类在 不 虽面 同 然向 的 继对 经 承象 理 了思 而 父想 插 类中 入 ,很 的 但重 一 是要 个 他。 中 是间 为5/18技术经理类 :Class TechManager。
12、class TechManager extends Managerprivate int hours 。private int hoursalary=35 。private int jobDegree 。public int getHours() return hours 。publicvoidsetHours(inthours) this.hours=hours。public void countSalary()Scanners=newScanner(System.in)。这个月技术经理的技术工作等级(1-3) :") 。intjobDegree=s.nextInt() 。这个月技
13、术经理的技术工作时间( 小时):")。inthours=s.nextInt() 。setSalary(getBasicSalary()+ho销售经理类 :Class salesManager。6/18class SalesManager extends Managerpublic void countSalary( )Scanner s =newprivate int salesResult 。private float salesResultRate= (float) 0.02 。 public int getSalesResult() returnsalesResult。Scan
14、ner(System.in)。这 个月总销售额是 (元 ): ")。intsalesResult=s.nextInt() 。setSalary(getBasicSalary(publicvoid)+salesResult*getSalesResultRate(setSalesResult(int salesResult) )。this.salesResult=salesResult。三程序架构详细说明1首先我们编程针对的是面向对象思维,所以这对于我们如何管理整个程序结构是有很高的难度。先设计员工类,员工类里有姓名,职务,编号和月薪属性,外加员工输入信息函数和将信息写入文件函数以及一个
15、没有实现的计算月薪的函数。属性有 GET 和 SET 方法。员工信息函数我主要采用的是文件输入输出流的形式。文件函数主要采用一个面向对象里的一个集合的方式,用循环遍历的方法将集合里的对象全部读出来,然后依次将各种信息存入文件。由于每个对象的月薪计算方法不一样,所以它没有实现,只让派生类生成的对应的方法去覆盖它。以上主要是针对员工类。2普通员工类主要是继承了员工类,像秘书类,技术工人类,销售人员类,经理类都是采用了这样的方法,唯一的不同是各种不同的类的职能不同导致他们取得的月薪方法不一样,所以月薪方法要重写。月薪方法也是采用输入输出流的方式与客户交流,使得程序富有弹性。但是对于销售经理我们要注意
16、的是他是按照其他销售人员的每月销售总额来确定自己最终的月薪的,所以这里要先对集合 VECTOR 里的所有对象循环遍厉一遍,找出所有的销售员工,将他们的销售总额想加,这是特别要注意的地方。3对于如何调用和初始化各种类,这主要关系到函数的入口(主函数)的设计。我先初始化一个集合里面的 VECTOR ,然后再做一个功能菜单,然后通过输入的字符串判定应调用什么功能,再依次来实例化各种类和调用相应的功能来实现程序。整个过程是循环进行的,当我们选择了退出函数,即函数退出。4.程序运行情况:输入数据:7/182.查询信息:3.存取数据8/18四对于程序的进一步设想我的主要设想是:我存储信息的方式主要是采用文
17、件来处理的,虽然能够很好得存储和进行查询输入输出(我查询的主要方式是通过遍历集合VECTOR 中的对象实现的),但是我很好奇我们是否能用数据库来实现呢?这对于数据的保存更新查询有重大作用。而且数据库是一种很流行的软件,如果一个程序能够连接数据库,那它的实用性会更高。思路如下:通过调用数据库的接口联系,在存信息的函数中去连接数据库。由于时间的关系,我只能通过有限的自学JAVA 知识,我只能做到这一步,打算在今后的学习当中再去实现。五程序的不足之处由于我采用的是 JAVA 语言,我们都知道 JAVA 不善于程序界面上的操作,它的强大功能主要在于服务器的运用,所以我没有采用界面,而是直接采用了命令行
18、的方式。或许这对于操作员来说不是很上手,但是我已经把命令行做得很人性化了。希望能弥补没有界面带来的不足之处。六心得体会首先我想说这次编程让我明白了一个道理:要很好得理解面向对象思想,必须经常去编程,实践才是关键!这次面向对象思想编程让我很好得再一次理解了什么是面向对象,解决了很多思想上的问题。在编程过程中我也遇到过很多棘手的问题,比如输入输出流,文件处理。幸好我课余时间很好地利用了工具书才能帮我很多,给我提升了很大的信心。这次编程我很高兴JAVA 中有集合这种类,它结合了数据结构的特点,又有数组的影子,让我大大减少了编程过程中遇到的各种困难。说实话,我很感谢 JAVA ,感谢面向对象。其实编程
19、并不是件难事,语法不是问题,思想有了,程序也就出来了,是我很大的心得体会。七软件使用说明9/18该软件必须在装有Java 运行环境的平台上运行,像JDK1.6 , eclipse 整套最好都能安装上。该软件是在命令行的方式下运行。运行程序时,注意看提示语操作。八软件参考文献和源程序代码( 1)面向对象程序设计,郑莉,清华大学出版社,( 2)面向对象程序设计 Java 语言 ,朱战立等编 西安电子科技大学出版社( 3)面向对象程序设计 -Java ,刘斌等编 , 清华大学出版社( 4)面向对象程序设计 -Java 语言描述 , Richard Johnson Baugh( 美)等著,蔡宇辉等译,
20、机械工业出版社, 2003源程序显示:package ProgressStart。public class ProgressStart /* param args* throws IOException*/public static void main (String args) throws IOException Vector<Employees> em=new Vector<Employees>()。 /建立集合向量while(true)/ 循环输入输出菜单菜单&&&&&&&&&&&a
21、mp;&&&")。普通技术工人(technician)") 。普通销售人员(salesman)")。秘书 (secretary)") 。技术经理 (techmanager)")。销售经理 (salesmanager)")。查询员工信息(search information)") 。查询所有员工信息(search all)") 。退出 (exit)") 。请输入员工类型编号(input number):") 。Scanner s =new Scanner(System.in
22、)。String number =s.next() 。switch(number)/ 选择功能case "1":Technician Technician1=new Technician(1000) 。em.add(Technician1) 。 T(Technician1) 。Technician1.countSalary( ) 。 Technician1.recordinfo(em) 。10/18Technician1.recordsalary(em) 。 break。case "2":Saleman saleman1=n
23、ew Saleman(24288,(float) 0.2) 。em.add(saleman1)。(saleman1) 。saleman1.countSalary()。saleman1.recordinfo(em) 。saleman1.recordsalary(em)。 break。case "3":Secretary secretary1=new Secretary(4000,500) 。em.add(secretary1)。 (secretary1) 。secretary1.countSalary() 。secret
24、ary1.recordinfo(em) 。secretary1.recordsalary(em)。 break。case "4":TechManager thm=new TechManager(213,35,3) 。em.add(thm) 。 (thm) 。thm.countSalary() 。 thm.recordinfo(em) 。 thm.recordsalary(em) 。 break。case "5":SalesManager sm=new SalesManager(444332,(float) 0.02) 。em.add(sm
25、)。 (sm) 。 sm.countSalary() 。sm.recordinfo(em) 。sm.recordsalary(em) 。 break。case "6":em.get(em.size()-1).search(em) 。 break。case "8":System.exit(0) 。case "7":em.get(em.size()-1).allShowInformation(em)。 break。输入有误! ") 。class Employees/ 员工类privateString number
26、。privateString name。privatefloat salary 。privateString status。public String getNumber() return number 。public void setNumber(String number) this.number = number 。public String getName() 11/18return name。public void setName(String name) = name。public float getSalary() return salary 。public
27、float setSalary(float salary) return this.salary = salary 。public String getStatus() return status。public void setStatus(String status) this.status = status。public void info (Employees employee)BufferedReaderbur=newBufferedReader(newInputStreamReader(System.in) 。请输入员工的编号:")。try employee.number=
28、 bur.readLine() 。 catch (IOException e) e.printStackTrace() 。请输入员工的名字:")。try =bur.readLine() 。 catch (IOException e) e.printStackTrace() 。请输入员工的职务:")。try employee.status=bur.readLine() 。 catch (IOException e) e.printStackTrace() 。public void search(Vector<Employees> em)/
29、 查询员工信息12/18int j=0 。Scanner s=new Scanner (System.in)。请输入要找的人的编号:") 。String number=s.next() 。for(int i=0 。 i<em.size() 。 i+)if( em.get(i).getNumber().equals(number)编号: "+em.get(i).getNumber() 。姓名: "+em.get(i).getName() 。职位: "+em.get(i).getStatus() 。月薪: "+em.get(i).getSal
30、ary() 。j+ 。if(j=0)没有找到对象!") 。public void recordsalary(Vector<Employees> em) /写入文件FileWriter fw = null 。try fw = new FileWriter("D:/salary.txt")。 catch (IOException e) e.printStackTrace() 。PrintWriter pw = new PrintWriter(fw)。pw.println(" 姓名 "+""+" 月薪 &qu
31、ot;) 。for(int i=0 。 i<em.size() 。 i+)pw.println(em.get(i).getName()+""+em.get(i).getSalary()。pw.close() 。public void recordinfo(Vector<Employees> em) throws IOException/写入文件信息FileWriter fw= new FileWriter("D:/info.txt")。PrintWriter pw = new PrintWriter(fw)。pw.println(&qu
32、ot; 编号 "+""+" 姓名 "+""+" 职务 ") 。13/18for(int i=0 。 i<em.size() 。 i+)pw.println(em.get(i).number+""+em.get(i).getName()+""+em.get(i).getStatus() 。pw.close() 。public void countSalary()public void allShowInformation(Vector<Employees&
33、gt; em)/ 显示全部员工信息 显示全部员工的信息 ") 。for(int i=0 。 i<em.size() 。 i+)"+em.get(i).getName()+""+em.get(i).getStatus()+""+em.get(i).getSalary()。class Technician extends Employees / 技术员工类private int hours 。private float hoursavary=35 。public Technician(int hours) this.hours=ho
34、urs 。public int getHours() return hours。public void setHours(int hours) this.hours = hours。public float getHoursalary() return hoursavary。public void setHoursavary(float hoursavary) this.hoursavary = hoursavary 。public void countSalary()请输入该员工每月工作的时间(小时);") 。14/18Scanner s =new Scanner(System.i
35、n)。int hours =s.nextInt() 。setSalary(hours*getHoursalary() 。class Manager extends Employeesprivate float basicSalary=6000 。public float getBasicSalary() return basicSalary。public void setBasicSalary(float basicSalary) this.basicSalary = basicSalary 。class Secretary extends Employeesprivate float bas
36、icSalary=4000 。private float bonus 。public float getBasicSalary() return basicSalary。public void setBasicSalary(float basicSalary) this.basicSalary = basicSalary 。public float getBonus() return bonus。public void setBonus(float bonus) this.bonus = bonus。public Secretary(float basicSalary,float bonus)
37、this.basicSalary=basicSalary 。this.bonus=bonus。public void countSalary()Scanner s =new Scanner(System.in)。这个月给秘书发的奖金为多少(元 ): ")。float bonus=s.nextFloat() 。setSalary(basicSalary+bonus)。15/18class Saleman extends Employeesprivate float saleSum 。private float saleRate=(float) 0.05 。public float ge
38、tSaleSum() return saleSum。public void setSaleSum(float saleSum) this.saleSum = saleSum。public float getSaleRate() return saleRate。public void setSaleRate(float saleRate) this.saleRate = saleRate。public Saleman(float saleSum,float saleRate)this.saleRate=saleRate。this.saleSum=saleSum。public void count
39、Salary()Scanner s =new Scanner(System.in)。这个月该员工的销售总额是多少(元 ) :") 。intsaleSum = s.nextInt() 。setSalary(saleSum*getSaleRate() 。class TechManager extends Manager / 技术经理类private int hours 。private int hoursalary=35 。private int jobDegree 。public int getHours() return hours。public void setHours(int hours) this.hours = hours。public int getHoursalary() return hoursalary 。public void setHou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 模拟测试无人机驾驶员考试试题及答案
- 会计实务中的技术应用与创新提案试题及答案
- 消防工程运行管理试题及答案
- 安全生产管理的技术规范与操作要求试题及答案
- 慢性病护理试题及答案
- 一级建造师考试合同管理试题及答案
- 无人机驾驶员执照考试的原则改革试题及答案
- 消防队伍建设与管理试题及答案
- 转租工程机械合同协议
- 熬夜复习不如这样中级审计师试题及答案
- 环境工程学复习资料大全不用再找了
- 常用急救药品的剂量与用法课件
- 自动控制原理-复习题及答案
- SAP固定资产各种折旧方法配置及操作手册
- 奥数举一反三简单推理
- 高中英语教师研修-罗马建筑文化课件
- 货物验收单(模板)
- 沪科版七年级下学期数学竞赛测试卷(含答案)
- 复旦大学大学生创业导论课件06创业的商业计划书
- 医疗纠纷和解协议书(6篇)
- 农村不动产权籍调查工作指南
评论
0/150
提交评论