《2022年肖树林面向对象程序设计》由会员分享,可在线阅读,更多相关《2022年肖树林面向对象程序设计(18页珍藏版)》请在金锄头文库上搜索。
1、1 / 18 课 程 设 计20182018 学年第二学期设计题目职工工资管理系统设计院(系)计算机科学与信息工程系专业软件工程班级 10104201 学号 1010420186 学生姓名肖树林设计时间2018 年 6 月 25 日 2018 年 6 月 29 日指导教师程海英提交日期 2018 年 6 月 29 日上海应用技术学院课程设计任务书课程名称面向对象程序设计JAVA 课程设计课程代码B704210 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 18 页2 / 18 设计题目职工工资管理系统的设计题目序号设计时间2018 年
2、 6月 25 日 2018 年 6 月 29日系(院)计算机科学与信息工程系专业软件工程班级10104201 一、课程设计任务(条件)、具体技术参数(指标)本课程设计是面向对象程序设计课程的后继教案环节,学好JAVA 语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写JAVA 实际应用程序。根据教材中人事管理应用程序框架,在此基础上按要求完成以下实际应用程序。职工工资管理系统课程设计题目:实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司内有5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。技术人员
3、的工资根据他当月工作的小时数来定,时薪35 元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;文秘有4000 元的基本工资,奖金视为当月工作情况而定;技术经理和销售经理都有6000 元的固定工资,技术经理的工作业绩可分为3 个等级,每级可获得1000 元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的2% 职工工资管理系统的设计:对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。从用户需求中,可以发现5 种类
4、型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个父类employee(雇员),然后从中派生出technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee 类中派生出一个manager(经理)类作为techmanager(技术经理)和salesman(销售经理)类的父类。根据用户需要employee 类应该拥有的属性有:编号、姓名、职务、月份和工资。 Employee 类的服务可以包括info()、 search()、 countSalary()、 record
5、Info ()和recordSalary()。其中,info()函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;countSalary()函数为工资计算函数,但在父类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo() 函数和 recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info.txt 和 salary.txt。具体的父类和派生类的定义如下图:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 18 页3
6、/ 18 二.程序具体程序流程图程序入口创建一个对象集合new Vector() 。WHILE(TRUE) 循环 ,循环一个主菜单,该菜单包括输入员工类型以及查询员工信息和退出功能. 输入一个字符和菜单数据比较1.普通技术员工的初始化 ,将对 象 加 入 到VECTOR 中以及各种函数的初始化 . 2.普通销售员工的初始化 ,将对 象 加 入 到VECTOR 中以及各种函数的初始化3. 秘 书 员 工的初始化 ,将对象加入到VECTOR 中以及各种函数的初始化 . 4. 技 术 经 理的初始化 ,将对象加入到VECTOR 中以及各种函数的初始化5. 销 售 经 理的初始化 ,将对象加入到VEC
7、TOR 中以及各种函数的初始化6.查询员工信息7.退出程序循环功能菜单Public static void main (String args) 。8.查询全部员工信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 18 页4 / 18 员工类 : Class Employees 销售人员类 :Class Saleman。秘书类 :Class Secretary。class Saleman extends Employees private float saleSum 。private float saleRate=(float) 0.
8、05。public float getSaleSum() return saleSum。 public void setSaleSum(float saleSum) public void countSalary() Scanner s =new Scanner(System.in)。System.out.println(这个月该员工的销售总额是多少 (元):)。intsaleSum = s.nextInt()。setSalary(saleSum*getSaleRate()。特有属性的定义和特有方法的实现ClassEmployees private String number 。 privat
9、e 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 Employees class Secretary extends Employees class Saleman extend
10、s Employees class Manager extends Employees Class SalesManagere xtends Manager class TechManager extends Manager 定义父类的属性和方法,为子类提供资源。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 18 页5 / 18 经理类 :Class Manager。class Secretary extends Employees private float basicSalary=4000 。private float bonus
11、 。public float getBonus() return bonus。 public void setBonus(float bonus) this.bonus = public void countSalary() Scanner s =new Scanner(System.in)。System.out.println( 这个月给秘书发的奖金为多少(元):)。float bonus=s.nextFloat() 。setSalary(basicSalary+bonus)。 特有属性的定义和特有方法的实现class Manager extends Employees private fl
12、oat basicSalary=6000 。public float getBasicSalary() return basicSalary。 public void setBasicSalary(float basicSalary) this.basicSalary = basicSalary。 经理类虽然继承了父类,但是他是为了实现不同的经理而插入的一个中间类,这在面向对象思想中很重要。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 18 页6 / 18 技术经理类 :Class TechManager。销售经理类 :Class s
13、alesManager。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 void countSalary() Scanner s =new Scanner(System.in)。System.out.println(这个月技术经理的技术工作等级(1-3)
14、:)。int jobDegree=s.nextInt() 。System.out.println(这个月技术经理的技术工作时间(小时):)。int hours=s.nextInt()。setSalary(getBasicSalary()+ho精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 18 页7 / 18 三程序架构详细说明1首先我们编程针对的是面向对象思维,所以这对于我们如何管理整个程序结构是有很高的难度。先设计员工类,员工类里有姓名,职务,编号和月薪属性,外加员工输入信息函数和将信息写入文件函数以及一个没有实现的计算月薪的函数。
15、属性有GET 和 SET 方法。员工信息函数我主要采用的是文件输入输出流的形式。文件函数主要采用一个面向对象里的一个集合的方式,用循环遍历的方法将集合里的对象全部读出来,然后依次将各种信息存入文件。由于每个对象的月薪计算方法不一样,所以它没有实现,只让派生类生成的对应的方法去覆盖它。以上主要是针对员工类。2普通员工类主要是继承了员工类,像秘书类,技术工人类,销售人员类,经理类都是采用了这样的方法,唯一的不同是各种不同的类的职能不同导致他们取得的月薪方法不一样,所以月薪方法要重写。月薪方法也是采用输入输出流的方式与客户交流,使得程序富有弹性。但是对于销售经理我们要注意的是他是按照其他销售人员的每
16、月销售总额来确定自己最终的月薪的,所以这里要先对集合VECTOR 里的所有对象循环遍厉一遍,找出所有的销售员工,将他们的销售总额想加,这是特别要注意的地方。3对于如何调用和初始化各种类,这主要关系到函数的入口(主函数)的设计。我先初始化一个集合里面的VECTOR ,然后再做一个功能菜单,然后通过输入的字符串判定应调用什么功能,再依次来实例化各种类和调用相应的功能来实现程序。整个过程是循环进行的,当我们选择了退出函数,即函数退出。4.程序运行情况:输入数据:class SalesManager extends Manager private int salesResult。private flo
17、at salesResultRate= (float) 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(getBasic
18、Salary()+salesResult*getSalesResultRate()。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 18 页8 / 18 2.查询信息:3.存取数据精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 18 页9 / 18 四对于程序的进一步设想我的主要设想是:我存储信息的方式主要是采用文件来处理的,虽然能够很好得存储和进行查询输入输出(我查询的主要方式是通过遍历集合VECTOR 中的对象实现的),但是我很好奇我们是否能用数据库来实现呢?这对于数据的保存
19、更新查询有重大作用。而且数据库是一种很流行的软件,如果一个程序能够连接数据库,那它的实用性会更高。思路如下:通过调用数据库的接口联系,在存信息的函数中去连接数据库。由于时间的关系,我只能通过有限的自学JAVA 知识,我只能做到这一步,打算在今后的学习当中再去实现。五程序的不足之处由于我采用的是JAVA 语言,我们都知道JAVA 不善于程序界面上的操作,它的强大功能主要在于服务器的运用,所以我没有采用界面,而是直接采用了命令行的方式。或许这对于操作员来说不是很上手,但是我已经把命令行做得很人性化了。希望能弥补没有界面带来的不足之处。六心得体会首先我想说这次编程让我明白了一个道理:要很好得理解面向
20、对象思想,必须经常去编程,实践才是关键!这次面向对象思想编程让我很好得再一次理解了什么是面向对象,解决了很多思想上的问题。在编程过程中我也遇到过很多棘手的问题,比如输入输出流,文件处理。幸好我课余时间很好地利用了工具书才能帮我很多,给我提升了很大的信心。这次编程我很高兴JAVA 中有集合这种类,它结合了数据结构的特点,又有数组的影子,让我大大减少了编程过程中遇到的各种困难。说实话,我很感谢JAVA,感谢面向对象。其实编程并不是件难事,语法不是问题,思想有了,程序也就出来了,是我很大的心得体会。七软件使用说明精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - -
21、-第 9 页,共 18 页10 / 18 该软件必须在装有Java 运行环境的平台上运行,像JDK1.6,eclipse 整套最好都能安装上。该软件是在命令行的方式下运行。运行程序时,注意看提示语操作。八软件参考文献和源程序代码( 1)面向对象程序设计,郑莉,清华大学出版社,( 2)面向对象程序设计Java语言 ,朱战立等编西安电子科技大学出版社( 3)面向对象程序设计-Java,刘斌等编 , 清华大学出版社( 4)面向对象程序设计-Java 语言描述 , Richard Johnson Baugh(美)等著,蔡宇辉等译,机械工业出版社, 2003 源程序显示:package Progress
22、Start 。import java.io.* 。import java.util.* 。public class ProgressStart /* * param args * throws IOException */ public static void main (String args) throws IOException Vector em=new Vector() 。 /建立集合向量while(true)/ 循环输入输出菜单 System.out.println(&菜单&)。System.out.println(1. 普通技术工人(technician) 。System.out
23、.println(2. 普通销售人员(salesman)。System.out.println(3. 秘书 (secretary)。System.out.println(4. 技术经理 (techmanager)。System.out.println(5. 销售经理 (salesmanager)。System.out.println(6. 查询员工信息(search information) 。System.out.println(7. 查询所有员工信息(search all) 。System.out.println(8. 退出 (exit) 。 System.out.println( 请输入
24、员工类型编号(input number):) 。Scanner s =new Scanner(System.in)。 String number =s.next() 。switch(number)/ 选择功能 case 1:Technician Technician1=new Technician(1000) 。em.add(Technician1)。Technician1.info(Technician1) 。Technician1.countSalary( ) 。Technician1.recordinfo(em) 。精选学习资料 - - - - - - - - - 名师归纳总结 - -
25、- - - - -第 10 页,共 18 页11 / 18 Technician1.recordsalary(em) 。break。 case 2:Saleman saleman1=new Saleman(24288,(float) 0.2) 。 em.add(saleman1)。 saleman1.info(saleman1)。 saleman1.countSalary()。 saleman1.recordinfo(em) 。 saleman1.recordsalary(em)。break。 case 3:Secretary secretary1=new Secretary(4000,500
26、) 。 em.add(secretary1)。 secretary1.info(secretary1)。 secretary1.countSalary() 。 secretary1.recordinfo(em) 。 secretary1.recordsalary(em)。 break。 case 4:TechManager thm=new TechManager(213,35,3) 。 em.add(thm)。 thm.info(thm) 。 thm.countSalary() 。thm.recordinfo(em) 。thm.recordsalary(em)。break。 case 5:Sa
27、lesManager sm=new SalesManager(444332,(float) 0.02) 。 em.add(sm)。sm.info(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。 default:System.out.println( 输入有
28、误! )。System.out.println() 。 class Employees / 员工类 private String number。 private String name。 private float salary 。 private String status。public String getNumber() return number。 public void setNumber(String number) this.number = number。 public String getName() 精选学习资料 - - - - - - - - - 名师归纳总结 - - -
29、 - - - -第 11 页,共 18 页12 / 18 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 status) this.status = status。
30、public void info (Employees employee) BufferedReader bur=new BufferedReader(new InputStreamReader(System.in) 。 System.out.println( 请输入员工的编号:)。 try employee.number= bur.readLine() 。 catch (IOException e) e.printStackTrace()。 System.out.println( 请输入员工的名字:)。 try employee.name=bur.readLine()。 catch (IOE
31、xception e) e.printStackTrace()。 System.out.println( 请输入员工的职务:)。 try employee.status=bur.readLine() 。 catch (IOException e) e.printStackTrace()。 public void search(Vector em)/ 查询员工信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 18 页13 / 18 int j=0 。Scanner s=new Scanner (System.in)。System.ou
32、t.println( 请输入要找的人的编号:)。String number=s.next() 。for(int i=0 。iem.size()。i+) if( em.get(i).getNumber().equals(number) System.out.println( 编号: +em.get(i).getNumber() 。System.out.println( 姓名: +em.get(i).getName() 。System.out.println( 职位: +em.get(i).getStatus() 。System.out.println( 月薪: +em.get(i).getSal
33、ary() 。j+ 。 if(j=0) System.out.println( 没有找到对象!)。 public void recordsalary(Vector 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 。iem.size()。i+) pw.println(em
34、.get(i).getName()+ +em.get(i).getSalary()。 pw.close()。 public void recordinfo(Vector em) throws IOException/写入文件信息 FileWriter fw= new FileWriter(D:/info.txt)。PrintWriter pw = new PrintWriter(fw)。pw.println( 编号 + + 姓名 + + 职务 )。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 18 页14 / 18 for(int
35、i=0 。iem.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 em)/显示全部员工信息System.out.println( 显示全部员工的信息)。System.out.println(number+ +name+ +status+ +salary)。for(int i=0 。i=1&jobDegree=3) thi
36、s.jobDegree = jobDegree 。 else System.out.println( 出始化出错,原因是输入的数据不符合规定)。 public TechManager(int hours,int hoursalary,int jobDegree) this.hours=hours。this.hoursalary=hoursalary 。this.jobDegree=jobDegree 。 public void countSalary() Scanner s =new Scanner(System.in)。System.out.println( 这个月技术经理的技术工作等级(1
37、-3):)。int jobDegree=s.nextInt() 。System.out.println( 这个月技术经理的技术工作时间(小时 ):)。int hours=s.nextInt() 。setSalary(getBasicSalary()+hours*getHoursalary()+jobDegree*1000)。 class SalesManager extends Manager /销售经理类private int salesResult。private float salesResultRate= (float) 0.02 。public float getSalesResul
38、tRate() return salesResultRate。 public void setSalesResultRate(float salesResultRate) this.salesResultRate = salesResultRate。 public int getSalesResult() return salesResult。 public void setSalesResult(int salesResult) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 18 页18 / 18 this.salesResult
39、 = 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() 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 18 页