JAVA模拟学生选课系统(附下载链接)

代码纠错:有读者反映代码中God类的代码没有找到
该类是调试过程中加上去的,那句话没有用,直接删掉就可以
/*********************************************************************/
偷偷打个广告
专业C,Java,Python,MySQL,单片机程序代写
有需要可以联系我哟,价格实惠,质量保证
/*********************************************************************/
大家好,我是WilliamCode,继高中C++的lowB学习之后,大一的我来学Java了。其实都是为了学Android才来学Java的。自己写了一个java模拟选课的作业,写一篇博客分享一下。
本篇文章为个人作品,转载请注明出处,并注明:WilliamCode真帅。(emmm,开个玩笑)

不说了,直接上代码。(下面有代码相关说明,以及我在写这段代码之后觉得的注意事项和一些感受)

*我是分割线
显示Course类,存储课程信息,静态变量mark用于给新输入的课程编代号。

package com.classselect;

public class Course {
	long ID;
	String name;
	
	public static int mark=0;
	
	public Course(String name) {
		this.ID=++mark;
		this.name=name;
	}
	public void ChangeId(int a) {
		this.ID=a;
	}
	public Course() {
	}
}

然后是Student类,其中CourseSelect是存储该学生已选课程的ArrayList。


package com.classselect;

import java.util.ArrayList;
import java.util.List;

public class Student {
	int ID;
	String name;
	List<Course> CourseSelected = new ArrayList<Course>();
	
	public Student(int num,String name) {
		this.ID=num;
		this.name=name;
	}
	
	public Student() {
		
	}
	public int compare(Student aa,Student bb) {
		if (aa.ID>bb.ID) return 1;
		if (aa.ID<bb.ID) return -1;
		return 1;
	}
}

然后是AllCourse类,用于存储待选课程。

package com.classselect;

import java.util.ArrayList;
import java.util.List;

public class AllCourse {
	List<Course> CourseList = new ArrayList<Course>();
	
	public void AddCourse(Course a) {
		this.CourseList.add(a);
	}
	
	public boolean CourseExist(String a) {
		for (int i=0;i<CourseList.size();i++) {
			Course tmp = (Course)CourseList.get(i);
			if (tmp.name == a) return true;
		}
		return false;
	}
	
	public boolean CourseExist(int id) {
		Course a=new Course();
		if (id>0 && id<=a.mark) {
			return true;
		}
		return false;
		
	}
	
	public void PrintCourseList() {
		for (int i=0;i<CourseList.size();i++) {
			Course a=(Course)CourseList.get(i);
			System.out.println(a.ID+" "+a.name);
		}
		if (CourseList.size()==0) {
			System.out.println("你还没有选择任何课程");
		}
	}

    public void CourseInit() {
		
		Course a = new Course("高等数学");
		CourseList.add(a);
		Course b = new Course("大学英语");
		CourseList.add(b);
		Course c = new Course("世界史");
		CourseList.add(c);
	}
    
    public String ReturnCourseName(int aa) {
    	Course a=new Course();
    	for (int i=0;i<CourseList.size();i++) {
    		a=(Course)CourseList.get(i);
    		if (a.ID==aa) break;
    	}
    	return a.name;
    }

}

下面是SCList(Student-Course List)类,存储多个学生及其已经选择的课程。

package com.classselect;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SCListGo {
	public static int NowPos = 0;
	List<Student> SCList = new ArrayList<Student>();
	
	public void AddStudent(Student a) {
		SCList.add(a);
		NowPos=SCList.size()-1;
	}
	
	
    public String StudentExist(int a) {
    	for (int i=0;i<SCList.size();i++) {
    		Student tmp2 = (Student)SCList.get(i);
    		if (a == tmp2.ID) {
    			NowPos=i;
    			return tmp2.name;
    		}
    	}
    return "111111";
    }

	public boolean StudentCourseExist(int CID) {
		Student b=(Student)SCList.get(NowPos);
		for (int i=0;i<b.CourseSelected.size();i++) {
			Course c=b.CourseSelected.get(i);
			if (c.ID==CID) return true;
		}
		return false;
	}

	public void CourseDelete(int CID) {
		Student b=SCList.get(NowPos);
		for (int i=0;i<b.CourseSelected.size();i++) {
			Course c=b.CourseSelected.get(i);
			if (c.ID==CID) {
				b.CourseSelected.remove(i);	
				return;
			}
		 }		
	}

	public void AddCourse(Course a) {
		Student b=(Student)SCList.get(NowPos);
		
	
		Course c=new Course();
		
		for (int i=0;i<b.CourseSelected.size();i++) {
			c=b.CourseSelected.get(i);		
		}
		
		b.CourseSelected.add(a);

		
		for (int i=0;i<b.CourseSelected.size();i++) {
			a=b.CourseSelected.get(i);
		}
		SCList.set(NowPos, b);
	}

	public static int Compare(Student aa,Student bb) {
		if (aa.ID>bb.ID) return 1;
		if (aa.ID<bb.ID) return -1;
		return 1;
	}
	public void PrintSCInfo() {
		int flag1=0;
		int flag2=0;
		for (int i=0;i<SCList.size();i++) {
			flag1=1;
			Student b = (Student)SCList.get(i);
			System.out.println("学号:"+b.ID+"  姓名:"+b.name);
			System.out.println("      已经选择了如下课程:");
			for (int j=0;j<b.CourseSelected.size();j++) {
				flag2=1;
				Course c=(Course)b.CourseSelected.get(j);
				System.out.println("        "+c.ID+" "+c.name);
			}
			if (flag2==0) {
				System.out.println("该学生还没有选择课程");
			}
		}
		if (flag1==0) {
			System.out.println("没有学生的选课信息");
		}
	}
	
	public void PrintSingleStudentInfo(int a) {
    	for (int i=0;i<this.SCList.size();i++) {
    		Student tmp2 = (Student)SCList.get(i);
    		if (tmp2.ID==a) {
    			for (int j=0;j<tmp2.CourseSelected.size();j++) {
    				Course b=tmp2.CourseSelected.get(j);
    				System.out.println(b.ID+"  "+b.name);
    			}
    		if (tmp2.CourseSelected.size()==0) {
    			System.out.println("你没有选择任何课程");
    		}
    		return;
    		}
    	}
	}
}

下面是主函数ToSelect类

package com.classselect;

import java.util.InputMismatchException;
import java.util.Scanner;

public class ToSelect {

	public static void main(String[] args) {
		//Init The Class
		AllCourse allcourse=new AllCourse();
		Student student=new Student();
		SCListGo e=new SCListGo();
		Scanner console=new Scanner(System.in);
		allcourse.CourseInit();
		
		
		
		int num;
		int id;
		String name;
		while(1==1) {
			System.out.println("欢迎来到gay理选课系统");
			System.out.println("请输入你的学号");
			num=console.nextInt();
			id=num;
			if (num == 99991111) {
				System.out.println("你好,管理员,请输入管理员密码");
				num=console.nextInt();
				int flag=0;
				while(num!=1120172954){
					System.out.println("管理员密码错误,请重新输入<输入54138退出管理员模式>");
					num=console.nextInt();
					if(num==54138) {
						flag=1;
						break;
					}
				}
			    if (flag==1) continue;
			    
			    //************************************管理员模式代码*****************************************
			    System.out.println("你好,管理员!请输入要执行的操作代码");
				while(1==1) {
					System.out.println("1 查看课程");
				    System.out.println("2 添加课程");
				    System.out.println("3 查看所有学生及选课信息");
				    System.out.println("4 退出管理员模式");
				    int tmp;
				    tmp=console.nextInt();
				    while (tmp<=0 || tmp>=5) {
				    	System.out.println("代码错误,请输入1到4之间的代码");
				    }
				    if (tmp == 4) break;
				    if (tmp == 1) {
				    	allcourse.PrintCourseList();
				    	System.out.println("**********************分割线***********************");
				    	continue;
				    }
				    String TmpName;
				    if (tmp == 2) {
				    	System.out.println("请输入要添加的课程,系统将自动分配代号");
				    	TmpName=console.next();
				    	if (allcourse.CourseExist(TmpName)==true) {
				    		System.out.println("课程已经存在");
				    		continue;
				    	}
				    	Course course=new Course(TmpName);
				    	allcourse.AddCourse(course);
				    	System.out.println("添加课程成功,课程代码"+course.ID+"  课程名称:"+course.name);
				    	System.out.println("**********************分割线***********************");
				    	continue;
				    }
				    if (tmp == 3) {
				    	e.PrintSCInfo();
				    	System.out.println("**********************分割线***********************");
				    	continue;
				    }
				}
			    continue;
			}
			
			
			name=e.StudentExist(num);
			if (name!="111111") {
				System.out.println("你好,"+name);
			}
			else {
				System.out.println("请输入你的姓名");
				name=console.next();
				System.out.println("你好,"+name+",你的学号是"+num+"。信息添加成功");
				student.name=name;
				student.ID=num;
				e.AddStudent(student);
			}
			while(1==1){
				System.out.println("请选择操作并输入操作代号");
				System.out.println("1 查看已选课程");
				System.out.println("2 选课");
				System.out.println("3 删除课程");
				System.out.println("4 退出");
				System.out.println("**********************分割线***********************");
				num=console.nextInt();
				if (num<=0 || num>=5)
				do {
					System.out.println("请输入1到3之间的整数");
					num=console.nextInt();
				}while(num<=0 || num >4);
				if(num==4) break;
				if (num == 1) {
					e.PrintSingleStudentInfo(id);
					System.out.println("**********************分割线***********************");
					continue;
				}
				else if (num == 2) {
					allcourse.PrintCourseList();
					while(1==1){
						System.out.println("请输入要选的课程代码,输入9999退出");
						int CID=console.nextInt();
						if(CID==9999) break;
						if (allcourse.CourseExist(CID)==false) {
							System.out.println("课程不存在");
							System.out.println("**********************分割线***********************");
							continue;
						}
						if (e.StudentCourseExist(CID)==true) {
							System.out.println("你已经选择了该课程");
							System.out.println("**********************分割线***********************");
							continue;
						}
						Course course=new Course();
						course.ID=CID;
						course.name=allcourse.ReturnCourseName(CID);
						e.AddCourse(course);
						System.out.println("你已经成功选择了该课程:"+CID+" "+course.name);
						System.out.println("**********************分割线***********************");
					}
				}
				else if (num == 3) {
					System.out.println("你的已选课程列表为");
					e.PrintSingleStudentInfo(id);
					while(1==1) {
						System.out.println("请输入要删除的课程代码,输入9999退出");
						int CID=console.nextInt();
						if (CID==9999) break;
						if (allcourse.CourseExist(CID)==false) {
							System.out.println("课程不存在");
							System.out.println("**********************分割线***********************");
							continue;
						}
						if (e.StudentCourseExist(CID)==false) {
							System.out.println("你并未选择了该课程");
							System.out.println("**********************分割线***********************");
							continue;
						}
						e.CourseDelete(CID);	
						System.out.println("你成功的删除了课程"+CID+" "+allcourse.ReturnCourseName(CID));
						System.out.println("**********************分割线***********************");
					}
				}
			}	
		}	
		}	
}

完了,这就是所有东西。
这个工程可以下载,我分享在了百度云,下载之后导入就可以了
百度云地址:https://pan.baidu.com/s/1i5iVtCL
提取密码:g6vm
如果链接失效可以给1327804001@qq.com发邮件。
要注意的是代码里面有的方法压根就没有用。只是要用其他方法实现时候要写的。

其中有很多细节,有些细节我已经写出来了,但是有些细节没有写,我知道的细节如下:
1、输入错误时应该用try-catch抛出错误并处理
2、打印学生信息时,给学生、课程列表列表排序,用sort(),重写compare方法可以自定义排序规则
3、判断arraylist中有没有某个学生信息,可以用contain来判断,重写一下equals()就可以,但是contains内部也是由循环来遍历list比较的,所以这里我直接手动遍历了

然后就是我写这个工程的一点体会,作为新手:

1、一定要先写出整个project的思路图。很多资深的开发者用那个什么软件直接画,画好之后就可以直接生成基本的代码结构
2、如果思路不是那么成熟。先建立最基本的类,比如这个模拟选课系统里面我先写Student、Course类的属性和初始化方法;之后先去写主函数,当遇到要调用的方法时就去写其他具体的类。
3、对于新手来说可能这个project是一个比较大的任务。以前学c++老是觉得应该一次写完,但一个比较大的工程可能是很多人一起写,或者需要一个人分多次写很多次。所以程序最好条理清晰,变量命名也必须合乎规范。
4、遇见问题时一定要会用debug程序。新手一定要学会用debug,用断点调试可以大大提高效率。
5、对于一个要用多次的类的实例,不要只在开头实例化一个,后面都用。这样做可以省空间,但可能出现错误,莫名其妙;应该用之前再实例化。
6、一定要理解类、对象、属性、方法之间的关系,要明白只有类实例化成为对象之后才有内存来存储数据。所以在main函数里,基本每一个类都要实例化一次,整个main里面只有一个的对象可以在main方法开头写在一起。
7、新手学习的话,基础一定要扎实,否则写代码这个不会那个有问题还得去查,很浪费时间,比如equal函数怎么重写,比如List之中嵌套set要重写hashset啊,特别细节。

emmm,BB的有点多。以上都是新手的看法,很多东西可能有问题,仅供参考。如果您有什么看法也可以留言或评论,作为新手的我会认真学习的哦。

  • 18
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值