博主:👍不许代码码上红
欢迎:🐋点赞、收藏、关注、评论。
格言: 大鹏一日同风起,扶摇直上九万里。文章目录
- 一、JAVA面向对象程序设计
- 1.1 工程分包
- 1.2 各类属性及功能
- 二、数据初始化
- 三、学生模块
- 四、教师模块
- 五、管理员模块
- 六、项目目录结构
运用JAVA面向对象程序设计构建一个网上作业管理系统,以其改变过去传统的学生递交作业的方式,老师批改作业的方式,让学生递交作业更加灵活,大大减轻了老师的工作量和学生的学习任务,极大地提高了老师的工作效率和学生的学习效率。用户登录时有三种身份可供选择,分别为学生、教师和管理员。学生有提交作业、查看成绩、查看作业任务公告等功能,老师有发布作业、批改作业、发布成绩等功能,管理员有添加、删除非管理员用户信息,添加、删除公告等功能。
系统总体功能模块如图:
系统JAVA工程总体组成包含四个包:实体包、工具包、测试包与UI包:
(1)com.hy.entity:实体包,包括学生、教师、管理员、作业要求、作业结果五个实体类。
(2)com.hy.util:工具包,包括通过创建集合来初始化学生、教师、管理员、作业要求、作业结果等信息的类。
(3)com.hy.demo:测试包,包括各实体类的Demo类,各类通过构造函数调用工具包的类来实现初始化类。
(4)com.hy.UI:UI包,包括各类对用户的操作提示界面,使整个系统要求操作简捷,方便用户使用。
各实体类属性
其中学生、教师、管理员这三个实体类包括姓名,编号,账号,账户密码等基本信息,而作业要求类是指由教师直接发布的相关作业要求、截止时间等具体要求,作业结果类则是指学生上传的作业结果以及学号等相关信息,具体如下:
(1)学生类:
a.学号 b.姓名 c.账号 d.账户密码
(2)教师类:
a.职工号 b.姓名 c.教学科目 d.账号 e.账号密码
(3)管理员类:
a.职工号 b.姓名 c.账号 d.账户密码
(4)作业要求类:
a.科目 b.作业要求 c.截止时间
(5)作业结果类:
a.科目 b.学号 c.答案 d.题目 e.分数
各实体类方法
五个实体类除了管理员类之外均包含各属性的设置以及各属性的获得的方法,除此之外,学生、教师、管理员还有其他功能的方法,具体如下:
(1) 学生类:
a.各属性的设置 b.各属性的获得 c.提交作业 d.查看作业任务 e.查看分数
(2) 教师类:
a. 各属性的设置 b.各属性的获得 c.布置作业 d.批改作业 e.查看上交情况
(3) 管理员类:
a.增加、删除非管理员用户
(4)作业类:
a.各属性的设置 b.各属性的获得
(5)作业结果类:
a.各属性的设置 b.各属性的获得
没有用到数据库,所有数据需要初始化添加。
主要代码
Init.java
public class Init {public ArrayList manageList = new ArrayList(); public ArrayList stuList = new ArrayList();public ArrayList teacherList = new ArrayList();public ArrayList homeworkList = new ArrayList();public ArrayList answerList = new ArrayList();public Init() {// TODO Auto-generated constructor stubmanageInit();StuInit();TeacherInit();HomeworkInit();}/*** 管理员初始化*/public void manageInit() {manageList.add(new Manage("HY","123","000"));}/*** 学生初始化*/public void StuInit() { Student stu1=new Student("stu","001","001");Student stu2=new Student("YSL", "002", "002");stuList.add(stu1);stuList.add(stu2);}/*** 教师初始化*/public void TeacherInit() {Teacher t1=new Teacher("LB", "100", "100", "数据结构");Teacher t2=new Teacher("WYL", "200", "200", "C语言");teacherList.add(t1);teacherList.add(t2);}/*** 作业+答案初始化*/public void HomeworkInit() {Homework homework1 = new Homework(1,"c语言", "按时完成", "10月7日", "WYL");Homework homework2 = new Homework(2,"数据结构", "按时完成", "12月26日", "LB");Answer answer1 = new Answer(1);Answer answer2 = new Answer(2);homeworkList.add(homework1);homeworkList.add(homework2);answerList.add(answer1);answerList.add(answer2);}
}
学生用户可实现功能:
a.提交作业
b.查看成绩
c.查看作业任务公告
主要代码
public class Student extends Person implements Ilogin{public Student(String name,String count,String password) {// TODO Auto-generated constructor stubsuper(name, count, password);}public Student() {// TODO Auto-generated constructor stub}public int login(String[] user, ArrayList> student) {// TODO Auto-generated method stubfor (Object person : student) {if(((Student)person).count.equals(user[0])&&((Student)person).password.equals(user[1]))return 1; }return 0;}/*** 学生提交作业* @param flag flag=2为上交作业,flag=4为查看未交作业* @param input Scanner对象* @param stuCount 学号* @param tname 教师名字* @param homeworkList 作业集合对象* @param answerList 答案集合对象*/public int upHomeWork(int flag,Scanner input,String stuCount,String tname,ArrayList homeworkList,ArrayList answerList) {ArrayList homeWorkId = new ArrayList();ArrayList homeWorkDemand = new ArrayList();ArrayList subjectList = new ArrayList();for(int i = 0; i < homeworkList.size(); i++){if((homeworkList.get(i)).getTname().equals(tname)){homeWorkId.add((homeworkList.get(i)).getId());homeWorkDemand.add(homeworkList.get(i).getDemand());subjectList.add(homeworkList.get(i).getSubject());}}int n = 1;//列表序号int[] temp = new int[answerList.size()];temp[0] = 0;System.out.println("序号\t科目\t要求\t");for(int j = 0; j < answerList.size(); j++){for (int m = 0; m < homeWorkId.size(); m++ ) {if(answerList.get(j).getHomeworkId() == homeWorkId.get(m) && answerList.get(j).getGrade() == 0 && answerList.get(j).getAnswer()==null){temp[n] = j;System.out.println(n+"\t"+subjectList.get(m)+"\t"+homeWorkDemand.get(m)+"\t");temp[0] = 1;n++;}}}if (temp[0] == 0){System.out.println("你没有未完成的作业!!");return 1;} if (flag == 4) return 0;//此时选择的是查看没完成的任务System.out.print("请选择你要做的题的序号:");int p = input.nextInt();if(p>n || p<=0) {System.out.println("输入有误!");return 0;}for(int q = 0; q < answerList.size(); q++){if(q == temp[p]){System.out.print("请输入你的答案:");answerList.get(q).setSno(stuCount);answerList.get(q).setAnswer(input.next());System.out.println("作业完成!");return 0;}}return 0;}/*** 学生查看成绩* @param stuCount 学号* @param homeworkList 作业集合对象* @param answerList 答案集合对象*/public void viewGrade(String stuCount,ArrayList homeworkList,ArrayList answerList) {ArrayList homeWorkId = new ArrayList();ArrayList gradeList = new ArrayList();for(int i = 0; i < answerList.size(); i++){if((answerList.get(i)).getSno().equals(stuCount)){homeWorkId.add((answerList.get(i)).getHomeworkId());gradeList.add((answerList.get(i)).getGrade());}}int n = 1;//列表序号System.out.println("序号\t要求\t科目\t分数\t");for(int j = 0; j < homeWorkId.size(); j++){for (int m = 0; m < homeworkList.size(); m++ ) {if((homeworkList.get(m)).getId() == homeWorkId.get(j)){System.out.println(n+"\t"+(homeworkList.get(m)).getDemand()+"\t"+(homeworkList.get(m)).getSubject()+"\t"+gradeList.get(j)+"\t");n++;}}}}
}
学生登陆:
UI中MainFrame会调用Student类中的login方法,当账号密码输入与初始数据一致时,会进入UI.student_MainFrame并传入学生参数
学生修改密码:
student_MainFrame通过调用UI.changPwdFrame继承父类Person的changePwd方法实现对密码的修改
学生上传作业:
UI中的student_MainFrame通过调用UI.upHomeWorkFrame实现上传作业的功能
学生查看成绩:
UI中的student_MainFrame通过调用viewGradeFrame实现上传作业的功能
教师用户可实现功能:
a.发布作业信息
b.批改作业
主要代码
public class Teacher extends Person implements Ilogin {private String subject;public Teacher(String name,String count,String password,String subject) {// TODO Auto-generated constructor stubsuper(name, count, password);this.subject=subject;}public Teacher() {// TODO Auto-generated constructor stub}public String getSubject(){return subject;}public void setSubject(String subject){this.subject=subject;}/*** 教师登陆* @param user 用户名和密码的数组* @param obj 用户的集合对象* @return 1代表登陆成功*/public int login(String[] user, ArrayList> obj) {// TODO Auto-generated method stubfor (Object person : obj) {if(((Teacher)person).count.equals(user[0])&&((Teacher)person).password.equals(user[1]))return 1;}return 0;}/*** 通过教师姓名判断该教师是否存在* @param tname 教师姓名* @param obj 教师集合对象* @return 存在返回true*/public boolean isExietTeacher(String tname,ArrayList obj) {for (Teacher teacher : obj) {if(teacher.getName().equals(tname)){return true;}}return false;}/*** 通过教师编号返回教师名字* @param tcount 教师编号* @param obj 教师集合对象* @return 教师名字 教师所教科目*/public String[] getNameAndSubjectByCount(String tcount,ArrayList obj) {String[] data = new String[2];for (Object person : obj) {if(((Teacher)person).count.equals(tcount)){data[0] = ((Teacher)person).getName();data[1] = ((Teacher)person).getSubject();return data;}}return null;}/*** 教师添加作业* @param tcount 教师编号* @param demand 题目/要求* @param overtime 截止日期* @param homeworkList 作业集合对象* @param teacherList 教师集合对象* @return 作业发布成功返回true*/public boolean addHomeWork(String tcount,String demand,String overtime,ArrayList homeworkList,ArrayList teacherList,ArrayList answerList) {String data[] = getNameAndSubjectByCount(tcount, teacherList);if(homeworkList.add(new Homework(homeworkList.size()+1, data[1], demand, overtime, data[0]))){//注意这里长度不在加1,因为前面作业已经添加成功,长度已经加1answerList.add(new Answer(homeworkList.size()));return true;}return false;}/*** 教师查看自己已经发布的作业* @param tcount 教师编号* @param homeworkList 作业集合对象* @param teacherList 教师集合对象*/public void viewPushedHomework(String tcount,ArrayList homeworkList,ArrayList teacherList) {String data[] = getNameAndSubjectByCount(tcount, teacherList);System.out.println("序号\t要求\t截至日期\t");for (int i = 0; i < homeworkList.size(); i++) {if((homeworkList.get(i)).getTname().equals(data[0])){System.out.println(i+"\t"+(homeworkList.get(i)).getDemand()+"\t"+(homeworkList.get(i)).getOvertime()+"\t");}}}/*** 教师批改作业* @param input Scanner对象* @param tcount 教师编号* @param homeworkList 作业集合对象* @param teacherList 教师集合对象* @param answerList 答案集合对象*/public void checkHomework(Scanner input,String tcount,ArrayList homeworkList,ArrayList teacherList,ArrayList answerList) {if(answerList.size() != 0){ArrayList homeWorkId = new ArrayList();ArrayList homeWorkDemand = new ArrayList();String data[] = getNameAndSubjectByCount(tcount, teacherList);for (int i = 0; i < homeworkList.size(); i++) {if((homeworkList.get(i)).getTname().equals(data[0])){homeWorkId.add((homeworkList.get(i)).getId()); //通过老师的名字得到他布置的题的题号homeWorkDemand.add(homeworkList.get(i).getDemand());//通过老师的名字得到该题的题目要求}}int n = 1;//列表序号int[] temp = new int[answerList.size()];System.out.println("序号\t要求\t答案\t分数\t");for(int j = 0; j < answerList.size(); j++){for (int m = 0; m < homeWorkId.size(); m++ ) {if(answerList.get(j).getHomeworkId() == homeWorkId.get(m) //该题号分数为0,则输出让老师打分&& answerList.get(j).getGrade() == 0){temp[n] = j;String answer = answerList.get(j).getAnswer();if(answerList.get(j).getAnswer() == null) answer = "";System.out.println(n+"\t"+homeWorkDemand.get(m)+"\t"+answer+"\t"+answerList.get(j).getGrade()+"\t");n++;}}}System.out.print("请选择你要打分的序号:");int p = input.nextInt();if(p>n || p<=0) {System.out.println("输入有误!");return;}for(int q = 0; q < answerList.size(); q++){if(q == temp[p]){System.out.print("请输入你要打的分数:");answerList.get(q).setGrade(input.nextInt());System.out.println("打分成功!");break;}}}else{System.out.println("学生未提交任何作业!");}}
}
教师登陆:
UI中MainFrame会调用Teacher类中的login方法,当账号密码输入与初始数据一致时,会进入UI.teacher_MainFrame并传入学生参数
教师上传作业任务:
UI中的teacher_MainFrame通过调用UI.addHomeworkFrame实现上传作业的功能
教师查看自己已发布作业:
UI中的teacher_MainFrame通过调用viewPushedHomeworkFrame实现上传作业的功能
管理员用户可实现功能:
a.添加、删除学生教师用户信息
b.添加、删除公告
主要代码
public class Manage extends Person implements Ilogin{public Manage(String name,String count,String password) {// TODO Auto-generated constructor stubsuper(name, count, password);}public Manage() {// TODO Auto-generated constructor stub}/*** 管理员登陆* @param user 用户名和密码的数组* @param obj 用户的集合对象* @return 1代表登陆成功*/public int login(String[] user, ArrayList> manager) {// TODO Auto-generated method stubfor (Object person : manager) {if(((Manage)person).getCount().equals(user[0]) && ((Manage)person).getPassword().equals(user[1]))return 1;}return 0;}/*** 管理员添加学生* @param name 学生姓名* @param count 学生学号* @param password 学生密码* @param stuList 学生集合对象* @return 添加成功返回true*/public boolean add_student(String name,String count,String password,ArrayList stuList){for (Student student : stuList) {if(student.getCount().equals(count)){System.out.println("该学号已经存在!!");return false;}}if(stuList.add(new Student(name, count, password)))return true;else return false;}/*** 管理员添加老师* @param name 老师姓名* @param count 老师编号* @param password 老师密码* @param subject 老师所教科目* @param teacherList 老师集合对象* @return 添加成功返回true*/public boolean add_teacher(String name,String count,String password,String subject,ArrayList teacherList) {for (Teacher teacher : teacherList) {if (teacher.getCount().equals(count)) {System.out.println("该教职工编号已经存在!!");return false;}}if(teacherList.add(new Teacher(name, count, password,subject)))return true;else return false;}}
管理员添加学生:
manage_MainFrame通过实现Manage类中add_student方法,调用UI中add_StuFrame的静态界面方法
用刚添加的学生学号登录
添加成功!
添加教师与添加学生一样,自己尝试。
正常用IDEA创建java项目即可。
完整项目代码
链接:https://pan.baidu.com/s/1J6HDRI1pVNoEZeFHKPCJ4w
提取码:9527