JAVA学习总结1

项目背景:学生管理系统中,不管修改还是删除,都需要优先查找到某个学生,那么查找就是一个重复率很高的方法,可以重新做出来。

1.分析设计,根据重复调用查找的思路,返回下标,来锁定需要操作的元素,或者返回-1,来表示查无此人。
2.在该系统中,三个数组的长度应设定为全局变量,同时,设定一个L来控制数组中的有效元素,实现有效数据的更多操作。

1、添加"+"\n"+"2、显示"+"\n"+"3、删除"+"\n"+"4、查找"+"\n"+"5、修改"+"\n"+"6、排序"+"\n"+"7、退出"

  • 主界面
package OO0906;

import javax.swing.JOptionPane;

public class studentsCRM {
     public static String[] namearr = new String[20];
     public static int[] idarr = new int[20];
     public static int[] gradearr = new int[20];
     public static int l = 0;

     public static void main(String[] args) {
          JOptionPane.showMessageDialog(null, star("*") + "\n" + "\n"
                   + "欢迎登陆学生管理系统" + "\n" + "\n" + star("*"));
          String admin = "123";
          int pwd = 123;
          login(admin, pwd);//调用登陆方法
          int choose = 0;
          while (true) {

              choose = Integer.parseInt(JOptionPane.showInputDialog(null, "1、添加"
                        + "\n" + "2、显示" + "\n" + "3、删除" + "\n" + "4、查找" + "\n"
                        + "5、修改" + "\n" + "6、成绩排序" + "\n" + "7、退出"));
              switch (choose) {
              case 1:
                   infAdd();
                   outinf();
                   break;
              case 2:
                   outinf();
                   break;
              case 3:
                   del();
                   break;
              case 4:
                   find();
                   break;
              case 5:
                   update();
                   break;
              case 6:
                   rowarr();
                   outinf();
                   break;
              case 7:
                   ;
                   System.exit(0);
              }
          }

     }
  • 添加——每次添加,实际是一个数组元素来接收外部数据,所以,且,每次添加之后,该位置的元素就不能被下一个输入顶替,所以要实现同步的L++,并使用L作为数组的下标,来实现,数组元素的有序增加。
/** 信息的添加 */
     public static void infAdd() {
          idarr[l] = Integer.parseInt(JOptionPane.showInputDialog(null,
                   "请输入学生的学号"));
          namearr[l] = JOptionPane.showInputDialog(null, "请输入学生的姓名");
          gradearr[l] = Integer.parseInt(JOptionPane.showInputDialog(null,
                   "请输入学生的成绩"));
          l++;
     }
  • 显示——显示做一个遍历就可以了,for循环里要写 i<L
/** 信息显示 */
     public static void outinf() {
          String s = "";
          for (int i = 0; i < l; i++) {
              s += namearr[i] + "    " + idarr[i] + "    " + gradearr[i] + "\n";

          }
          JOptionPane.showMessageDialog(null, s);
     }
  • 删除——将需要删除的数组元素L之后的所以元素向前赋值一位,就直接替换掉了L元素
/** 删除,查找,把下标之后的数组全部向前替换 */
     public static void del() {
          int index = find();
          if (index != -1) {
              for (int i = index; i < l; i++) {
                   namearr[i] = namearr[i + 1];
                   idarr[i] = idarr[i + 1];
                   gradearr[i] = gradearr[i + 1];
              }
              l--;
          }
          outinf();
     }
  • 查找——使用的最多的,返回i或者-1,返回-1的时候,可以加入,查无此人在方法里。
/** 查找方法,这是一个重复率很高的方法,精髓在于要反复调用是为了找到学生的位置,所以要返回下标,要用int返回 */
     public static int find() {

          String checkname = JOptionPane.showInputDialog(null, "请输入要查找的姓名");
          for (int i = 0; i < l; i++) {
              if (namearr[i].equals(checkname)) {
                   JOptionPane.showMessageDialog(null, namearr[i] + gradearr[i]
                             + idarr[i]);
                   return i;
              }

          }
          JOptionPane.showMessageDialog(null, "查无此人");
          return -1;
     }
  • 修改——查找匹配i,然后直接接收就行了,注意类型转换;
/** 修改,先调用查找,然后根据下标修改数组,不需要返回 */
     public static void update() {
          int index = find();
          if (index != -1) {
              namearr[index] = JOptionPane.showInputDialog(null, "新的姓名");
              idarr[index] = Integer.parseInt(JOptionPane.showInputDialog(null,
                        "新的学号"));
              gradearr[index] = Integer.parseInt(JOptionPane.showInputDialog(
                        null, "新的成绩"));
          }
          outinf();// 修改完了,直接调用显示方法
  • 排序——尽量精简,要多次使用
/** 根据成绩排序 */
     public static void rowarr() {
          for (int i = 0; i < l; i++) {
              for (int j = i + 1; j < l; j++) {
                   if (gradearr[i] < gradearr[j]) {
                        int temp = gradearr[i];
                        gradearr[i] = gradearr[j];
                        gradearr[j] = temp;

                        int temp1 = idarr[i];
                        idarr[i] = idarr[j];
                        idarr[j] = temp1;

                        String temp2 = namearr[i];
                        namearr[i] = namearr[j];
                        namearr[j] = temp2;
                   }
              }
          }

     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值