对象数组
对象数组的声明
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();
}
}
有些代码暂时没有写,大家可以参考上边的代码把其他功能给实现了