最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

JAVA学生成绩管理系统实验报告

来源:动视网 责编:小OO 时间:2025-09-23 23:57:04
文档

JAVA学生成绩管理系统实验报告

中南大学《面向对象技术实验报告》姓名:学号:专业班级:指导教师:学院:实验题目:学生成绩管理系统一、设计目的●掌握面向对象程序设计的基本思路和方法。●利用所学的基本知识和技能,解决简单的面向对象程序设计问题。二、内容及要求主要功能如下:1.添加学生信息功能:添加一个学生的基本信息,包括学号、姓名,性别;2.添加课程信息功能:添加一个课程的基本信息,包括课程号、课程名称;3.添加考试成绩功能:添加考试成绩:输入一个学生的学号,输入一个课程号,输入分数;4.统计功能:输入姓名,能显示某学生各门科目
推荐度:
导读中南大学《面向对象技术实验报告》姓名:学号:专业班级:指导教师:学院:实验题目:学生成绩管理系统一、设计目的●掌握面向对象程序设计的基本思路和方法。●利用所学的基本知识和技能,解决简单的面向对象程序设计问题。二、内容及要求主要功能如下:1.添加学生信息功能:添加一个学生的基本信息,包括学号、姓名,性别;2.添加课程信息功能:添加一个课程的基本信息,包括课程号、课程名称;3.添加考试成绩功能:添加考试成绩:输入一个学生的学号,输入一个课程号,输入分数;4.统计功能:输入姓名,能显示某学生各门科目
中南大学

《面向对象技术实验报告》

                   

姓    名:                        

学    号:                        

专业班级:                        

指导教师:                        

学    院:                        

实验题目: 学生成绩管理系统

一、设计目的

●掌握面向对象程序设计的基本思路和方法。

●利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

二、内容及要求

主要功能如下:

1.添加学生信息功能:添加一个学生的基本信息,包括学号、姓名,性别;

2.添加课程信息功能:添加一个课程的基本信息,包括课程号、课程名称; 

3. 添加考试成绩功能:添加考试成绩:输入一个学生的学号,输入一个课程号,输入分数; 

4.统计功能:输入姓名,能显示某学生各门科目的课程号和分数。

 

注: 自学《教材》前14章,利用所学到的Java编程知识和编程技巧,设计一个实际的应用软件,初步认识软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为后续课程和以后的工程实践打下良好的基础。

三、核心代码

1、主类(程序的入口)

  

public class Main {

    

    //程序入口,主函数

    public static void main(String[] args) {

        Main ma=new Main();//实例化

        ma.zhiXing();//调用方法

    }

    

    /**

     * 执行,判断的方法

     */

    public void zhiXing(){

        System.out.println("\欢迎来到徐兴豪学生成绩管理系统");//开始执行,致欢迎词

        operating();

    }

    /**

     * 选择操作和处理操作的方法

     */

    private void operating(){

        choseOperating();//选择操作

        dealOperating();//处理操作

    }

    /**

     * 选择操作,可以在每次完成操作之后又出现

     */

    private void choseOperating(){

        System.out.println("请选择你想要的操作(输入数字并按回车键):");//选择操作

        System.out.println("0:退出    1:添加学生信息    2:添加课程信息    3:添加考试成绩    4:统计");

    }

    /**

     * 处理操作,根据扫描的命令来执行相应的模块

     */

    private void dealOperating(){

        //生成一个扫描器,扫描用户输入的命令;System.in返回的是一个InputStream

        Scanner sc=new Scanner(System.in);

        int i=sc.nextInt();

        switch (i) {

        case 0:

            System.out.println("你已经退出系统了!!");

            System.exit(0);//退出系统

            break;

        case 1:

            System.out.println("\欢迎进入<添加学生信息>");

            addStudent();

            break;

        case 2:

            System.out.println("\欢迎进入<添加课程信息>");

            addCourse();

            break;

        case 3:

            System.out.println("\欢迎进入<添加考试成绩>");

            addGrade();

            break;

        case 4:

            System.out.println("\欢迎进入<统计>");

            tongji();

            break;

        default:

            System.out.println("输入有误,请重新输入");

            choseOperating();

            dealOperating();//调用本身,监听再次输入的结果

            break;

        }

    }

    /**

     * 添加学生的方法

     * 扫描需要填入的信息

     */

    private void addStudent() {

        Scanner sc=new Scanner(System.in);

        System.out.println("学号:");

        int sno=sc.nextInt();//int型的值

        System.out.println("姓名:");

        String sname=sc.next();//string型的值

        System.out.println("性别:");

        String sex=sc.next();

        int i=addOrNot(sc);

        if(i==1){//如果添加

            Student stu=new Student(String.valueOf(sno),sname,sex);//创建一个学生对象

            String contentStr=stu.contentStr();//返回连接的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_STUDENT, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addStudent();

            }

        }

    }

    /**

     * 添加课程的方法

     * 扫描需要填入的信息

     */

    private void addCourse() {

        Scanner sc=new Scanner(System.in);

        System.out.println("课程编号:");

        int cno=sc.nextInt();//int型的值

        System.out.println("课程名称:");

        String cname=sc.next();//string型的值

        int i=addOrNot(sc);

        if(1==i){//如果添加

            Course cou=new Course(String.valueOf(cno),cname);//创建一个课程对象

            String contentStr=cou.contentStr();//要插入的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_COURSE, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addCourse();

            }

        }

    }

    /**

     * 添加成绩的方法

     * 扫描需要填入的信息

     */

    private void addGrade() {

        Scanner sc=new Scanner(System.in);

        System.out.println("学生学号:");

        int sno=sc.nextInt();//int型的值

        System.out.println("课程编号:");

        int cno=sc.nextInt();//int型的值

        System.out.println("学科成绩:");

        float grade=sc.nextFloat();//int型的值

        int i=addOrNot(sc);

        if(1==i){//如果添加

            Grade gra=new Grade(String.valueOf(sno),String.valueOf(cno),String.valueOf(grade));//创建一个成绩对象

            String contentStr=gra.contentStr();//要插入的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_GRADE, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addGrade();

            }

        }

    }

    /**

     * 统计方法

     * 扫描需要填入的信息

     * 输入学生姓名,显示各门科目的课程号cno和成绩grade

     */

    private void tongji() {

        System.out.println("请输入需要统计的学生的姓名:");

        Scanner sc=new Scanner(System.in);

        String sname=sc.next();

        int result=isStuIn(sname);

            if(0==result){

                System.out.println("该姓名不存在,请返回主目录创建该学生!!!");

            }else if(-1==result){

                System.out.println("该姓名存在,但是没有相关的课程信息,请返回主目录创建成绩等信息!!!");

            }else if(1==result){

                System.out.println("恭喜恭喜,查找成功,请选择其他操作!!!");

            }

            operating();//选择操作

    }

    /**

     * 判断是否列表中有这个学生的方法

     * 除非存在该姓名,并且

     * 返回值  0:不存在该姓名  1:正常可以输出

     * -1,存在姓名,但是不存在相应的数据

     */

    public int isStuIn(String sname){

        //获得学生列表

     ArrayList stuList=FileRead.getStuList();

        

        for(int i=0;i            if(stuList.get(i).getSname().equals(sname)){//如果存在该姓名

                String sno=stuList.get(i).getSno();//得到该学生的序号

                if(!isSnoInGra(sno)){//如果返回false说明有该学生姓名,没有相关的课程信息

                    return -1;

                }else

                    return 1;

            }

        }

        return 0;

    }

    /**

     *判断该学号是否在成绩列表中(要查的学生在学生列表中)

     * @param sno

     * @return

     */

    public boolean isSnoInGra(String sno){

        //获得成绩列表

     ArrayList graList=FileRead.getGraList();

     ArrayList tonList=new ArrayList();

        for(int i=0;i            if(sno.equals(graList.get(i).getSno())){//如果两个列表的学号相等则遍历该学生的信息

                TongJi tj=new TongJi(graList.get(i).getCno(),graList.get(i).getGrade());

                tonList.add(tj);//加入到列表

            }

        }

        if(tonList.size()>0){//如果有数据,则遍历打印出来

            //打印需要的信息

            System.out.println("----结果----");

            for(int i=0;i                System.out.println("课程编号:"+tonList.get(i).getCno()+"    学科成绩:"+tonList.get(i).getGrade());

            }

            System.out.println();

            return true;

        }else  //没有数据

        return false;

    }

    /**

     * 是否添加学生,课程,成绩(3者可公用)

     * 1表示添加,0表示取消

     */

    private int addOrNot(Scanner sc){

        System.out.println("输入1确认添加,输入0取消添加");

        int i=sc.nextInt();

        if(1==i){

            System.out.println("确认添加");

        }else if(0==i){//若取消添加则返回上机

            System.out.println("取消添加");

            operating();

        }else{

            System.out.println("输入有误,请重新输入");

            addOrNot(sc);

        }

        return i;

    }

}

2、数据类(定义实现了各功能)

(1)添加课程

   public class Course {

    private String cno;//课程号

    private String cname;//课程名

    

    //构造函数

    public Course() {

    }

    public Course(String cno, String cname) {

        this.cno = cno;

        this.cname = cname;

    }

    /**

     * 用于将Course类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return cno++cname+"\\n";

    }

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Course [cname=" + cname + ", cno=" + cno + "]";

    }

    

    //get和set方法

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getCname() {

        return cname;

    }

    public void setCname(String cname) {

        this.cname = cname;

    }

    

}

(2)添加成绩

public class Grade {

    private String sno;//学生学号

    private String cno;//课程编号

    private String grade;//成绩

    //构造函数

    public Grade() {

    }

    public Grade(String sno, String cno, String grade) {

        this.sno = sno;

        this.cno = cno;

        this.grade = grade;

    }

    /**

     * 依据从文件中读取的一行字符串解剖成一个学生实体对象

     * @param contentStr

     */

    public Grade(String contentStr){

        String[] field=contentStr.split();

        this.setSno(field[0]);

        this.setCno(field[1]);

        this.setGrade(field[2]);

    }

    /**

     * 用于将Grade类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return sno++cno++grade+"\\n";

    }

    

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Grade [cno=" + cno + ", grade=" + grade + ", sno=" + sno + "]";

    }

    

    //get和set方法

    public String getSno() {

        return sno;

    }

    public void setSno(String sno) {

        this.sno = sno;

    }

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getGrade() {

        return grade;

    }

    public void setGrade(String grade) {

        this.grade = grade;

    }

    

}

(3)添加学生信息

  public class Student {

    private String sno;//学号

    private String sname;//学生姓名

    private String sex;//性别

    

    //构造函数

    public Student(){}

    public Student(String sno, String sname, String sex) {

        this.sno = sno;

        this.sname = sname;

        this.sex = sex;

    }

    /**

     * 依据从文件中读取的一行字符串解剖成一个学生实体对象

     * @param contentStr

     */

    public Student(String contentStr){

        String[] field=contentStr.split();

        this.setSno(field[0]);

        this.setSname(field[1]);

        this.setSex(field[2]);

    }

    /**

     * 用于将student类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return sno++sname++sex+"\\n";

    }

    

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Student [sex=" + sex + ", sname=" + sname + ", sno=" + sno

                + "]";

    }

    

    // set和get方法

    public String getSno() {

        return sno;

    }

    public void setSno(String sno) {

        this.sno = sno;

    }

    public String getSname() {

        return sname;

    }

    public void setSname(String sname) {

        this.sname = sname;

    }

    public String getSex() {

        return sex;

    }

    public void setSex(String sex) {

        this.sex = sex;

    }

}

(4)统计查成绩

   public class TongJi {

    private String cno;//课程编号

    private String grade;//成绩

    

    //重构函数

    public TongJi(String cno, String grade) {

        this.cno = cno;

        this.grade = grade;

    }

    

    @Override

    public String toString() {

        return "TongJi [cno=" + cno + ", grade=" + grade + "]";

    }

    //get和set方法

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getGrade() {

        return grade;

    }

    public void setGrade(String grade) {

        this.grade = grade;

    }

    

}

3、FileIO类(对信息输入到文件和从文件读取数据)

(1)写文件

public class FileWrite {

    

    /**

     * 将内容写入文件的方法

     * @param filePath:要写入的目标文件

     * @param contentStr:要写入的内容

     * @return:写入的成败

     */

    public static boolean wirteIn2File(String filePath,String contentStr){

        File file=new File(filePath);//根据路劲实例化文件

        OutputStream ous;

        try {

            ous = new FileOutputStream(file,true);//true表示能够在文件的尾部追加内容

            DataOutputStream dos=new DataOutputStream(ous);//封装一下以便写入

            byte[] data=contentStr.getBytes();//得到字符串的字节

            dos.write(data, 0, data.length);//写入

        } catch (Exception e) {

            e.printStackTrace();

            return false;//若有什么异常则表示失败

        }

        return true;

    }

}

(2)读文件

public class FileRead {

    /**

     * 获得学生信息列表的方法

     * @return

     */

    public static ArrayList getStuList(){

     ArrayList stuList=new ArrayList();//创建链表对象

        DataInputStream dis=readFromFile(FileConfig.FILE_STUDENT);//得到文件数据输入流对象

        String txt;

        try {

            txt = dis.readLine();//一行一行的读

            while(txt!=null){

                Student stu=new Student(txt);//根据构造函数解剖成一个学生实体对象

                stuList.add(stu);//加入到列表

                txt = dis.readLine();//不为空就继续读取字符串

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return stuList;

    }

    public static ArrayList getGraList(){

     ArrayList graList=new ArrayList();

        DataInputStream dis=readFromFile(FileConfig.FILE_GRADE);

        String txt;

        try {

            txt = dis.readLine();

            while(txt!=null){

                Grade stu=new Grade(txt);

                graList.add(stu);

                txt = dis.readLine();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return graList;

    }

    /**

     * 依据文件路劲获得封装后的数据输入流的方法

     * @param filePath

     * @return

     */

    public static DataInputStream readFromFile(String filePath){

        DataInputStream dis;

        File file=new File(filePath);

        try {

            InputStream ins=new FileInputStream(file);

            dis=new DataInputStream(ins);//传入InputStream对象实例化,得到数据流

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

        return dis;

    }

}

四、运行结果

1、添加学生信息

2、添加课程信息

3、添加成绩信息

五、完整源代码

package xxh.main;

import java.util.ArrayList;

import java.util.Scanner;

import xxh.FileIO.FileConfig;

import xxh.FileIO.FileRead;

import xxh.FileIO.FileWrite;

import xxh.datas.Course;

import xxh.datas.Grade;

import xxh.datas.Student;

import xxh.datas.TongJi;

/**

 * 程序入口类

 *

 */

public class Main {

    

    //程序入口,主函数

    public static void main(String[] args) {

        Main ma=new Main();//实例化

        ma.zhiXing();//调用方法

    }

    

    /**

     * 执行,判断的方法

     */

    public void zhiXing(){

        System.out.println("\欢迎来到徐兴豪学生成绩管理系统");//开始执行,致欢迎词

        operating();

    }

    /**

     * 选择操作和处理操作的方法

     */

    private void operating(){

        choseOperating();//选择操作

        dealOperating();//处理操作

    }

    /**

     * 选择操作,可以在每次完成操作之后又出现

     */

    private void choseOperating(){

        System.out.println("请选择你想要的操作(输入数字并按回车键):");//选择操作

        System.out.println("0:退出    1:添加学生信息    2:添加课程信息    3:添加考试成绩    4:统计");

    }

    /**

     * 处理操作,根据扫描的命令来执行相应的模块

     */

    private void dealOperating(){

        //生成一个扫描器,扫描用户输入的命令;System.in返回的是一个InputStream

        Scanner sc=new Scanner(System.in);

        int i=sc.nextInt();

        switch (i) {

        case 0:

            System.out.println("你已经退出系统了!!");

            System.exit(0);//退出系统

            break;

        case 1:

            System.out.println("\欢迎进入<添加学生信息>");

            addStudent();

            break;

        case 2:

            System.out.println("\欢迎进入<添加课程信息>");

            addCourse();

            break;

        case 3:

            System.out.println("\欢迎进入<添加考试成绩>");

            addGrade();

            break;

        case 4:

            System.out.println("\欢迎进入<统计>");

            tongji();

            break;

        default:

            System.out.println("输入有误,请重新输入");

            choseOperating();

            dealOperating();//调用本身,监听再次输入的结果

            break;

        }

    }

    /**

     * 添加学生的方法

     * 扫描需要填入的信息

     */

    private void addStudent() {

        Scanner sc=new Scanner(System.in);

        System.out.println("学号:");

        int sno=sc.nextInt();//int型的值

        System.out.println("姓名:");

        String sname=sc.next();//string型的值

        System.out.println("性别:");

        String sex=sc.next();

        int i=addOrNot(sc);

        if(i==1){//如果添加

            Student stu=new Student(String.valueOf(sno),sname,sex);//创建一个学生对象

            String contentStr=stu.contentStr();//返回连接的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_STUDENT, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addStudent();

            }

        }

    }

    /**

     * 添加课程的方法

     * 扫描需要填入的信息

     */

    private void addCourse() {

        Scanner sc=new Scanner(System.in);

        System.out.println("课程编号:");

        int cno=sc.nextInt();//int型的值

        System.out.println("课程名称:");

        String cname=sc.next();//string型的值

        int i=addOrNot(sc);

        if(1==i){//如果添加

            Course cou=new Course(String.valueOf(cno),cname);//创建一个课程对象

            String contentStr=cou.contentStr();//要插入的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_COURSE, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addCourse();

            }

        }

    }

    /**

     * 添加成绩的方法

     * 扫描需要填入的信息

     */

    private void addGrade() {

        Scanner sc=new Scanner(System.in);

        System.out.println("学生学号:");

        int sno=sc.nextInt();//int型的值

        System.out.println("课程编号:");

        int cno=sc.nextInt();//int型的值

        System.out.println("学科成绩:");

        float grade=sc.nextFloat();//int型的值

        int i=addOrNot(sc);

        if(1==i){//如果添加

            Grade gra=new Grade(String.valueOf(sno),String.valueOf(cno),String.valueOf(grade));//创建一个成绩对象

            String contentStr=gra.contentStr();//要插入的字符串

            boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_GRADE, contentStr);//判断是否插入数据成功

            if(isSucceed){//如果成功

                System.out.println("添加数据成功:");//告诉别人成功了,选择其他操作

                System.out.println();//空一格

                operating();

            }else{//添加数据不成功,重新输入

                System.out.println("添加失败,请重新加入");

                addGrade();

            }

        }

    }

    /**

     * 统计方法

     * 扫描需要填入的信息

     * 输入学生姓名,显示各门科目的课程号cno和成绩grade

     */

    private void tongji() {

        System.out.println("请输入需要统计的学生的姓名:");

        Scanner sc=new Scanner(System.in);

        String sname=sc.next();

        int result=isStuIn(sname);

            if(0==result){

                System.out.println("该姓名不存在,请返回主目录创建该学生!!!");

            }else if(-1==result){

                System.out.println("该姓名存在,但是没有相关的课程信息,请返回主目录创建成绩等信息!!!");

            }else if(1==result){

                System.out.println("恭喜恭喜,查找成功,请选择其他操作!!!");

            }

            operating();//选择操作

    }

    /**

     * 判断是否列表中有这个学生的方法

     * 除非存在该姓名,并且

     * 返回值  0:不存在该姓名  1:正常可以输出

     * -1,存在姓名,但是不存在相应的数据

     */

    public int isStuIn(String sname){

        //获得学生列表

     ArrayList stuList=FileRead.getStuList();

        

        for(int i=0;i            if(stuList.get(i).getSname().equals(sname)){//如果存在该姓名

                String sno=stuList.get(i).getSno();//得到该学生的序号

                if(!isSnoInGra(sno)){//如果返回false说明有该学生姓名,没有相关的课程信息

                    return -1;

                }else

                    return 1;

            }

        }

        return 0;

    }

    /**

     *判断该学号是否在成绩列表中(要查的学生在学生列表中)

     * @param sno

     * @return

     */

    public boolean isSnoInGra(String sno){

        //获得成绩列表

     ArrayList graList=FileRead.getGraList();

     ArrayList tonList=new ArrayList();

        for(int i=0;i            if(sno.equals(graList.get(i).getSno())){//如果两个列表的学号相等则遍历该学生的信息

                TongJi tj=new TongJi(graList.get(i).getCno(),graList.get(i).getGrade());

                tonList.add(tj);//加入到列表

            }

        }

        if(tonList.size()>0){//如果有数据,则遍历打印出来

            //打印需要的信息

            System.out.println("----结果----");

            for(int i=0;i                System.out.println("课程编号:"+tonList.get(i).getCno()+"    学科成绩:"+tonList.get(i).getGrade());

            }

            System.out.println();

            return true;

        }else  //没有数据

        return false;

    }

    /**

     * 是否添加学生,课程,成绩(3者可公用)

     * 1表示添加,0表示取消

     */

    private int addOrNot(Scanner sc){

        System.out.println("输入1确认添加,输入0取消添加");

        int i=sc.nextInt();

        if(1==i){

            System.out.println("确认添加");

        }else if(0==i){//若取消添加则返回上机

            System.out.println("取消添加");

            operating();

        }else{

            System.out.println("输入有误,请重新输入");

            addOrNot(sc);

        }

        return i;

    }

}

package xxh.datas;

/**

 * 课程实体类

 *

 */

public class Course {

    private String cno;//课程号

    private String cname;//课程名

    

    //构造函数

    public Course() {

    }

    public Course(String cno, String cname) {

        this.cno = cno;

        this.cname = cname;

    }

    /**

     * 用于将Course类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return cno++cname+"\\n";

    }

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Course [cname=" + cname + ", cno=" + cno + "]";

    }

    

    //get和set方法

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getCname() {

        return cname;

    }

    public void setCname(String cname) {

        this.cname = cname;

    }

    

}

package xxh.datas;

/**

 * 考试成绩实体类

 *

 */

public class Grade {

    private String sno;//学生学号

    private String cno;//课程编号

    private String grade;//成绩

    //构造函数

    public Grade() {

    }

    public Grade(String sno, String cno, String grade) {

        this.sno = sno;

        this.cno = cno;

        this.grade = grade;

    }

    /**

     * 依据从文件中读取的一行字符串解剖成一个学生实体对象

     * @param contentStr

     */

    public Grade(String contentStr){

        String[] field=contentStr.split();

        this.setSno(field[0]);

        this.setCno(field[1]);

        this.setGrade(field[2]);

    }

    /**

     * 用于将Grade类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return sno++cno++grade+"\\n";

    }

    

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Grade [cno=" + cno + ", grade=" + grade + ", sno=" + sno + "]";

    }

    

    //get和set方法

    public String getSno() {

        return sno;

    }

    public void setSno(String sno) {

        this.sno = sno;

    }

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getGrade() {

        return grade;

    }

    public void setGrade(String grade) {

        this.grade = grade;

    }

    

}

package xxh.datas;

/**

 * 学生信息实体类

 *

 */

public class Student {

    private String sno;//学号

    private String sname;//学生姓名

    private String sex;//性别

    

    //构造函数

    public Student(){}

    public Student(String sno, String sname, String sex) {

        this.sno = sno;

        this.sname = sname;

        this.sex = sex;

    }

    /**

     * 依据从文件中读取的一行字符串解剖成一个学生实体对象

     * @param contentStr

     */

    public Student(String contentStr){

        String[] field=contentStr.split();

        this.setSno(field[0]);

        this.setSname(field[1]);

        this.setSex(field[2]);

    }

    /**

     * 用于将student类的属性的值封装在一个字符串内以便添加到文件中

     * @return:要写入文件的字符串

     * 写成以下格式以便利用String的正则匹配分解得到实体

     */

    public String contentStr(){

        return sno++sname++sex+"\\n";

    }

    

    //覆盖toString方法,便于打印测试

    public String toString() {

        return "Student [sex=" + sex + ", sname=" + sname + ", sno=" + sno

                + "]";

    }

    

    // set和get方法

    public String getSno() {

        return sno;

    }

    public void setSno(String sno) {

        this.sno = sno;

    }

    public String getSname() {

        return sname;

    }

    public void setSname(String sname) {

        this.sname = sname;

    }

    public String getSex() {

        return sex;

    }

    public void setSex(String sex) {

        this.sex = sex;

    }

}

package xxh.datas;

/**

 * 统计类

 * 其实可以用grade类,但是为了区分,还是单独用个类的好

 *

 */

public class TongJi {

    private String cno;//课程编号

    private String grade;//成绩

    

    //重构函数

    public TongJi(String cno, String grade) {

        this.cno = cno;

        this.grade = grade;

    }

    

    @Override

    public String toString() {

        return "TongJi [cno=" + cno + ", grade=" + grade + "]";

    }

    //get和set方法

    public String getCno() {

        return cno;

    }

    public void setCno(String cno) {

        this.cno = cno;

    }

    public String getGrade() {

        return grade;

    }

    public void setGrade(String grade) {

        this.grade = grade;

    }

    

}

package xxh.FileIO;

/**

 * 文件路径的参数类

 *若以后要更换文件路径,可在这里修改

 */

public class FileConfig {

    

    //文件的路径

    public final static String FILE_STUDENT="E:\\\\student.txt";    //学生

    public final static String FILE_COURSE="E:\\\\course.txt";    //课程

    public final static String FILE_GRADE="E:\\\\grade.txt";        //成绩

}

package xxh.FileIO;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import xxh.datas.Grade;

import xxh.datas.Student;

/**

 * 读取文件类

 *

 */

public class FileRead {

    /**

     * 获得学生信息列表的方法

     * @return

     */

    public static ArrayList getStuList(){

     ArrayList stuList=new ArrayList();//创建链表对象

        DataInputStream dis=readFromFile(FileConfig.FILE_STUDENT);//得到文件数据输入流对象

        String txt;

        try {

            txt = dis.readLine();//一行一行的读

            while(txt!=null){

                Student stu=new Student(txt);//根据构造函数解剖成一个学生实体对象

                stuList.add(stu);//加入到列表

                txt = dis.readLine();//不为空就继续读取字符串

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return stuList;

    }

    public static ArrayList getGraList(){

     ArrayList graList=new ArrayList();

        DataInputStream dis=readFromFile(FileConfig.FILE_GRADE);

        String txt;

        try {

            txt = dis.readLine();

            while(txt!=null){

                Grade stu=new Grade(txt);

                graList.add(stu);

                txt = dis.readLine();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return graList;

    }

    /**

     * 依据文件路劲获得封装后的数据输入流的方法

     * @param filePath

     * @return

     */

    public static DataInputStream readFromFile(String filePath){

        DataInputStream dis;

        File file=new File(filePath);

        try {

            InputStream ins=new FileInputStream(file);

            dis=new DataInputStream(ins);//传入InputStream对象实例化,得到数据流

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

        return dis;

    }

}

package xxh.FileIO;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

/**

 * 将内容写进文件的处理类

 *

 */

public class FileWrite {

    

    /**

     * 将内容写入文件的方法

     * @param filePath:要写入的目标文件

     * @param contentStr:要写入的内容

     * @return:写入的成败

     */

    public static boolean wirteIn2File(String filePath,String contentStr){

        File file=new File(filePath);//根据路劲实例化文件

        OutputStream ous;

        try {

            ous = new FileOutputStream(file,true);//true表示能够在文件的尾部追加内容

            DataOutputStream dos=new DataOutputStream(ous);//封装一下以便写入

            byte[] data=contentStr.getBytes();//得到字符串的字节

            dos.write(data, 0, data.length);//写入

        } catch (Exception e) {

            e.printStackTrace();

            return false;//若有什么异常则表示失败

        }

        return true;

    }

}

文档

JAVA学生成绩管理系统实验报告

中南大学《面向对象技术实验报告》姓名:学号:专业班级:指导教师:学院:实验题目:学生成绩管理系统一、设计目的●掌握面向对象程序设计的基本思路和方法。●利用所学的基本知识和技能,解决简单的面向对象程序设计问题。二、内容及要求主要功能如下:1.添加学生信息功能:添加一个学生的基本信息,包括学号、姓名,性别;2.添加课程信息功能:添加一个课程的基本信息,包括课程号、课程名称;3.添加考试成绩功能:添加考试成绩:输入一个学生的学号,输入一个课程号,输入分数;4.统计功能:输入姓名,能显示某学生各门科目
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top