2022-07-15/16 第一小组 田龙月 管理系统javaSE
阅读原文时间:2022年07月16日阅读:1

JavaSE小项目(基础语法;二分查找;冒泡排序)--还是存在bug:删除一个数组内一组数据后面只有一组后面数据能向前移位 (YY:使用“方法”应该会好很多,代码架构会清晰一点)未找到用户时的提示功能未完成

点击查看代码

import java.util.Scanner;

public class ManageSystem {
    public static void main(String[] args) {
        int nos[] = new int[3];
        String names[] = new String[3];
        int rowData=0;
        Scanner sc = new Scanner(System.in);
        System.out.println("欢迎进入员工管理系统");
        mainProgram:for (; ; ) {
            System.out.println("请输入数字选择操作: 1.添加员工 2.查询员工信息 3.修改员工信息 4.删除员工信息,按其他任意键退出系统");
            String flag = sc.next();
//          分支程序:选择功能
                    switch (flag) {
                        case "1":
                            //添加员工功能
                            //先查看是否有剩余容量

                            loopInsert:for (int i = 0; i < 100; i++) {

                                System.out.println("请输入姓名");
                                nos[rowData] = 1000 + rowData;
                                String name = sc.next();
                                names[rowData] = name;
                                System.out.println("工号为" + nos[rowData] + "名字是" + names[rowData]);
                                rowData++;
//                          ********************数组扩容*****************************
                                if (names[names.length - 1] != null && nos[nos.length - 1] != 0) {
                                    int[] newNos = new int[nos.length + 2];
                                    String[] newNames = new String[names.length + 2];
                                    for (int no = 0; no < nos.length; no++) {
                                        newNos[no] = nos[no];
                                    }
                                    for (int no = 0; no < names.length; no++) {
                                        newNames[no] = names[no];
                                    }
                                    nos = newNos; //直接复制的话原数组的大小,数据都会被复制过去
                                    names = newNames;
                                }
                                System.out.println("继续输入请输入1,查看其它功能任意键");
                                String exit1 = sc.next();
                                switch (exit1) {
                                    case "1":
                                        continue loopInsert;
                                    default:
                                        continue mainProgram;//缺少返回总系统标签
                                }
                            }

                            case "2":
                            System.out.println("欢迎查询员工信息");
                            search:while (true){
                                System.out.println("按工号查询员工信息请按‘1’,按姓名查询员工信息请按‘2’,输出所有员工请按‘3’,逆序输出请按‘4’");
                                String tempSearch=sc.next();
                                switch (tempSearch){
                                    case "1":
                                        searchNum:for(;;){
                                            System.out.println("请输入想查询的工号");
                                            int no=sc.nextInt();
                                            int left=0;
                                            int right=nos.length-1;
                                            if (no<nos[left]&&no>nos[right]){
                                                System.out.println("您查找的用户不存在");
                                            }else {
//                                              二分查找(算法)
                                                while (left<=right){
                                                    int middle=(right+left)/2; //一定要放在循环里面middle才会变
                                                    if (nos[middle]==no){
                                                        System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
                                                        break;
                                                    } else if (nos[middle]>no) {
                                                        right=middle-1;
                                                    }else {
                                                        left=middle+1;
                                                    }
                                                }
                                            }

                                            System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
                                            String exit1= sc.next();
                                            switch(exit1){
                                                case "1":
                                                    System.out.println("继续操作");
                                                    continue searchNum;
                                                case "2":
                                                    System.out.println("已返回上一层");
                                                    continue search;
                                                default:
                                                    continue mainProgram;//缺少返回总系统标签

                                            }
                                        }
                                    case "2":
                                        searchName:for (;;){
                                            System.out.println("请输入想查询的员工姓名");
                                            String tempName= sc.next();
                                            for (int i = 0; i < names.length; i++) {
                                                if (names[i].equals(tempName)){
                                                    System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+tempName);
                                                }
                                            }
                                            System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
                                            String exit1= sc.next();
                                            switch(exit1){
                                                case "1":
                                                    System.out.println("继续操作");
                                                    continue searchName;
                                                case "2":
                                                    System.out.println("已返回上一层");
                                                    continue search;
                                                default:
                                                    continue mainProgram;//缺少返回总系统标签
                                            }}
                                        case "3":
                                                printAll:for(int i=0;i< nos.length;i++) {
                                                    System.out.println("你查询的员工工号为" + nos[i] + "姓名为" + names[i]);
                                                }
                                                System.out.println("返回上一层请按1,返回主菜单任意键");
                                                String exit2= sc.next();
                                                switch(exit2){
                                                    case "1":
                                                        System.out.println("已返回上一层");
                                                        continue search;
                                                    default:
                                                        continue mainProgram;//缺少返回总系统标签
                                                }

                                            case "4":
                                                printReverse:for (;;){
                                                    System.out.println("员工逆序输出");
                                                    int tempNum;
                                                    String tempStr;
//                                                  冒泡排序(算法)
                                                    for (int i=0;i<nos.length-1;i++){
                                                        for (int j=0;j<nos.length-i-1;j++){
                                                            if(nos[j]<nos[j+1]){
                                                                tempNum=nos[j];
                                                                nos[j]=nos[j+1];
                                                                nos[j+1]=tempNum;
                                                                tempStr=names[j];
                                                                names[j]=names[j+1];
                                                                names[j+1]=tempStr;
                                                            }
                                                        }
                                                    }
                                                    for (int i = 0; i < nos.length; i++) {
                                                        System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+names[i]+"(逆序)");
                                                    }
                                                    System.out.println("返回上一层请按1,返回主菜单任意键");
                                                    String exit3= sc.next();
                                                    switch(exit3) {
                                                        case "1":
                                                            System.out.println("已返回上一层");
                                                            continue search;
                                                        default:
                                                            continue mainProgram;//缺少返回总系统标签
                                                    }
                                                }
                                            default:
                                                System.out.println("输入错误,请重新选择信息");
                                                continue search;
                                        }
                                }

                case "3":   //修改员工功能
                    change:for (;;) {
                        System.out.println("输入想要修改的员工的员工姓名");
                        String tempString = sc.next();
//                int tempInt=sc.nextInt();
                        changeIn:
                        for (int i = 0; i < nos.length; i++) {

                            if (tempString.equals(names[i]) ){//想要判断工号还需再加ifelse,执行工号判断,flese,else里写Integer.parseInt(tempString)==nos[i]进行判断
//                                int flag1 = 1;
//                                if (flag1 != 1) {
//                                    System.out.println("您输入的信息还有其他额外信息");
//                                }
                                System.out.println("你想修改的员工的工号为" + nos[i] + "姓名是" + names[i]);
                                System.out.println("请输入想要的名字信息");
                                names[i] = sc.next();
                                System.out.println("修改后的员工的工号为" + nos[i] + "姓名是" + names[i]);
//                                flag1++;  //这里想做的本来是一个提示还有其他用户姓名与想要查询的员工姓名相同,然后进行提示,那样的话flag要定义在外面,和判断数组中元素是否存在代码结构相同
                            }
                        }
                        System.out.println("返回主菜单任意键");
                        String exit1= sc.next();
                        switch(exit1) {
                            default:
                                continue mainProgram;//缺少返回总系统标签
                    }
                    }
                case "4":   //删除员工信息
                    deleteMes:for(;;){
                        System.out.println("删除前员工信息为");
                        for (int i = 0; i < nos.length; i++) {
                            System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
                        }
                        System.out.println("输入想要删除的员工的员工姓名");
                        String tempString=sc.next();
                        deleteAgain:for (int i= 0;i<nos.length;i++) {
                            if (tempString.equals(names[i])){
//                            int flag1=1;
//                            if(flag1!=1) {
//                                System.out.println("您输入的信息还有其他额外信息");
//                            }
                                askAgain:for (;;){
                                System.out.println("你想删除的员工的工号为"+nos[i]+"姓名是"+names[i]+",是否删除当前员工?1是2否");
//                            flag1++;
                                String judge=sc.next();
                                    if (judge.equals("是")){
//                           ************************数组移位**************************
                                        for (int j = i; j < nos.length-1; j++) {
                                            names[j]=names[j+1]; //删除数组内元素,元素前移
                                            nos[j]=nos[j+1];
                                            names[j+1]=null;
                                            nos[j+1]=0;
                                        }
                                        continue deleteAgain;
                                    } else if (judge.equals("否")) {
                                        System.out.println("本次操作已完成");
                                        break deleteMes;
                                    }else {
                                        System.out.println("返回主菜单");
                                        continue mainProgram;
                                    }
                                }
                            }
                        }
                        System.out.println("输入后员工信息为");
                        for (int i = 0; i < nos.length; i++) {
                            System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
                        }
//                    选择下一步
                        System.out.println("返回上一层请按1,返回主菜单任意键");
                        String exit1= sc.next();
                        switch(exit1) {
                            case "1":
                                System.out.println("已返回上一层");
                                continue deleteMes;
                            default:
                                continue mainProgram;//缺少返回总系统标签
                        }
                    }
                default:
                    System.exit(0);
            }
        }}} 

算法

线性查找:就是顺序查找,时间复杂度O(1),如果数据在最后一位,效率最差。

二分查找的要求:一定要是有序数组才可以进行二分查找,设置左右索引left&right,中间为比较项middle,和数值比较,大于比较项则left=middle+1,小于则right=middle-1,然后middle值会发生变化

点击查看代码

                                    System.out.println("请输入想查询的工号");
                                            int no=sc.nextInt();
                                            int left=0; //左索引
                                            int right=nos.length-1; //右索引
                                            if (no<nos[left]&&no>nos[right]){//判断是否在数组中
                                                System.out.println("您查找的用户不存在");
                                            }else {
//                                              二分查找(算法)
                                                while (left<=right){
                                                    int middle=(right+left)/2; //一定要放在循环里面middle才会变
                                                    if (nos[middle]==no){
                                                        System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
                                                        break;
                                                    } else if (nos[middle]>no) {
                                                        right=middle-1; //中间小于middle,right左移
                                                    }else {
                                                        left=middle+1;//中间大于middle,left右移
                                                    }
                                                }
                                            } 

##冒泡排序

点击查看代码

public class BubbleSort {
    public static void main(String[] args) {
        int [] arr=new int[]{1,5,3,9,-2};
        int tempNum;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]>arr[j+1]){
                tempNum=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tempNum;
            }
            }
        }
        for (int i:arr){
            System.out.print(i+",");
        }
    }
} 

![](https://img2022.cnblogs.com/blog/2815362/202207/2815362-20220716123317854-126870911.png)

假定我们的第一个元素就是当前最小(大)的,一个一个与后面进行比较,如果后面的比我们的第一元素小,就把他们俩个元素在数组内位置进行交换,然后再拿这个元素往后比较,第一轮比较完成后,在拿第二个元素作为基准重复上面的操作。

点击查看代码

public class SelectSort {
    public static void main(String[] args) {
        int [] arr=new int[]{-2,-9,5,6,10,-1,0};
        int tempInt;
        for (int i = 0; i < arr.length-1; i++) { //一个一个拿取元素
            for (int j = i+1; j < arr.length ; j++) {
                if (arr[i]>arr[j]){//比后面大,准备交换俩个元素在数组中的位置
                    tempInt=arr[i];
                    arr[i]=arr[j];
                    arr[j]=tempInt;
                }
            }
        }
        for (int i:arr){
            System.out.print(i+",");
        }
    }
} 

![](https://img2022.cnblogs.com/blog/2815362/202207/2815362-20220716123338817-64245941.png)

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章