【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
 

posted @ 2022-11-09 08:10  陶然同学  阅读(31)  评论(0编辑  收藏  举报