写学生成绩管理系统遇到两个问题,求帮忙

稀里糊涂的码农 2013-07-26 09:01:29
小弟最近刚看完java视频,现在在用Eclipse写学生成绩管理系统,遇到两个问题。
第一个是:我写了一个用户登录界面,当我登陆的时候会弹出另一个窗口,就是系统使用界面,如果我关掉系统使用界面,结果用户登陆界面也关了。如果我在系统使用界面再点击使用某个功能弹出另一个窗口,而我又关了新弹出来的窗口,那系统使用对话框会关掉,登陆对话框也会一起关掉。这是怎么回事?


登陆按钮的事件代码:

package ManageSystem;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class SystemFrame extends JFrame{
public SystemFrame(String s){
super(s);
JButton btnInput=new JButton("1 输入学生成绩");
JButton btnCorrect=new JButton("2 修改学生成绩");
JButton btnDelete=new JButton("3 删除学生成绩");
JButton btnAdd=new JButton("4 添加学生成绩");
JButton btnSearch=new JButton("5 查询学生成绩");
JButton btnWatch=new JButton("6 浏览学生成绩");
JLabel lbl=new JLabel("南京晓庄学院 学生成绩管理系统 使用");
JPanel p1=new JPanel();
JPanel p2=new JPanel();

p1.add(lbl);
p1.setLayout(new FlowLayout());

p2.add(btnInput); p2.add(btnCorrect); p2.add(btnDelete);
p2.add(btnAdd); p2.add(btnSearch); p2.add(btnWatch);
p2.setLayout(new GridLayout(6,1));

this.add(p1,BorderLayout.NORTH);
this.add(p2,BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200,200,250,400);
this.pack();

btnInput.addActionListener(new InputListener(this));
}
}



package ManageSystem;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Listener implements ActionListener{
MSFrame tf=null;
public Listener(MSFrame tf){
this.tf=tf;
}
@Override
public void actionPerformed(ActionEvent e) {
String User="123";
String Password="123";
String getUser=tf.tfUser.getText();
String getPassword=tf.tfPassword.getText();
if(User.equals(getUser)&&Password.equals(getPassword)){
SystemFrame system=new SystemFrame("学生成绩管理系统 使用");
system.setVisible(true);
}
else{
JFrame f=new JFrame("Error");
JLabel error=new JLabel("对不起,您输入的用户名和密码错误");
f.add(error);
f.setBounds(200,200,400,90);
f.setBackground(Color.RED);
f.setLayout(new FlowLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
}


我的问题就是我的对话框是不能单独控制的,关掉一个就全部都关掉了。

第二个问题是:我把输入的数据存到类里,然后我想把每个学生的信息写到文本的每一行里,想用Buffer流来写,但是不知道怎么写,因为每个信息都是独立的,难道我要把每个学生的信息用一个字符串String 连接起来后在用BufferWriter来写进去吗?还是BufferWrite有把一个一个成员写进文本写到最后可以换行的操作?
...全文
395 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 AA5279AA 的回复:
至于你的那三个JFrame 我觉得还是设一个JFrame 两个JDialog更合适。 JFrame应该是被调用者依赖调用者的
好,谢谢建议~~~~结贴给分。太感谢了~~~
失落夏天 2013-07-27
  • 打赏
  • 举报
回复
至于你的那三个JFrame 我觉得还是设一个JFrame 两个JDialog更合适。 JFrame应该是被调用者依赖调用者的
失落夏天 2013-07-27
  • 打赏
  • 举报
回复
引用 3 楼 lhakuma 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 你明明有三个Jframe 为什么我只看到下左下角的哪一个? 第二个问题,如果不想串起来的话直接用对象流来写,传输对象流就行了。
我还想问个问题啊,你看到我的截图了吧,就是学号,成绩,姓名输入的那个JFrame啊,我下面有个按钮,我的事件想写成点击“录入”,我的数据就会存进一个类的数组中去,然后再把类中的数据全部串起来写到一个String变量中,再用Buffer流写进文本中去,这个我实现不了,我把我的源代码给你看看啊~~。

package ManageSystem;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class InputListener extends JFrame implements ActionListener{
	JLabel label=new JLabel();
	JLabel lblStuNum=new JLabel();
	JLabel lblStuNam=new JLabel();
	JLabel lblChi=new JLabel();
	JLabel lblMa=new JLabel();
	JLabel lblEn=new JLabel();
	JLabel lblBi=new JLabel();
	JLabel lblPh=new JLabel();
	JLabel lblChe=new JLabel();
	
	JTextField tfStuNum=new JTextField();
	JTextField tfStuNam=new JTextField();
	JTextField tfChi=new JTextField();
	JTextField tfMa=new JTextField();
	JTextField tfEn=new JTextField();
	JTextField tfBi=new JTextField();
	JTextField tfPh=new JTextField();
	JTextField tfChe=new JTextField();
	
	SystemFrame tf=null;
	public InputListener(SystemFrame tf){
		this.tf=tf;
	}
	public void actionPerformed(ActionEvent e) {
		//tf.dispose();
		label=new JLabel("成绩录入模块");
		lblStuNum=new JLabel("学号:");
		lblStuNam=new JLabel("姓名:");
		lblChi=new JLabel("语文成绩:");
		lblMa=new JLabel("数学成绩:");
		lblEn=new JLabel("英语成绩:");
		lblBi=new JLabel("生物成绩:");
		lblPh=new JLabel("物理成绩:");
		lblChe=new JLabel("化学成绩:");
		
		tfStuNum=new JTextField(20);
		tfStuNam=new JTextField(20);
		tfChi=new JTextField(20);
		tfMa=new JTextField(20);
		tfEn=new JTextField(20);
		tfBi=new JTextField(20);
		tfPh=new JTextField(20);
		tfChe=new JTextField(20);
		JButton btnwrite1=new JButton("录入");
		//JButton btnwrite2=new JButton("写入文件");
		JPanel p1=new JPanel();
		JPanel p2=new JPanel();
		JPanel p3=new JPanel();
		
		//标题区域	
		p1.add(new JLabel(" "));p1.add(new JLabel(" "));p1.add(new JLabel(" "));
		p1.add(new JLabel(" "));p1.add(new JLabel(" "));p1.add(new JLabel(" "));
		p1.add(new JLabel(" "));p1.add(label);p1.add(new JLabel(" "));
		p1.setLayout(new GridLayout(3,3));
		
		p2.add(new JLabel(" "));				//学号区域
		p2.add(lblStuNum);	p2.add(tfStuNum);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//姓名区域
		p2.add(lblStuNam);	p2.add(tfStuNam);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//语文成绩区域
		p2.add(lblChi);	p2.add(tfChi);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//数学成绩区域
		p2.add(lblMa);	p2.add(tfMa);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//英语成绩区域
		p2.add(lblEn);	p2.add(tfEn);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//生物成绩区域
		p2.add(lblBi);	p2.add(tfBi);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//物理成绩区域
		p2.add(lblPh);	p2.add(tfPh);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//化学成绩区域
		p2.add(lblChe);	p2.add(tfChe);	
		p2.add(new JLabel(" "));
		p2.setLayout(new GridLayout(8,4));
		
		
		p3.add(btnwrite1);		//p3.add(btnwrite2);	//按钮区域
		p3.setLayout(new FlowLayout());
		
		this.add(p1,BorderLayout.NORTH);			//frame布局
		this.add(p2,BorderLayout.CENTER);
		this.add(p3,BorderLayout.SOUTH);
		this.setLayout(new GridLayout(3,1));
		this.setBounds(480,90,480,600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
		btnwrite1.addActionListener(new InputListener2(this));
		//btnwrite2.addActionListener(new InputListener3(this));
		
	}
}
btnwrite1的事件代码:

package ManageSystem;

import java.awt.event.*;
import java.io.*;

public class InputListener2 implements ActionListener{
	int n=1,all;
	information[] student=new information[100];
	InputListener tf=null;
	
	public InputListener2(InputListener tf){
		this.tf=tf;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.print(tf.tfStuNum.getText()+"\t");
		System.out.print(tf.tfStuNam.getText()+"\t");
		System.out.print(tf.tfChi.getText()+"\t");
		System.out.print(tf.tfMa.getText()+"\t");
		System.out.print(tf.tfEn.getText()+"\t");
		System.out.print(tf.tfBi.getText()+"\t");
		System.out.print(tf.tfPh.getText()+"\t");
		System.out.println(tf.tfChe.getText());

		
		student[n].setStuNumber(tf.tfStuNum.getText());
		student[n].setStuName(tf.tfStuNam.getText());
		student[n].setScoChinese(tf.tfChi.getText());
		student[n].setScoMath(tf.tfMa.getText());
		student[n].setScoEnglish(tf.tfEn.getText());
		student[n].setScoBiology(tf.tfBi.getText());
		student[n].setScoPhysics(tf.tfPh.getText());
		student[n].setScoChemistry(tf.tfChe.getText());
		
		n++;
		all=n;
		
	}
	
	InputListener2(){
		try{
			BufferedWriter bw=new BufferedWriter(new FileWriter("学生成绩.txt"));
			for(int i=1;i<all;i++){
				String S=student[n].getStuNumber()+"   "+student[n].getStuName()+"   "+student[n].getScoChinese()
						+"   "+student[n].getScoMath()+"   "+student[n].getScoEnglish()+"   "+student[n].getScoBiology()
						+"   "+student[n].getScoPhysics()+"   "+student[n].getScoChemistry();
					
					bw.write(S);
					bw.newLine();
					bw.close();
			}
		}catch(IOException e2){
			e2.printStackTrace();
		}
	}
}
[/quote] bw.close();的位置不对吧, for循环里面就把bw给关了?
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你明明有三个Jframe 为什么我只看到下左下角的哪一个? 第二个问题,如果不想串起来的话直接用对象流来写,传输对象流就行了。
我这样写是有问题的,好像是写入文件的时候出错了。我把那个类的代码也上传上来啊。

package ManageSystem;

class information{
	String StuNumber;
	String StuName;
	String ScoChinese,ScoMath,ScoEnglish;
	String ScoBiology,ScoPhysics,ScoChemistry;
	
	public String getStuNumber() {
		return StuNumber;
	}
	public void setStuNumber(String stuNumber) {
		StuNumber = stuNumber;
	}
	public String getStuName() {
		return StuName;
	}
	public void setStuName(String stuName) {
		StuName = stuName;
	}
	public String getScoChinese() {
		return ScoChinese;
	}
	public void setScoChinese(String scoChinese) {
		ScoChinese = scoChinese;
	}
	public String getScoMath() {
		return ScoMath;
	}
	public void setScoMath(String scoMath) {
		ScoMath = scoMath;
	}
	public String getScoEnglish() {
		return ScoEnglish;
	}
	public void setScoEnglish(String scoEnglish) {
		ScoEnglish = scoEnglish;
	}
	public String getScoBiology() {
		return ScoBiology;
	}
	public void setScoBiology(String scoBiology) {
		ScoBiology = scoBiology;
	}
	public String getScoPhysics() {
		return ScoPhysics;
	}
	public void setScoPhysics(String scoPhysics) {
		ScoPhysics = scoPhysics;
	}
	public String getScoChemistry() {
		return ScoChemistry;
	}
	public void setScoChemistry(String scoChemistry) {
		ScoChemistry = scoChemistry;
	}
	public information(String Snum,String Sname){
		this.setStuNumber(Snum);
		this.StuName=Sname;
	}
	void test()
	{
		System.out.printf(getStuNumber());
	}
	
	public information(String s1,String s2,String g1,String g2,String g3,String g4,String g5,String g6){
		this(s1,s2);
		this.ScoChinese=g1;
		this.ScoMath=g2;
		this.ScoEnglish=g3;
		this.ScoBiology=g4;
		this.ScoPhysics=g5;
		this.ScoChemistry=g6;
	}
	public information() {
		// TODO 自动生成的构造函数存根
	}
}

public class ManageSystem {
	public static void main(String[] args) {
		MSFrame frame=new MSFrame("学生成绩管理系统   登陆");
		frame.setVisible(true);
	}
}
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你明明有三个Jframe 为什么我只看到下左下角的哪一个? 第二个问题,如果不想串起来的话直接用对象流来写,传输对象流就行了。
我还想问个问题啊,你看到我的截图了吧,就是学号,成绩,姓名输入的那个JFrame啊,我下面有个按钮,我的事件想写成点击“录入”,我的数据就会存进一个类的数组中去,然后再把类中的数据全部串起来写到一个String变量中,再用Buffer流写进文本中去,这个我实现不了,我把我的源代码给你看看啊~~。

package ManageSystem;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class InputListener extends JFrame implements ActionListener{
	JLabel label=new JLabel();
	JLabel lblStuNum=new JLabel();
	JLabel lblStuNam=new JLabel();
	JLabel lblChi=new JLabel();
	JLabel lblMa=new JLabel();
	JLabel lblEn=new JLabel();
	JLabel lblBi=new JLabel();
	JLabel lblPh=new JLabel();
	JLabel lblChe=new JLabel();
	
	JTextField tfStuNum=new JTextField();
	JTextField tfStuNam=new JTextField();
	JTextField tfChi=new JTextField();
	JTextField tfMa=new JTextField();
	JTextField tfEn=new JTextField();
	JTextField tfBi=new JTextField();
	JTextField tfPh=new JTextField();
	JTextField tfChe=new JTextField();
	
	SystemFrame tf=null;
	public InputListener(SystemFrame tf){
		this.tf=tf;
	}
	public void actionPerformed(ActionEvent e) {
		//tf.dispose();
		label=new JLabel("成绩录入模块");
		lblStuNum=new JLabel("学号:");
		lblStuNam=new JLabel("姓名:");
		lblChi=new JLabel("语文成绩:");
		lblMa=new JLabel("数学成绩:");
		lblEn=new JLabel("英语成绩:");
		lblBi=new JLabel("生物成绩:");
		lblPh=new JLabel("物理成绩:");
		lblChe=new JLabel("化学成绩:");
		
		tfStuNum=new JTextField(20);
		tfStuNam=new JTextField(20);
		tfChi=new JTextField(20);
		tfMa=new JTextField(20);
		tfEn=new JTextField(20);
		tfBi=new JTextField(20);
		tfPh=new JTextField(20);
		tfChe=new JTextField(20);
		JButton btnwrite1=new JButton("录入");
		//JButton btnwrite2=new JButton("写入文件");
		JPanel p1=new JPanel();
		JPanel p2=new JPanel();
		JPanel p3=new JPanel();
		
		//标题区域	
		p1.add(new JLabel(" "));p1.add(new JLabel(" "));p1.add(new JLabel(" "));
		p1.add(new JLabel(" "));p1.add(new JLabel(" "));p1.add(new JLabel(" "));
		p1.add(new JLabel(" "));p1.add(label);p1.add(new JLabel(" "));
		p1.setLayout(new GridLayout(3,3));
		
		p2.add(new JLabel(" "));				//学号区域
		p2.add(lblStuNum);	p2.add(tfStuNum);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//姓名区域
		p2.add(lblStuNam);	p2.add(tfStuNam);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//语文成绩区域
		p2.add(lblChi);	p2.add(tfChi);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//数学成绩区域
		p2.add(lblMa);	p2.add(tfMa);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//英语成绩区域
		p2.add(lblEn);	p2.add(tfEn);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//生物成绩区域
		p2.add(lblBi);	p2.add(tfBi);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//物理成绩区域
		p2.add(lblPh);	p2.add(tfPh);	
		p2.add(new JLabel(" "));
		
		p2.add(new JLabel(" "));				//化学成绩区域
		p2.add(lblChe);	p2.add(tfChe);	
		p2.add(new JLabel(" "));
		p2.setLayout(new GridLayout(8,4));
		
		
		p3.add(btnwrite1);		//p3.add(btnwrite2);	//按钮区域
		p3.setLayout(new FlowLayout());
		
		this.add(p1,BorderLayout.NORTH);			//frame布局
		this.add(p2,BorderLayout.CENTER);
		this.add(p3,BorderLayout.SOUTH);
		this.setLayout(new GridLayout(3,1));
		this.setBounds(480,90,480,600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
		btnwrite1.addActionListener(new InputListener2(this));
		//btnwrite2.addActionListener(new InputListener3(this));
		
	}
}
btnwrite1的事件代码:

package ManageSystem;

import java.awt.event.*;
import java.io.*;

public class InputListener2 implements ActionListener{
	int n=1,all;
	information[] student=new information[100];
	InputListener tf=null;
	
	public InputListener2(InputListener tf){
		this.tf=tf;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.print(tf.tfStuNum.getText()+"\t");
		System.out.print(tf.tfStuNam.getText()+"\t");
		System.out.print(tf.tfChi.getText()+"\t");
		System.out.print(tf.tfMa.getText()+"\t");
		System.out.print(tf.tfEn.getText()+"\t");
		System.out.print(tf.tfBi.getText()+"\t");
		System.out.print(tf.tfPh.getText()+"\t");
		System.out.println(tf.tfChe.getText());

		
		student[n].setStuNumber(tf.tfStuNum.getText());
		student[n].setStuName(tf.tfStuNam.getText());
		student[n].setScoChinese(tf.tfChi.getText());
		student[n].setScoMath(tf.tfMa.getText());
		student[n].setScoEnglish(tf.tfEn.getText());
		student[n].setScoBiology(tf.tfBi.getText());
		student[n].setScoPhysics(tf.tfPh.getText());
		student[n].setScoChemistry(tf.tfChe.getText());
		
		n++;
		all=n;
		
	}
	
	InputListener2(){
		try{
			BufferedWriter bw=new BufferedWriter(new FileWriter("学生成绩.txt"));
			for(int i=1;i<all;i++){
				String S=student[n].getStuNumber()+"   "+student[n].getStuName()+"   "+student[n].getScoChinese()
						+"   "+student[n].getScoMath()+"   "+student[n].getScoEnglish()+"   "+student[n].getScoBiology()
						+"   "+student[n].getScoPhysics()+"   "+student[n].getScoChemistry();
					
					bw.write(S);
					bw.newLine();
					bw.close();
			}
		}catch(IOException e2){
			e2.printStackTrace();
		}
	}
}
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你明明有三个Jframe 为什么我只看到下左下角的哪一个? 第二个问题,如果不想串起来的话直接用对象流来写,传输对象流就行了。
嗯是的,是三个JFrame,因为问题都一样,所以我就没上传代码了,看的太长了。 关于第二个问题的答案,我会试试的,谢谢啊,等了那么久终于有人回答了呢~~
失落夏天 2013-07-27
  • 打赏
  • 举报
回复
你明明有三个Jframe 为什么我只看到下左下角的哪一个? 第二个问题,如果不想串起来的话直接用对象流来写,传输对象流就行了。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧