Java--学生管理系统

        本案例基于Java语言中的ArrayList集合来储存数据,并建立两个类——学生类和用户类存储在集合中,通过用户交互,搭建简单的学生管理系统。

1、学生类

        学生类利用set函数进行获取学生单个信息,show函数负责获取全部信息。

package test;
public class Student {
   private String name;
   private int age;
   private String sex;
   private String id;
   private int score;
   //构造函数
   public Student(){};
   //带参构造函数
   public Student(String name,String id,int age,String sex,int score)
   {
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.id=id;
        this.score=score;
   }
   //显示信息
   public void show()
   {
     System.out.println(this.name+"\t"+this.id+"\t"+this.age+"\t"+this.sex+"\t"+this.score);
   }
   //判断姓名是否相同是否相等
   public boolean judge(String name_)
   {
      if(name_.equals(this.name))
         return true;
      else
         return false;
   }
   //输出私有属性
   public String getname()
   {
      return this.name;
   }
   public String getid()
   {
      return this.id;
   }
   public int getage()
   {
      return this.age;
   }
   public int getscore()
   {
      return this.score;
   }
   public String getsex()
   {
      return this.sex;
   }
}

2、用户类

        用户类与学生类一样,get负责返回私有属性,show负责显示类内所有信息。

package test;
public class User {
    private String username;
    private String password;
    private String id;
    private String phonenumber;
    public User(){};
    public User(String username,String password,String id,String phonenumber)
    {
        this.username=username;
        this.password=password;
        this.id=id;
        this.phonenumber=phonenumber;
    }
    public String getusername()
    {
        return this.username;
    }
    public String getpassword()
    {
        return this.password;
    }
    public String getid()
    {
        return this.id;
    }
    public String getphonenumber()
    {
        return this.phonenumber;
    }
    public void show()  
    {
        System.out.println(this.username+'\t'+this.password+'\t'+this.id+'\t'+this.phonenumber+'\t');
    }
}

3、主类-登录系统

        登录系统分别设置登录、注册、忘记密码功能,后续可以添加文本数据库来进行储存。

        ArrayList<User> ulist=new ArrayList<>();
        boolean log_verify=false;
        while(true)
        {
            System.out.println("------欢迎来到学生管理系统------");
            System.out.println("**\t   1、登录\t      **");
            System.out.println("**\t   2、注册\t      **");
            System.out.println("**\t   3、忘记密码\t      **");
            System.out.println("--------------------------------");
            System.out.println("请输入你的选择:");
            int choice=new Scanner(System.in).nextInt();
            
            switch(choice)
            {
                case 0:showuser(ulist);break;
                case 1:log_verify=log(ulist);break;
                case 2:register(ulist);break;
                case 3:forget_password(ulist);break;
                default:System.out.println("输入指令错误,请重试!");
            }
            if(choice==1&log_verify==true)
                break;
        }
3.1登录

        登录中存在的问题:用户名不存在,密码错误问题

public static boolean log(ArrayList<User>list)
    {
        boolean log_verify=false;
        System.out.println("请输入您的账号: ");
        String username=new Scanner(System.in).next();
        System.out.println("请输入密码: ");
        String password=new Scanner(System.in).next();
        if(list.size()==0)
            System.out.println("用户名不存在! ");
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).getusername().equals(username))
            {
                if(list.get(i).getpassword().equals(password))
                {
                    System.out.println("欢迎回来! ");
                    log_verify=true;
                    break;
                }
                else{
                    System.out.println("密码错误,请重试");
                    break;
                }
            }
            else{
                System.out.println("用户名不存在! ");
                break;
            }
        }
        return log_verify;
    }

 

 

3.2注册

        用户信息中设置账号,密码,身份证号,手机号四个信息,密码需要进行重复输入,若两次密码结果不一致,将会被要求重新输入。用户名重复会被告知用户名存在。

    //注册
    public static ArrayList<User> register(ArrayList<User>list)
    {
        System.out.println("请输入注册用户名:");
        String username=new Scanner(System.in).next();
        String password,id,phonenumber;
        boolean flag=false;
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).getusername().equals(username))
            {
                System.out.println("此用户已存在!");
                flag=true;
                return list;
            }
        }
        if(flag==false)
        {
            while(true)
            {
            System.out.println("请输入密码:");
            password=new Scanner(System.in).next();
            System.out.println("请再次输入密码:");
            String again=new Scanner(System.in).next();
            if(password.equals(again))
                break;
            else
                System.out.println("密码前后不一致!");
            }
            while(true)
            {
                boolean flag_id=true;
                System.out.println("请输入身份证号:");
                id=new Scanner(System.in).next();
                if(id.length()!=18)
                {   System.out.println("身份证号错误");
                    continue;
                }
                for(int i=0;i<id.length();i++)
                {
                    if(id.charAt(i)<'0'|id.charAt(i)>'9')
                        flag_id=false;
                    if(i==17&(id.charAt(i)=='X'|id.charAt(i)=='x'))
                        flag_id=true;
                }
                if(flag_id)
                    break;
                else
                {
                    System.out.println("身份证号错误");
                    continue;
                }
            }
            while(true)
            {
                System.out.println("请输入手机号:");
                phonenumber=new Scanner(System.in).next();
                boolean flag_ph=true;
                for(int i=0;i<phonenumber.length();i++)
                {
                    if(phonenumber.charAt(i)<'0'|phonenumber.charAt(i)>'9')
                    {
                        System.out.println("手机号错误");
                        flag_ph=false;
                        break;
                    }
                }
                if(flag_ph)
                    break;
                else
                    continue;
            }
            User user=new User(username,password,id,phonenumber);
            list.add(user);
        }
        return list;
    }

 

 

3.3忘记密码

        当忘记密码时,需要输入账号,若账号不存在则退回主菜单,若账号存在则需要验证身份信息,核实是否为本人,然后进行二次重复输入新密码,修改密码后保存至ArrayList,回退主菜单。

    //忘记密码
    public static void forget_password(ArrayList<User>list)
    {
        System.out.println("请输入您的账号: ");
        String username=new Scanner(System.in).next();
        boolean exist=false;
        int exist_index=0;
        if(list.size()==0)
            System.out.println("账号不存在! ");
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).getusername().equals(username))
            {
                exist_index=i;
                exist=true;
                break;
            }
        }
        if(exist==false)
        {
            System.out.println("账号不存在! ");
        }
        else{
            System.out.println("请输入身份证号:");
            String id=new Scanner(System.in).next();
            if(list.get(exist_index).getid().equals(id))
            {
                boolean password_verify=false;
                while(true)
                {
                    System.out.println("请输入新密码: ");
                    String password=new Scanner(System.in).next();
                    System.out.println("请再次输入新密码: ");
                    String password_=new Scanner(System.in).next();
                    if (password.equals(password_))
                    {
                        list.set(exist_index,new User(list.get(exist_index).getusername(),
                                                        password,
                                                        list.get(exist_index).getid(),
                                                        list.get(exist_index).getphonenumber()));
                        password_verify=true;
                    }
                    else
                    {
                        System.out.println("两次密码不一致! ");
                    }
                    if(password_verify==true)
                        break;
                }
            }
            else{
                System.out.println("身份信息验证错误! ");
            }
        }

4、主类-学生系统

        学生系统包括添加,删除,选择,显示,排序,修改指令来进行简单的系统交互。

ArrayList<Student> list=new ArrayList<>();
        while(true)
        {
            boolean flag=false;  //不进行自动退出
            getmenu();
            String command=new Scanner(System.in).next();
            switch(command)
            {
                case "1":add(list);break;
                case "2":delete(list);break;
                case "3":select(list);;break;
                case "4":showinformation(list);break;
                case "5":sort(list);break;
                case "6":modify(list);break;
                case "q":flag=true;break;
                default:System.out.println("输入指令错误,请重试! ");
            }
            if(flag==true)
                break;

        }
        System.out.println("再见,欢迎下次使用!");

        表头信息:

    //打印表头
    public static void getmenu()
    {
        System.out.println("\n-----------学生管理系统---------");
        System.out.println("**\t1、添加学生信息       **");
        System.out.println("**\t2、删除学生信息       **");
        System.out.println("**\t3、查询学生信息       **");
        System.out.println("**\t4、显示所有信息       **");
        System.out.println("**\t5、排序所有信息       **");
        System.out.println("**\t6、修改学生信息       **");
        System.out.println("**\t退出系统请按q,谢谢!   **");
        System.out.println("--------------------------------");
        System.out.println("请输入你的选择:");

    }
4.1添加学生信息

        学生信息包括姓名,学号,年龄,性别,分数五个变量,若学生姓名存在,则会提示存在该学生,回退上一级菜单。

    //添加学生信息
    public static ArrayList<Student> add(ArrayList<Student>list)
    {
        String name;
        String id;
        int age;
        String sex;
        int score;
        boolean flag=false;
        System.out.println("请输入所要添加的学生姓名: ");
        name=new Scanner(System.in).next();
        for(int i=0;i<list.size();i++)
        {
            
            if(list.get(i).judge(name))
            {
                System.out.println("系统中存在该信息,请重新输入信息:");
                flag=true;
                break;
            }
        }
        if(flag==false)
        {
            System.out.println("请输入所要添加的学生学号:");
            id=new Scanner(System.in).next();
            System.out.println("请输入所要添加学生年龄:");
            age=new Scanner(System.in).nextInt();
            System.out.println("请输入所要添加学生性别:");
            sex=new Scanner(System.in).next();
            System.out.println("请输入所要添加学生分数:");
            score=new Scanner(System.in).nextInt();
            Student stu=new Student(name,id,age,sex,score);
            list.add(stu);
            return list;
        }
        else
            return list;
    }

4.2删除学生信息

        通过输入学生姓名,删除该学生所有信息,若不存在该学生则会提示查无此人。

    //删除学生信息
    public static ArrayList<Student> delete(ArrayList<Student>list)
    {
        String name;
        boolean flag=false;
        System.out.println("请输入删除学生姓名: ");
        name=new Scanner(System.in).next();
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).judge(name))
            {
                flag=true;
                list.remove(i);
                break;
            }
        }
        if(flag==false)
        {
            System.out.println("查无此人!");
        }
        return list;
    }
4.3查询学生信息

        通过输入需要查询的姓名或者学号,来获取该学生所有信息,若不存在,则警告查无此人。

    //查找学生信息
    public static void select(ArrayList<Student> list)
    {
        boolean flag=false;
        System.out.println("请问您要查询的是:\n1、姓名\n2、学号");
        int num=new Scanner(System.in).nextInt();
        if(num==1)
        {
            System.out.println("请问您要查询的学生姓名: ");
            String name=new Scanner(System.in).next();
            for(int i=0;i<list.size();i++)
            {
                if(list.get(i).getname().equals(name))
                {
                    flag=true;
                    list.get(i).show();
                    break;
                }
            }
        }
        else if(num==2)
        {
            System.out.println("请问您要查询的学生学号: ");
            String id=new Scanner(System.in).next();
            for(int i=0;i<list.size();i++)
            {
                if(list.get(i).getid().equals(id))
                {
                    flag=true;
                    list.get(i).show();
                    break;
                }
            }
        }
        else
        {
            System.out.println("请输入正确的序号!");
            return;
        }
        if(flag==false)
        {
            System.out.println("查无此人! ");
        }
    }
4.4显示所有信息

        循环调用类内的show函数来输出所有学生信息。

    //显示所有信息
    public static void showinformation(ArrayList<Student>list)
    {
        if(list.size()==0)
            System.out.println("系统中未添加学生信息!");
        System.out.println("姓名\t学号\t年龄\t性别\t分数");
        for(int i=0;i<list.size();i++)
        {
            list.get(i).show();
        }
    }
4.5排序学生信息

        可以针对姓名和学号两个变量进行排序,并选择升序和降序的方法使用冒泡排序,compareTo函数返回的是两个变量的ASCII码差值。

    //排序学生信息
    public static ArrayList<Student> sort(ArrayList<Student>list)
    {
        System.out.println("请问您要排序的是:\n1、姓名\n2、学号");
        int num=new Scanner(System.in).nextInt();
        if(num!=1 &num!=2)
            System.out.println("输入错误命令!");
        System.out.println("排序方式:\n1、降序\n2、升序");
        int style=new Scanner(System.in).nextInt();
        if(num!=1 &num!=2)
            System.out.println("输入错误命令!");
        switch(num)
        {
            case 1:{
                for(int i=0;i<list.size();i++)
                {
                    for(int j=0;j<list.size()-i-1;j++)
                    {
                        if (num==2)
                            if(list.get(j).getname().compareTo(list.get(j+1).getname())>0)
                                swap(list,j,j+1);
                        else
                            if(list.get(j).getname().compareTo(list.get(j+1).getname())<0)
                                swap(list,j,j+1);
                    }
                }
                break;
                
            }
            case 2:{
                for(int i=0;i<list.size();i++)
                {
                    for(int j=0;j<list.size()-i-1;j++)
                    {
                        if(num==2)
                            if(list.get(j).getid().compareTo(list.get(j+1).getid())>0)
                                swap(list,j,j+1);
                        else
                            if(list.get(j).getid().compareTo(list.get(j+1).getid())<0)
                                swap(list,j,j+1);
                    }
                }
            }
            break;
        }
        return list;
    }

交换两个学生信息:

    //交换两个学生信息
    public static ArrayList<Student> swap(ArrayList<Student> list,int i,int j)
    {
        Student tmpi=new Student(list.get(i).getname(), 
                                list.get(i).getid(), 
                                list.get(i).getage(), 
                                list.get(i).getsex(), 
                                list.get(i).getscore());
        Student tmpj=new Student(list.get(j).getname(), 
                                list.get(j).getid(), 
                                list.get(j).getage(), 
                                list.get(j).getsex(), 
                                list.get(j).getscore());

                                list.set(i,tmpj);
        list.set(j,tmpi);
        return list;
    }
4.6修改学生信息

        用户输入要求修改的姓名,若不存在该学生,则警告查无此人,若存在,则依次输入学号,年龄,性别,分数进行修改。

    //修改学生信息
    public static ArrayList<Student> modify(ArrayList<Student> list)
    {
        boolean flag=false;
        int modicount=0;
        System.out.println("请问您要修改的姓名是: ");
        String name=new Scanner(System.in).next();
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).getname().equals(name))
            {
                flag=true;
                modicount=i;
                break;
            }
        }
        if(flag==false)
            System.out.println("查无此人! ");
        else
        {
            System.out.println("请问修改后的学号是: ");
            String id=new Scanner(System.in).next();
            System.out.println("请问修改后的年龄是: ");
            int age=new Scanner(System.in).nextInt();
            System.out.println("请问修改后的性别是: ");
            String sex=new Scanner(System.in).next();
            System.out.println("请问修改后的分数是: ");
            int score=new Scanner(System.in).nextInt();
            list.set(modicount,new Student(name, id, age, sex, score));
        }
        return list;
    }

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值