java课程设计报告_第1页
java课程设计报告_第2页
java课程设计报告_第3页
java课程设计报告_第4页
java课程设计报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java课程设计报告摘要为了巩固及运用上学期的java知识,如:java的基础知识,swing界面,各种流,socket通讯等。一、问题及功能分析:1.1、用户管理在这个学生管理系统中,使用user.bat文件储存用户信息,使用student.bat文件储存学生信息,它构成了学生管理系统里面的用户管理以及权限管理,可以根据这个文件里面的信息进行验证登录还有进行权限校验。具体功能描述如下:由管理员进行使用代码对老师,学生用户进行输入再由老师在界面上进行学生用户具体信息(如姓名,学号,入学日期)的输入。1.2、成绩管理在这个学生管理系统中,使用student.bat文件储存学生信息,老师权限用户有权力对学生成绩进行增加,修改,查询等功能。学生有权查看自己各科成绩,但没有权限修改自己的信息。具体功能描述如下:由老师用户对自己负责的班上的学生进行该科目成绩的输入;完全输入成功后老师用户可以在界面上查询指定班级的学生的成绩,届时,该班所有学生的成绩将以由高到低进行排序,各个分数段的人数也会在界面上显示。老师用户完全输入成功之后,学生用户可以进入查询成绩界面查询自己各科成绩。概要设计:2.1、图形用户界面构成及菜单树2.2、数据结构2.2.1、数据结构项2.2.2、数据结构详细设计3.1.1、登录操作客户端实现代码:publicvoidactionPerformed(ActionEvente){ Useruser=null; if(e.getSource()==jb1){ try{ user=connect(jtf.getText(), newString(jpf.getPassword()),getJrb()); }catch(MyExceptione2){ JOptionPane.showMessageDialog(this,"用户名或密码错误,请退出再重新登录"); } if(getJrb().equals("student")){ if(user!=null){ if(sc.isClosed()!=true){ newSLogin(user,sc); } } this.dispose(); }if(getJrb().equals("teacher")){ if(user!=null){ if(sc.isClosed()!=true){ newTLogin(user,sc); } } this.dispose(); }服务器端实现代码:publicUsercheckLogin(doubleuserID,Stringpassword,Stringpower){//验证登录 Useruser=null;//假设用户登录失败 ObjectInputStreamois=null; try{ //创建对象流 ois=newObjectInputStream(newFileInputStream("f://user.dat")); ArrayList<User>users=(ArrayList<User>)ois.readObject(); Iterator<User>iter=users.iterator(); while(iter.hasNext()){ Useru=iter.next(); if(u.getID()==userID&&u.getPassword().equals(password)&&u.getPower().indexOf(power)!=-1){ user=u;//用户登录成功 } } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }catch(ClassNotFoundExceptione){ e.printStackTrace(); }finally{// try{// //ois.close();// }catch(IOExceptione){// e.printStackTrace();// } } returnuser; } 用户在登陆时时,输入用户名密码,身份权限等信息后,客户端通过socket传输这些信息到服务器端。服务器通过把客户端发来的信息通过user.dat文件中的信息验证后把结果发回到客户端。客户端进行响应,登录失败进行提示,登录成功就进入响应的界面。3.1.2、教师操作、教师主界面界面进行成绩录入的操作进行查看班上学生成绩的操作,并会顺序输出该班的同学的成绩,还有各分数段的统计、添加一位新的学生退出系统、成绩录入客户端:publicAddSource(finalSockets,finalStringsubject,finalStringtClass){ this.s=s; this.tClass=tClass; PrintStreamps; try{ ps=newPrintStream(s.getOutputStream()); ps.println("addSource"+"|"+tClass); ps.flush(); ObjectInputStreamois=newObjectInputStream(s.getInputStream()); stus=(ArrayList<Student>)ois.readObject(); }catch(IOExceptione){ e.printStackTrace(); } catch(ClassNotFoundExceptione){ e.printStackTrace(); }publicclassUpdate{ ArrayList<Student>stu=null; StringtClass=null; Sockets=null; publicUpdate(ArrayList<Student>stu,StringtClass,Sockets){ this.tClass=tClass; this.stu=stu; this.s=s; ObjectOutputStreamoos=null; PrintStreamps; try{ System.out.println(s); ps=newPrintStream(s.getOutputStream()); ps.println("update"+"|"+tClass); ps.flush(); System.out.println("bbb");oos=newObjectOutputStream(s.getOutputStream());//System.out.println(stu); oos.writeObject(stu); oos.flush(); DataInputStreamdos=newDataInputStream(s.getInputStream()); System.out.println(dos.readBoolean()); }catch(IOExceptione1){ e1.printStackTrace(); }catch(HeadlessExceptione1){ e1.printStackTrace(); } }}服务器端:收集客户端的信息然后更新成绩:if("addSource".equals(content[0])){ ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream()); ArrayList<Student>stu=deal.getClassStudent(content[1]); oos.writeObject(stu); oos.flush();if("update".equals(content[0])){ System.out.println("update"); ObjectInputStreamois2=newObjectInputStream(s.getInputStream()); ArrayList<Student>stu2=(ArrayList<Student>)ois2.readObject(); DataOutputStreamdos=newDataOutputStream(s.getOutputStream()); if(stu2.get(0).getName()!=null){ deal.updateStudent(stu2,content[1]); dos.writeBoolean(true); }elseif(stu2.get(0).getName()==null){ dos.writeBoolean(false); } }publicvoidupdateStudent(ArrayList<Student>s,Stringclasses){ ArrayList<Student>allStudents=getClassStudent2(classes); for(inti=0;i<s.size();i++){ allStudents.add(s.get(i)); } Filefile=newFile("f://student.dat"); ObjectOutputStreamoos=null; try{ oos=newObjectOutputStream(newFileOutputStream(file)); oos.writeObject(allStudents); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ oos.close(); }catch(IOExceptione){ e.printStackTrace(); } } }先选择所教班级在此界面上输入该班上每个同学的分数添加完成后按下添加键,信息进入服务器端,进行存储。、统计成绩客户端:packageframe;importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjava.io.*;.*;importjavax.swing.*;importbean.*;importexception.*;publicclassJTableSelectFrameextendsJFrame{ ArrayList<Student>stu=null; Sockets=null; Stringsubject=null; StringtongJi=null; JLabellbl_name=newJLabel(); JLabellbl_age=newJLabel(); JLabellbl_address=newJLabel(); JLabelfaile=newJLabel(); JLabelfaile2=newJLabel(); JTextFieldtxt_name=newJTextField(); JTextFieldtxt_age=newJTextField(); JTextFieldtxt_address=newJTextField(); JTextFieldtxt_false=newJTextField(); JTextFieldbtn_del=newJTextField();JPanelcontentPane;VectorCellsVector=newVector();VectorTitleVector=newVector();JScrollPanescp=newJScrollPane();JTabletab=null;publicJTableSelectFrame(ArrayList<Student>stu,Stringsubject,StringtongJi){ this.tongJi=tongJi; this.stu=stu; this.subject=subject;try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();}}privatevoidjbInit()throwsException{ Stringcomtent[]=tongJi.split("\\|"); contentPane=(JPanel)getContentPane();contentPane.setLayout(null);this.setResizable(false);setSize(newDimension(500,340));setTitle("查看成绩");scp.setBounds(newRectangle(46,32,297,157));lbl_name.setFont(newjava.awt.Font("宋体",Font.BOLD,12));lbl_name.setText("90以上:");lbl_name.setBounds(newRectangle(46,205,83,25));lbl_age.setFont(newjava.awt.Font("宋体",Font.BOLD,12));lbl_age.setText("80以上:");lbl_age.setBounds(newRectangle(200,205,83,25));lbl_address.setFont(newjava.awt.Font("宋体",Font.BOLD,12));lbl_address.setText("70以上:");lbl_address.setBounds(newRectangle(46,232,83,25));txt_name.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_name.setBounds(newRectangle(98,205,72,21));txt_name.setText(comtent[0]);txt_age.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_age.setBounds(newRectangle(250,205,72,21));txt_age.setText(comtent[1]);txt_address.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_address.setBounds(newRectangle(98,232,72,21));txt_address.setText(comtent[2]);faile.setBounds(newRectangle(46,259,83,25));faile.setFont(newjava.awt.Font("宋体",Font.BOLD,12));faile.setText("不及格:");faile2.setBounds(newRectangle(200,232,83,25));faile2.setFont(newjava.awt.Font("宋体",Font.BOLD,12));faile2.setText("60以上:");txt_false.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_false.setBounds(newRectangle(98,259,72,21));txt_false.setText(comtent[4]);btn_del.setBounds(newRectangle(250,232,72,21));btn_del.setFont(newjava.awt.Font("宋体",Font.BOLD,12));btn_del.setText(comtent[3]);contentPane.add(scp);contentPane.add(lbl_name);contentPane.add(lbl_age);contentPane.add(lbl_address);contentPane.add(txt_name);contentPane.add(txt_age);contentPane.add(txt_address);contentPane.add(faile);contentPane.add(faile2);contentPane.add(btn_del);contentPane.add(txt_false);this.showTable(stu);tab=newJTable(CellsVector,TitleVector);scp.getViewport().add(tab);}publicvoidshowTable(ArrayList<Student>stu){this.TitleVector.add("学号");this.TitleVector.add("姓名");this.TitleVector.add("成绩");for(inti=0;i<stu.size();i++){Vectorv=newVector();v.add(stu.get(i).getID());v.add(stu.get(i).getName());v.add(stu.get(i).subject.get(subject));CellsVector.add(v);}}}服务器端:输出学生信息:if("searchStu".equals(content[0])){ ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream()); ArrayList<Student>stu3=deal.getClassStudent3(content[1],content[2]); oos.writeObject(stu3); oos.flush(); PrintStreamps=newPrintStream(s.getOutputStream()); StringtongJi=deal.tongJi(stu3,content[2]); ps.println(tongJi); System.out.println(tongJi); ps.flush(); }统计学生分数段:publicStringtongJi(ArrayList<Student>stu,Stringsubject){ intninth=0; inteighth=0; intseventh=0; intsixth=0; intfaile=0; for(inti=0;i<stu.size();i++){ if(Double.parseDouble(stu.get(i).subject.get(subject))>=90){ ninth++; } if(Double.parseDouble(stu.get(i).subject.get(subject))<90&& Double.parseDouble(stu.get(i).subject.get(subject))>=80){ eighth++; } if(Double.parseDouble(stu.get(i).subject.get(subject))<80&& Double.parseDouble(stu.get(i).subject.get(subject))>=70){ seventh++; } if(Double.parseDouble(stu.get(i).subject.get(subject))<70&& Double.parseDouble(stu.get(i).subject.get(subject))>=60){ sixth++; } if(Double.parseDouble(stu.get(i).subject.get(subject))<60){ faile++; } } StringtongJi=ninth+"|"+eighth+"|"+seventh+"|"+sixth+"|"+faile; returntongJi; }学生排序:publicArrayList<Student>getClassStudent3(Stringclasses,Stringsubject){ ArrayList<Student>allStudents=getAllStudent();//创建储存学生信息的集合 ArrayList<Student>classStudents=newArrayList<Student>();//创建储存学生信息的集合 ArrayList<Student>classStudents2=newArrayList<Student>(); for(inti=0;i<allStudents.size();i++){ if(classes.equals(allStudents.get(i).getClasses())){ classStudents.add(allStudents.get(i)); } } Studentstu[]=newStudent[classStudents.size()]; for(intk=0;k<classStudents.size();k++){ stu[k]=classStudents.get(k); } Studenttemp=null; for(inti=0;i<stu.length;i++){//趟数 for(intj=0;j<stu.length-i-1;j++){//比较次数 if(Double.parseDouble(stu[j].subject.get(subject))>Double.parseDouble(stu[j+1].subject.get(subject))){ temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } for(intu=0;u<stu.length;u++){ classStudents2.add(stu[u]); } returnclassStudents2; } 先选择所教班级、添加学生客户端:publicStudentaddStudent(){ Students=null; SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd"); doublenum=Double.parseDouble(jtf1.getText()); Stringname=jtf2.getText(); Stringpassword=jtf3.getText(); StringtClass=jcb1.getSelectedItem().toString(); Stringsex=jcb2.getSelectedItem().toString(); Datedate; try{ date=sdf.parse(jtf4.getText()); s=newStudent(num,name,password,tClass,sex,date); }catch(ParseExceptione){ e.printStackTrace(); } returns; } publicvoidactionPerformed(ActionEvente){ PrintWriterps; ObjectOutputStreamoos=null; if(e.getSource()==jb1){ try{ ps=newPrintWriter(sc.getOutputStream()); ps.println("addStudent"+"|"+"aaa"); ps.flush(); oos=newObjectOutputStream(sc.getOutputStream()); Students=addStudent(); oos.writeObject(s); oos.flush(); JOptionPane.showMessageDialog(this,"添加成功"); }catch(IOExceptione1){ e1.printStackTrace(); }服务器端:publicvoidaddStudent(Students){ Filefile=newFile("f://student.dat"); ObjectOutputStreamoos=null; ArrayList<Student>stu=getAllStudent(); stu.add(s); try{ oos=newObjectOutputStream(newFileOutputStream(file)); oos.writeObject(stu); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ oos.close(); }catch(IOExceptione){ e.printStackTrace(); } } }elseif("addStudent".equals(content[0])){ ArrayList<Student>stu=deal.getAllStudent(); ObjectInputStreamois2=newObjectInputStream(s.getInputStream()); Studentstu2=(Student)ois2.readObject(); deal.addStudent(stu2); } 3.1.2、学生操作、学生主界面查询自己的成绩退出系统、查询成绩客户端:packageframe;importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjava.util.Map.Entry;importjava.io.*;.*;importjavax.swing.*;importbean.*;importexception.*;publicclassJTableSelectFrame2extendsJFrame{ Studentstu=null; Stringsubject=null; StringtClass=null; Sockets=null;JPanelcontentPane;VectorCellsVector=newVector();VectorTitleVector=newVector();JScrollPanescp=newJScrollPane();JTabletab=null;JTextFieldtxt_name=newJTextField();JTextFieldtxt_age=newJTextField();JTextFieldtxt_address=newJTextField();JButtonbtn_add=newJButton();JButtonbtn_del=newJButton();publicJTableSelectFrame2(Studentstu){ this.stu=stu;try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();}}privatevoidjbInit()throwsException{contentPane=(JPanel)getContentPane();contentPane.setLayout(null);this.setResizable(false);setSize(newDimension(400,340));setTitle("添加成绩");scp.setBounds(newRectangle(46,32,297,157));txt_name.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_name.setBounds(newRectangle(98,205,72,21));txt_age.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_age.setBounds(newRectangle(250,205,72,21));txt_address.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_address.setBounds(newRectangle(98,232,72,21));btn_add.setBounds(newRectangle(46,271,83,25));btn_add.setFont(newjava.awt.Font("宋体",Font.BOLD,12));btn_add.setText("添加");btn_del.setBounds(newRectangle(155,271,83,25));btn_del.setFont(newjava.awt.Font("宋体",Font.BOLD,12));btn_del.setText("返回");contentPane.add(scp);this.showTable(stu);tab=newJTable(CellsVector,TitleVector);scp.getViewport().add(tab);}publicvoidshowTable(Studentstu){this.TitleVector.add("科目");this.TitleVector.add("成绩");Vectorv=newVector();Set<Entry<String,String>>entrySet=stu.subject.entrySet();for(Entry<String,String>entry:entrySet){ v.add(entry.getKey()); v.add(entry.getValue()); CellsVector.add(v);}}} PrintWriterps; try{ ps=newPrintWriter(s.getOutputStream()); ps.println("searchMy"+"|"+u.getID()); ps.flush(); ObjectInputStreamois=newObjectInputStream(s.getInputStream()); Studentstus=(Student)ois.readObject(); newJTableAppClass3(stus); }catch(IOExceptione1){ e1.printStackTrace(); }catch(ClassNotFoundExceptione1){ e1.printStackTrace(); }服务器端:elseif("searchMy".equals(content[0])){ Studentstu=deal.getStudentByID(Double.parseDouble(content[1])); ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream()); oos.writeObject(stu);publicStudentgetStudentByID(doubleid){ ArrayList<Student>allStudents=getAllStudent();//创建储存学生信息的集合 for(inti=0;i<allStudents.size();i++){ if(id==allStudents.get(i).getID()){ returnallStudents.get(i); } } returnnull; }四、调试分析问题一:显示学生成绩,添加成绩的时候由于学生的科目数量和老师修改的学生的人数是不定的,如何才能把这些进行动态显示呢?答案:以添加学生成绩为例,图中红色表格里面的绿色行是可以按照学生的数量动态生成。具体源代码如下:packageframe;importjava.awt.*;importjavax.swing.*;.*;importbean.*;importjava.awt.Dimension;importjava.util.ArrayList;publicclassJTableAppClass{booleanpackFrame=false;ArrayList<Student>stu=null;Stringsubject=null;Stringcomtent=null;Sockets=null;StringtClass=null;publicJTableAppClass(ArrayList<Student>stu,Stringsubject,Sockets,StringtClass){ this.stu=stu; this.subject=subject; this.s=s; this.tClass=tClass; JTableAppFrameframe=newJTableAppFrame(stu,subject,s,tClass);//Validateframesthathavepresetsizes//Packframesthathaveusefulpreferredsizeinfo,e.g.fromtheirlayoutif(packFrame){frame.pack();}else{frame.validate();}//CenterthewindowDimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();DimensionframeSize=frame.getSize();if(frameSize.height>screenSize.height){frameSize.height=screenSize.height;}if(frameSize.width>screenSize.width){frameSize.width=screenSize.width;}frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);frame.setVisible(true); }}packageframe;importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjava.io.*;.*;importjavax.swing.*;importbean.*;importexception.*;publicclassJTableAppFrameextendsJFrame{ ArrayList<Student>stu=null; Stringsubject=null; StringtClass=null; Sockets=null;JPanelcontentPane;VectorCellsVector=newVector();VectorTitleVector=newVector();JScrollPanescp=newJScrollPane();JTabletab=null;JTextFieldtxt_name=newJTextField();JTextFieldtxt_age=newJTextField();JTextFieldtxt_address=newJTextField();JButtonbtn_add=newJButton();JButtonbtn_del=newJButton();publicJTableAppFrame(ArrayList<Student>stu,Stringsubject,Sockets,StringtClass){ this.subject=subject; this.stu=stu; this.s=s; this.tClass=tClass;try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();}}privatevoidjbInit()throwsException{contentPane=(JPanel)getContentPane();contentPane.setLayout(null);this.setResizable(false);setSize(newDimension(400,340));setTitle("添加成绩");scp.setBounds(newRectangle(46,32,297,157));txt_name.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_name.setBounds(newRectangle(98,205,72,21));txt_age.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_age.setBounds(newRectangle(250,205,72,21));txt_address.setFont(newjava.awt.Font("宋体",Font.BOLD,12));txt_address.setBounds(newRectangle(98,232,72,21));btn_add.setBounds(newRectangle(46,271,83,25));btn_add.setFont(newjava.awt.Font("宋体",Font.BOLD,12));btn_add.setText("添加");btn_add.addActionListener(newJTableAppFrame_btn_add_actionAdapter(this));btn_del.setBounds(newRectangle(155,271,83,25));btn_del.setFont(newjava.awt.Font("宋体",Font.BOLD,12));btn_del.setText("返回");btn_del.addActionListener(newJTableAppFrame_btn_del_actionAdapter(this));contentPane.add(scp);contentPane.add(txt_name);contentPane.add(txt_age);contentPane.add(txt_address);contentPane.add(btn_del);contentPane.add(btn_add);this.showTable(stu);tab=newJTable(CellsVector,TitleVector);scp.getViewport().add(tab);}publicvoidshowTable(ArrayList<Student>stu){this.TitleVector.add("学号");this.TitleVector.add("姓名");this.TitleVector.add("成绩");for(inti=0;i<stu.size();i++){Vectorv=newVector();v.add(stu.get(i).getID());v.add(stu.get(i).getName());CellsVector.add(v);}}publicvoidbtn_add_actionPerformed(ActionEvente){ for(inti=0;i<stu.size();i++){ stu.get(i).subject.put(subject,(String)tab.getModel().getValueAt(i,2));}System.out.println(s);newUpdate(stu,tClass,s);}}classJTableAppFrame_btn_del_actionAdapterimplementsActionListener{privateJTableAppFrameadaptee;JTableAppFrame_btn_del_actionAdapter(JTableAppFrameadaptee){this.adaptee=adaptee;}publicvoidactionPerformed(ActionEvente){ adaptee.dispose();}}classJTableAppFrame_btn_add_actionAdapterimplementsActionListener{privateJTableAppFrameadaptee;JTableAppFrame_btn_add_actionAdapter(JTableAppFrameadaptee){this.adaptee=adaptee;}publicvoidactionPerformed(ActionEvent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论