java对象数组练习

对象数组

对象数组的声明

1.先声明对象

package com.sk.arr;
​
/**
 * ClassName: Admin <br/>
 * Description: <br/>
 * date: 2021/11/25 8:06<br/>
 *
 * @author 斑马<br />
 */
public class Admin {
    private String account;
    private String pwd;
    public Admin() {
    }
    //Alt+Shift+ s+ r
    //Alt+Shift+ s+ o
    public Admin(String account, String pwd) {
        this.account = account;
        this.pwd = pwd;
    }
​
    public String getAccount() {
        return account;
    }
​
    public void setAccount(String account) {
        this.account = account;
    }
​
    public String getPwd() {
        return pwd;
    }
​
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}
​

2.测试

package com.sk.arr;
​
/**
 * ClassName: AdminTest <br/>
 * Description: <br/>
 * date: 2021/11/25 8:16<br/>
 *
 * @author 斑马<br />
 */
public class AdminTest {
    /*
    * 对象数组和String,int等类型的数组,没有本质区别
    * 数组类型是什么,里边的数据就是什么
    * 严格来说String类型的数组也是对象数组
    * */
    Admin admins[]=new Admin[10];
    public void test(){
        //赋值
        //1.创建对象
        Admin ad=new Admin("zsf","123456");
        //2.给数组赋值
        admins[0]=ad;
        //取值
        Admin admin=admins[0];
        System.out.println(admin);
        //System.out.println(admin.getAccount()+"\t"+admin.getPwd());
    }
    /**添加数据*/
    public void addAdmin(Admin admin){
        for (int i=0;i<admins.length;i++){
            if(admins[i]==null){
                admins[i]=admin;
                break;//不跳出循环,会把后续所有的数据变成同一个
            }
        }
    }
    /**查看*/
    public void show(){
        for (int i=0;i<admins.length;i++){
            if(admins[i]!=null){
                Admin ad=admins[i];
                System.out.println(ad.getAccount()+"\t"+ad.getPwd());
            }
        }
    }
    /**根据帐号修改密码*/
    public boolean update(Admin admin){
        for (int i=0;i<admins.length;i++){
            Admin ad=admins[i];
            if(ad!=null){//不判断出现java.lang.NullPointerException
                //数组中的帐号和参数中的帐号相同则修改原来的密码
                if(ad.getAccount().equals(admin.getAccount())){//涉及字符串的比较要使用equals方法
                    ad.setPwd(admin.getPwd());
                    return true;//修改成功
                }
            }
        }
        return false;//修改失败,帐号不存在
    }
    /**删除*/
    public boolean delete(String account){
        for (int i=0;i<admins.length;i++){
            Admin ad=admins[i];
            if(ad!=null){
                //帐号相同
                if(ad.getAccount().equals(account)){
                    admins[i]=null;//清空数据
                    return true;
                }
            }
        }
        return false;
    }
​
    public static void main(String[] args) {
        AdminTest adminTest=new AdminTest();
        adminTest.test();
        Admin ad=new Admin("lsf","654321");
        adminTest.addAdmin(ad);
        adminTest.show();
        Admin ad2=new Admin("lsf","987654");
        boolean flag=adminTest.update(ad2);
        System.out.println(flag);
        adminTest.show();
        boolean fl=adminTest.delete("lsf");
        System.out.println(fl);
        adminTest.show();
    }
}
​

考试管理系统

一,需求分析

1.可以查看试题

2.可以添加试题

3.可以修改试题

4.可以删除试题

5.参加考试

二,实体类分析

1.Admin(管理员)

account 账户 pwd 密码 name昵称

2.试题(TestSubject)

id编号 题目subject 选项option 答案anser 类型type 是否自动判题 isAuto

三,分包

1.实体类 com.sk.entity

2.数据操作 com.sk.dao

3.显示层 com.sk.view

4.测试层 com.sk.test

四,代码实现

1.创建实体类

package com.sk.entity;
​
/**
 * ClassName: Admin <br/>
 * Description:Admin(管理员)
 * account 账户  pwd 密码  name昵称 <br/>
 * date: 2021/11/25 14:30<br/>
 *
 * @author 斑马<br />
 */
public class Admin {
    private String account;
    private String pwd;
    private String name;
​
    public Admin() {
    }
​
    public Admin(String account, String pwd, String name) {
        this.account = account;
        this.pwd = pwd;
        this.name = name;
    }
​
    public String getAccount() {
        return account;
    }
​
    public void setAccount(String account) {
        this.account = account;
    }
​
    public String getPwd() {
        return pwd;
    }
​
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
}
​
package com.sk.entity;
​
/**
 * ClassName: TestSubjest <br/>
 * Description: <br/>
 * date: 2021/11/25 14:56<br/>
 *id编号  题目subject  选项option  答案anser  类型type  是否自动判题 isAuto
 * @author 斑马<br />
 */
public class TestSubject {
    private int id;
    private String subject;
    private String option;
    private String anser;
    private String type;
    private int isAuto;//0.自动  1.手动
​
    public TestSubject() {
    }
​
    public TestSubject(int id, String subject, String option, String anser, String type, int isAuto) {
        this.id = id;
        this.subject = subject;
        this.option = option;
        this.anser = anser;
        this.type = type;
        this.isAuto = isAuto;
    }
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getSubject() {
        return subject;
    }
​
    public void setSubject(String subject) {
        this.subject = subject;
    }
​
    public String getOption() {
        return option;
    }
​
    public void setOption(String option) {
        this.option = option;
    }
​
    public String getAnser() {
        return anser;
    }
​
    public void setAnser(String anser) {
        this.anser = anser;
    }
​
    public String getType() {
        return type;
    }
​
    public void setType(String type) {
        this.type = type;
    }
​
    public int getIsAuto() {
        return isAuto;
    }
​
    public void setIsAuto(int isAuto) {
        this.isAuto = isAuto;
    }
}
​

2.实现登录注册

1)实现数据的操作AdminDao

package com.sk.dao;
​
import com.sk.entity.Admin;
​
/**
 * ClassName: AdminDao <br/>
 * Description: <br/>
 * date: 2021/11/25 15:01<br/>
 *操作关于管理员的数据
 * @author 斑马<br />
 */
public class AdminDao {
    //使用static可以实现不同对象之间的数据共享
    public static Admin[] admins=new Admin[10];
    /**登录*/
    public Admin login(String account,String pwd){
        for (int i=0;i<admins.length;i++){
            Admin ad=admins[i];
            if(ad!=null){
                if(ad.getAccount().equals(account)
                        &&ad.getPwd().equals(pwd)){//帐号密码相同
                    return ad;//登录成功!
                }
            }
        }
        return null;//登录失败
    }
    /**注册*/
    public void addAdmin(Admin ad){
        for (int i=0;i<admins.length;i++){
            Admin ads=admins[i];
            if(ads==null){
                admins[i]=ad;
                break;
            }
        }
    }
​
}
​

2)实现view层

package com.sk.view;
​
import com.sk.dao.AdminDao;
import com.sk.entity.Admin;
​
import java.util.Scanner;
​
/**
 * ClassName: AdminView <br/>
 * Description: <br/>
 * date: 2021/11/25 15:23<br/>
 *管理员页面(视图)
 * @author 斑马<br />
 */
public class AdminView {
    Scanner sc=new Scanner(System.in);
    AdminDao adminDao=new AdminDao();
    /**开始菜单*/
    public void start(){
        System.out.println("欢迎使用考试系统");
        System.out.println("1.登录");
        System.out.println("2.注册");
        System.out.println("请选择(其他选项退出):");
        int num=sc.nextInt();
        switch (num){
            case 1:
                login();
                break;
            case 2:
                addAdmin();
                break;
            default:
                System.out.println("欢迎下次使用!");
        }
        System.out.println("是否返回开始菜单?y/n");
        String str=sc.next();
        if(str.equals("y")){
            start();
        }else{
            System.out.println("欢迎下次使用!");
        }
    }
    public void addAdmin() {
        System.out.println("请输入账户:");
        String account=sc.next();
        System.out.println("请输入密码:");
        String pwd=sc.next();
        System.out.println("请输入昵称:");
        String name=sc.next();
        Admin ad=new Admin(account,pwd,name);
        adminDao.addAdmin(ad);
        System.out.println("注册成功!");
    }
    public void login() {
        System.out.println("请输入账户:");
        String account=sc.next();
        System.out.println("请输入密码:");
        String pwd=sc.next();
        Admin admin=adminDao.login(account,pwd);
        if(admin!=null){
            System.out.println("欢迎管理员:"+admin.getName()+"使用本系统!");
            menu();
        }else {
            System.out.println("用户名密码错误,登录失败!");
        }
    }
    public void menu(){
        System.out.println("1.查看所有试题");
        System.out.println("2.添加试题");
        System.out.println("3.修改试题");
        System.out.println("4.删除试题");
        System.out.println("5.参加测试");
        System.out.println("请选择:");
        int num=sc.nextInt();
        switch (num){
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                break;
            default:
                System.out.println("输入错误!请重新输入!");
                menu();
        }
        System.out.println("是否返回主菜单?y/n");
        String str=sc.next();
        if(str.equals("y")){
            menu();
        }
    }
}
​

3)测试

package com.sk.test;
​
import com.sk.dao.AdminDao;
import com.sk.entity.Admin;
import com.sk.view.AdminView;
​
/**
 * ClassName: Test <br/>
 * Description: <br/>
 * date: 2021/11/25 16:15<br/>
 *
 * @author 斑马<br />
 */
public class Test {
    public static void main(String[] args) {
        Admin ad=new Admin("admin","admin","厨师长");
        AdminDao.admins[0]=ad;
        AdminView view=new AdminView();
        view.start();
    }
}

4)实现试题的功能

(1)实现dao

package com.sk.dao;
​
import com.sk.entity.TestSubject;
​
/**
 * ClassName: TestSubjectDao <br/>
 * Description: <br/>
 * date: 2021/11/25 17:00<br/>
 *
 * @author 斑马<br />
 */
public class TestSubjectDao {
    public static TestSubject[] testSubjects=new TestSubject[50];
    //下边代码参考上午 讲的 Admin的增删改查,写完测试一下
    //完善TestSubjectView
​
    /**查看*/
    public TestSubject[] showAll(){
        return testSubjects;
    }
    /**添加*/
    public void add(TestSubject t){
        for(int i=0;i<testSubjects.length;i++){
            TestSubject test=testSubjects[i];
            if(test==null){
                testSubjects[i]=t;
                break;
            }
        }
    }
    /**自动生成编号*/
    public int getId(){
        int id= (int) (Math.random()*1000);
        for(int i=0;i<testSubjects.length;i++){
            TestSubject t=testSubjects[i];
            if(t!=null){
                if(t.getId()==id){//编号重复
                return  getId();
                }
            }
        }
        return id;
    }
​
​
    /**删除*/
    public boolean delete(int id){
        for(int i=0;i<testSubjects.length;i++){
            TestSubject test=testSubjects[i];
            if(test!=null){
                if(test.getId()==id){
                    testSubjects[i]=null;
                    return true;
                }
            }
        }
        return false;
    }
    /**修改*/
​
    public boolean update(TestSubject t){
        for(int i=0;i<testSubjects.length;i++){
            TestSubject test=testSubjects[i];
            if(test!=null){
                if(test.getId()==t.getId()){
                    testSubjects[i]=t;
                    return true;
                }
            }
        }
        return false;
    }
    /**判断下标是否存在*/
    public boolean isIndex(int num){
        TestSubject t=testSubjects[num];
        if(t==null){
            return false;
        }
        return true;
    }
    /**考试*/
    public TestSubject[] test(){
        int nums[]=new int[5];//产生5个随机数
        for (int i=0;i<nums.length;){
            //0~testSubjects.length-1的一个随机数
            int n= (int) (Math.random()*testSubjects.length);
            if(isIndex(n)){
                nums[i]=n;
                i++;
            }
        }
        TestSubject[] ts=new TestSubject[5];//把5个随机下标对应的数据放入新的数组中
        for(int i=0;i<nums.length;i++){
            int index=nums[i];//5个随机的下标
            TestSubject test=testSubjects[index];
            ts[i]=test;
        }
        return ts;
    }
​
}

(2)实现view

package com.sk.view;
​
import com.sk.dao.TestSubjectDao;
import com.sk.entity.TestSubject;
​
import java.util.Scanner;
​
/**
 * ClassName: TestSubjectView <br/>
 * Description: <br/>
 * date: 2021/11/26 15:22<br/>
 *
 * @author 斑马<br />
 */
public class TestSubjectView {
    Scanner sc=new Scanner(System.in);
    TestSubjectDao testSubjectDao=new TestSubjectDao();
    /**查看*/
    public void show(){
        TestSubject[] testSubjects=testSubjectDao.showAll();
        for(int i=0;i<testSubjects.length;i++){
            TestSubject t=testSubjects[i];
            if(t!=null){
                System.out.print("题型:"+t.getType()+"\n");
                System.out.println(t.getId()+".\t"+t.getSubject());
                System.out.println(t.getOption());
                System.out.println("正确答案:"+t.getAnser());
                if(t.getIsAuto()==0){
                    System.out.println("判题:自动");
                }else{
                    System.out.println("判题:手动");
                }
                System.out.println("-------------------------------------------");
            }
        }
    }
    /**添加*/
​
    /**删除*/
​
    /**修改*/
​
    /**考试*/
    public void test(){
        int sum=0;//答对的个数
        TestSubject[] testSubjects=testSubjectDao.test();
        for(int i=0;i<testSubjects.length;i++){
            TestSubject t=testSubjects[i];
            if(t!=null){
                System.out.print("题型:"+t.getType()+"\n");
                System.out.println(t.getId()+"./t"+t.getSubject());
                System.out.println(t.getOption());
                if(t.getIsAuto()==0){
                    System.out.println("判题:自动");
                }else{
                    System.out.println("判题:手动");
                    sum++;
                }
                System.out.println("请输入您的答案:");
                String str=sc.next();
                if(str.equals(t.getAnser())){
                    sum++;
                }
                System.out.println("-------------------------------------------");
            }
        }
        System.out.println("您的总分为:"+sum*20);
    }
}

(3)完善AdminView

public void menu(){
        System.out.println("1.查看所有试题");
        System.out.println("2.添加试题");
        System.out.println("3.修改试题");
        System.out.println("4.删除试题");
        System.out.println("5.参加测试");
        System.out.println("请选择:");
        int num=sc.nextInt();
        switch (num){
            case 1:
                testSubjectView.show();
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                testSubjectView.test();
                break;
            default:
                System.out.println("输入错误!请重新输入!");
                menu();
        }
        System.out.println("是否返回主菜单?y/n");
        String str=sc.next();
        if(str.equals("y")){
            menu();
        }
    }

(4)完善测试类

package com.sk.test;
​
import com.sk.dao.AdminDao;
import com.sk.dao.TestSubjectDao;
import com.sk.entity.Admin;
import com.sk.entity.TestSubject;
import com.sk.view.AdminView;
​
/**
 * ClassName: Test <br/>
 * Description: <br/>
 * date: 2021/11/25 16:15<br/>
 *
 * @author 斑马<br />
 */
public class Test {
    public static void main(String[] args) {
        Admin ad=new Admin("admin","admin","厨师长");
        AdminDao.admins[0]=ad;
        TestSubject t1=new TestSubject(1,"1+1=?","A 1 B 2 C 3 D 4","B","单选",0);
        TestSubject t2=new TestSubject(2,"2+1=?","A 1 B 2 C 3 D 4","C","单选",0);
        TestSubject t3=new TestSubject(3,"3+1=?","A 1 B 2 C 3 D 4","D","单选",0);
        TestSubject t4=new TestSubject(4,"4+1=?","A 1 B 2 C 3 D 5","D","单选",0);
        TestSubject t5=new TestSubject(5,"5+1=?","A 6 B 2 C 3 D 4","A","单选",0);
        TestSubject t6=new TestSubject(6,"6+1=?","A 7 B 2 C 3 D 4","A","单选",0);
        TestSubject t7=new TestSubject(7,"7+1=?","A 1 B 2 C 8 D 4","C","单选",0);
        TestSubjectDao.testSubjects[0]=t1;
        TestSubjectDao.testSubjects[1]=t2;
        TestSubjectDao.testSubjects[2]=t3;
        TestSubjectDao.testSubjects[3]=t4;
        TestSubjectDao.testSubjects[4]=t5;
        AdminView view=new AdminView();
        view.start();
    }
}
​有些代码暂时没有写,大家可以参考上边的代码把其他功能给实现了
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斑马有点困

原创不易,多谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值