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 CourseSelected = new ArrayList();
	
	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

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

package com.classselect;

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

public class AllCourse {
	List CourseList = new ArrayList();
	
	public void AddCourse(Course a) {
		this.CourseList.add(a);
	}
	
	public boolean CourseExist(String a) {
		for (int i=0;i0 && id<=a.mark) {
			return true;
		}
		return false;
		
	}
	
	public void PrintCourseList() {
		for (int i=0;i

下面是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 SCList = new ArrayList();
	
	public void AddStudent(Student a) {
		SCList.add(a);
		NowPos=SCList.size()-1;
	}
	
	
    public String StudentExist(int a) {
    	for (int i=0;ibb.ID) return 1;
		if (aa.ID

下面是主函数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
如果链接失效可以给[email protected]发邮件。
要注意的是代码里面有的方法压根就没有用。只是要用其他方法实现时候要写的。

其中有很多细节,有些细节我已经写出来了,但是有些细节没有写,我知道的细节如下:
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的有点多。以上都是新手的看法,很多东西可能有问题,仅供参考。如果您有什么看法也可以留言或评论,作为新手的我会认真学习的哦。

你可能感兴趣的:(java)