控制台制作教师学生日报管理系统
项目要求ArrayList类与java.util.Date等相关类应用
需求如:
设计一个教师学生日报信息管理系统,系统中包含两种用户(学生,老师),其中学生具备注册,登录,日报提交,查看自己提交的日报,修改已提交的日报功能,删除日报等功能;老师具备登录的功能(账号密码固定为softeem/admin123,无需注册),老师登录后可以查看所有学生提交的日报,以及查看当日学生提交的日报等功能.
具体实现功能
学生功能
- 注册
- 登录
- 提交日报
- 查看所有日报(自己提交的)
- 修改日报(根据日报id修改)
老师功能
- 登录
- 查看所有学生日报
- 查询指定学生的日报
- 删除指定学生日报
- 查询当前提交的日报(扩展功能:选做)
日报要求包含以下信息
- 今日收获
- 疑问
- 意见
- 提交时间
- 提交人
项目实施
- Java中类和类之间主要 是依赖关系 、关联关系、聚合关系、组合关系, 根据需求来看本系统中从老师类和学生类之间的关系为 和 学生类 到 日报 它们都是一对多关系 所以它们属于Java中平行关系中的聚合关系 。
- 由于初步学习Java我们先数组来对日报 ,学生,老师的信息进行存储,我们优先选择动态数组ArrayList来做,因为它是系统封装的动态数组,能够无限向数组添加对象,并且对对象的增删改可以调用封装好的方法实现,不用自己费力写。
- 首先我们把 几个基本的类属性和构造方法定义出来
- 日报类 Daysnew
- 学生类Student
- 学生管理类 StudentManage
- 教师类Teachar
- 教师类TeacharManage
- 程序入口Test
public class Daysnew {
private int id;
private String atext;//今日收获
private String btext;//今日疑问
private String ctext;//意见
private String datatime;//系统时间
private Student student;//学生对象
public Daysnew( Student student) {
this.atext = "今日收获";
this.btext = "今日疑问";
this.ctext = "意见";
this.datatime = dateTime();
this.student = student;
}
//这里还有一些set 、get 和重写toString()方法没给出
public String dateTime(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置时间输出格式
return df.format(new Date());//调用format方法返回一个时间 字符串类型
}
}
}
学生类Student
public class Student {
private int sno;//学号
private String sname;//学生姓名
private String spassword; //学生登录密码
private Teacher teacher; //定义一个老师对象
private Daysnew [] daysnew =new Daysnew[20]; //定义一个日报数组
private int count = 0; //日报计数器
public Student(int sno, String sname, String spassword,Teacher teacher) { //学生信息构造器
this.sno = sno;
this.sname = sname;
this.spassword = spassword;
this.teacher = teacher;
}
public void addDays(){ //添加日报
daysnew[count] =new Daysnew(this);
daysnew[count].setId(count);
count++;
}
//同样set 、get 和重写toString()方法没写
学生管理类 StudentManage 主要功能的实现
public class StudentManage {
ArrayList list =new ArrayList(); //创建一个存储学生信息的动态数组
int index =0; //计数器
public void addStu(Student s){ // 向动态数组中添加学生
list.add(s);
index++;
System.out.println("当前学生注册成功");
}
public void deleteStudaynews(int sno){ //删除指定学生的日报
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){ //1判断是否为空2判断是否为学生对象(没有也行为了严谨还写了比较好)
Student s = (Student)list.get(i); //重点 在将Student对象存入动态数组
//是会上转型即学生类型变成Object类型了,这样获取列表对象时get不到
//学生内部信息,所以需要下转型成Student对信息判断,下面一些方法同理
if (s.getSno() == sno) {
Daysnew [] dn = new Daysnew[s.getDaysnew().length];//实现删除学生所有日报我们可以创建一个新的日报数组替换原来的完成删除功能
System.arraycopy(dn,0, s.getDaysnew(), 0, s.getDaysnew().length);//调用系统arraycopy方法完成数组copy
System.out.println("该学生日报已经全部删除!");
}
}
}
}
public void deleteStu(int sno){ 删除学生信息
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){
Student s = (Student)list.get(i);
if (s.getSno() == sno) {
list.remove(i); //直接调用ArrayList的remove()方法即可删除学生对象
System.out.println("学号为:"+sno+" 的学生删除成功!");
}
}
}
}
public void addDays(Student s){ //添加从控制台输入信息到日报数组进行封装
s.addDays();
Scanner sc = new Scanner(System.in);
System.out.println("请写今日收获:");
String a = sc.nextLine();
s.getDaysnew()[s.getCount()-1].setAtext(a);//获取学生对象中日报数组中添加 “今日收获信息”
System.out.println("请写今日疑问:");
String b = sc.nextLine();
s.getDaysnew()[s.getCount()-1].setBtext(b);//同理添加“今日疑问”’
System.out.println("请写今日意见:");
String c = sc.nextLine();
s.getDaysnew()[s.getCount()-1].setCtext(c);//同理添加“意见”’
System.out.println("添加成功!");
}
public void listOut(){ //遍历显示所有学生日报信息
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){
Student s = (Student)list.get(i);
for (int j = 0; j < s.getDaysnew().length; j++) {
if (s.getDaysnew()[j] != null) {
System.out.println(s.getDaysnew()[j].toString());
}
}
}
}
}
public void listOut(int no){//重载方法输入学号显示一位学生的所有日报信息
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){
Student s = (Student)list.get(i);
for (int j = 0; j < s.getDaysnew().length; j++) {
if (s.getSno() ==no && s.getDaysnew()[j] != null ) {
System.out.println(s.getDaysnew()[j].toString());
}
}
}
}
}
public void findStuTxt(int no,int id){ //查找指定学号指定 日报id的日报信息
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){
Student s = (Student)list.get(i);
if (s.getSno() == no) {
for (int j = 0; j < s.getDaysnew().length; j++) {
if (s.getDaysnew()[j] != null && s.getDaysnew()[j].getId() == id) {
System.out.println(s.getDaysnew()[j].toString());
}
}
}
}
}
}
public void editStuTxt(int no,int id){
//按指定学号和指定日报id修改日报信息和findStuTxt类似
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null && list.get(i) instanceof Student){
Student s = (Student)list.get(i);
if (s.getSno() == no) {
for (int j = 0; j < s.getDaysnew().length; j++) {
if (s.getDaysnew()[j] != null && s.getDaysnew()[j].getId() == id) {
Scanner sc = new Scanner(System.in);
System.out.println("请写今日收获:");
String a = sc.nextLine();
s.getDaysnew()[j].setAtext(a);
System.out.println("请写今日疑问:");
String b = sc.nextLine();
s.getDaysnew()[j].setBtext(b);
System.out.println("请写今日意见:");
String c = sc.nextLine();
s.getDaysnew()[j].setCtext(c);
s.getDaysnew()[j].setDatatime(dateTime2());;
System.out.println("修改成功!");
System.out.println(s.getDaysnew()[j].toString());
}
}
}
}
}
}
public Student sLogin(){
//学生进行登录验证返回学生对象
System.out.println("请输入学生姓名 :");
Scanner sc1 =new Scanner(System.in);
String name = sc1.next();
System.out.println("请输入学生密码 :");
Scanner sc2 =new Scanner(System.in);
String pass = sc2.next();
for (int i = 0; i < list.size(); i++) {
Student s = (Student)list.get(i);
if(s !=null && s.getSpassword().equals(name) && s.getSpassword().equals(pass)){
System.out.println("学生登录成功!"+ "\n" );
return s;
}else {
continue;
}
}
System.out.println("登录失败,请从新输入");
return null;
}
public String dateTime2(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(new Date());
}
}
教师类Teachar
public class Teacher {
private String tname;//教师登录名
private String tpaddword;//教师登录密码
public Teacher(String tname, String tpaddword) {//构造方法
this.tname = tname;
this.tpaddword = tpaddword;
}
@Override
public int hashCode() { 重写hashCode()用来比较教师登录用户名密码
final int prime = 31;
int result = 1;
result = prime * result + ((tname == null) ? 0 : tname.hashCode());
result = prime * result + ((tpaddword == null) ? 0 : tpaddword.hashCode());
return result;
}
@Override
public boolean equals(Object obj) { 重写equals()用来比较教师登录用户名密码
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Teacher other = (Teacher) obj;
if (tname == null) {
if (other.tname != null)
return false;
} else if (!tname.equals(other.tname))
return false;
if (tpaddword == null) {
if (other.tpaddword != null)
return false;
} else if (!tpaddword.equals(other.tpaddword))
return false;
return true;
}
//同样set 、get 和重写toString()方法没写
}
教师类TeacharManage
public class TeacherManage {
ArrayList tlist =new ArrayList();
int count=0;
public void addTheacher(Teacher t){
tlist.add(t);
count++;
}
public boolean tLogin(String tn ,String tp){
//验证教师登录
for (int i = 0; i < tlist.size(); i++) {
if (tlist.get(i) !=null && tlist.get(i) instanceof Teacher) {
Teacher t = (Teacher)tlist.get(i);
if (t.getTname().equals(tn) && t.getTpaddword().equals(tp)) {
return true;
} else {
return false;
}
}
}
return false;
}
public void listThreachar(){
for (int i = 0; i <tlist.size(); i++) {
if (tlist.get(i) != null && tlist.get(i) instanceof Teacher) {
Teacher t = (Teacher)tlist.get(i);
System.out.println(t.toString());
}
}
}
}
程序入口Test
public class Test {
public void jugde(StudentManage sm){ //教师登录登录的封装
System.out.println("-----------------------------------
----- \n 1. 查看所有学生日报\n2. 查询指定学生的日报\n3. 删
除指定学生日报 \n 4.结束");
Scanner sc7 =new Scanner(System.in);
int key=sc7.nextInt();
switch (key) {
case 1:
sm.listOut();//调用StudentManage中的显示全部日报信息方法
jugde(sm); //方法递归重新选择
break;
case 2:
System.out.println("请输入需要查询学生的 编号:");
Scanner sc8 =new Scanner(System.in);
int tsno=sc8.nextInt();
sm.listOut(tsno);//调用StudentManage中的显示指定学号日报信息方法
jugde(sm);
break;
case 3:
System.out.println("请输入需要删除学生日报的 编号:");
Scanner sc9 =new Scanner(System.in);
int j=sc9.nextInt();
sm.deleteStudaynews(j);//调用StudentManage中的删除指定学生日报信息方法
jugde(sm);
break;
case 4:
System.out.println("欢迎下次使用!");
return;//结束教师登录
}
}
public void tMLogin(TeacherManage tm,StudentManage sm){
//学生登录的封装
Scanner sc4 =new Scanner(System.in);
System.out.println("请输入教师登录名:");
String tname=sc4.next();
Scanner sc5 =new Scanner(System.in);
System.out.println("请输入教师登录密码:");
String tpass=sc5.next();
if (tm.tLogin(tname,tpass)) {
System.out.println("教师登录成功!");
jugde(sm);
return;
} else {
System.out.println("教师登录失败,请重新登录!");
tMLogin(tm, sm);
return;
}
}
public void regist(StudentManage sm ,Teacher t){
//学生注册进行封装
Scanner sc1 =new Scanner(System.in);
System.out.println("请输入学生注册号码 注册名 注册密码 :");
int zno=sc1.nextInt();
String zname=sc1.next();
String zpass=sc1.next();
Student s1 = new Student(zno,zname,zpass,t);
sm.addStu(s1);
}
public void studnetJude(StudentManage sm,Student s){
//对下面面studnetlo学生登录输入即功能的辅助方法
Scanner sc8 =new Scanner(System.in);
System.out.println("---------------------------------------- \n 1. 添加日报\n2. 查看日报\n3. 修改日报 \n 4.切换登录");
int key2=sc8.nextInt();
switch (key2) {
case 1:
sm.addDays(s);
studnetJude(sm, s);// 添加日报
break;
case 2:
System.out.println("请输入需要查看到日报id:");
Scanner sc9 =new Scanner(System.in);
int j=sc9.nextInt();
sm.findStuTxt(s.getSno(), j);//查看日报
studnetJude(sm, s);
break;
case 3:
Scanner sc6 =new Scanner(System.in);
System.out.println(" 修改日报信息: 请输入日报id号");
int a1=sc6.nextInt();
sm.editStuTxt(s.getSno(),a1); //修改日报
studnetJude(sm, s);
break;
case 4:
return; //结束该学生登录
}
}
public void studnetlo(StudentManage sm){
Student s =sm.sLogin(); //登录并 录入日报
studnetJude(sm,s);
Scanner sc9 =new Scanner(System.in);
System.out.println("---------------------------------------- \n 1. 继续登录 \n 2.退出登录");
int key3=sc9.nextInt();
switch (key3) {
case 1:
studnetlo(sm);
break;
case 2:
return; //结束学生登录
}
}
public static void main(String[] args) {
Test tt = new Test(); //创建入口类对象
TeacherManage tm = new TeacherManage(); //创建教师管理类对象
Teacher t = new Teacher("softeem", "admin123");//初始化教师登录名密码
tm.addTheacher(t);//教师添加到教师管理类
StudentManage sm = new StudentManage();//创建学生管理类
tt.regist(sm, t);//学生1注册
tt.regist(sm, t);//学生2注册
sm.listOut(); //显示所有学生注册信息
System.out.println("--------------------------");
tt.studnetlo(sm); //调用封装的学生登录
tt.tMLogin(tm, sm); //调用封装的教师登录
}
}
在这里我们的教师学生日报管理系统已经写完了~~!
来看看成果吧 ^ v ^!
成果展示