首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >学生信息系统

学生信息系统
EN

Code Review用户
提问于 2012-12-05 19:47:23
回答 3查看 41.2K关注 0票数 8

我做了一个小项目,我只是想知道我是否能为这个项目添加更多的功能,例如,更多的类等等。是否有更好的方法来显示我的结果,以及我能做什么错误处理?

我还想知道什么是将继承添加到这个项目中的最佳方式,我正在考虑一个EveningCourse类或PostGradUnderGrad类。最好的办法是什么?

用户输入学生姓名、年龄、年份和学生号码。

代码语言:javascript
运行
复制
package david;

public class Student 
{

    private String name;
    private int age;
    private int year;
    private String studentNum;



    public Student(String name, int age, int year, String studentNum) 
    {

        this.name = name;
        this.age = age;
        this.year = year;
        this.studentNum = studentNum;
    }

    // Setters and getters (Name, Age, Year and Student Number)

    public String getName() // name
    {
        return name;
    }

    public void setName(String name) 
    {
        this.name = name;
    }

    public int getAge() // age
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public int getYear() // year
    {
        return year;
    }

    public void setYear(int year) 
    {
        this.year = year;
    }

    public String getstudentNum() // studentNum
    {
    return studentNum;
    }

    public void setstudentNum(String studentNum) 
    {
        this.studentNum = studentNum;
    }

}

package david;

// David Needham - G00263842.
// Student information program.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class TestStudents 
{

    public static void main(String[] args) throws IOException 
    {

    System.out.println("============" + "=================");
    System.out.println("Students " + "Personal Details");
    System.out.println("============" + "=================");

    String name;
    int age;
    int year;
    String studentNum;

    List<Student> studentsList = new ArrayList<Student>(); 

    for (int i = 0; i < 2; i++) 
    {

    int studentNumber = (i + 1);

    System.out.println("");
    System.out.println("Please enter " + "data for student " + studentNumber);

    InputStreamReader converter = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(converter);

    System.out.println("Enter Student "+ studentNumber + " Name:"); 
    name = in.readLine();

    System.out.println("Enter Student " + studentNumber + " Age (Integer):");
    age = Integer.valueOf(in.readLine());

    System.out.println("Enter Student " + studentNumber + " Year (Integer):");
    year = Integer.valueOf(in.readLine());

    System.out.println("Enter Student " + studentNumber + " Student Number:"); 
    studentNum = in.readLine();

    Student student = new Student(name, age, year, studentNum);

    studentsList.add(student); // add student
    }

    for (int j = 0; j < studentsList.size(); j++)
    {

        Student st = studentsList.get(j);

        System.out.println("Student : " + (j + 1));
        System.out.println("Name: " + st.getName() + " - Age: " + st.getAge() + " - Year: " + st.getYear() + " - Student Number: " + st.getstudentNum());
    }

    }
}
EN

回答 3

Code Review用户

回答已采纳

发布于 2012-12-05 20:38:35

是的,您可以向项目添加更多功能。您可以在许多不同的指导机构,如增加课程的学生和注册。

至于错误处理,您可以在Student类的set函数中添加一个检查,以检查格式或内容,并根据它们是否通过验证返回一个布尔值。例如,由于studentnum是一个字符串,您可以检查字母和数字的格式是否正确,如果有某种格式的话。

您还可以在从用户读取值的代码周围使用try-catch块。或者验证用户是否为每个条目输入了一个可接受的值,例如检查当用户被要求输入年龄时,检查是否确实输入了一个数字。

票数 4
EN

Code Review用户

发布于 2013-10-02 13:16:26

一些普通的东西。您的空白和缩进的使用是混乱的,修复它!

Java通常使用修改后的K&R样式,并在同一行中使用开头大括号,如下所示:

代码语言:javascript
运行
复制
function test() {
    if (condition) {
        // Stuff
    } else {
        // Stuff
    }
}
代码语言:javascript
运行
复制
package david;

在这种情况下,这是次要的和/或不必要的,但请记住,包名应该给出一些信息包,f.e。是谁写的。

代码语言:javascript
运行
复制
package com.yourcompany.department.package;
package com.gmail.youremailname.package;
代码语言:javascript
运行
复制
public String getName() // name

只要有可能使用JavaDoc,它就可以被各种工具和IDE所使用,并且可以使您的生活更加轻松。

代码语言:javascript
运行
复制
/**
 * The (full, first and last) name of the Student.
 */
public String getName()

您可以添加一个空构造函数并直接填充对象,而不是创建局部变量和创建对象。

代码语言:javascript
运行
复制
Student student = new Student();
student.setName(fromInput);
student.setAge(fromInput);
...
代码语言:javascript
运行
复制
List<Student> studentsList = new ArrayList<Student>(); 

这个变量最好命名为students。从复数中,您已经可以感觉到这是某种集合,通过查看定义就可以知道它是一个列表。没有任何匈牙利符号的必要。

您可以将这些值的读取提取到它自己的类中,这样您就可以这样做:

代码语言:javascript
运行
复制
InputReader reader = new InputReader(System.out, System.in);
//Inside the for
Student student = new Student();
student.setName(reader.getString("Please enter the name: "));
student.setAge(reader.getInt("Please enter the ager: "));
...
代码语言:javascript
运行
复制
for (int j = 0; j < studentsList.size(); j++)
    {

        Student st = studentsList.get(j);

使用适当的循环,在本例中是一个for each

代码语言:javascript
运行
复制
for(Student student : studentsList) {
代码语言:javascript
运行
复制
private String studentNum;

这个变量更好地命名为ID,这将使对象更加清晰:

代码语言:javascript
运行
复制
student.getID();
student.setID(id);
代码语言:javascript
运行
复制
studentsList.add(student); // add student

评论应该主要解释为什么你做某事的方式,以及部分如何。您不需要解释“明显”的事情,比如递增一个整数。在这种情况下,您的注释与您的代码完全相同,实际上,代码更精确。

代码语言:javascript
运行
复制
public static void main(String[] args) throws IOException 

这是baaaad。应用程序应该优雅地处理异常,main()不应该抛出异常。

票数 3
EN

Code Review用户

发布于 2013-10-03 09:29:42

你可以让学生成为一个抽象的类,然后有UnderGrad和PostGrad类作为它的具体实现,并有他们自己的变体来实现基本方法。

这样你就可以灵活地容纳其他类型的学生了。例如,在开始读本科之前,学生们要上一门简短的语言课程。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/19341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档