代码纠错:有读者反映代码中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的有点多。以上都是新手的看法,很多东西可能有问题,仅供参考。如果您有什么看法也可以留言或评论,作为新手的我会认真学习的哦。