java小作业:员工财务数据系统Java程序设计

 题目

小作业 - 员工财务数据系统Java程序设计

设计并开发一个Java程序,需要实现以下核心功能:

1.        数据系统录入功能

1) 用户可从键盘录入:一个员工的名字、工号、职位、基本工资和绩效,并将该员工的信息存储好;

2) 用户也可从一个含上述信息的10个员工的财务数据文件中,录入所有员工的信息并存储好。

2.       数据系统存储功能

用户录入数据后,应由指定的数据结构 - 单向链表,实现员工财务数据的存储。

3.       数据系统管理功能

       用户可使用创建、插入、删除、查找、打印和排序(按工资加绩效的总和来排序)的基本系统操作,来管理员工财务数据。

4.       数据系统日志功能

       随着员工财务数据系统的运行,应将每次系统操作和操作后更新的数据写到一个单独的文件中。

5.       数据系统人机交互功能

用户可通过键盘输入选项,实现相应功能

代码

Worker类

public class Worker{
		//名字
		private String name;
		//工号(注意类型
		private String num;
		//职位
		private String place;
		//基本工资
		private int wage;
		//绩效
		private int grade;
		//工资+绩效
		private int wplusg;
		
		public Worker next;
		
		public Worker(){}
		
		public Worker(String name , String num , String place , int wage , int grade){
			this.name=name;
			this.num=num;
			this.place=place;
			this.wage=wage;
			this.grade=grade;
			this.setWplusg();
		}
		
		public String getName(){
			return name;
		}
		public void setName(String name){
			this.name=name;
		}
		
		public String getNum(){
			return num;
		}
		public void setNum(String num){
			this.num=num;
		}
		
		public String getPlace(){
			return place;
		}
		public void setPlace(String place){
			this.place=place;
		}
		
		public int getWage(){
			return wage;
		}
		public void setWage(int wage){
			this.wage = wage;
			this.setWplusg();
		}
		
		public int getGrade(){
			return grade;
		}
		public void setGrade(int grade){
			this.grade = grade;
			this.setWplusg();
		}
		
		public int getWplusg(){
			return wplusg;
		}
		public void setWplusg(){
			this.wplusg = this.wage+this.grade;
		}
		
		/*更新结点信息
		 * 一个结点包含一个员工的全部信息
		 */
		public void setMessage(String name , String num , String place , int wage , int grade , int wplusg){
			this.name=name;
			this.num=num;
			this.place=place;
			this.wage=wage;
			this.grade=grade;
			this.setWplusg();			
		}
		
		public String toString(){
			return "姓名:" + this.name + "\t工号:" + this.num + "\t职位:" + this.place + "\t基本工资:" + this.wage + "\t绩效:" + this.grade + "\t工资+绩效" + this.wplusg; 
		}//toString()返回此对象的字符串表示形式
	}

类内其他参数、构造函数

	//链表大小
	private int size;
	
	//头节点
	private Worker head;
	
	public int size(){
		return this.size;
	}
	
	//构造代码,每次创建对象调用一次,优于构造函数执行
	{
		this.size = 0;
		this.head = null;
	}
	
	//无参构造函数,实例化头、尾结点
	public lh4(){
		this.head = new Worker();
	}

函数: 

插入员工数据

//插入(从尾部
	public void insertTailer(Worker w){
		Worker front = this.head;
		if(this.size == 0){
			this.head = w;
			this.size++;
		}else{
			while(front != null){
				if(front.next == null){
					front.next = w;
					this.size++;
					return;
				}
				front = front.next;
			}
		}
	}

检测是否录入

//录入与否(根据工号
	public boolean isExist (String num){
		Worker front  = this.head;
		while(front!=null){
			if(num.equals(front.getNum())){
				return true;
			}
			front = front.next;
		}
		return false;
	}

删除员工数据

//删除(根据工号
	public boolean delete(String num){
		Worker front = this.head;
		//判断是否删除头结点
		if(num.equals(front.getNum())){
			this.head = this.head.next;
			this.size--;
			return true;
		}
		while(!num.equals(front.next.getNum())){
			front = front.next;
		}
		if(front.next != null){
			front.next = front.next.next;
			this.size--;
			return true;
		}
		return false;
	}

查询员工信息

	//查询信息(根据工号
	public Worker search(String num){
		Worker front = this.head;
//		System.out.println(num);
//		System.out.println(front.getNum());
		//头节点时
		if(num.equals(front.getNum())){
			Worker w = new Worker(front.getName() , num , front.getPlace() , front.getWage() , front.getGrade());
			return w;
		}	
		
		while(front.next != null){
//			System.out.println(front.getNum());
			front = front.next;
			if(num.equals(front.getNum())){
				Worker w = new Worker(front.getName() , num , front.getPlace() , front.getWage() , front.getGrade());
				return w;				
			}
		}
		return null;
	}

降序排序

//降序排序
	public void sortTotal(){
		Worker front = this.head;
		Worker p = front.next;
		while(front.next != null &&p.next !=null){
			while(p != null){
				if(front.getWplusg() < p.getWplusg()){
					String name = front.getName();
					String num = front.getNum();
					String place = front.getPlace();
					int wage = front.getWage();
					int grade = front.getGrade();
					int wplusg = front.getWplusg();
					front.setMessage(p.getName(), p.getNum(), p.getPlace(), p.getWage(), p.getGrade(), p.getWplusg());
					p.setMessage(name, num, place, wage, grade, wplusg);
				}
				p=p.next;
			}
			front = front.next;
			p=front.next;
		}		
		if(p.next ==null &&front.getWplusg() < p.getWplusg()){//写在外面,不然两个人的时候排不了序
				String name = front.getName();
				String num = front.getNum();
				String place = front.getPlace();
				int wage = front.getWage();
				int grade = front.getGrade();
				int wplusg = front.getWplusg();
				front.setMessage(p.getName(), p.getNum(), p.getPlace(), p.getWage(), p.getGrade(), p.getWplusg());
				p.setMessage(name, num, place, wage, grade, wplusg);
			}
	}

 打印员工数据(全部)

//打印
	public void display(){
		System.out.println("姓名\t工号\t职位\t基本工资\t绩效\t工资+绩效");
		Worker front = this.head;
		while(front != null && front.getNum() != null){
			System.out.println(front.toString());
			front = front.next;
		}
		if(this.head == null || this.head.getNum() == null){
			System.out.println("无员工财务数据!");
		}
	}

主函数

	public static void main(String[] args) {
		lh4 sm = new lh4();
//		sFile.R1("H:\\worker", sm);
		Scanner in = new Scanner(System.in);
		boolean open = true;
		while (open) {
			printMenu();
			int menu = -1;
			try {
				menu = in.nextInt();
			} catch (Exception e) {
				// Scanner声明在while循环外时,当第一次出现异常后没有清空Scanner中的数据,会造成无限死循环,因此需要重新在catch里声明Scanner
				in = new Scanner(System.in);
			}
	/*
	 * 		
	 */
	
			switch (menu) {
			case 1:
				System.out.println("请输入工号(回车结束)");
				String num = in.next();
				if (sm.isExist(num)) {
					System.out.println("该工号已存在!");
					break;
				}
				System.out.println("请输入姓名、职位、基本工资、绩效(空格结束,回车确认插入)");
				try {
					String name = in.next();
					String place = in.next();
					int wage = in.nextInt();
					int grade = in.nextInt();
					Worker newS = sm.new Worker(name, num, place, wage,grade);
					sm.insertTailer(newS);
					System.out.println("添加成功!");
					System.out.println("***********************************");
					System.out.println();
				} catch (Exception e) {
					System.out.println("数据输入错误!请确认是否是整数!");
					in = new Scanner(System.in);
				}
				break;
			case 3:
				System.out.println("请输入要删除的员工工号");
				String num2 = in.next();
				if (sm.delete(num2)) {
					System.out.println("删除成功");
				} else {
					System.out.println("删除失败");
				}
				System.out.println("***********************************");
				System.out.println();
				sm.display();
				System.out.println("***********************************");
				System.out.println();
				break;
			case 4:
				System.out.println("请输入要查询的员工工号");
				String num4 = in.next();
				Worker selectW = sm.search(num4);
//				System.out.println("姓名\t工号\t职位\t基本工资\t绩效\t工资+绩效");
				System.out.println(sm.search(num4));
				if (selectW == null) {
					System.out.println("无此员工!");
				} else {
//					sm.R1();
//					System.out.println(selectW.toString());
				}
				System.out.println("***********************************");
				System.out.println();
				break;
			case 2:
				System.out.println("请输入要插入的员工工号");
				String num3 = in.next();
				if (sm.isExist(num3)) {
					System.out.println("该工号已存在!");
					break;
				}
				System.out.println("请输入姓名、职位、基本工资、绩效(空格结束,回车确认插入)");
				String name = in.next();
				String place = in.next();
				int wage = in.nextInt();
				int grade = in.nextInt();
				Worker newS = sm.new Worker(name, num3, place, wage,grade);
				sm.insertTailer(newS);
				System.out.println("添加成功!");
				System.out.println("***********************************");
				System.out.println();
			case 5:
				sm.display();
				break;
			case 6:
				sm.sortTotal();
				sm.display();
				break;
			case 0:
				System.out.println("系统已退出!");
				System.exit(0);
				break;
			default:
				System.out.println("输入超出范围,请重新输入");
//				menu = in.nextInt();
			}
	
	/*
	 * 
	 */
		}
		in.close();
	}
}

菜单函数

	
	//菜单
	public static void printMenu(){
		System.out.println("你好!");
		System.out.println("1. 创建");
		System.out.println("2. 插入");
		System.out.println("3. 删除");
		System.out.println("4. 查找");
		System.out.println("5. 打印");
		System.out.println("6. 排序");
		System.out.println("0. 退出");
		System.out.println("请根据您的需要,输入0~6中相应的数字");
	}

文件读取函数出了问题,不会解决,注释着了,目前的程序依然是在编译器内输入数据

     public static class sFile{
    public static void W1(Worker m) {
        String text = "Java:)";
        try {
            FileWriter fw = new FileWriter("c://worker.txt");
            fw.write(m+"\n");
//            fw.write(m);
            fw.close();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
    
    //读取函数
    public static void R1(String filename , lh4 w) {
        try {
            Scanner sc = new Scanner(new File (filename));//平行src
            while(sc.hasNextLine()) {//读取txt文件的一行,一行内容为一个员工的信息,再用split分割
                String str = sc.nextLine();
                String ss[] = str.split(" ");
                String name = ss[0];
                String num = ss[1];
                String place = ss[2];
                int wage = Integer.parseInt(ss[3]);
                int grade = Integer.parseInt(ss[4]);
                Worker dw = new Worker(name,num,place,wage,grade);//是静态的就new不了
//                System.out.println(str);
                w.insertTailer(dw);
            }
            sc.close();
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    }

在主函数中的调用还需要学一下 

完整代码

import java.util.Scanner;

public class lh4 {
	public class Worker{
		//名字
		private String name;
		//工号(注意类型
		private String num;
		//职位
		private String place;
		//基本工资
		private int wage;
		//绩效
		private int grade;
		//工资+绩效
		private int wplusg;
		
		public Worker next;
		
		public Worker(){}
		
		public Worker(String name , String num , String place , int wage , int grade){
			this.name=name;
			this.num=num;
			this.place=place;
			this.wage=wage;
			this.grade=grade;
			this.setWplusg();
		}
		
		public String getName(){
			return name;
		}
		public void setName(String name){
			this.name=name;
		}
		
		public String getNum(){
			return num;
		}
		public void setNum(String num){
			this.num=num;
		}
		
		public String getPlace(){
			return place;
		}
		public void setPlace(String place){
			this.place=place;
		}
		
		public int getWage(){
			return wage;
		}
		public void setWage(int wage){
			this.wage = wage;
			this.setWplusg();
		}
		
		public int getGrade(){
			return grade;
		}
		public void setGrade(int grade){
			this.grade = grade;
			this.setWplusg();
		}
		
		public int getWplusg(){
			return wplusg;
		}
		public void setWplusg(){
			this.wplusg = this.wage+this.grade;
		}
		
		/*更新结点信息
		 * 一个结点包含一个员工的全部信息
		 */
		public void setMessage(String name , String num , String place , int wage , int grade , int wplusg){
			this.name=name;
			this.num=num;
			this.place=place;
			this.wage=wage;
			this.grade=grade;
			this.setWplusg();			
		}
		
		public String toString(){
			return "姓名:" + this.name + "\t工号:" + this.num + "\t职位:" + this.place + "\t基本工资:" + this.wage + "\t绩效:" + this.grade + "\t工资+绩效" + this.wplusg; 
		}//toString()返回此对象的字符串表示形式
	}
	
	//链表大小
	private int size;
	
	//头节点
	private Worker head;
	
	public int size(){
		return this.size;
	}
	
	//构造代码,每次创建对象调用一次,优于构造函数执行
	{
		this.size = 0;
		this.head = null;
	}
	
	//无参构造函数,实例化头、尾结点
	public lh4(){
		this.head = new Worker();
	}
	
	//插入(从尾部
	public void insertTailer(Worker w){
		Worker front = this.head;
		if(this.size == 0){
			this.head = w;
			this.size++;
		}else{
			while(front != null){
				if(front.next == null){
					front.next = w;
					this.size++;
					return;
				}
				front = front.next;
			}
		}
	}
	
	//录入与否(根据工号
	public boolean isExist (String num){
		Worker front  = this.head;
		while(front!=null){
			if(num.equals(front.getNum())){
				return true;
			}
			front = front.next;
		}
		return false;
	}
	
	//删除(根据工号
	public boolean delete(String num){
		Worker front = this.head;
		//判断是否删除头结点
		if(num.equals(front.getNum())){
			this.head = this.head.next;
			this.size--;
			return true;
		}
		while(!num.equals(front.next.getNum())){
			front = front.next;
		}
		if(front.next != null){
			front.next = front.next.next;
			this.size--;
			return true;
		}
		return false;
	}
	
	//查询信息(根据工号
	public Worker search(String num){
		Worker front = this.head;
//		System.out.println(num);
//		System.out.println(front.getNum());
		//头节点时
		if(num.equals(front.getNum())){
			Worker w = new Worker(front.getName() , num , front.getPlace() , front.getWage() , front.getGrade());
			return w;
		}	
		
		while(front.next != null){
//			System.out.println(front.getNum());
			front = front.next;
			if(num.equals(front.getNum())){
				Worker w = new Worker(front.getName() , num , front.getPlace() , front.getWage() , front.getGrade());
				return w;				
			}
		}
		return null;
	}
	
	//降序排序
	public void sortTotal(){
		Worker front = this.head;
		Worker p = front.next;
		while(front.next != null &&p.next !=null){
			while(p != null){
				if(front.getWplusg() < p.getWplusg()){
					String name = front.getName();
					String num = front.getNum();
					String place = front.getPlace();
					int wage = front.getWage();
					int grade = front.getGrade();
					int wplusg = front.getWplusg();
					front.setMessage(p.getName(), p.getNum(), p.getPlace(), p.getWage(), p.getGrade(), p.getWplusg());
					p.setMessage(name, num, place, wage, grade, wplusg);
				}
				p=p.next;
			}
			front = front.next;
			p=front.next;
		}		
		if(p.next ==null &&front.getWplusg() < p.getWplusg()){//写在外面,不然两个人的时候排不了序
				String name = front.getName();
				String num = front.getNum();
				String place = front.getPlace();
				int wage = front.getWage();
				int grade = front.getGrade();
				int wplusg = front.getWplusg();
				front.setMessage(p.getName(), p.getNum(), p.getPlace(), p.getWage(), p.getGrade(), p.getWplusg());
				p.setMessage(name, num, place, wage, grade, wplusg);
			}
	}
	
	//打印
	public void display(){
		System.out.println("姓名\t工号\t职位\t基本工资\t绩效\t工资+绩效");
		Worker front = this.head;
		while(front != null && front.getNum() != null){
			System.out.println(front.toString());
			front = front.next;
		}
		if(this.head == null || this.head.getNum() == null){
			System.out.println("无员工财务数据!");
		}
	}
	public static void main(String[] args) {
		lh4 sm = new lh4();
		Scanner in = new Scanner(System.in);
		boolean open = true;
		while (open) {
			printMenu();
			int menu = -1;
			try {
				menu = in.nextInt();
			} catch (Exception e) {
				// Scanner声明在while循环外时,当第一次出现异常后没有清空Scanner中的数据,会造成无限死循环,因此需要重新在catch里声明Scanner
				in = new Scanner(System.in);
			}
	
			switch (menu) {
			case 1:
				System.out.println("请输入工号(回车结束)");
				String num = in.next();
				if (sm.isExist(num)) {
					System.out.println("该工号已存在!");
					break;
				}
				System.out.println("请输入姓名、职位、基本工资、绩效(空格结束,回车确认插入)");
				try {
					String name = in.next();
					String place = in.next();
					int wage = in.nextInt();
					int grade = in.nextInt();
					Worker newS = sm.new Worker(name, num, place, wage,grade);
					sm.insertTailer(newS);
					System.out.println("添加成功!");
					System.out.println("***********************************");
					System.out.println();
				} catch (Exception e) {
					System.out.println("数据输入错误!请确认是否是整数!");
					in = new Scanner(System.in);
				}
				break;
			case 3:
				System.out.println("请输入要删除的员工工号");
				String num2 = in.next();
				if (sm.delete(num2)) {
					System.out.println("删除成功");
				} else {
					System.out.println("删除失败");
				}
				System.out.println("***********************************");
				System.out.println();
				sm.display();
				System.out.println("***********************************");
				System.out.println();
				break;
			case 4:
				System.out.println("请输入要查询的员工工号");
				String num4 = in.next();
				Worker selectW = sm.search(num4);
//				System.out.println("姓名\t工号\t职位\t基本工资\t绩效\t工资+绩效");
				System.out.println(sm.search(num4));
				if (selectW == null) {
					System.out.println("无此员工!");
				} else {
//					sm.R1();
//					System.out.println(selectW.toString());
				}
				System.out.println("***********************************");
				System.out.println();
				break;
			case 2:
				System.out.println("请输入要插入的员工工号");
				String num3 = in.next();
				if (sm.isExist(num3)) {
					System.out.println("该工号已存在!");
					break;
				}
				System.out.println("请输入姓名、职位、基本工资、绩效(空格结束,回车确认插入)");
				String name = in.next();
				String place = in.next();
				int wage = in.nextInt();
				int grade = in.nextInt();
				Worker newS = sm.new Worker(name, num3, place, wage,grade);
				sm.insertTailer(newS);
				System.out.println("添加成功!");
				System.out.println("***********************************");
				System.out.println();
			case 5:
				sm.display();
				break;
			case 6:
				sm.sortTotal();
				sm.display();
				break;
			case 0:
				System.out.println("系统已退出!");
				System.exit(0);
				break;
			default:
				System.out.println("输入超出范围,请重新输入");
//				menu = in.nextInt();
			}
	
	/*
	 * 
	 */
		}
		in.close();
	}
	
	//菜单
	public static void printMenu(){
		System.out.println("你好!");
		System.out.println("1. 创建");
		System.out.println("2. 插入");
		System.out.println("3. 删除");
		System.out.println("4. 查找");
		System.out.println("5. 打印");
		System.out.println("6. 排序");
		System.out.println("0. 退出");
		System.out.println("请根据您的需要,输入0~6中相应的数字");
	}

}

 参考:https://blog.youkuaiyun.com/mr_zql/article/details/102471977?spm=1001.2014.3001.5506

原文为学生成绩管理系统,并且有部分函数出现问题,在本文章代码中已修改和调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值