【Java】面向对象案例
现在出去旅游,需要对人员进行统计
     学生:
         张三  男  19  小1班
         李四  女  18  小1班
         王五  男  20  小2班
         赵六  女  18  小1班
         钱七  男  22  小2班
    讲师:
         老张  男  40  Java
         老王  男  35  Python
         老李  女  32  前端
    辅导员:
         小王  女  25  小1班
         小李  男  22  小2班
    ①请根据题目,设计学生、讲师、辅导员类.
     已知:  讲师和辅导员都是员工
         员工只是一个抽象的概念,不能是一个具体的对象
         学生和员工都是人
         
     设计时:必须有接口、抽象类
     英文:学生-student
           讲师-Lecturer
           辅导员-ClassTeacher
           班级-classes
           课程名-lesson
           员工-employee
           人-Person
     ②现在将所有人员保存到一个集合中
      ③现在缴纳出行保险:
         学生每人缴纳:10元,学校补助15元
         员工每人缴纳:20元
     下面请计算,保险公司总共收取的保费总额为多少
      ④
     已知:程序员30岁之前秃顶概率 20%
               程序员30~35岁秃顶概率 50%
           程序员35岁之后秃顶概率 30%
    请计算两位男讲师的平均年龄和他们的秃顶概率
  
定义员工类Emp,拥有姓名(String ename),薪水(Double sal),职位(String job),部门号(deptno)4个属性
要求:
 * 创建员工、部门类,在部门中添加属性,表示部门拥有多个员工
 * 创建下列员工,并添加到集合ArrayList中
     2.1. 姓名:刘备,薪水:20000,职位:经理,部门号:10
     2.2. 姓名:诸葛,薪水:12000,职位:员工,部门号:10
     2.3. 姓名:孙权,薪水:18000,职位:经理,部门号:20
     2.4. 姓名:黄盖,薪水:12000,职位:员工,部门号:20
     2.5. 姓名:曹操,薪水:50000,职位:经理,部门号:30
     2.6. 姓名:张颌,薪水:30000,职位:员工,部门号:30
     2.7. 姓名:许褚,薪水:20000,职位:员工,部门号:30
     2.8. 姓名:张辽,薪水:30000,职位:员工,部门号:30
     
 1.定义方法sumSal,统计指定部门的员工人数和薪资总和    
     示例:
     统计10号部门:sum(empList,10)
     输出:10号部门共2人,薪资和是:22000
2.定义方法selectDeptno,方法接收员工姓名和员工集合,方法中根据员工姓名查询员工的部门号,并返回部门号
     示例:
     selectDeptno("黄盖",empList)
     返回:20
     
 3.定义方法selectAvgSql,方法接收部门号、员工集合,方法中查询并打印指定部门号的最高薪资、和平均薪资。
     示例:
     selectAvgSql(20,empList)
     输出:20号部门最高薪资是:18000,平均薪资是:15000
4.定义方法betterThanEmp,方法有2个参数,员工A、员工列表,方法中打印所有比员工A薪资高的员工姓名、员工薪资。
5.定义方法betterThanSal,方法有接收员工集合,方法中打印:比所有员工平均薪资高的员工姓名,员工薪资。
6.定义方法printMyselfManager,方法接收员工集合,方法中打印员工姓名、领导姓名。
     示例:
     10号部门 刘备 领导:无
     10号部门 诸葛 领导:刘备
     ...
     30号部门 曹操 领导:无
     30号部门 张颌 领导:曹操
     30号部门 许褚 领导:曹操
     ...
* 定义部门类Dept,拥有部门号(int deptno),部门名称(String deptName),部门地址(String deptAddr)4个属性
 * 创建下列部门
     3.1. 部门号:10,部门名称:蜀,部门地址:汉中
     3.1. 部门号:20,部门名称:魏,部门地址:江南
     3.1. 部门号:30,部门名称:吴,部门地址:江北
* 将上述部门对象添加到部门的集合中(注意:没有要求将员工对象放入部门对象集合中)
1.定义方法printSalary,接收部门集合、员工集合,方法中打印每个部门的部门号、部门名称、最高薪资、最高薪资的员工姓名
2.定义方法printDept,方法接收部门集合,员工集合,方法中根据部门号匹配,打印曹操的部门号,部门名称
3.定义方法printMaxManager,方法接收部门集合,员工集合,方法中打印管理人数最多的经理姓名、部门名称
继承 super练习(本题旨在练习继承super):
     1.创造手机类Phone:拥有品牌brand、价格price、生产日期time属性,属性都私有,提供get/set方法,
       * 提供无参和满参构造方法,
       * 拥有打电话call方法,接收字符串电话号码。方法具体代码由子类实现
       
     2.创建华为手机类HuaWeiPhone,继承手机类:
      * 该类有2个构造方法(考核super的用法):
         - 无参构造方法
         - 有参构造方法,有参构造方法接收3个参数(String brand,Double price,Date productTime),可以给华为手机初始化属性。
         
          
      * 补全HuaWeiPhone类中call方法,该方法可以从之前的通话记录中拨号和更新通话记录功能:String phoneNum
         - 拨号(打印):
                 根据接收的电话号码,在项目下的recode.txt中找到该号码的记录,打印该号码通话记录信息。
                 打印格式如下:13698652317是第1次通话,上次通话时间2018年12月08日,通话20秒。
             
             1.有记录
                1.1.遍历字符串    
                1.2.切割字符串
                1.3.数据有格式要求                                          
                1.4.打印
                 
             2.无记录
                2.1.自己拼接这个格式的字符串:13698652317是第1次通话,上次通话时间2018年12月08日,通话20分。
                   2.1.1.问题点1:当前时间 -> 2018年12月10日 
                   2.1.2.        时长:通话20分 ——> 1-200随机数(秒)
         
         - 更新通话记录:
             * 如果有历史记录,将原来通话记录中的拨打次数+1,通话时间改为当前时间
             * 如果没有历史记录,新增一条通话记录,时间为当前时间,通话时长尾1-200以内随机数,拨打次数为1.
             
             ** 发现如果只想修改某一部分数据,操作比较困难
             ** 解决方法:在解析数据时候,提前将解析的数据放入ArrayList集合中。
             **           修改集合中的数据,最后将集合数据全部覆盖写回原文件,这样就能实现修改的效果
         
      * recode.txt  flag=false
         15271312791@2018-12-10@56秒@4
         15656238957@2018-12-10@32秒@2
         17865662379@2018-12-8@157秒@6
         13965879652@2018-12-10@3秒@2
         13999999999@2018-12-10@3秒@1
  
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号