精华内容
下载资源
问答
  • 学生信息管理系统jsp课程设计.doc
    千次阅读
    2021-06-11 13:32:49

    455ss百度文库

    理学院

    Shoole of Sciences

    课程设计报告

    设计名称:

    综合训练

    学生姓名:

    xxxxx

    学生学号:

    xxxxx

    所在班级:

    xxxxx

    所在专业:

    信息与计算科学

    指导教师:

    xxxxxx

    设计场所:

    理学院机房

    设计时间:

    第七学期

    课程设计成绩

    总评

    第一项

    第二项

    目 录

    第一章 绪论

    1.1 课程设计目的

    1.2 系统采用的相关技术

    第二章 系统需求分析和总体设计

    2.1 需求分析

    2.1.1 系统需求描述

    2.1.2 功能模块图

    2.1.3 页面及表属性说明

    2.2 软件结构设计

    2.2.1 系统结构图

    系统详细设计与编码

    3.1 访问模块及操作模块

    3.2 系统代码

    3.2.连接数据库的代码

    3.2.2登陆页面代码

    3.2.3添加、删除、查询的代码

    系统测试

    4.1系统管理员的测试

    4.2普通管理员的测试

    总结

    参考文献

    第一章 绪论

    1.1 课程设计目的

    通过课程设计,掌握JSP的相关技术,会利用JSP做一些小型的系统。在做课程设计的过程中,可以增强我们的动手能力,同时也把我们所学的知识融合在一起。这样,我们才会发现在学习过程中,我们所面临的不足,能起到查缺补漏的作用。

    1.2 系统采用的相关技术

    系统主要采用了JSP技术以及orcale数据库的结合,主要实现了学生信息的添加、查询、删除、更新操作。

    配置环境:

    工具:My Eclipse

    服务器: Tomcat 5.5

    JDK: 1.5

    数据库:orcale

    第二章 系统需求分析和概要设计

    2.1 需求分析

    2.1.1 系统需求描述

    随着广大高校的扩招,面对学生信息的管理越来越复杂。工作量也很大,工作人员要投入大量的人力、物力在其中,但是工作效率还是很差,因此,现在都使用系统来管理学生信息。这样,工作效率得到了大大的提高,而且有利于学生信息的管理。也方便学生自己查看自己的信息,如果发现有错误,还可以修改。不仅提高了工作效率,也提高了学生信息的准确率。本系统目前做得比较简单,笼统的才使用了一个学生信息表和管理员信息表。

    本系统主要有两类用户:即管理员用户和普通用户。两类用户,他们所面临的权限是不同的。管理员用户拥有学生信息的学生信息的添加、查询、删除、更新操作。而普通用户只具有查看和添加的权限

    2.1.2 功能模块图

    管理员的功能模块:

    2.1.3 数据库设计

    表的属性如下:

    (1)管理员信息表

    (2)学生信息表

    2.2 软件结构设计

    2.2.1 系统结构图

    系统管理员登陆的流程图:

    第三章 系统详细设计与编码

    3.1 访问模块及操作模块

    3.1.1登陆和注册界面设计 :

    首先要选择登陆者的身份,管理员的账号:liangzi,密码:liangzi。

    登陆成功后:

    3.2 系统代码

    3.2.1连接数据库的代码:

    package jdbc_conn;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    public class ConnDB

    {

    public Connection conn=null;

    public Statement stmt=null;

    public ResultSet rs=null;

    private static String dbDriver="oracle.jdbc.driver.OracleDriver";

    private static String dbUrl="jdbc:oracle:thin:@:1521:ORCL";

    private static String dbUser="liang";

    private static String dbPwd="liang";

    //打开数据库连接

    public static Connection getConnection()

    {

    Connection conn=null;

    try

    {

    Class.forName(dbDriver);

    conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);

    }

    catch(Exception e)

    {

    e.printStackTrace();

    }

    if (conn == null)

    {

    Syst

    更多相关内容
  • 使用MFC实现的一个登录界面,有学生端和管理员端两个用户端,输入不同的账号密码可以进入不同的界面(弹出不同的模态窗口)。运行此程序可能需要VS相应环境支持。学生端账号密码皆为123456;管理员端密码皆为000000...
  • (2)增加学生记录模块,主要实现学生的学号,姓名,性别,家庭住址,各科成绩的录入和...(9)学生信息导出模块,可以在主页面对学生信息进行导出成文本文档进行保存。 (10)退出系统功能,可以在右上角点击关闭。
  • 用户登录界面 package Student_Manage_System; import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.sql.Connection; import java.sql....

    用户登录界面

    在这里插入图片描述

    package Student_Manage_System;
    
    import java.awt.FlowLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    
    //用户登录界面
    public class UserLogin {
    	
    	JTextField name=new JTextField(10);
    	JPasswordField pwd=new JPasswordField(10);
    	//用户登录界面初始化
        public void Init() throws Exception{
        	JFrame f=new JFrame();
        	FlowLayout layout = new FlowLayout(FlowLayout.RIGHT,135,50);
        	JPanel p=new JPanel(layout);
        
        	JLabel label_name=new JLabel();
    		JLabel label_pwd = new JLabel();
    		JButton btn1=new JButton("登录");
    		JButton btn2=new JButton("注册");
        	JButton btn3=new JButton("取消");
        	label_name.setText("用户名");//设置标签内容
    		label_pwd.setText("密码");
        	//创建MyClick1内部类,绑定到登录按钮;
        	MyClick1 mc1=new MyClick1();
        	btn1.addMouseListener(mc1);
        	//创建MyClick2内部类,绑定到注册按钮;
        	MyClick2 mc2=new MyClick2();
        	btn2.addMouseListener(mc2);
        	//创建MyClick3内部类,绑定到退出按钮;
        	MyClick3 mc3=new MyClick3();
        	btn3.addMouseListener(mc3);
        	
        	
        	//将标签,文本域,按钮等添加到面板
        	p.add(label_name);p.add(name);
        	p.add(label_pwd);p.add(pwd);
        	p.add(btn1);p.add(btn2);p.add(btn3);
        	f.add(p);//将面板添加到窗体
        	f.setVisible(true);//设置窗体可见
        	f.setSize(600,450);
        	f.setLocation(650, 350);
        	f.setTitle("登录界面");
        	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体
      
        }
        
        //登录按钮的事件监听
    	public class MyClick1 extends MouseAdapter{
    		public void mouseClicked(MouseEvent e) {
    			//登录,数据库中有表格,判断是否登录成功!;
    			//注册:即插入数据。
    			//获取登录的账号和密码
    			String username=name.getText();
    			String userpwd=pwd.getText();
    
    			//在数据库中进行查找,如果查找成功,账号和密码正确;
    			//获取数据库的连接
    			try {
    				Connection con=DBUtil.getCon("studentdb");
    				//预编译SQL语句
    				//这里需要判断是学生登录还是老师登录
    				String sql="select * from login_info where ID=? and Pwd=? and Job=?";
    				//执行SQL语句
    				//教师登录,跳转教师界面;
    				PreparedStatement prep1=con.prepareStatement(sql);
    				prep1.setString(1, username);//用户名
    				prep1.setString(2, userpwd);//密码
    				prep1.setString(3, "teacher");//工作是teacher
    				ResultSet is_teacher=prep1.executeQuery();
    				//学生登录,跳转学生界面;
    				PreparedStatement prep2=con.prepareStatement(sql);
    				prep2.setString(1, username);
    				prep2.setString(2, userpwd);
    				prep2.setString(3, "student");//工作是student
    				ResultSet is_student=prep2.executeQuery();
    				if(is_teacher.next())//管理员登录
    				{ //跳转管理员界面
    					System.out.println("老师你好,登录成功!");
    					JOptionPane.showMessageDialog(null, "老师您好,登录成功!");
    					Teacher tea=new Teacher();
    					tea.init();
    					//DBUtil.notice("老师你好,登录成功!");
    				}
    				else if(is_student.next())//学生登录
    				{//跳转学生界面
    					System.out.println("学生你好,登录成功!");
    					JOptionPane.showMessageDialog(null, "登录成功!");
    					Students stu=new Students();
    					stu.init();
    					//DBUtil.notice("学生你好,登录成功!");
    				}
    				else
    				{
    					System.out.println("登录失败!");
    					JOptionPane.showMessageDialog(null, "登录失败!");
    				}
    				con.close();
    			} catch (Exception e1) {
    				e1.printStackTrace();
    			}
    			
    		}
    	}
    	//注册按钮的事件监听
    	public class MyClick2 extends MouseAdapter{
    		public void mouseClicked(MouseEvent e) {
    			//System.out.print("注册成功");
    			//跳转进入注册界面
    			try {
    				//DBUtil.notice("注册成功!");
    				Register r=new Register();
    				r.init();
    			} catch (Exception e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    		}
    	}
    	//退出按钮的事件监听
    	public class MyClick3 extends MouseAdapter{
    		public void mouseClicked(MouseEvent e) {
    			//System.out.print(" 退出成功");
    			//结束程序
    			try {
    				JOptionPane.showMessageDialog(null, "退出成功!");
    				System.exit(0);//结束
    			} catch (Exception e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    		}
    	}
    	//启动注册界面
    	public static void main(String[] args) throws Exception {
    		UserLogin login=new UserLogin();
    		login.Init();
    
    	}
    
    }
    
    展开全文
  • 3.6 用户信息管理界面 19 3.7 考勤信息操作界面 22 3.8 学生成绩查询界面 24 3.9 学生考勤信息查询界面 第四章 系统测试 4.1 登陆功能测试 4.2查询功能测试 4.3信息更改功能测试 4.4成绩展示功能测试 第五章 结论与...
  • 学生信息管理系统 功能说明 学生信息管理,包括学生、班级、院系、课程、成绩等的管理。 本程序仅供学习食用。 工程环境 JDK IntelliJ IDEA MySQL 运行说明 1、安装JDK。 2、导入SQL脚本并配置。 使用前...
  • 到此这篇关于基于php+MySql实现学生信息管理系统实例的文章就介绍到这了,更多相关php+MySql实现学生信息管理系统内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
  • 系统初始界面;登陆界面设计 ;学生信息录入;学生信息修改;学生信息查询;学生成绩录入;修改学生成绩;学生成绩查询 ;用户管理 该项目用PyCharm 可直接打开,数据库内嵌,可直接用
  • 系统附有数据库,只需要加载即可使用,其中,用天启动进度条,闪屏,用户登陆(普通用户+管理员),可根据用户的权限不同进入不同的后台界面进行不同的操作,可进行学生管理与登陆用户管理,即增,删,改,查,...
  • 学生信息管理系统

    2017-12-20 14:08:17
    其次,编写一个用于对学生信息进行数据库操作的类,包括:学生信息的增加、修改、删除和查询等。最后,编写一个用于对课程相关信息进行数据库操作的类,包括:对课程信息的增加、修改、删除、查询等等。
  • 学生信息管理系统 此项目包括四个类 StartMySql → 用于启动登录界面 Login → 登录进入操作界面 MySQLGUI → 图形用户界面 OperationMySql → 对数据库数据的操作功能实现 实现概貌: 这个项目的注释真的 真...

    学生信息管理系统

    此项目包括四个类

    1. StartMySql → 用于启动登录界面
    2. Login → 登录进入操作界面
    3. MySQLGUI → 图形用户界面
    4. OperationMySql → 对数据库数据的操作功能实现

    mysql 中 Table 的设计
    涉及三个表
    数据库名 StudentInfo 表名分别为 grade、course、summary

    grade
    IDNameChineseMathEnglish
    course
    IDNameCourseCredit
    summary
    CourseAverage

    实现概貌:
    在这里插入图片描述
    在这里插入图片描述

    • 这个项目的注释真的 真的灰常详细 ~ o( ̄▽ ̄)ブ
    • 此项目代码量在 1000 行左右,纯手打,奥力给

    直接上代码啦

    • 启动单独成类
    // StartMySql.java
    package StudentInfo;
    
    public class StartMySql {
        // 启动登录界面
        public static void main(String[] args) {
            new Login();
        }
    }
    
    
    • 这是一个登录界面的小框框
    // Login.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Login implements ActionListener {
        // 定义主窗口
        private final JFrame jf;
        // 定义输入用户名和密码的标签提示
        private final JLabel InputUserName;
        private final JLabel InputPassWord;
        // 定义输入用户名文本框
        private final JTextField UserName;
        // 定义输入密码框
        private final JPasswordField PassWord;
        // 定义登录和取消按钮
        private final JButton Login;
        private final JButton Cancel;
    
        Login() {
            // 各组件实例化过程
            jf = new JFrame("Login");
            InputUserName = new JLabel("        ID:    ");
            InputPassWord = new JLabel("password:");
            UserName = new JTextField();
            PassWord = new JPasswordField();
            Login = new JButton("登录");
            Cancel = new JButton("退出");
            // 设置主窗口大小、位置和布局
            jf.setSize(400, 150);
            jf.setLocation(600, 400);
            // 设置窗口流式布局
            jf.setLayout(new FlowLayout());
            // 设置用户名和密码框大小
            UserName.setPreferredSize(new Dimension(300, 30));
            PassWord.setPreferredSize(new Dimension(300, 30));
            // 依次向主窗口添加各组件
            jf.getContentPane().add(InputUserName);
            jf.getContentPane().add(UserName);
            jf.getContentPane().add(InputPassWord);
            jf.getContentPane().add(PassWord);
            jf.getContentPane().add(Login);
            jf.getContentPane().add(Cancel);
            // 设置主窗口不可调节大小
            jf.setResizable(false);
            // 设置主窗口默认关闭操作
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 给登录和取消按钮添加 Action 监听器
            Login.addActionListener(this);
            Cancel.addActionListener(this);
            // 设置主窗口可见
            jf.setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            // 如果单击【退出】按钮则程序退出
            if (e.getSource().equals(Cancel)) {
                System.exit(0);
            }
            // 如果单击【登录】按钮则检查用户名和密码是否匹配
            else if (e.getSource().equals(Login)) {
                // 如果用户名和密码匹配,则打开具体操作面板
                if (UserName.getText().equals("admin") && String.valueOf(PassWord.getPassword()).equals("1234")) {
                    // MySQLGUI myS = new MySQLGUI();
                    // myS.initial();
                    new MySQLGUI();
                    jf.setVisible(false);
                    jf.dispose();
                }
                // 如果用户名和密码不匹配,则给出提示对话框
                else {
                    JOptionPane.showOptionDialog(jf, "用户名或密码错误", "登陆失败",
                            JOptionPane.CLOSED_OPTION,
                            JOptionPane.ERROR_MESSAGE, null, null, null);
                }
            }
        }
    }
    
    
    • 这是 GUI 界面代码
    // MySQLGUI.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class MySQLGUI extends JFrame implements MouseListener, ItemListener {
        // 定义选项卡
        private JTabbedPane Base;
        // 定义选项卡上的嵌板
        /*
         * jp1,  添加记录
         * jp2,  删除记录
         * jp3,  更新记录
         * jp4,  查找记录
         * jp5,  选课记录
         * jp6   课程平均分
         *  */
        private JPanel jp1, jp2, jp3, jp4, jp5, jp6;
        // 定义各按钮
        /*
         * InsertRecord, 添加记录按钮
         * InsertReset, 添加取消按钮
         * DeleteRecord, 删除记录按钮
         * DeleteReset, 删除取消按钮
         * QueryRecord, 查询记录按钮
         * UpdateRecord, 更改记录按钮
         * UpdateReset, 重置更新框
         * CourseQuery, 选课表查询按钮
         * GradeQuery, 成绩查询按钮
         * */
        private JButton InsertRecord, InsertReset, DeleteRecord, DeleteReset,
                QueryRecord, UpdateRecord, UpdateReset, CourseQuery, GradeQuery;
        // 定义各标签
        /*
         * InsertID1,      插入学号提示标签
         * InsertName1,    插入姓名提示标签
         * InsertChinese1, 插入语文成绩提示标签
         * InsertMath1,    插入数学提示标签
         * InsertEnglish1, 插入英语提示标签
         * DeleteID1,      删除学号提示标签
         * UpdateID1,      更新学号提示标签
         * */
        private JLabel InsertID1, InsertName1, InsertChinese1, InsertMath1,
                InsertEnglish1, DeleteID1, UpdateID1;
        // 定义各文本框
        /*
         * InsertID2,       插入学号文本框
         * InsertName2,     插入姓名文本框
         * InsertChinese2,  插入语文文本框
         * InsertMath2,     插入数学文本框
         * InsertEnglish2,  插入英语文本框
         * DeleteID2,       所要删除学号的文本框
         * UpdateID2,       所要更新学号的文本框
         * UpdateContent,   更新内容填写文本框
         * IDCondition,     查询ID文本框
         * NameCondition,   查询姓名文本框
         * ChineseCondition,查询语文文本框
         * MathCondition,   查询数学文本框
         * EnglishCondition,查询英语文本框
         * */
        private JTextField InsertID2, InsertName2, InsertChinese2, InsertMath2, InsertEnglish2,
                DeleteID2, UpdateID2, UpdateContent, IDCondition, NameCondition, ChineseCondition, MathCondition,
                EnglishCondition;
        // 定义显示结果文本域 显示 jp4 jp5 jp6 的查询结果
        /*
         * QueryRecordResult,  查询学生信息结果文本域
         * CourseQueryResult,  查询课程信息文本域
         * GradeQueryResult,   查询课程成绩平均分文本域
         * */
        private JTextArea QueryRecordResult, CourseQueryResult, GradeQueryResult;
        // 定义查询选项
        /*
         * ID,       选择学号查询
         * Name,     选择姓名查询
         * Chinese,  选择语文查询
         * Math,     选择数学查询
         * English,  选择英语查询
         * */
        private JRadioButton ID, Name, Chinese, Math, English;
        // 定义一个数据库操作的实例
        private OperationMySql db = null;
        // 定义滚动条
        private JScrollPane scroll = null;
        private JScrollPane CourseScroll = null;
        private JScrollPane GradeScroll = null;
        // 定义一个复选框用于选择更新的项目
        private JComboBox<String> UpdateItem = null;
        // 定义复选框用于选择查询的项目
        private JComboBox<String> CourseItem = null;    // 课程信息复选框
        private JComboBox<String> GradeItem = null;     // 课程成绩复选框
    
        MySQLGUI() {
            // 设置各按钮信息
            setButton();
            // 设置各标签信息
            setLabel();
            // 设置各文本框信息
            setTextField();
            // 设置各面板信息
            setPanel();
            // 设置布局信息
            setLayout();
            // 设置选项卡信息
            setBase();
            // 设置主窗口信息
            setThis();
            // 设置数据库信息
            setDB();
        }
    
        // 设置各按钮信息的方法
        private void setButton() {
            // jp1 上的按钮
            InsertRecord = new JButton("添加");
            InsertRecord.setFont(new Font("宋体", 1, 20));      // 1 代表加粗,20 代表字体大小
            InsertRecord.setBackground(Color.CYAN);
            InsertRecord.setBounds(150, 400, 100, 45);
            InsertRecord.setMargin(new Insets(0, 0, 0, 0));    // 设置按钮的边缘空白为四个方向全为0,也即让按钮中的文本与按钮边缘贴齐
            InsertReset = new JButton("重置");
            InsertReset.setFont(new Font("宋体", 1, 20));
            InsertReset.setBackground(Color.CYAN);
            InsertReset.setBounds(300, 400, 100, 45);
            InsertReset.setMargin(new Insets(0, 0, 0, 0));
            // jp2 上的按钮
            DeleteRecord = new JButton("删除信息");
            DeleteRecord.setFont(new Font("宋体", 1, 20));
            DeleteRecord.setBackground(Color.CYAN);
            DeleteRecord.setBounds(150, 350, 100, 45);
            DeleteRecord.setMargin(new Insets(0, 0, 0, 0));
            DeleteReset = new JButton("重置");
            DeleteReset.setFont(new Font("宋体", 1, 20));
            DeleteReset.setBackground(Color.CYAN);
            DeleteReset.setBounds(300, 350, 100, 45);
            DeleteReset.setMargin(new Insets(0, 0, 0, 0));
            // jp3 上的按钮
            UpdateRecord = new JButton("更新");
            UpdateRecord.setFont(new Font("宋体", 1, 20));
            UpdateRecord.setBackground(Color.CYAN);
            UpdateRecord.setBounds(250, 400, 100, 45);
            UpdateReset = new JButton("重置");
            UpdateReset.setFont(new Font("宋体", 1, 20));
            UpdateReset.setBackground(Color.CYAN);
            UpdateReset.setBounds(400, 400, 100, 45);
            // jp4 上的按钮
            ID = new JRadioButton("学号");
            ID.setFont(new Font("宋体", 1, 15));
            ID.setMargin(new Insets(0, 0, 0, 0));
            ID.setBounds(30, 300, 55, 20);
            Name = new JRadioButton("姓名");
            Name.setFont(new Font("宋体", 1, 15));
            Name.setMargin(new Insets(0, 0, 0, 0));
            Name.setBounds(30, 330, 55, 20);
            Chinese = new JRadioButton("语文");
            Chinese.setFont(new Font("宋体", 1, 15));
            Chinese.setMargin(new Insets(0, 0, 0, 0));
            Chinese.setBounds(30, 360, 55, 20);
            Math = new JRadioButton("数学");
            Math.setFont(new Font("宋体", 1, 15));
            Math.setMargin(new Insets(0, 0, 0, 0));
            Math.setBounds(30, 390, 55, 20);
            English = new JRadioButton("英语");
            English.setFont(new Font("宋体", 1, 15));
            English.setMargin(new Insets(0, 0, 0, 0));
            English.setBounds(30, 420, 55, 20);
            QueryRecord = new JButton("查询");
            QueryRecord.setFont(new Font("宋体", 1, 20));
            QueryRecord.setBackground(Color.CYAN);
            QueryRecord.setBounds(600, 400, 80, 45);
            // jp5 上的按钮
            CourseQuery = new JButton("查询");
            CourseQuery.setFont(new Font("宋体", 1, 20));
            CourseQuery.setBackground(Color.CYAN);
            CourseQuery.setBounds(600, 400, 80, 45);
            // jp6 上的按钮
            GradeQuery = new JButton("查询");
            GradeQuery.setFont(new Font("宋体", 1, 20));
            GradeQuery.setBackground(Color.PINK);
            GradeQuery.setBounds(600, 400, 80, 45);
            // 按键监听初始化
            initial();
        }
    
        // 设置各标签信息的方法
        private void setLabel() {
            // jp1 上的标签
            InsertID1 = new JLabel("学    号:");
            InsertID1.setFont(new Font("楷体", 1, 22));
            InsertID1.setBackground(Color.GREEN);
            InsertID1.setBounds(100, 40, 120, 50);
            InsertName1 = new JLabel("姓    名:");
            InsertName1.setFont(new Font("楷体", 1, 22));
            InsertName1.setBackground(Color.GREEN);
            InsertName1.setBounds(100, 100, 120, 50);
            InsertChinese1 = new JLabel("语文成绩:");
            InsertChinese1.setFont(new Font("楷体", 1, 22));
            InsertChinese1.setBackground(Color.GREEN);
            InsertChinese1.setBounds(100, 160, 120, 50);
            InsertMath1 = new JLabel("数学成绩:");
            InsertMath1.setFont(new Font("楷体", 1, 22));
            InsertMath1.setBackground(Color.GREEN);
            InsertMath1.setBounds(100, 220, 120, 50);
            InsertEnglish1 = new JLabel("英语成绩:");
            InsertEnglish1.setFont(new Font("楷体", 1, 22));
            InsertEnglish1.setBackground(Color.GREEN);
            InsertEnglish1.setBounds(100, 280, 120, 50);
            // jp2 上的标签
            DeleteID1 = new JLabel("学  号:");
            DeleteID1.setBounds(100, 100, 100, 50);
            DeleteID1.setFont(new Font("楷体", 1, 22));
            // jp3 上的标签
            UpdateID1 = new JLabel("学  号:");
            UpdateID1.setFont(new Font("楷体", 1, 22));
            UpdateID1.setBounds(200, 60, 120, 50);
            UpdateItem = new JComboBox<>();
            UpdateItem.setFont(new Font("楷体", 1, 22));
            UpdateItem.setBounds(200, 200, 100, 45);
            UpdateItem.addItem("姓名");
            UpdateItem.addItem("语文");
            UpdateItem.addItem("数学");
            UpdateItem.addItem("英语");
            // jp4 上的标签
            //...
            // jp5 上的标签
            CourseItem = new JComboBox<>();
            CourseItem.setFont(new Font("楷体", 1, 22));
            CourseItem.setBounds(100, 40, 140, 45);
            CourseItem.addItem("语文");
            CourseItem.addItem("数学");
            CourseItem.addItem("英语");
            // jp6 上的标签
            GradeItem = new JComboBox<>();
            GradeItem.setFont(new Font("楷体", 1, 22));
            GradeItem.setBounds(100, 40, 140, 45);
            GradeItem.addItem("语文");
            GradeItem.addItem("数学");
            GradeItem.addItem("英语");
        }
    
        // 设置各文本框信息的方法
        private void setTextField() {
            // jp1 上的文本框
            InsertID2 = new JTextField();
            InsertID2.setFont(new Font("宋体", 1, 23));
            InsertID2.setBounds(210, 40, 200, 35);
            InsertName2 = new JTextField();
            InsertName2.setFont(new Font("宋体", 1, 23));
            InsertName2.setBounds(210, 100, 200, 35);
            InsertChinese2 = new JTextField();
            InsertChinese2.setFont(new Font("宋体", 1, 23));
            InsertChinese2.setBounds(210, 160, 200, 35);
            InsertMath2 = new JTextField();
            InsertMath2.setFont(new Font("宋体", 1, 23));
            InsertMath2.setBounds(210, 220, 200, 35);
            InsertEnglish2 = new JTextField();
            InsertEnglish2.setFont(new Font("宋体", 1, 23));
            InsertEnglish2.setBounds(210, 280, 200, 35);
            // jp2 上的文本框
            DeleteID2 = new JTextField("输入要删除信息的学号");
            DeleteID2.setFont(new Font("楷体", 1, 25));
            DeleteID2.setBounds(210, 100, 350, 50);
            // jp3 上的文本框
            UpdateID2 = new JTextField();
            UpdateID2.setFont(new Font("楷体", 1, 20));
            UpdateID2.setBounds(310, 60, 200, 45);
            UpdateContent = new JTextField("更新内容");
            UpdateContent.setFont(new Font("楷体", 0, 22));
            UpdateContent.setBounds(310, 200, 200, 45);
            // jp4 上的文本框
            QueryRecordResult = new JTextArea("查询结果:");
            QueryRecordResult.setFont(new Font("楷体", 1, 20));
            //QueryRecordResult.setBounds(30,30,560,260);
            QueryRecordResult.setEditable(false);
            QueryRecordResult.setLineWrap(true);        // 当一行文字过多时自动换行
            scroll = new JScrollPane(QueryRecordResult);      // 添加滚动条
            scroll.setBounds(30, 30, 560, 260);
            scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);    // 当需要垂直滚动条时显示
            scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);// 当需要水平滚动条时显示
            IDCondition = new JTextField();
            IDCondition.setFont(new Font("宋体", 1, 18));
            IDCondition.setBounds(90, 300, 100, 21);
            NameCondition = new JTextField();
            NameCondition.setFont(new Font("宋体", 1, 18));
            NameCondition.setBounds(90, 330, 100, 21);
            ChineseCondition = new JTextField();
            ChineseCondition.setFont(new Font("宋体", 1, 18));
            ChineseCondition.setBounds(90, 360, 100, 21);
            MathCondition = new JTextField();
            MathCondition.setFont(new Font("宋体", 1, 18));
            MathCondition.setBounds(90, 390, 100, 21);
            EnglishCondition = new JTextField();
            EnglishCondition.setFont(new Font("宋体", 1, 18));
            EnglishCondition.setBounds(90, 420, 100, 21);
            IDCondition.setEditable(false);
            NameCondition.setEditable(false);
            ChineseCondition.setEditable(false);
            MathCondition.setEditable(false);
            EnglishCondition.setEditable(false);
            // jp5 上的文本框
            CourseQueryResult = new JTextArea("查询结果:");
            CourseQueryResult.setFont(new Font("楷体", 1, 20));
            CourseQueryResult.setEditable(false);
            CourseQueryResult.setLineWrap(true);
            CourseScroll = new JScrollPane(CourseQueryResult);
            CourseScroll.setBounds(20, 100, 560, 340);
            CourseScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            CourseScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            // jp6 上的文本框
            GradeQueryResult = new JTextArea("查询结果:");
            GradeQueryResult.setFont(new Font("楷体", 1, 20));
            GradeQueryResult.setEditable(false);
            GradeQueryResult.setLineWrap(true);
            GradeScroll = new JScrollPane(GradeQueryResult);
            GradeScroll.setBounds(20, 100, 560, 340);
            GradeScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            GradeScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        }
    
        // 设置各面板信息的方法
        private void setPanel() {
            jp1 = new JPanel();
            jp2 = new JPanel();
            jp3 = new JPanel();
            jp4 = new JPanel();
            jp5 = new JPanel();
            jp6 = new JPanel();
        }
    
        // 设置布局信息的方法
        private void setLayout() {
            // 添加 jp1 的组件
            jp1.setLayout(null);
            jp1.add(InsertRecord);
            jp1.add(InsertReset);
            jp1.add(InsertID1);
            jp1.add(InsertName1);
            jp1.add(InsertChinese1);
            jp1.add(InsertMath1);
            jp1.add(InsertEnglish1);
            jp1.add(InsertID2);
            jp1.add(InsertName2);
            jp1.add(InsertChinese2);
            jp1.add(InsertMath2);
            jp1.add(InsertEnglish2);
            // 添加 jp2 上的组件
            jp2.setLayout(null);
            jp2.add(DeleteID1);
            jp2.add(DeleteID2);
            jp2.add(DeleteRecord);
            jp2.add(DeleteReset);
            // 添加 jp3 上的组件
            jp3.setLayout(null);
            jp3.add(UpdateID1);
            jp3.add(UpdateID2);
            jp3.add(UpdateItem);
            jp3.add(UpdateContent);
            jp3.add(UpdateRecord);
            jp3.add(UpdateReset);
            // 添加 jp4 上的组件
            jp4.setLayout(null);
            // jp4.add(QueryRecordResult);
            jp4.add(scroll);
            jp4.add(QueryRecord);
            jp4.add(ID);
            jp4.add(Name);
            jp4.add(Chinese);
            jp4.add(Math);
            jp4.add(English);
            jp4.add(IDCondition);
            jp4.add(NameCondition);
            jp4.add(ChineseCondition);
            jp4.add(MathCondition);
            jp4.add(EnglishCondition);
            // 添加 jp5 上的组件
            jp5.setLayout(null);
            jp5.add(CourseItem);
            jp5.add(CourseQuery);
            jp5.add(CourseScroll);
            // 添加 jp6 上的组件
            jp6.setLayout(null);
            jp6.add(GradeQuery);
            jp6.add(GradeItem);
            jp6.add(GradeScroll);
        }
    
        // 设置选项卡信息的方法
        private void setBase() {
            Base = new JTabbedPane(JTabbedPane.TOP);
            Base.addTab("添加记录", jp1);
            Base.addTab("删除记录", jp2);
            Base.addTab("更新记录", jp3);
            Base.addTab("查找记录", jp4);
            Base.addTab("选课记录", jp5);
            Base.addTab("课程平均分", jp6);
        }
    
        // 设置主窗口信息的方法
        private void setThis() {
            this.add(Base);
            this.setTitle("学生信息管理系统");
            this.setLocation(300, 200);
            this.setSize(800, 550);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setResizable(false);
            this.setVisible(true);
        }
    
        // 设置数据库信息的方法
        private void setDB() {
            db = new OperationMySql();
            // 连接 mysql
            db.setDburl("jdbc:mysql://localhost:3306/StudentInfo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
            // 加载驱动
            db.setDbdriver("com.mysql.cj.jdbc.Driver");
            // 这里的用户名和密码是要和你的 mysql 对应的,也是唯一需要更改的地方
            db.setUsername("root");
            db.setPassword("6666");
        }
    
        // 初始化
        void initial() {
            // 给各按钮添加监听器
            // InsertRecord, InsertReset, DeleteRecord, DeleteReset, QueryRecord, UpdateRecord, CourseQuery, GradeQuery;
            InsertRecord.addMouseListener(this);
            InsertReset.addMouseListener(this);
            DeleteRecord.addMouseListener(this);
            DeleteReset.addMouseListener(this);
            QueryRecord.addMouseListener(this);
            UpdateRecord.addMouseListener(this);
            UpdateReset.addMouseListener(this);
            CourseQuery.addMouseListener(this);
            GradeQuery.addMouseListener(this);
            // 给各复选按钮添加监听器
            // ID,Name, Chinese, Math, English
            ID.addItemListener(this);
            Name.addItemListener(this);
            Chinese.addItemListener(this);
            Math.addItemListener(this);
            English.addItemListener(this);
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
            // 添加按钮功能
            // 点击重置键则清空文本框
            if (e.getSource().equals(InsertReset)) {
                InsertID2.setText("");
                InsertID2.setFont(new Font("宋体", 1, 23));
                InsertName2.setText("");
                InsertName2.setFont(new Font("宋体", 1, 23));
                InsertChinese2.setText("");
                InsertChinese2.setFont(new Font("宋体", 1, 23));
                InsertMath2.setText("");
                InsertMath2.setFont(new Font("宋体", 1, 23));
                InsertEnglish2.setText("");
                InsertEnglish2.setFont(new Font("宋体", 1, 23));
            } else if (e.getSource().equals(InsertRecord)) {
                // 添加记录功能
                String InsertStuID = InsertID2.getText();
                String InsertStuName = InsertName2.getText();
                String InsertStuChinese = InsertChinese2.getText();
                String InsertStuMath = InsertMath2.getText();
                String InsertStuEnglish = InsertEnglish2.getText();
                try {
                    db.setRs(db.executeQuery(InsertStuID));
                    if (!db.getRs().next()) {
                        db.executeInsert(InsertStuID, InsertStuName, InsertStuChinese, InsertStuMath, InsertStuEnglish);
                        JOptionPane.showOptionDialog(this, "添加信息成功!", "数据库操作提示",
                                JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "添加失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(DeleteReset)) {
                // 删除重置功能
                DeleteID2.setText("");
                DeleteID2.setFont(new Font("楷体", 1, 25));
            } else if (e.getSource().equals(DeleteRecord)) {
                // 删除功能
                String DeleteStuID = DeleteID2.getText();
                try {
                    db.setRs(db.executeQuery(DeleteStuID));
                    if (db.getRs().next()) {
                        db.executeDelete(DeleteStuID);
                        JOptionPane.showOptionDialog(this, "删除成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "删除失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            } else if (e.getSource().equals(UpdateReset)) {
                // 重置更新框功能
                UpdateID2.setText("");
                UpdateID2.setFont(new Font("宋体", 1, 20));
                UpdateContent.setText("");
                UpdateContent.setFont(new Font("宋体", 1, 20));
            } else if (e.getSource().equals(UpdateRecord)) {
                // 完成更新功能
                String UpdateStuID = UpdateID2.getText();
                try {
                    db.setRs(db.executeQuery(UpdateStuID));
                    if (!db.getRs().next()) {
                        JOptionPane.showOptionDialog(this, "没有记录无法更新",
                                "温馨提示", JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE,
                                null, null, null);
                    } else {
                        String updateItem = null;
                        // 更新选项是姓名
                        if (UpdateItem.getSelectedItem().toString().equals("姓名")) {
                            updateItem = "Name";
                        }
                        // 更新的是语文成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("语文")) {
                            updateItem = "Chinese";
                        }
                        // 更新的是数学成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("数学")) {
                            updateItem = "Math";
                        }
                        // 更新的是英语成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("英语")) {
                            updateItem = "English";
                        }
                        db.executeUpdate(UpdateStuID, updateItem, UpdateContent.getText());
                        JOptionPane.showOptionDialog(this, "更新成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(QueryRecord)) {
                // 完成查询功能
                try {
                    // 默认设置各检索条件均为通配符
                    String a = "%", b = "%", c = "%", d = "%", f = "%";
                    // 如果 ID 选项被选中,则获得该选项的输入内容
                    if (ID.isSelected() && !IDCondition.getText().trim().isEmpty()) {
                        a = IDCondition.getText();
                    }
                    // 如果 Name 选项被选中,则获得该选项的输入内容
                    if (Name.isSelected() && !NameCondition.getText().trim().isEmpty()) {
                        b = NameCondition.getText();
                    }
                    // 如果 Math 选项被选中,则获得该选项的输入内容
                    if (Math.isSelected() && !MathCondition.getText().trim().isEmpty()) {
                        d = MathCondition.getText();
                    }
                    // 如果 English 选项被选中,则获得该选项的输入内容
                    if (English.isSelected() && !EnglishCondition.getText().trim().isEmpty()) {
                        f = EnglishCondition.getText();
                    }
                    // 如果 Chinese 选项被选中,则获得该选项的输入内容
                    if (Chinese.isSelected() && !ChineseCondition.getText().trim().isEmpty()) {
                        c = ChineseCondition.getText();
                    }
                    // 根据各选项检索关键字进行查询,并返回结果集
                    db.setRs(db.executeQueryByCondition(a, b, c, d, f));
                    // 定义结果集中记录条数
                    int i = 0;
                    QueryRecordResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++i;
                        QueryRecordResult.append("\r\n" + "第" + i + "条记录:" + "\r\n"
                                + "学号:" + db.getRs().getString(1) + "\r\n"
                                + "姓名:" + db.getRs().getString(2) + "\r\n"
                                + "语文:" + db.getRs().getString(3) + "\r\n"
                                + "数学:" + db.getRs().getString(4) + "\r\n"
                                + "英语:" + db.getRs().getString(5) +
                                ("\r\n--------------------------------------"));
                    }
                    QueryRecordResult.setText(QueryRecordResult.getText() +
                            "\r\n" + "共有" + i + "条学生记录");
                } catch (Exception e1) {
                    e1.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(CourseQuery)) {
                // 完成选课查询
                String Course = CourseItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByCourse(Course));
                    int count = 0;
                    CourseQueryResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++count;
                        CourseQueryResult.append("\r\n" + "第" + count + "条记录" + "\r\n"
                                + "学号: " + db.getRs().getString(1) + "\r\n"
                                + "姓名: " + db.getRs().getString(2) + "\r\n"
                                + "课程: " + db.getRs().getString(3) + "\r\n"
                                + "学分: " + db.getRs().getString(4) +
                                ("\r\n--------------------------------------"));
                    }
                    CourseQueryResult.setText(CourseQueryResult.getText() +
                            "\r\n" + "共有" + count + "条选课记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(GradeQuery)) {
                // 完成课程平均分统计查询
                String Course = GradeItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByGrade(Course));
                    int j = 0;
                    GradeQueryResult.setText("查询结果:");
                    // 输出查询结果集
                    while (db.getRs().next()) {
                        ++j;
                        GradeQueryResult.append("\r\n" + "第" + j + "条记录" + "\r\n"
                                + "课程: " + db.getRs().getString(1) + "\t" +
                                "平均分: " + db.getRs().getString(2) +
                                ("\r\n--------------------------------------"));
                    }
                    GradeQueryResult.setText(GradeQueryResult.getText() +
                            "\r\n" + "共有" + j + "条记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            }
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
    
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
    
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
    
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
    
        }
    
        @Override
        public void itemStateChanged(ItemEvent e) {
            // 如果查询选项 ID 被选中,则可以输入 ID 进行查询
            if (e.getSource().equals(ID)) {
                IDCondition.setEditable(ID.isSelected());
            }
            // 如果选项姓名被选中,则可以输入姓名进行查询
            else if (e.getSource().equals(Name)) {
                NameCondition.setEditable(Name.isSelected());
            }
            // 如果语文被选中,则可以输入语文成绩进行查询
            else if (e.getSource().equals(Chinese)) {
                ChineseCondition.setEditable(Chinese.isSelected());
            }
            // 如果数学选项被选中,则可以输入数学成绩查询
            else if (e.getSource().equals(Math)) {
                MathCondition.setEditable(Math.isSelected());
            }
            // 如果英语选项被选中,则可以输入英语成绩来查询
            else if (e.getSource().equals(English)) {
                EnglishCondition.setEditable(English.isSelected());
            }
        }
    }
    
    
    • 最后一个类实现数据库的有关操作
    // OperationMySql.java
    package StudentInfo;
    
    import java.sql.*;
    
    public class OperationMySql {
        // 定义数据库连接url
        private String dburl = null;
        // 定义数据库连接
        private Connection conn = null;
        // 定义数据库状态
        private PreparedStatement stmt = null;
        // 定义数据库返回结果集
        private ResultSet rs = null;
        // 定义数据库用户名
        private String username = null;
        // 定义数据库连接密码
        private String password = null;
        // 定义数据库驱动方式
        private String dbdriver = null;
    
        // 设置数据库连接url的方法
        public void setDburl(String dburl) {
            this.dburl = dburl;
        }
    
        // 返回当前实例数据库连接url
        public String getDburl() {
            return dburl;
        }
    
        // 返回当前实例结果集的方法
        public ResultSet getRs() {
            return rs;
        }
    
        // 设置当前实例结果集的方法
        public void setRs(ResultSet rs) {
            this.rs = rs;
        }
    
        // 设置数据库用户名的方法
        public void setUsername(String username) {
            this.username = username;
        }
    
        // 返回当前实例化数据库用户名
        public String getUsername() {
            return username;
        }
    
        // 设置数据库连接的方法
        public void setPassword(String password) {
            this.password = password;
        }
    
        // 返回当前实例数据库连接密码
        public String getPassword() {
            return password;
        }
    
        // 设置数据库驱动方式的方法
        public void setDbdriver(String dbdriver) {
            this.dbdriver = dbdriver;
        }
    
        // 返回当前实例数据库驱动方式的方法
        public String getDbdriver() {
            return dbdriver;
        }
    
        // 创建数据库连接的方法
        Connection CreateConnection(String dburl, String username, String password) throws Exception {
            setDburl(dburl);
            setUsername(username);
            setPassword(password);
            Class.forName(getDbdriver());
            // 根据数据库路径、用户名和密码创建连接并返回该连接
            return DriverManager.getConnection(dburl, username, password);
        }
    
        // 关闭结果集的方法
        public void CloseRS() {
            try {
                rs.close();
            } catch (SQLException e) {
                System.out.println("关闭结果集时发生错误!");
            }
        }
    
        // 关闭状态的方法
        public void CloseStmt() {
            try {
                stmt.close();
            } catch (SQLException e) {
                System.out.println("关闭状态时发生错误!");
            }
        }
    
        // 关闭连接的方法
        public void CloseConnection() {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("关闭连接时发生错误!");
            }
        }
    
        // 增
        void executeInsert(String InsertID, String InsertName, String Chinese, String Math, String English) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("insert into grade values(?,?,?,?,?)");
                stmt.setString(1, InsertID);
                stmt.setString(2, InsertName);
                stmt.setString(3, Chinese);
                stmt.setString(4, Math);
                stmt.setString(5, English);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 删
        void executeDelete(String DeleteID) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("delete from grade where ID = ?");
                stmt.setString(1, DeleteID);
                stmt.executeUpdate();
                CloseStmt();
                CloseConnection();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 查 主键 是否在表中
        ResultSet executeQuery(String StuID) throws Exception {
            try {
                String sql = "select * from grade where ID = ?";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, StuID);
                rs = stmt.executeQuery();
            } catch (SQLException e) {
                System.err.println(e.getMessage());
            }
            return rs;
        }
    
        // 改
        void executeUpdate(String UpdateID, String UpdateItem, String UpdateContent) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "update grade set " + UpdateItem + " = ? where ID = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, UpdateContent);
                stmt.setString(2, UpdateID);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 按条件查询
        ResultSet executeQueryByCondition(String stuid, String stuname, String chinese, String math, String english) throws Exception {
            try {
                String sql = "select * from grade where ID like ? and Name like ? and Chinese like ? " +
                        "and Math like ? and English like ? order by ID asc";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                if (stuid.equals("%")) {
                    stmt.setString(1, "%");
                } else {
                    stmt.setString(1, "%" + stuid + "%");
                }
                if (stuname.equals("%")) {
                    stmt.setString(2, "%");
                } else {
                    stmt.setString(2, "%" + stuname + "%");
                }
                if (chinese.equals("%")) {
                    stmt.setString(3, "%");
                } else {
                    stmt.setString(3, "%" + chinese + "%");
                }
                if (math.equals("%")) {
                    stmt.setString(4, "%");
                } else {
                    stmt.setString(4, "%" + math + "%");
                }
                if (english.equals("%")) {
                    stmt.setString(5, "%");
                } else {
                    stmt.setString(5, "%" + english + "%");
                }
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 选课表查询
        ResultSet executeQueryByCourse(String course) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from course where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, course);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 课程总计查询
        ResultSet executeQueryByGrade(String grade) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from summary where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, grade);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    }
    
    
    展开全文
  • Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库) 使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语)...

    Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库)

           使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语),并实现以下功能:

    1.添加学生信息
    2.修改学生信息
    3.删除学生
    4.添加学生的成绩
    5.修改学生成绩
    6.按姓名或者学号查找学生,显示学生信息及三门课的成绩,以及排名
    7.学生成绩统计(每门课的平均分、最高分、最低分)

    代码里的注释很清楚了,这里不做讲解了,有任何问题可以评论提问。 

    注意:

    • 数据表不存在则创建表,但自动创建的表是空白的,管理员用户名和密码需要自己数据库中添加一个(也可以运行文章最后的sql语句),为什么会出现这个问题,因为这是个课堂作业,当时没有设计好,现在懒得再改代码了╮(╯﹏╰)╭.......
    • 数据库在代码中(代码里有两处需要修改数据库 用户名、密码 的地方第66行第490行),配置为:
    # 打开数据库连接 连接测试
    db = pymysql.connect("localhost", "root", "root", "student")

           分别表示  主机名:localhost,用户名:root,密码:root,数据库名:student 


    下面是界面的截图

     

     管理员操作界面,拥有增删改查功能,甚至拥有排序功能φ(>ω<*) ,快点击标签栏试试

     

     代码:

    #!/usr/bin/python3
    
    import pymysql
    from tkinter import ttk
    import tkinter as tk
    import tkinter.font as tkFont
    from tkinter import * # 图形界面库
    import tkinter.messagebox as messagebox # 弹窗
    
    
    class StartPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁子界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('学生信息管理系统')
    		self.window.geometry('300x470') # 这里的乘是小x
    
    		label = Label(self.window, text="学生信息管理系统", font=("Verdana", 20))
    		label.pack(pady=100)  # pady=100 界面的长度
    
    		Button(self.window, text="管理员登陆", font=tkFont.Font(size=16), command=lambda: AdminPage(self.window), width=30, height=2,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text="学生登陆", font=tkFont.Font(size=16), command=lambda: StudentPage(self.window), width=30,
    			   height=2,fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text="关于", font=tkFont.Font(size=16), command=lambda: AboutPage(self.window), width=30, height=2,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text='退出系统', height=2, font=tkFont.Font(size=16), width=30, command=self.window.destroy,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    
    		self.window.mainloop() # 主消息循环
    
    
    #管理员登陆页面
    class AdminPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('管理员登陆页面')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='管理员登陆', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='管理员账号:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.admin_username = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
    		self.admin_username.pack()
    
    		Label(self.window, text='管理员密码:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.admin_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
    		self.admin_pass.pack()
    
    		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def login(self):
    		print(str(self.admin_username.get()))
    		print(str(self.admin_pass.get()))
    		admin_pass = None
    
    		# 数据库操作 查询管理员表
    		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM admin_login_k WHERE admin_id = '%s'" % (self.admin_username.get())  # SQL 查询语句
    		try:
    		# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				admin_id = row[0]
    				admin_pass = row[1]
    				# 打印结果
    				print("admin_id=%s,admin_pass=%s" % (admin_id, admin_pass))
    		except:
    			print("Error: unable to fecth data")
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    		db.close()  # 关闭数据库连接
    
    		print("正在登陆管理员管理界面")
    		print("self",self.admin_pass)
    		print("local",admin_pass)
    
    		if self.admin_pass.get() == admin_pass:
    			AdminManage(self.window)  # 进入管理员操作界面
    		else:
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    
    	def back(self):
    		StartPage(self.window) # 显示主窗口 销毁本窗口
    
    
    #学生登陆页面
    class StudentPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('学生登陆')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生登陆', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='学生账号:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.student_id = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
    		self.student_id.pack()
    
    		Label(self.window, text='学生密码:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.student_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
    		self.student_pass.pack()
    
    		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def login(self):
    		print(str(self.student_id.get()))
    		print(str(self.student_pass.get()))
    		stu_pass = None
    
    		# 数据库操作 查询管理员表
    		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM stu_login_k WHERE stu_id = '%s'" % (self.student_id.get())  # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				stu_id = row[0]
    				stu_pass = row[1]
    				# 打印结果
    				print("stu_id=%s,stu_pass=%s" % (stu_id, stu_pass))
    		except:
    			print("Error: unable to fecth data")
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    		db.close()  # 关闭数据库连接
    
    		print("正在登陆学生信息查看界面")
    		print("self", self.student_pass.get())
    		print("local", stu_pass)
    
    		if self.student_pass.get() == stu_pass:
    			StudentView(self.window, self.student_id.get()) # 进入学生信息查看界面
    		else:
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    
    # 管理员操作界面
    class AdminManage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = Tk()  # 初始框的声明
    		self.window.title('管理员操作界面')
    
    		self.frame_left_top = tk.Frame(width=300, height=200)
    		self.frame_right_top = tk.Frame(width=200, height=200)
    		self.frame_center = tk.Frame(width=500, height=400)
    		self.frame_bottom = tk.Frame(width=650, height=50)
    
    		# 定义下方中心列表区域
    		self.columns = ("学号", "姓名", "性别", "年龄")
    		self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=self.columns)
    		self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
    		# 定义树形结构与滚动条
    		self.tree.configure(yscrollcommand=self.vbar.set)
    
    		# 表格的标题
    		self.tree.column("学号", width=150, anchor='center')  # 表示列,不显示
    		self.tree.column("姓名", width=150, anchor='center')
    		self.tree.column("性别", width=100, anchor='center')
    		self.tree.column("年龄", width=100, anchor='center')
    
    		# 调用方法获取表格内容插入
    		self.tree.grid(row=0, column=0, sticky=NSEW)
    		self.vbar.grid(row=0, column=1, sticky=NS)
    
    		self.id = []
    		self.name = []
    		self.gender = []
    		self.age = []
    		# 打开数据库连接
    		db = pymysql.connect("localhost", "root", "root", "student")
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM student_k"  # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				self.id.append(row[0])
    				self.name.append(row[1])
    				self.gender.append(row[2])
    				self.age.append(row[3])
    				# print(self.id)
    				# print(self.name)
    				# print(self.gender)
    				# print(self.age)
    		except:
    			print("Error: unable to fetch data")
    			messagebox.showinfo('警告!', '数据库连接失败!')
    		db.close()# 关闭数据库连接
    
    
    		print("test***********************")
    		for i in range(min(len(self.id), len(self.name), len(self.gender), len(self.age))):  # 写入数据
    			self.tree.insert('', i, values=(self.id[i], self.name[i], self.gender[i], self.age[i]))
    
    		for col in self.columns:  # 绑定函数,使表头可排序
    			self.tree.heading(col, text=col,
    							  command=lambda _col=col: self.tree_sort_column(self.tree, _col, False))
    
    		# 定义顶部区域
    		# 定义左上方区域
    		self.top_title = Label(self.frame_left_top, text="学生信息:", font=('Verdana', 20))
    		self.top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=10)
    
    		self.left_top_frame = tk.Frame(self.frame_left_top)
    		self.var_id = StringVar()  # 声明学号
    		self.var_name = StringVar()  # 声明姓名
    		self.var_gender = StringVar()  # 声明性别
    		self.var_age = StringVar()  # 声明年龄
    		# 学号
    		self.right_top_id_label = Label(self.frame_left_top, text="学号:", font=('Verdana', 15))
    		self.right_top_id_entry = Entry(self.frame_left_top, textvariable=self.var_id, font=('Verdana', 15))
    		self.right_top_id_label.grid(row=1, column=0)  # 位置设置
    		self.right_top_id_entry.grid(row=1, column=1)
    		# 姓名
    		self.right_top_name_label = Label(self.frame_left_top, text="姓名:", font=('Verdana', 15))
    		self.right_top_name_entry = Entry(self.frame_left_top, textvariable=self.var_name, font=('Verdana', 15))
    		self.right_top_name_label.grid(row=2, column=0)  # 位置设置
    		self.right_top_name_entry.grid(row=2, column=1)
    		# 性别
    		self.right_top_gender_label = Label(self.frame_left_top, text="性别:", font=('Verdana', 15))
    		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_gender,
    											font=('Verdana', 15))
    		self.right_top_gender_label.grid(row=3, column=0)  # 位置设置
    		self.right_top_gender_entry.grid(row=3, column=1)
    		# 年龄
    		self.right_top_gender_label = Label(self.frame_left_top, text="年龄:", font=('Verdana', 15))
    		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_age,
    											font=('Verdana', 15))
    		self.right_top_gender_label.grid(row=4, column=0)  # 位置设置
    		self.right_top_gender_entry.grid(row=4, column=1)
    
    		# 定义右上方区域
    		self.right_top_title = Label(self.frame_right_top, text="操作:", font=('Verdana', 20))
    
    		self.tree.bind('<Button-1>', self.click)  # 左键获取位置
    		self.right_top_button1 = ttk.Button(self.frame_right_top, text='新建学生信息', width=20, command=self.new_row)
    		self.right_top_button2 = ttk.Button(self.frame_right_top, text='更新选中学生信息', width=20,
    											command=self.updata_row)
    		self.right_top_button3 = ttk.Button(self.frame_right_top, text='删除选中学生信息', width=20,
    											command=self.del_row)
    
    		# 位置设置
    		self.right_top_title.grid(row=1, column=0, pady=10)
    		self.right_top_button1.grid(row=2, column=0, padx=20, pady=10)
    		self.right_top_button2.grid(row=3, column=0, padx=20, pady=10)
    		self.right_top_button3.grid(row=4, column=0, padx=20, pady=10)
    
    		# 整体区域定位
    		self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
    		self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
    		self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
    		self.frame_bottom.grid(row=2, column=0, columnspan=2)
    
    		self.frame_left_top.grid_propagate(0)
    		self.frame_right_top.grid_propagate(0)
    		self.frame_center.grid_propagate(0)
    		self.frame_bottom.grid_propagate(0)
    
    		self.frame_left_top.tkraise() # 开始显示主菜单
    		self.frame_right_top.tkraise() # 开始显示主菜单
    		self.frame_center.tkraise() # 开始显示主菜单
    		self.frame_bottom.tkraise() # 开始显示主菜单
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window) # 显示主窗口 销毁本窗口
    
    	def click(self, event):
    		self.col = self.tree.identify_column(event.x)  # 列
    		self.row = self.tree.identify_row(event.y)  # 行
    
    		print(self.col)
    		print(self.row)
    		self.row_info = self.tree.item(self.row, "values")
    		self.var_id.set(self.row_info[0])
    		self.var_name.set(self.row_info[1])
    		self.var_gender.set(self.row_info[2])
    		self.var_age.set(self.row_info[3])
    		self.right_top_id_entry = Entry(self.frame_left_top, state='disabled', textvariable=self.var_id,
    										font=('Verdana', 15))
    
    		print('')
    
    	def tree_sort_column(self, tv, col, reverse):  # Treeview、列名、排列方式
    		l = [(tv.set(k, col), k) for k in tv.get_children('')]
    		l.sort(reverse=reverse)  # 排序方式
    		# rearrange items in sorted positions
    		for index, (val, k) in enumerate(l):  # 根据排序后索引移动
    			tv.move(k, '', index)
    		tv.heading(col, command=lambda: self.tree_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
    
    	def new_row(self):
    		print('123')
    		print(self.var_id.get())
    		print(self.id)
    		if str(self.var_id.get()) in self.id:
    			messagebox.showinfo('警告!', '该学生已存在!')
    		else:
    			if self.var_id.get() != '' and self.var_name.get() != '' and self.var_gender.get() != '' and self.var_age.get() != '':
    				# 打开数据库连接
    				db = pymysql.connect("localhost", "root", "root", "student")
    				cursor = db.cursor()  # 使用cursor()方法获取操作游标
    				sql = "INSERT INTO student_k(id, name, gender, age) \
    				       VALUES ('%s', '%s', '%s', '%s')" % \
    					  (self.var_id.get(), self.var_name.get(), self.var_gender.get(), self.var_age.get())  # SQL 插入语句
    				try:
    					cursor.execute(sql)  # 执行sql语句
    					db.commit()  # 提交到数据库执行
    				except:
    					db.rollback()  # 发生错误时回滚
    					messagebox.showinfo('警告!', '数据库连接失败!')
    				db.close()  # 关闭数据库连接
    
    				self.id.append(self.var_id.get())
    				self.name.append(self.var_name.get())
    				self.gender.append(self.var_gender.get())
    				self.age.append(self.var_age.get())
    				self.tree.insert('', len(self.id) - 1, values=(
    				self.id[len(self.id) - 1], self.name[len(self.id) - 1], self.gender[len(self.id) - 1],
    				self.age[len(self.id) - 1]))
    				self.tree.update()
    				messagebox.showinfo('提示!', '插入成功!')
    			else:
    				messagebox.showinfo('警告!', '请填写学生数据')
    
    	def updata_row(self):
    		res = messagebox.askyesnocancel('警告!', '是否更新所填数据?')
    		if res == True:
    			if self.var_id.get() == self.row_info[0]:  # 如果所填学号 与 所选学号一致
    				# 打开数据库连接
    				db = pymysql.connect("localhost", "root", "root", "student")
    				cursor = db.cursor()  # 使用cursor()方法获取操作游标
    				sql = "UPDATE student_k SET name = '%s', gender = '%s', age = '%s' \
    				 WHERE id = '%s'" % (self.var_name.get(), self.var_gender.get(), self.var_age.get(), self.var_id.get())  # SQL 插入语句
    				try:
    					cursor.execute(sql)  # 执行sql语句
    					db.commit()  # 提交到数据库执行
    					messagebox.showinfo('提示!', '更新成功!')
    				except:
    					db.rollback()  # 发生错误时回滚
    					messagebox.showinfo('警告!', '更新失败,数据库连接失败!')
    				db.close()  # 关闭数据库连接
    
    				id_index = self.id.index(self.row_info[0])
    				self.name[id_index] = self.var_name.get()
    				self.gender[id_index] = self.var_gender.get()
    				self.age[id_index] = self.var_age.get()
    
    				self.tree.item(self.tree.selection()[0], values=(
    					self.var_id.get(), self.var_name.get(), self.var_gender.get(),
    					self.var_age.get()))  # 修改对于行信息
    			else:
    				messagebox.showinfo('警告!', '不能修改学生学号!')
    
    	def del_row(self):
    		res = messagebox.askyesnocancel('警告!', '是否删除所选数据?')
    		if res == True:
    			print(self.row_info[0])  # 鼠标选中的学号
    			print(self.tree.selection()[0])  # 行号
    			print(self.tree.get_children())  # 所有行
    			# 打开数据库连接
    			db = pymysql.connect("localhost", "root", "root", "student")
    			cursor = db.cursor()  # 使用cursor()方法获取操作游标
    			sql = "DELETE FROM student_k WHERE id = '%s'" % (self.row_info[0]) # SQL 插入语句
    			try:
    				cursor.execute(sql)  # 执行sql语句
    				db.commit()  # 提交到数据库执行
    				messagebox.showinfo('提示!', '删除成功!')
    			except:
    				db.rollback()  # 发生错误时回滚
    				messagebox.showinfo('警告!', '删除失败,数据库连接失败!')
    			db.close()  # 关闭数据库连接
    
    			id_index = self.id.index(self.row_info[0])
    			print(id_index)
    			del self.id[id_index]
    			del self.name[id_index]
    			del self.gender[id_index]
    			del self.age[id_index]
    			print(self.id)
    			self.tree.delete(self.tree.selection()[0])  # 删除所选行
    			print(self.tree.get_children())
    
    
    # 学生查看信息界面
    class StudentView:
    	def __init__(self, parent_window, student_id):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('关于')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生信息查看', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack(pady=20)
    
    		self.id = '学号:' + ''
    		self.name = '姓名:' + ''
    		self.gender = '性别:' + ''
    		self.age = '年龄:' + ''
    		# 打开数据库连接
    		db = pymysql.connect("localhost", "root", "root", "student")
    		cursor = db.cursor()# 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM student_k WHERE id = '%s'" % (student_id) # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				self.id = '学号:' + row[0]
    				self.name = '姓名:' + row[1]
    				self.gender = '性别:' + row[2]
    				self.age = '年龄:' + row[3]
    		except:
    			print("Error: unable to fetch data")
    		db.close()		# 关闭数据库连接
    
    		Label(self.window, text=self.id, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.name, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.gender, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.age, font=('Verdana', 18)).pack(pady=5)
    
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=16), command=self.back).pack(pady=25)
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    # About页面
    class AboutPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('关于')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生信息管理系统', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='作者:清晨的光明', font=('Verdana', 18)).pack(pady=30)
    		Label(self.window, text='blog.csdn.net/kdongyi', font=('Verdana', 18)).pack(pady=5)
    
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack(pady=100)
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    if __name__ == '__main__':
    	try:
    		# 打开数据库连接 连接测试
    		db = pymysql.connect("localhost", "root", "root", "student")
    		# 使用cursor()方法获取操作游标
    		cursor = db.cursor()
    		# 如果数据表不存在则创建表 若存在则跳过
    		# 设置主键唯一
    		sql = """CREATE TABLE IF NOT EXISTS student_k(
    				id char(20) NOT NULL,
    				name char(20) default NULL,
    				gender char(5) default NULL,  
    				age char(5) default NULL,
    				PRIMARY KEY (id)
    				
    				) ENGINE = InnoDB 
    				DEFAULT	CHARSET = utf8
    				"""
    		cursor.execute(sql)
    		# 如果数据表不存在则创建表 若存在则跳过
    		sql = """CREATE TABLE IF NOT EXISTS admin_login_k(
    						admin_id char(20) NOT NULL,
    						admin_pass char(20) default NULL,
    						PRIMARY KEY (admin_id)
    						) ENGINE = InnoDB 
    						DEFAULT	CHARSET = utf8
    						"""
    		cursor.execute(sql)
    		# 如果数据表不存在则创建表 若存在则跳过
    		sql = """CREATE TABLE IF NOT EXISTS stu_login_k(
    						stu_id char(20) NOT NULL,
    						stu_pass char(20) default NULL,
    						PRIMARY KEY (stu_id)
    						) ENGINE = InnoDB 
    						DEFAULT	CHARSET = utf8
    						"""
    		cursor.execute(sql)
    
    		# 关闭数据库连接
    		db.close()
    
    		# 实例化Application
    		window = tk.Tk()
    		StartPage(window)
    	except:
    		messagebox.showinfo('错误!', '连接数据库失败!')
    
    

     下面是我从我电脑数据库转储的SQL文件:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : mysql
    Source Server Version : 50532
    Source Host           : localhost:3306
    Source Database       : student
    
    Target Server Type    : MYSQL
    Target Server Version : 50532
    File Encoding         : 65001
    
    Date: 2019-11-28 15:09:36
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `admin_login_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `admin_login_k`;
    CREATE TABLE `admin_login_k` (
      `admin_id` char(20) NOT NULL,
      `admin_pass` char(20) DEFAULT NULL,
      PRIMARY KEY (`admin_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of admin_login_k
    -- ----------------------------
    INSERT INTO `admin_login_k` VALUES ('admin', 'admin');
    
    -- ----------------------------
    -- Table structure for `student_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `student_k`;
    CREATE TABLE `student_k` (
      `id` char(20) NOT NULL,
      `name` char(20) DEFAULT NULL,
      `gender` char(5) DEFAULT NULL,
      `age` char(5) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of student_k
    -- ----------------------------
    INSERT INTO `student_k` VALUES ('182085211003', 'a', '女', '22');
    INSERT INTO `student_k` VALUES ('182085211004', 'b', '女', '18');
    INSERT INTO `student_k` VALUES ('182085211005', 'abc', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211006', 'abc', '女', '24');
    INSERT INTO `student_k` VALUES ('182085211008', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211009', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211010', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211011', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('1820852110111', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211012', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211013', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211014', 'Tom2', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211015', 'Tom1', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211016', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211017', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211018', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211019', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211020', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211021', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('1820852110211', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211022', 'Tom1', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211023', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211024', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211034', 'Tom', '男', '23');
    
    -- ----------------------------
    -- Table structure for `stu_login_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `stu_login_k`;
    CREATE TABLE `stu_login_k` (
      `stu_id` char(20) NOT NULL,
      `stu_pass` char(20) DEFAULT NULL,
      PRIMARY KEY (`stu_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of stu_login_k
    -- ----------------------------
    INSERT INTO `stu_login_k` VALUES ('182085211000', '123456');
    
    -- ----------------------------
    -- Table structure for `t_course`
    -- ----------------------------
    DROP TABLE IF EXISTS `t_course`;
    CREATE TABLE `t_course` (
      `SNO` char(255) NOT NULL,
      `COURSE` char(255) DEFAULT NULL,
      `CREDIT` char(255) DEFAULT NULL,
      `GRADE` char(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of t_course
    -- ----------------------------
    INSERT INTO `t_course` VALUES ('08300205', '程序设计', '4', '88');
    INSERT INTO `t_course` VALUES ('08300205', '数据库', '2.5', '90');
    INSERT INTO `t_course` VALUES ('08300205', '力学', '5', '92');
    INSERT INTO `t_course` VALUES ('08080929', '数据库', '2.5', '85');
    INSERT INTO `t_course` VALUES ('09350124', '数据库', '2.5', '92');
    INSERT INTO `t_course` VALUES ('09620233', '数据库', '2.5', '80');
    INSERT INTO `t_course` VALUES ('09300218', '数据库', '2.5', '78');
    INSERT INTO `t_course` VALUES ('09010122', '数据库', '2.5', '87');
    INSERT INTO `t_course` VALUES ('08080929', '程序设计', '4', '86');
    INSERT INTO `t_course` VALUES ('09010122', '程序设计', '4', '80');
    INSERT INTO `t_course` VALUES ('08300516', '程序设计', '4', '76');
    
    -- ----------------------------
    -- Table structure for `t_st`
    -- ----------------------------
    DROP TABLE IF EXISTS `t_st`;
    CREATE TABLE `t_st` (
      `SNO` char(11) NOT NULL,
      `SNAME` char(255) DEFAULT NULL,
      `SSEX` char(255) DEFAULT NULL,
      `AGE` char(255) DEFAULT NULL,
      `DEPT` char(255) DEFAULT NULL,
      PRIMARY KEY (`SNO`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of t_st
    -- ----------------------------
    INSERT INTO `t_st` VALUES ('08080929', '刘超世', '男', '19', '计算机应用技术');
    INSERT INTO `t_st` VALUES ('08300205', '李媛媛', '女', '19', '软件工程');
    INSERT INTO `t_st` VALUES ('09300218', '王海超', '男', '19', '软件工程');
    INSERT INTO `t_st` VALUES ('09350124', '王彤', '女', '19', '通信原理');
    INSERT INTO `t_st` VALUES ('09620233', '陈晓丽', '女', '21', '通信工程');
    

    觉得有用,点个赞再走吧^_^

    展开全文
  • 本项目是一个学生信息管理系统,这个项目是用Python语言实现的,也实现了图形化界面的显示,同时也实现了管理员端,学生端两个登陆入口,同时底层使用的是Redis做的数据持久化。 This project is a student ...
  • int DengLu(Uers pe[],int C_ount) //用户登陆函数{int i = 0 ;int j = 1 ;char user[20];char code[20];printf("请输入用户名\n");scanf("%s",user);FILE *fp1;fp1 = fopen...
  • 学生成绩管理系统实战练习之登陆界面
  • 这是一个学生信息管理系统,可以向数据库中录入学生信息(学号,姓名,成绩),并通过UI界面进行增、删、改、查操作,适合初学玩java的同学作为第一个项目进行实战。 选用的数据库为java自带的derby,如果要连其他...
  • 学生信息管理系统 此项目包括四个类 StartMySql → 用于启动登录界面 Login → 登录进入操作界面 MySQLGUI → 图形用户界面 OperationMySql → 对数据库数据的操作功能实现 mysql 中 Table 的设计 涉及三个表 数据库...
  • 5.1 用户模块设计 10 5.2 数据库设计 11 5.2.1数据库设计的原则 11 5.2.2数据库表的设计 11 第六章 系统实现 14 6.1 系统功能实现 15 6.1 功能页面实现 15 6.1.1登陆模块实现 15 部分主要代码如下: 15 6.1.2注册...
  • 学生信息管理、管理员管理、宿舍管理、网站公告管理、学生签到管理、学生奖惩管理、学生报修管理、访客登记管理、宿舍评分管理等功能。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际...
  • 本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计用户的登录窗口,...
  • 基于JavaSpringMvc+mybatis实现学生信息管理系统

    万次阅读 多人点赞 2021-10-13 21:40:17
    Java经典基础毕设项目--学生信息管理系统详细设计【附源码】 主要模块设计如下: 使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。 管理员...
  • 这段时间,我们这些所谓的在校大学生和所有的学校的大学生都一样,以前玩的越开心的孩子,此刻是最忙的孩子,尤其是计算机专业的。我们的期末考试不是做卷子,而是上交毕业作品。。。我这个不算差的学生就很忙了,...
  • c#实现简单学生信息管理系统

    万次阅读 多人点赞 2019-06-06 21:40:37
    登录、添加学生信息、修改学生信息、删除学生信息、查询学生信息 三、实现步骤 1、登陆界面功能实现 老规矩,先贴下主要代码: //构造方法 public Login() { InitializeComponent(); this.label3.Parent = ...
  • 学生管理系统登录界面package javaapplication10;import java.awt.Color;import java.awt.Container;import java.awt.Cursor;import java.awt.Font;import java.awt.Image;import java.awt.event.ActionEvent;import...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,301
精华内容 2,920
关键字:

学生信息管理系统用户登录界面