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

XueSheng frame1=new
XueSheng();
frame1.setResizable(true);
}
else
if((f1.getText()).equals("tang")&&(f2.get
Text()).equals("123456"))
{
JOptionPane.showMessageDialog(null,"
public void actionPerformed(ActionEvent
e)
{
f1.setText("");
f2.setText("");
f1.requestFocus();
}
}
class Close implements ActionListener{
public void actionPerformed(ActionEvent e)
}
class Enter implements ActionListener{ public voidactionPerformed(ActionEvent e)
{
if((f1.getText()).equals("tang")&&(f2.get
Text()).equals("051141"))
{
JOptionPane.showMessageDialog(null,"登录成功!用户权限是管理员");
数据流组成: 课程编号(文本)、课程名称(文本)、 教师(文本)等。
4)数据流名:返回信息 说明:根据用户在学生信息维护的时候所填写的信 息存入了数据库之后。
JAVA学生成绩管理系统实验报告

中南大学《面向对象技术实验报告》姓名: 学号: 专业班级:指导教师: 学院:实验题目:学生成绩管理系统一、设计目的●掌握面向对象程序设计的基本思路和方法。
●利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
二、内容及要求主要功能如下: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("\t欢迎来到徐兴豪学生成绩管理系统");//开始执行,致欢迎词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返回的是一个InputStreamScanner 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("\t欢迎进入<添加学生信息>");addStudent();break;case 2:System.out.println("\t欢迎进入<添加课程信息>");addCourse();break;case 3:System.out.println("\t欢迎进入<添加考试成绩>");addGrade();break;case 4:System.out.println("\t欢迎进入<统计>");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=newGrade(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<Student> stuList=FileRead.getStuList();for(int i=0;i<stuList.size();i++){if(stuList.get(i).getSname().equals(sname)){//如果存在该姓名String sno=stuList.get(i).getSno();//得到该学生的序号if(!isSnoInGra(sno)){//如果返回false说明有该学生姓名,没有相关的课程信息return -1;}elsereturn 1;}}return 0;}/***判断该学号是否在成绩列表中(要查的学生在学生列表中)* @param sno* @return*/public boolean isSnoInGra(String sno){//获得成绩列表ArrayList<Grade> graList=FileRead.getGraList();ArrayList<TongJi> tonList=new ArrayList<TongJi>();for(int i=0;i<graList.size();i++){if(sno.equals(graList.get(i).getSno())){//如果两个列表的学号相等则遍历该学生的信息TongJi tj=newTongJi(graList.get(i).getCno(),graList.get(i).getGrade());tonList.add(tj);//加入到列表}}if(tonList.size()>0){//如果有数据,则遍历打印出来//打印需要的信息System.out.println("----结果----");for(int i=0;i<tonList.size();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) {o = cno;ame = 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) {o = cno;}public String getCname() {return cname;}public void setCname(String cname) {ame = 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;o = 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) {o = 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) {o = cno;this.grade = grade;}@Overridepublic String toString() {return"TongJi [cno=" + cno + ", grade=" + grade + "]";}//get和set方法public String getCno() {return cno;}public void setCno(String cno) {o = 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<Student> getStuList(){ArrayList<Student> stuList=new ArrayList<Student>();//创建链表对象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<Grade> getGraList(){ArrayList<Grade> graList=new ArrayList<Grade>();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("\t欢迎来到徐兴豪学生成绩管理系统");//开始执行,致欢迎词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返回的是一个InputStreamScanner 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("\t欢迎进入<添加学生信息>");addStudent();break;case 2:System.out.println("\t欢迎进入<添加课程信息>");addCourse();break;case 3:System.out.println("\t欢迎进入<添加考试成绩>");addGrade();break;case 4:System.out.println("\t欢迎进入<统计>");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=newGrade(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<Student> stuList=FileRead.getStuList();for(int i=0;i<stuList.size();i++){if(stuList.get(i).getSname().equals(sname)){//如果存在该姓名String sno=stuList.get(i).getSno();//得到该学生的序号if(!isSnoInGra(sno)){//如果返回false说明有该学生姓名,没有相关的课程信息return -1;}elsereturn 1;}}return 0;}/***判断该学号是否在成绩列表中(要查的学生在学生列表中)* @param sno* @return*/public boolean isSnoInGra(String sno){//获得成绩列表ArrayList<Grade> graList=FileRead.getGraList();ArrayList<TongJi> tonList=new ArrayList<TongJi>();for(int i=0;i<graList.size();i++){if(sno.equals(graList.get(i).getSno())){//如果两个列表的学号相等则遍历该学生的信息TongJi tj=newTongJi(graList.get(i).getCno(),graList.get(i).getGrade());tonList.add(tj);//加入到列表}}if(tonList.size()>0){//如果有数据,则遍历打印出来//打印需要的信息System.out.println("----结果----");for(int i=0;i<tonList.size();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) {o = cno;ame = 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) {o = cno;}public String getCname() {return cname;}public void setCname(String cname) {ame = 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;o = 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) {o = 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) {o = cno;this.grade = grade;}@Overridepublic String toString() {return"TongJi [cno=" + cno + ", grade=" + grade + "]";}//get和set方法public String getCno() {return cno;}public void setCno(String cno) {o = 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<Student> getStuList(){ArrayList<Student> stuList=new ArrayList<Student>();//创建链表对象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<Grade> getGraList(){ArrayList<Grade> graList=new ArrayList<Grade>();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学生信息管理系统实验报告(共10篇)

java学生信息管理系统实验报告(共10篇)JAVA学生信息管理系统实验报告JAVA程序设计实验报告学号:姓名:班级:实验、Java课程设计--------学生信息管理系统一、实验目的1.掌握Java基本语法2.理解面向对象编程特点3.理解Java I/O编程4.掌握Java图形界面编程5.掌握Java与不同数据库进行连接二、预习内容Java的基本语法知识、类和对象、Java Swing图形界面编程、Java I/O处理以及Java与数据库连接操作三、实验设备与环境通过局域网互联,安装Windows 2000/XP操作系统环境的JDK1.6,my eclipse或者EditPlus编程工具。
并安装MySQL数据库四、实验内容编写并调试运行Java程序,进行设计,掌握Java开发的基础。
五、实验任务设计学生信息管理系统。
要求包括1. 登陆模块:设立超级管理员权限,用户可以根据不同的权限登陆系统,超级管理员可以对学生信息进行增、删、改、查操作。
而普通用户只可以查找学生信息。
2. 包括学生添加信息模块、学生信息删除模块、学生信息修改模块和学生信息查询模块3.对于管理员,可以对管理员进行添加、删除以及修改密码等操作。
六、实验报告(要求独立完成参考程序的代码、编译、调试与运行)1、程序清单:1.1程序模块清单package Pan;import java.awt.event.ItemListener;import javax.swing.*;import ponent;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.InputEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.*;import java.awt.Color;import java.text.DecimalFormat;import java.sql.*;import java.sql.Date;import java.awt.*;import java.util.Vector;public class Res{/*** @param args*/public static void main(String[] args){FirstWindow win =new FirstWindow(学生信息管理系统); }}class FirstWindow extends JFrame implements ActionListener {JMenuBar menubar;JMenu menu1,menu2,menu3,menu4;public final JMenuItem a11,a12,a13,a14,a15,a16,a17; public final JMenuItem a21,a22,a23,a24;public final JMenuItem a3;public final JMenuItem a4;public final JButton btn;JPanel pnl;JLabel label;boolean flag;FirstWindow(String s){setTitle(s);setSize(400,400);setLocation(100,100);setVisible(true);setDefaultCloseOperation(3);pnl=new JPanel();this.getContentPane().add(pnl);pnl.setLayout(new BorderLayout());label=new JLabel(欢迎使用学生管理系统,JLabel.CENTER);label.setForeground(Color.red);pnl.add(label,BorderLayout.CENTER);menubar=new JMenuBar();menu1=new JMenu(使用);menu2=new JMenu(用户管理);menu3=new JMenu(帮助);menu4=new JMenu(退出);a11=new JMenuItem(管理员登录);a12=new JMenuItem(查询学生信息);a13=new JMenuItem(更改学生信息);a14=new JMenuItem(删除学生信息);a15=new JMenuItem(添加学生信息);a16=new JMenuItem(超级管理员登录);篇二:java学生成绩管理系统实验报告JAVA课内实验报告学生成绩管理系统一. 实验目的及实验环境实验目的:在如今的高校日常管理当中,学生成绩管理系统就是其中非常重要的一环,特别是当前学生规模大,课程门类多,校区分散等实际情况,学生成绩管理系统更具有非常大的实际应用意义。
java学生成绩管理系统课程设计报告

目录1设计目的及内容要求 (1)2 系统总体设计 (1)3 系统详细设计 (2)4 运行结果及分析 (18)致谢 (22)参考文献 (22)简单学生成绩管理系统的设计与实现1设计目的及内容要求1、设计目的:巩固和加深学生对高级语言程序设计课程的基本知识的理解和掌握,掌握java语言编程和程序调试的基本技能,利用java语言进行基本的软件设计,提高运用java语言解决实际问题的能力。
2、内容要求实现学生成绩的管理(增、删、改、查询、持久化、成绩排序、成绩统计等功能),在文件中增加、删除、学生信息,根据学号查询、修改学生信息,统计功能求每个人的总分并按从高到低排序,通过这些操作对文件中的信息保存。
2 系统总体设计成功登陆系统以后,出现成绩管理界面,系统初始化,可对学生成绩进行增加、删除、查询、修改、统计,进入相应界面进行成绩管理,退出系统自动保存本次操作内容,保存信息。
简易流程图:3 系统详细设计①创建Student类,设置变量及对应方法Student.java代码:package keshe;import java.io.Serializable;public class Student implements Serializable{private String name;private int num;private int yuwen;private int shuxue;private int java;private int sum=0;public Student(){}public Student(String name, int num, int yuwen, int shuxue, int java) {super(); = name;this.num = num;this.yuwen = yuwen;this.shuxue = shuxue;this.java = java;}public String getName() {return name;}public void setName(String name) { = name;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getYuwen() {return yuwen;}public void setYuwen(int yuwen) {this.yuwen = yuwen;}public int getShuxue() {return shuxue;}public void setShuxue(int shuxue) {this.shuxue = shuxue;}public int getJava() {return java;}public void setJava(int java) {this.java = java;}public int getSum() {return sum;}public void setSum(int sum) {this.sum = sum;}public String toString() {return"Student [name=" + name + ", num=" + num + ", yuwen=" + yuwen+ ", shuxue=" + shuxue + ", java=" + java + ", sum=" + sum+ "]";}}②Student管理类StuC,创建对应方法,实现对Student对象的操作(增、删、改、查询、持久化、成绩排序、成绩统计等功能)供其对象调用。
java成绩管理系统的实训总结报告

java成绩管理系统的实训总结报告Java成绩管理系统实训总结报告一、实训目标本次实训的目标是利用Java语言开发一个成绩管理系统,该系统能够实现对学校成绩的录入、查询、修改和删除等基本操作。
通过本次实训,我希望能够加深对Java语言的了解,提高编程能力,并熟悉软件开发的基本流程。
二、实训内容在本次实训中,我主要完成了以下几个部分的工作:1. 需求分析:首先对成绩管理系统的需求进行了详细的分析,确定了系统的基本功能和数据结构。
2. 系统设计:根据需求分析的结果,设计了数据库表结构和系统的主要功能模块。
3. 系统实现:使用Java语言实现了系统的各个功能模块,包括界面设计和后台逻辑处理。
4. 测试与调试:对系统进行了详细的测试,确保各个功能都能正常运行,并对出现的问题进行了调试和修复。
三、遇到的问题和解决方案在实训过程中,我遇到了以下几个问题:1. 数据库连接问题:最初在连接数据库时,出现了连接失败的情况。
经过检查,发现是连接字符串的配置出现了错误。
通过仔细检查并参考相关资料,最终解决了这个问题。
2. 界面设计问题:在界面设计中,最初版本的界面不够美观和易用。
通过学习和使用相关的UI设计工具和框架,我对界面进行了优化,使其更加美观和易用。
3. 数据验证问题:在处理数据时,没有对用户输入的数据进行有效的验证,导致出现了一些异常情况。
我通过添加数据验证代码,确保了数据的合法性和准确性。
四、实训收获与反思通过本次实训,我深入了解了Java语言在软件开发中的应用,提高了编程能力,并熟悉了软件开发的基本流程。
同时,我也意识到了在开发过程中需要注意的一些问题,如需求分析的准确性、代码的规范性和可维护性等。
在未来的学习和工作中,我将继续努力提高自己的技能和能力,以更好地适应社会和企业的需求。
此外,我也意识到了团队合作的重要性。
在实训过程中,我们需要相互协作、共同解决问题,才能按时完成项目。
在未来,我将更加注重团队合作,发挥每个人的优势,提高工作效率。
java学生成绩管理系统报告

Java学生成绩管理系统报告简介本文将介绍一个基于Java开发的学生成绩管理系统。
该系统旨在帮助学校和教师高效管理学生的成绩信息,包括录入、查询、统计和分析等功能。
开发环境和工具•Java编程语言•IntelliJ IDEA集成开发环境•MySQL数据库功能需求1. 学生信息管理•录入学生信息,包括学生姓名、学号、性别等基本信息。
•修改学生信息,如学号、班级等。
•删除学生信息。
2. 成绩录入和查询•录入学生的考试成绩,包括科目、分数、考试日期等。
•查询学生的考试成绩,可按照学生姓名、学号、科目等进行检索。
3. 成绩统计和分析•对学生的考试成绩进行统计,包括平均分、最高分、最低分等。
•根据科目、班级等条件进行成绩分析,生成成绩报表。
4. 数据备份与恢复•对学生信息和成绩数据进行备份,以防数据丢失或损坏。
•支持从备份中恢复数据。
数据库设计学生表(student)字段名类型备注学号int 主键姓名varchar(50)性别varchar(10)班级varchar(50)成绩表(score)字段名类型备注学号int 外键科目varchar(50)分数float考试日期date系统架构本系统采用Java MVC(Model-View-Controller)架构模式进行设计和开发。
•Model层:负责数据的处理和存储,包括与数据库的交互。
•View层:负责用户界面的展示和交互,使用Swing或JavaFX等GUI 库进行开发。
•Controller层:负责接收用户的请求,调用对应的Model方法进行数据处理,并更新View层的显示。
开发步骤1. 数据库连接和表设计使用JDBC连接MySQL数据库,并创建上述的学生表和成绩表。
2. 学生信息管理模块开发•创建学生类(Student)和学生管理类(StudentManager)。
•实现学生信息的录入、修改和删除功能。
3. 成绩录入和查询模块开发•创建成绩类(Score)和成绩管理类(ScoreManager)。
java学生成绩管理系统实验报告

JAVA 课内实验报告学生成绩管理系统一 . 实验目的及实验环境实验目的:在此刻的高校平时管应中间,学生成绩管理系统就是其中特别重要的一环,特别是当前学生规模大,课程门类多,校区分别等实质情况,学生成绩管理系统更拥有特别大的实质应企图义。
但是,我们看到,其实我们学校的学生成绩管理系统在很多方面作的不是很完满,功能方面也有欠缺。
随着科技的发展,根本上所有的拥有必然数量数据的机构都开始使用计算机数据库来做管理。
几乎所有学校也都已经在使用计算机管理数据的体系,大大减少了学校学生成绩管理的工作量。
该课程设计旨在设计一个学生成绩的数据库管理系统,数据库中要求包括学生的根本信息,学科根本信息,以及学生所学课程的考试成绩。
要方便学生进行成绩盘问,经过该课程设计,应该到达把java 理论知识更加的坚固加深,加强着手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
实验环境:JAVA开发工具Microsoft SQL Server 2005二 . 实验内容在 JAVA开发工具和Microsoft SQL Server 2005环境下,运用学到的 java 和数据库理论知识,设计一个拥有简单的增加 ` 删除 ` 更正 ` 盘问操作的学生成绩管理系统。
三.方案设计1、系统功能设计要求此系统实现以下功能:(1〕使得学生的成绩管理工作更加清楚、条理化、自动化。
(2〕经过用户名和密码登录系统,盘问、删除、更正和增加课程根本资料 ` 学生所选课程 ` 用户密码等功能。
简单地完成学生成绩信息及学生信息的根本操作。
(3)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完满性,并发控制,备份和恢复等方面的功能要求。
2、系统模块设计学生成绩管理系统大体可以分成两大模块:一是学生的根本信息模块,里面应该包括学生的各方面的根本信息;二是课程管理模块,在该模块中应该包括有对学生成绩信息的盘问和办理;可以获取的系统流程图以以下列图所示:系统启动关于系统学籍管理班级管理用浏修添退添修查添修户览改加出加改询加改登用密用学学学班班录户码户籍籍籍级级信信信信信息息息息息否管理员课程设置成绩管理添修设添修查加改置加改询课课年成成成程程级绩绩绩信信课信信信息息程息息息是图学生成绩管理系统的系统流程图3、数据字典数据项是数据库的关系中不可以再分的数据单位,下表分别列出了数据的名称、数据种类、长度、取值可否为空。
学生考试成绩分析JAVA程序报告

学生考试成绩分析JAVA程序一、实验目的(1)掌握图形用户界面的基本设计方法。
(2)掌握事件驱动程序设计的方法。
(3)掌握JA V A中绘图的方法。
(4)掌握面向对象程序建立的过程。
(5)进一步掌握UML中类图的使用。
二、实验过程1、系统分析题目的要求大概可分为3个模块:要实现这个程序其实就是构建一个面向对象的过程,有以下步骤:1.确定、标识系统的类。
2.描述每个类的属性和方法。
3.建立类之间的关系。
4.创建类。
第一步是为系统确定、标识类。
有许多方法可以为系统确定类,一种方法是研究系统的运转机制,并且选择一定数量有用的实例或场景。
第二步是对已经确定的每个类描述其属性和方法,它们可以用UML图表示,如上图所示。
第三步是建立类之间的关系。
关系来源于欠两步的分析,这三步是相互关联的。
当划分的时候,也需要思考它们之间的关系。
建立对象之间的关系有助于理解对象之间的相互作用。
一个面向对象系统由相互关联、相互合作的对象组合而成。
上图说明了本例中类的关系第四步是编写类的代码。
程序虽然较长,但是大部分代码是get和set方法。
一旦对象确定下来,就可以通过分析系统的需求和方案来定义他的属性和方法。
通常,提供完整的get方法和set方法是一个很好的习惯。
当前的项目也许不需要这些方法,但是其他项目可能需要,设计类是应该考虑到今后的项目可能使用它们。
2、系统设计三、系统实现:该程序主要创建了五介类:Scores类,要实现这个程序,我们除了要构建出不同的类外,重要的是创建界面GUI,同时实现多个界面GUI同时显示出来,我们还要很熟悉JAVA中的创建各种界面GUI的类。
在实现GUI的类时,我们要注意实现接口。
实现基本数据输入,考试成绩输入,成绩查询都是要求我们熟悉各种GUI 的类同时要懂得创建GUI的类;在实现成绩分析时,分数分析和分数段分析我们可以用swing包中的JoptionPane实现,图形分析,要注意JAVA的坐标。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA课内实验报告学生成绩管理系统
一. 实验目的及实验环境
实验目的:在如今的高校日常管理当中,学生成绩管理系统就是其中非常重要的一环,特别是当前学生规模大,课程门类多,校区分散等实际情况,学生成绩管理系统更具有非常大的实际应用意义。
但是,我们看到,其实我们学校的学生成绩管理系统在很多方面作的不是很完善,功能方面也有欠缺。
随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。
几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。
该课程设计旨在设计一个学生成绩的数据库管理系统,数据库中要求包含学生的基本信息,学科基本信息,以及学生所学课程的考试成绩。
要方便学生进行成绩查询,通过该课程设计,应该达到把java理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
实验环境:
JAVA开发工具MyEclipse 8.5
Microsoft SQL Server 2005
二. 实验内容
在JAVA开发工具MyEclipse 8.5和Microsoft SQL Server 2005环境下,运用学到的java 和数据库理论知识,设计一个具有简单的增加`删除`修改`查询操作的学生成绩管理系统。
三.方案设计
1、系统功能设计要求
此系统实现如下功能:
(1)使得学生的成绩管理工作更加清晰、条理化、自动化。
(2)通过用户名和密码登录系统,查询、删除、修改和增加课程基本资料`学生所选课程`用户密码等功能。
容易地完成学生成绩信息及学生信息的基本操作。
(3) 设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。
2、系统模块设计
学生成绩管理系统大体可以分成两大模块:一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;二是课程管理模块,在该模块中应该包含有对学生成绩信息的查询和处理;可以得到的系统流程图如下图2.1所示:
3、数据字典
数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。
利用SQL Server 2005建立学生成绩管理系统数据库,其基本表清单及表结构描述如下:
数据库中用到的表,结构如下表3.1所示:
表3.1 数据库中表的信息
Class基本情况数据表,结构如下表3.2所示:
表3.2 class表的数据信息
Course基本情况数据表,结构如下表3.3所示:
表3.3 course表的数据信息
Student基本情况数据表,结构如下表3.4所示:
表3.4 student表的数据信息
Gradecourse基本情况数据表,结构如下表3.5所示:
表3.5 Gradestudent表的数据信息
Result基本情况数据表,结构如下表3.6所示:
表3.6 Rsult表的数据信息
Users基本情况数据表,结构如下表3.7所示:
表3.7 Users表的数据信息
(1)学生基本信息:学号、姓名、性别、出生日期、班级编号、联系电话、入学年份、家庭地址,备注信息。
(2)课程基本信息:课程名、课程号、课程类型、备注信息。
(3)成绩基本信息:考试编号、学生学号、学生姓名、班级号、课程名称、成绩。
(4)班级基本信息:班级编号、年级、班主任、教师编号。
由上述分析可得到系统的E—R图如下图4.1所示:
成绩(考试编号、学生学号、学生姓名、班级号、课程名称、成绩)。
(2)确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。
可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。
在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:在经常需要搜索的列上建立索引;在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规
则。
才能充分利用索引的作用避免因索引引起的负面作用。
(3)确定数据库的存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
因为该成绩管理系统的数据量小,,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排
四.测试数据及运行结果
1.正常测试数据(3组)及运行结果;
登陆界面,如下图5.1所示
图5.1 用户登陆成功界面
添加界面,如下图5.2所示
图5.2 添加课程信息界面
修改界面,如下图5.3所示
图5.3 修改密码界面
2.非正常测试数据(2组)及运行结果。
用户登录界面,如下图6.1所示(输入不存在的用户信息)
图6.1 用户登录错误界面
添加界面,如下图6.2所示
图6.2 添加信息输入错误数据类型界面
重要代码(用户登录界面)
void login_actionPerformed(ActionEvent e) {
username = JOptionPane.showInputDialog(this, "请输入用户名");
String pwd = JOptionPane.showInputDialog(this, "请输入密码");
if (! (username == null && pwd == null)) {
try {//连接数据库,验证用户
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;databasename=StudentScore ","sa","yangmeng");
ps =
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY) ;
try {
rs = ps.executeQuery("select * from users where username='" +username + "' "); //读取数据库
五.总结
1.实验过程中遇到的问题及解决办法;
本次实验因为以前没有接触过sql server和eclipse的连接方面的技术,所以刚开始不知道如何操作,后来通过去图书馆查阅资料`上网`以及请教大四的学长对jdbc连接桥有了初步的了解,在后期的编程中才发现自己平时在课堂上学的东西没有很好的实践,在运用时总是有一些小错误,如不知道dispose()这个函数是干什么用的,通过查阅课本和资料了解了它是用来销毁窗口,释放资源的一个函数
2.对设计及调试过程的心得体会。
这次上机实验,虽然过程中遇到了大大小小的问题,不过后来在自己翻阅资料请教别人的过程中,理论与实践的结合让我可以明显感觉到自己对java知识有了跟深入的掌握及了解,如java环境变量的设置以及参数的返回值问题等一些必不可少的基础知识都比以前有了更多的了解,同时也让我明白了平时一定要勤加练习,将课本上死的知识变成自己的,实践出真知应该就是这个道理。