(Java可复用课程设计)关于小型学生信息管理系统项目——基于Java和MySQL的mis系统(有问题的私信作者可远程指导)

2 篇文章 0 订阅
1 篇文章 0 订阅

      这个学期,学校奇葩的给我这个专业开了个Java(说怪也不怪,大学学校总要教你那么一两门高级语言嘛),唉!作为这个物联网工程专业的学生,总是有说不完的苦,有些学校放在电子信息工程学院,有些则放在计算机学院,当然也有厉害的双一流重点大学,比如江南大学,人家牛逼,开了个物联网工程学院!可以说,物联网的学生是软硬通吃,这边数据结构还没看懂,那边单片机电路图,数电逻辑门电路图又来了,真是崩溃。可能学软件的会不服,唉不服就不服吧,洛阳亲友如相问,我说你在敲代码。

     说说我这学期学Java的感受吧,上课呢,几乎是不听的。哇,不是我不听啊,是不知道听啥,一上课,老师先在讲台上操作一波,装jdk啦,配置变量啦,安装文本编辑器啦,先胡乱来一通,然后打开JAVA API帮助文档,然后,你懂的,对着文档和书本,然后一节课没了。没办法,只好自己上网找视频自学,然后买书看(这里推荐视频——《韩顺平零基础学Java》以及书籍《Java编程思想》个人觉得还行,Java编程思想有点深,略微看看,学完基础的可以回头再看),你还别说,这一自学,觉得还挺有意思,意思在哪呢,居然可以自学了,哈哈哈,当然啦,我是开玩笑的。这自学的本事还是要有的。总之,既然选择学习·一门语言,就安心学吧,管它火不火,未来怎么样,脚踏实地就好。好,文章铺垫吹逼到此先告一段落,等我讲完关键的在继续吹,哈哈啊哈。

    我们切入正题,大学里学过编程语言的都知道,然后都要附加一个啥实验设计课,这一到期末。可苦了不少人,这课程设计怎么做啊,是个问题啊,没办法,到处找同班牛逼的同学,组个队,先不管三七二十一,报上大腿在讲。这学期,课设题目一下来,我**的懵了,这啥玩意啊,推箱子游戏,象棋游戏,飞机大战,坦克大战,在线聊天,各种系统,这都什么万一嘛。上课对着PPt,实验课就讲点简单的创建类,创建构造方法,然后课设来这一通,可把我搞坏了。没办法,程序员嘛,最忌讳的就是沉不住气,莫慌,我来思考一波,做游戏,像象棋,飞机大战等肯定要做算法,不行直接pass,我就连数据结构都没学好,谈什么算法,那就做系统吧,仔细一想,还挺简单,莫非就是实现几个功能,增删改查,在一想那肯定要数据库,再深一点,既然用Java做,肯定要可视化界面,那么GUI逃不掉,既然这样,我毫不犹豫的选择了小型学生管理系统,好就它了,叫上我那两个不靠谱的队友,让他们把Java GUI好好看看,剩下的我来做。

     当晚,就进入实战,首先我们来安装数据库,配置好数据库,建立STUDENT数据库,建立表stu,好啦,这都是数据库的内容,应该都会的,不行的找度娘。(数据库用的是MySQL-5.1.51,数据库安装程序以及对应的jar包我已上传至网盘Msq_l5.1.51(提取码:1wdz)。然后是想想该干嘛,题目是这样的(如下图),是不是很懵,然后好啦,是最艰难的部分,系

功能的设计,想了好多,去你的,就来个界面加几个按钮,实现几个增删改查的功能吧,我在纸上画了功能流程图,唉,技术太烂,画不好。

好的,我们来看看代码部分。(本人编程菜鸟,不喜勿喷)

 话不多说,上代码→

第一步,创建好项目,创建package,创建类,导包(所需要的包已经打包上传至网盘,链接在上面)

首先是主类部分,也就是主界面部分

class Student:

public class Student extends JFrame implements ActionListener 
{
    //定义面板所需组件
	JTable jt = null;
	JScrollPane jsp = null;
	JPanel jp1 ,jp2,jp3;
	JButton jb1,jb2,jb3,jb4;
	JLabel jl1;
	JTextField jtf;
	Table_Model tm;
	  
	public static void main(String[] args) 
	{
		Student s1 = new Student();
	}
	
	//构造student的函数
	public Student() {
		
		
//上部
		jp1 = new JPanel();
		jtf = new JTextField(15);
		jb1 = new JButton("查询");
		//注册jb1的监听器
		jb1.addActionListener(this);
		jl1 = new JLabel("请输入名字");
		
		jp1.add(jl1);
		jp1.add(jtf);
		jp1.add(jb1);

		
		
//下部
		jp2 = new JPanel();
		jb2 = new JButton("添加");
		jb3 = new JButton("修改");
		jb4 = new JButton("删除");
		
		jb2.addActionListener(this);
		jb3.addActionListener(this);
		jb4.addActionListener(this);

		
		jp2.add(jb2);
		jp2.add(jb3);
		jp2.add(jb4);

		
//中部
		
		 //* 创建一个数据模型对象,更新table
		Table_Model tm = new Table_Model();
		
		//初始化jtable
		jt = new JTable(tm);
		
		//初始化JScrollBar
		jsp = new JScrollPane(jt);
		jsp.getHorizontalScrollBar();
		
		//设置jframe
		this.add(jsp);
		this.add(jp1,"North");
		this.add(jp2,"South");
		this.setSize(400, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setTitle("小型学生管理系统");
		this.setLocationRelativeTo(null);	
		
	}

	//监听
	public void actionPerformed(ActionEvent e) 
	{
		
		//判断点击的按钮
		
		//1、查询
		if(e.getSource() == jb1)  //使用getsource方法时,要保证复写的actionPerformed方法与所监听的按钮在同一个类中
		{
			//获取jtf的信息
			String name = this.jtf.getText().trim() ;
			//给一个sql语句
			String sql = "select * from stu where name = '"+name+"'";
			//构建新的数据模型。并更新
			Table_Model tm = new Table_Model(sql);
			//将查询到的信息写到jtable中
			jt.setModel(tm);
			System.out.println("查询成功");
			
		}
		
		//2、添加
		else if(e.getSource() == jb2) 
		{
			Table_add ta = new Table_add(this,"添加学生",true);
			Table_Model tm = new Table_Model();
			jt.setModel(tm);
			
		}
		//3、修改
		else if(e.getSource()==jb3) 
		{
			int rownum =this.jt.getSelectedRow();
			if(rownum==-1)
			{
			//提示
			JOptionPane.showMessageDialog(this,"请选择一行");
			return;
			}
			else {
				 //显示修改对话框
			     Table_Update tu= new Table_Update(this,"修改对话框",true,rownum);
			}
			Table_Model tm = new Table_Model();
			jt.setModel(tm);
		}
		
        //4、删除
		else if(e.getSource() == jb4)
		{
			int rownum =this.jt.getSelectedRow();
			if(rownum == -1) {
				JOptionPane.showMessageDialog(this, "请选择一行");
				return;
			}
			
			else {
				Table_Model tm = new Table_Model();
				
				//获取学生id
				int id = (Integer)tm.getValueAt(rownum, 0);
				System.out.println(id);
				
				PreparedStatement ps = null;
				try {
					Class.forName("com.mysql.jdbc.Driver");
					Connection ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root", "123");
					ps=  ct.prepareStatement("delete from stu where id = ?;");
					ps.setInt(1, id);
					ps.executeUpdate();
				}
				catch(Exception e4) {
					e4.printStackTrace();
				}
				//刷新表格
				 tm = new Table_Model();
				 jt.setModel(tm);
			
			}
			
		}
	  }

Table_Model类继承了AbstractTableModel,可以参照这篇文章理解一下点击打开链接(感谢这位叫Terry_dong的作者,如有侵犯版权与我联系,会立即删除文章)。这个类的作用至关重要,因为增删改查的每个功能都要用到它。那我来说一下他的作用吧,其实呢,它是用来刷新主界面的表格数据的,也就是将数据写到JTable中,因为,每执行一次功能都要将执行后的结果放到表格上,而如果不创建这个类,那么就要在每个功能类中区写重复的代码,不觉得这样很蠢么,其实这个类也没什么难的,无非加载驱动,提取数据库中的数据,然后通过AbstractTableModel中的方法,对行列数据进行更新。其中,这个类有查询功能函数public void inint(String sql)实现了这个功能,然后在构造函数中public Table_Model(String sql) {this.inint(sql);}再次调用这个函数,通过传入的sql语句进行查询。再这里,一定要学会数据的链接,

Class.forName("com.mysql.jdbc.Driver");

ct= DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root", "123")

ps =  ct.prepareStatement(sql);rs = ps.executeQuery();

关于这部分内容可以去百度一下用法

class Table_add:

public class Table_add extends JDialog implements ActionListener{
	JLabel jl1,jl2,jl3,jl4,jl5;
	JButton jb1,jb2;
	JTextField jtf1,jtf2,jtf3,jtf4,jtf5;
	JPanel jp1,jp2,jp3;
	
	//构造函数,定义一个添加信息页面//Frame 父窗口,title窗口名字,指定模式或非模式
	
	public Table_add(Frame owner,String title,boolean modal) {
		
		super(owner,title,modal);
		
		jl1 = new JLabel("学号");
		jl2 = new JLabel("姓名");
		jl3 = new JLabel("系别");
		jl4 = new JLabel("性别");
		jl5 = new JLabel("年龄");
		
		
		jtf1 = new JTextField();
		jtf2 = new JTextField();
		jtf3 = new JTextField();
		jtf4 = new JTextField();
		jtf5 = new JTextField();
		
		jb1 = new JButton("添加");
		jb2 = new JButton("取消");
		
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		
		
		//设置布局,添加组件
		jp1.setLayout(new GridLayout(5, 1));
		jp2.setLayout(new GridLayout(5, 1));
		
		jp1.add(jl1);
		jp1.add(jl2);
		jp1.add(jl3);
		jp1.add(jl4);
		jp1.add(jl5);
		
		jp2.add(jtf1);
		jp2.add(jtf2);
		jp2.add(jtf3);
		jp2.add(jtf4);
		jp2.add(jtf5);
		
		
		jp3.add(jb1);
		jp3.add(jb2);
		
		
		this.add(jp1,BorderLayout.WEST);
		this.add(jp2,BorderLayout.CENTER);
		this.add(jp3, BorderLayout.SOUTH);
		
		jb1.addActionListener(this);
		
		this.setSize(300, 200);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		
		
	}

	
   public void actionPerformed(ActionEvent e) {
		if(e.getSource() == jb1) {
			
			//连接数据库所需变量
			Connection ct = null;
			Statement stm = null;
			ResultSet rs = null;
			PreparedStatement ps = null;
			
			try {
				Class.forName("com.mysql.jdbc.Driver");
				ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root", "123");
				ps =  ct.prepareStatement("insert into stu values(?,?,?,?,?);");
				
				//获取数据
				ps.setInt(1, Integer.parseInt(this.jtf1.getText().trim()));
				ps.setString(2, this.jtf2.getText().trim());
				ps.setString(3, this.jtf3.getText().trim());
				ps.setString(4, this.jtf4.getText().trim());
				ps.setString(5, this.jtf5.getText().trim());
				
				int i = ps.executeUpdate();
				if(i != 0) {
					
					System.out.println("添加成功");				
				}
				else {
				
					System.out.println("添加失败");		
				}
			}
			catch(Exception e2) {
				e2.printStackTrace();
				
			}
			finally {
				
				try {
					ct.close();
					ps.close();
				}
				catch (Exception e2) {
					
					e2.printStackTrace();
				}
			}
			this.dispose();	
		
		}
		
		else if(e.getSource() == jb2) {
			dispose();
		}
    }
	
}

 

Table_add实现了数据库添加数据的功能,代中的 JDialogde的使用方法可以参照文章点击打开链接,这个类呢,实现了一个弹出新的窗口的功能,当点击添加按钮,就会弹出新的窗口,将填进文本框的内容通过行列的转换添加到数据库中,并通过Table_Model将添加后的结果刷新到主界面上
                                          
 class Table_Update:
public class Table_Update extends JDialog implements ActionListener {
	//定义我需要的swing组件
    JLabel jl1, jl2,jl3, jl4, jl5 ,jl6;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
    JPanel jp1,jp2,jp3;
    //将table对象作为变量传过来
	Table_Model tm = new Table_Model();

	//构造函数 Frame代表父窗口口,title代表窗口的名字,model指定是模式窗口,还是非模式的窗口,rownum代表行号
	public Table_Update(Frame owner,String title,boolean model,int rownum) {
		
		super(owner,title, model); 
		jl1=new JLabel("学号");
		jl2=new JLabel("姓名");
		jl3=new JLabel("系别");
		jl4=new JLabel("性别");
		jl5=new JLabel("年龄");
		jtf1=new JTextField();
		jtf2=new JTextField();
		jtf3=new JTextField();
		jtf4=new JTextField();
		jtf5=new JTextField();
		//初始化数据
		jtf1.setText((String)tm.getValueAt(rownum,0).toString());
		//setEditable设置指定的 boolean 变量,以指示此 文本控件 是否应该为可编辑的
		jtf1.setEditable(false);
		//jtf1.setText((String)tm.getValueAt(rownum,0));
		jtf2.setText((String)tm.getValueAt(rownum,1));
		jtf3.setText((String)tm.getValueAt(rownum,2));
		jtf4.setText((String)tm.getValueAt(rownum,3));
		jtf5.setText((String)tm.getValueAt(rownum,4));
		jb1=new JButton ("修改");
		jb2=new JButton ("取消");
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		//设置布局
		jp1.setLayout(new GridLayout(5,1));
		jp2.setLayout(new GridLayout(5,1));
		//添加组件
		jp1.add(jl1);
		jp1.add(jl2);
		jp1.add(jl3);
		jp1.add(jl4);
		jp1.add(jl5);
		jp2.add(jtf1);
		jp2.add(jtf2);
		jp2.add(jtf3);
		jp2.add(jtf4);
		jp2.add(jtf5);
		jp3.add(jb1);
		jp3.add(jb2);
		this.add(jp1,BorderLayout.WEST);
		this.add(jp2,BorderLayout.CENTER);
		this.add(jp3,BorderLayout.SOUTH);
		
		//注册监听
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		//展现
		this.setSize(300,200);
		this.setLocationRelativeTo(null);
		this.setVisible(true);

	}

	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==jb1){
			//连接数据库所需变量
			Connection ct = null;
			Statement stm = null;
			
			PreparedStatement ps = null;
			
			try {
				Class.forName("com.mysql.jdbc.Driver");
				ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root", "123");
				//传入SQL语句
				ps=ct.prepareStatement("update stu set Name=?,deparment=?,sex=?,age=? where id = ?;");

				//获取数据在文本框中显示
				ps.setString(1, this.jtf2.getText());
				ps.setString(2, this.jtf3.getText());
				ps.setString(3, this.jtf4.getText());
				ps.setString(4, this.jtf5.getText());
				ps.setString(5, this.jtf1.getText());
				ps.executeUpdate();
				
				
				int i=ps.executeUpdate();
				if(i==1){
				System.out.println("修改成功");
				}
				else{
				System.out.print("修改失败");
				}
				
				
			}
			catch(Exception e3) {
				e3.printStackTrace();
			}
			finally {
				try {
					ps.close();
					ct.close();
					} 
				catch (SQLException e4) {
					e4.printStackTrace();
					}
			}
			this.dispose();
		}
		else if(e.getSource() == jb2)
		{
		dispose();
		}
	}
	

这个类跟修改一模一样,只是在新的窗口的文本框上提前写好内容,并且可以修改。

数据库部分:

最后呢,我学Java也就个把月,感觉大学就在颓废,这个系统我花了三晚,边看视频边写,不听上网百度各个函数的用法等,就希望大家学习编程语言要脚踏实地,一步一个脚印,编程的路上很快乐,要坚持下去,时间长了,你就能将自己学的知识为自己所用。累了,就来杯95年的Java。最后将所有代码放在这链接点击打开链接密码:yw7z ,供参考。像我这种渣渣,就不往GitHub上传了。

~end

  • 26
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值