大二上学期末零基础开始用Java写的数据库实验报告,界面做的丑丑的,函数也有很多冗余的地方。
不过当时做出来还是挺开心的
对新手应该还是挺友好的(毕竟我也是啥都不会开始写的)

实验目的

通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数
据库系统。

实验要求

熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的基本方法。实验中
根据实验内容和步骤完成相应的任务,并独立完成实验报告。

实验内容和步骤

假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职
称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学
号、姓名、性别、年龄。系统必须满足以下要求:
(1) 一门课程只能有一个教师任课,一个教师可以上多门课程;
(2) 一个学生可以选修多门课程,一门课程可以由多个学生来选修,记录不同学生选
修不同课程的成绩;
(3) 设置一个管理员,用于维护(添加、删除和修改等基本任务)学生基本信息、教
师基本信息和教师所授课程等工作,此外,管理员添加学生时,为其设置初始密
码;当学生选修了某门课程,课程成绩由管理员录入;
(4) 学生可以利用学号和密码登录系统,登陆系统后,可以进行选课、修改密码和个
人基本信息、查询自己的选课及总学分等操作;
(5) 能够统计不同职称的教师的数量、不同职称的教师的平均工资,可以统计每门课
程的平均成绩、最高分、最低分,统计每个学生选修课程的总学分;

根据上述描述,解答下列问题:
(1) 设计并画出E-R 图,要求标注连通词(即联系类型);

(2) 将E-R 图转化为关系模型,并指出各关系的主码和外码;
学生表(学号,姓名,性别,年龄,密码)学号为主码
教师表(工号,姓名,职称,工资,密码)工号为主码
课程表(课程号,课程名,选课人数,学分数,教工号),课程号为主码,教工号为外码
选修表(学号,课程号,成绩),学号和课程号为外码,两者一起构成这张表的主码
(3) 在MySql、SQL Server、Oracle 中选择一个数据库管理系统,并完成数据库的逻辑设计;

用户并赋予权限

create user dblesson identified by byd123;
grant connect,resource,unlimited tablespace to dblesson;
grant create view to dblesson;

创建学生表

create table student(sno varchar(10) primary key,sname varchar(20),ssex varchar(10),sage smallint ,pwd varchar(20) DEFAULT '123456' not null
);

创建教师表

create table teacher(tno varchar(10) primary key,tname varchar(20),tsalary smallint ,trank varchar(20),pwd varchar(20) DEFAULT '123456' not null
);

创建课程表

create table course(cno varchar(10) primary key,cpno varchar(10),cname varchar(20),ccredit smallint ,tno varchar(10) DEFAULT '1' not null,foreign key (tno) references teacher(tno)
);

创建已选课表

create table sc(sno varchar(10),cno varchar(10),grade smallint,tno varchar(10) DEFAULT '1',foreign key (sno) references student(sno),foreign key (tno) references teacher(tno),foreign key (cno) references course(cno)
);

向学生表中插入数据

insert into student(sname,ssex,sno, sage, pwd) values('李勇','男','201215121',20,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('刘晨','女','201215122',19,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('王敏','女','201215123',18,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('张立','男','201215125',19,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('xx','男','1',20,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('yy','女','2',19,'123456');

向教师表中插入数据

insert into teacher(tno,tname, trank, tsalary, pwd) values('1','熊大','教授',15000,'123456');
insert into teacher(tno,tname, trank, tsalary, pwd) values('2','熊二','副教授',9000,'123456');
insert into teacher(tno,tname, trank, tsalary, pwd) values('3','熊妹','副教授',10000,'123456');
insert into teacher(tno,tname, trank, tsalary, pwd) values('4','熊三','讲师',3000,'123456');

向课程表中插入数据

insert into course(cno,cname,ccredit,tno,cpno) values('6','数据处理',2,'1','2');
insert into course(cno,cname,ccredit,tno,cpno) values('2','数学',4,'2',null);
insert into course(cno,cname,ccredit,tno,cpno) values('7','PASCAL语言',4,'1',null);
insert into course(cno,cname,ccredit,tno,cpno) values('5','数据结构',4,'1','7');
insert into course(cno,cname,ccredit,tno,cpno) values('1','数据库',2,'1','5');
insert into course(cno,cname,ccredit,tno,cpno) values('3','信息系统',3,'1','1');
insert into course(cno,cname,ccredit,tno,cpno) values('4','操作系统',3,'1','1');

向已选课表中插入数据

insert into sc values('201215121','1',92,'1');
insert into sc values('201215121','2',85,'2');
insert into sc values('201215121','3',88,'1');
insert into sc values('201215122','2',90,'2');
insert into sc values('201215122','3',80,'2');
insert into sc values('1','2',65,'2');
insert into sc values('1','7',0,'1');




实验代码

数据库操作部分:

package Database;
import java.sql.*;public class OperationMySql {// 定义数据库连接urlprivate String dburl = "jdbc:mysql://localhost:3306/StuInfo ?characterEncoding=utf-8&rewriteBatchedStatement=true";// 定义数据库连接private Connection conn = null;// 定义数据库状态private PreparedStatement stmt = null;// 定义数据库返回结果集private ResultSet rs = null;// 定义数据库用户名private String username = null;// 定义数据库连接密码private String password = null;// 定义数据库驱动方式private String dbdriver = "com.mysql.cj.jdbc.Driver";// 设置数据库连接url的方法public void setDburl(String dburl) {this.dburl = dburl;}// 返回当前实例数据库连接urlpublic 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("关闭连接时发生错误!");}}
//查询所有学生的信息public ResultSet excuteQueryStuInfo() throws Exception{try {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select * from student ";stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//查询所有教师的信息public ResultSet excuteQueryTeaInfo()throws Exception {try {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select * from teacher ";stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//管理员查询所有课程的信息public ResultSet excuteCourseInfo() throws Exception{try {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select course.cno,course.cname,course.ccredit,teacher.tname from course,teacher where(course.tno=teacher.tno); ";stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//管理员查询所有学生的选课信息public ResultSet excuteCourseSelectInfo() throws Exception{try {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select sc.cno,course.cname,student.sno,student.sname,sc.grade from course,sc,student where (sc.cno=course.cno)and(sc.sno=student.sno); ";stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//管理员插入学生信息public ResultSet executeInsertStuInfo(String _name, String _age, String _sno, String _sex)throws Exception {try {conn = CreateConnection(getDburl(), getUsername(), getPassword());stmt = conn.prepareStatement("insert into student values(?,?,?,?,?)");stmt.setString(1, _sno);stmt.setString(2, _name);stmt.setString(3, _sex);stmt.setString(4, _age);stmt.setString(5, String.valueOf(123456));stmt.executeUpdate();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//查询自己的选课信息public ResultSet excutemyCourseSelect(String _sno) {try{try {conn = CreateConnection(getDburl(), getUsername(), getPassword());} catch (Exception e) {e.printStackTrace();}String sql = "select course.cname,course.ccredit,sc.grade from sc,course where course.cno=sc.cno and sno="+"'"+_sno+"'";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();} catch (SQLException ex) {System.err.println(ex.getMessage());}return rs;}
//查询个人信息public ResultSet excutemyInfo(String _sno) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select * from student where sno="+"'"+_sno+"'";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return rs;}
//修改自己的密码public int executeInsertStuInfo(String _pwd,String _sno)throws Exception {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "UPDATE student SET pwd="+"'"+_pwd+"'"+"WHERE sno="+"'"+_sno+"'";System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//管理员录入学生成绩public int executeAddScore(String _sno, String _cno, String _grade) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "INSERT INTO sc (sno, cno, grade) VALUES ("+_sno +"," +_cno + "," + _grade +")" ;System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}/*INSERT INTO table_name ( field1, field2,...fieldN )VALUES( value1, value2,...valueN );UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]*/
//管理员为学生修改姓名public int executeUpdateSname(String _sno, String _sname) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "UPDATE student set sname= ' "+ _sname + " ' WHERE sno= '" +_sno + "'";System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//管理员修改学生的年龄public int executeUpdateAge(String _sno, String _sage) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "UPDATE student set sage= '"+ _sage +" ' WHERE sno= '" +_sno + "'";System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//管理员修改学生性别public int executeUpdateSex(String _sno, String _ssex) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "UPDATE student set ssex= ' "+ _ssex +" ' WHERE sno= '" +_sno + "'";System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//管理员重置学生密码public int executeUpdatePwd(String _sno)  throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "UPDATE student set pwd= '123456' WHERE sno  = '" +_sno + "'";System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//学生选课public int executeSelectmycourse(String mysno,String newCourse)throws Exception {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "INSERT INTO sc (sno, cno, grade) VALUES ("+mysno +"," + newCourse + "," + null +")" ;System.out.println(sql);stmt = conn.prepareStatement(sql);int changeLine = stmt.executeUpdate();return changeLine;}
//学生查询自己所修的总学分public ResultSet excutemySumCredit(String mysno) throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select sum(ccredit) from course,sc  where ((sc.cno=course.cno)and sc.sno='" + mysno + " ')";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return rs;}
//统计课程的信息,最高分最低分,所修人数public ResultSet excuteCourseConclude() throws Exception{conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select course.cname,count(sc.cno),avg(sc.grade),max(sc.grade),min(sc.grade) from sc,course where sc.cno=course.cno group by sc.cno ";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return rs;}
//统计各个职称的信息,教师人数,平均薪资public ResultSet excuteTeacherConclude() throws Exception {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = " select trank, count(trank), avg(tsalary) from teacher  group by trank";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return rs;}
//统计学生的信息,所修学分,课程平均分public ResultSet excuteStuConclude() throws Exception {conn = CreateConnection(getDburl(), getUsername(), getPassword());String sql = "select student.sname ,sum(course.ccredit), avg(sc.grade) from sc,student,course where (sc.cno=course.cno and sc.sno=student.sno) group by student.sname;";System.out.println(sql);stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return rs;}/*SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;* SELECT SUM(column_name) FROM table_name;* */}

GUI界面

管理员界面

package Database;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.*;public class ManagerGui extends JFrame implements MouseListener {private JTabbedPane Base;private JPanel jp1, jp2, jp3, jp4, jp5, jp6, jp7,jp8;// 定义选项卡上的嵌板/** jp1,  查询所有学生信息* jp2,  查询所有老师信息* jp3,  查询所有课程信息* jp4,  查询所有选课信息* jp5,  增加学生信息* jp6, 修改学生信息* jp7,* jp8,  统计数据(不同职称的教师的数量、不同职称的教师的平均工资,可以统计每门课
程的平均成绩、最高分、最低分,统计每个学生选修课程的总学分)*/private JButton UpdateName, UpdateSex, UpdateSage, UpdatePwd, QueryStuInfo, QuerySelectCourse, QueryCourse, QueryTeaInfo, AddStu, UpdateStu, ReSet, AddScore,concludeTeacher,conculdeCourse,concludeStudent;private TextArea QueryStuInfoResult, QueryCourseResult, QueryTeaInfoResult, QuerySelCourseResult,concludeResult;private JLabel AddName, AddSno, AddSex, AddAge, ScoreNumberla, StuScorela, Stusnola, UpdateNamela, UpdateSexla, UpdateSagela, UpdateSnola;private JTextField nameText, snoText, ageText, sexText, ScoreNumber, StuScore, Stusno, UpdateNameText, UpdateSexText, UpdateSageText, UpdateSnoText;// 定义一个数据库操作的实例private OperationMySql db;public static void main(String[] args) {new ManagerGui();}public ManagerGui() {setPanel();setButton();setTextArea();setLable();setTextFiled();setAddStuPanel();setBase();setThis();setDB();addListener();}private void setPanel() {jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jp4 = new JPanel();jp5 = new JPanel();jp6 = new JPanel();jp7 = new JPanel();jp8= new JPanel();}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);Base.addTab("成绩录入", jp7);Base.addTab("情况统计",jp8);}private void setThis() {this.add(Base);this.setTitle("2006200018--管理员登入:");this.setSize(500, 450);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);}private void setButton() {QueryStuInfo = new JButton("查询所有学生信息");QueryTeaInfo = new JButton("查询所有教师信息");QueryCourse = new JButton("查询所有课程信息");QuerySelectCourse = new JButton("查询所有选课信息");AddStu = new JButton("新增学生");UpdateStu = new JButton("修改学生信息");UpdateSex = new JButton("性别修改");UpdateSage = new JButton("年龄修改");UpdateName = new JButton("姓名修改");conculdeCourse=new JButton("统计课程信息");concludeStudent=new JButton("统计学生信息");concludeTeacher=new JButton("统计老师信息");ReSet = new JButton("重  置");AddScore = new JButton("录入成绩");UpdatePwd=new JButton("一键重置学生密码");QueryStuInfo.setFont(new Font("宋体", 1, 14));QueryTeaInfo.setFont(new Font("宋体", 1, 14));QueryCourse.setFont(new Font("宋体", 1, 14));QuerySelectCourse.setFont(new Font("宋体", 1, 14));concludeTeacher.setFont(new Font("宋体", 1, 14));concludeStudent.setFont(new Font("宋体", 1, 14));conculdeCourse.setFont(new Font("宋体", 1, 14));AddStu.setFont(new Font("宋体", 1, 25));UpdateStu.setFont(new Font("宋体", 1, 25));ReSet.setFont(new Font("宋体", 1, 25));AddScore.setFont(new Font("宋体", 1, 25));UpdateName.setFont(new Font("宋体", 1, 25));UpdateSage.setFont(new Font("宋体", 1, 25));UpdateSex.setFont(new Font("宋体", 1, 25));UpdatePwd.setFont(new Font("宋体", 1, 25));QueryStuInfo.setBackground(Color.CYAN);QueryStuInfo.setMargin(new Insets(0, 0, 0, 0));QueryTeaInfo.setBackground(Color.CYAN);QueryTeaInfo.setMargin(new Insets(0, 0, 0, 0));QueryCourse.setBackground(Color.CYAN);QueryCourse.setMargin(new Insets(0, 0, 0, 0));QuerySelectCourse.setBackground(Color.CYAN);QuerySelectCourse.setMargin(new Insets(0, 0, 0, 0));AddStu.setBackground(Color.CYAN);AddStu.setMargin(new Insets(0, 0, 0, 0));ReSet.setBackground(Color.CYAN);ReSet.setMargin(new Insets(0, 0, 0, 0));UpdateStu.setBackground(Color.CYAN);UpdateStu.setMargin(new Insets(0, 0, 0, 0));ReSet.setBackground(Color.CYAN);ReSet.setMargin(new Insets(0, 0, 0, 0));UpdateSage.setBackground(Color.CYAN);UpdateSage.setMargin(new Insets(0, 0, 0, 0));UpdateName.setBackground(Color.CYAN);UpdateName.setMargin(new Insets(0, 0, 0, 0));UpdateSex.setBackground(Color.CYAN);UpdateSex.setMargin(new Insets(0, 0, 0, 0));conculdeCourse.setBackground(Color.CYAN);conculdeCourse.setMargin(new Insets(0, 0, 0, 0));concludeStudent.setBackground(Color.CYAN);concludeStudent.setMargin(new Insets(0, 0, 0, 0));concludeTeacher.setBackground(Color.CYAN);concludeTeacher.setMargin(new Insets(0, 0, 0, 0));jp1.add(QueryStuInfo);jp2.add(QueryTeaInfo);jp3.add(QueryCourse);jp4.add(QuerySelectCourse);}private void setTextArea() {QueryStuInfoResult = new TextArea(20, 27);QueryStuInfoResult.setFont(new Font("宋体", 1, 15));QueryTeaInfoResult = new TextArea(20, 27);QueryTeaInfoResult.setFont(new Font("宋体", 1, 15));QueryCourseResult = new TextArea(20, 27);QueryCourseResult.setFont(new Font("宋体", 1, 15));QuerySelCourseResult = new TextArea(20, 27);QuerySelCourseResult.setFont(new Font("宋体", 1, 15));concludeResult = new TextArea(20, 25);concludeResult.setFont(new Font("宋体", 1, 15));jp1.add(QueryStuInfoResult, BorderLayout.CENTER);jp2.add(QueryTeaInfoResult);jp3.add(QueryCourseResult);jp4.add(QuerySelCourseResult);QueryStuInfoResult.setEditable(false);QueryTeaInfoResult.setEditable(false);QueryStuInfoResult.setEditable(false);QueryCourseResult.setEditable(false);QuerySelCourseResult.setEditable(false);concludeResult.setEditable(false);}private void addListener() {QueryStuInfo.addMouseListener(this);QueryTeaInfo.addMouseListener(this);QueryCourse.addMouseListener(this);QuerySelectCourse.addMouseListener(this);AddStu.addMouseListener(this);UpdateStu.addMouseListener(this);ReSet.addMouseListener(this);AddScore.addMouseListener(this);UpdateSage.addMouseListener(this);UpdateName.addMouseListener(this);UpdateSex.addMouseListener(this);UpdatePwd.addMouseListener(this);conculdeCourse.addMouseListener(this);concludeStudent.addMouseListener(this);concludeTeacher.addMouseListener(this);}private void setLable() {AddName = new JLabel("学生姓名:");AddName.setBounds(20, 20, 20, 20);AddName.setFont(new Font("宋体", 1, 25));AddSno = new JLabel("学生学号:");AddSno.setBounds(40, 40, 20, 20);AddSno.setFont(new Font("宋体", 1, 25));AddSex = new JLabel("学生性别:");AddSex.setBounds(60, 60, 20, 20);AddSex.setFont(new Font("宋体", 1, 25));AddAge = new JLabel("学生年龄:");AddAge.setBounds(80, 80, 20, 20);AddAge.setFont(new Font("宋体", 1, 25));ScoreNumberla = new JLabel("课程编号:");ScoreNumberla.setBounds(80, 80, 20, 20);ScoreNumberla.setFont(new Font("宋体", 1, 25));StuScorela = new JLabel("学生成绩:");StuScorela.setBounds(80, 80, 20, 20);StuScorela.setFont(new Font("宋体", 1, 25));Stusnola = new JLabel("学生学号:");Stusnola.setBounds(80, 80, 20, 20);Stusnola.setFont(new Font("宋体", 1, 25));UpdateNamela = new JLabel("修改后学生姓名:");UpdateNamela.setBounds(80, 80, 20, 20);UpdateNamela.setFont(new Font("宋体", 1, 25));UpdateSexla = new JLabel("修改后学生性别:");UpdateSexla.setBounds(80, 80, 20, 20);UpdateSexla.setFont(new Font("宋体", 1, 25));UpdateSagela = new JLabel("修改后学生年龄:");UpdateSagela.setBounds(80, 80, 20, 20);UpdateSagela.setFont(new Font("宋体", 1, 25));UpdateSnola = new JLabel("待修改学生学号:");UpdateSnola.setBounds(80, 80, 20, 20);UpdateSnola.setFont(new Font("宋体", 1, 25));}private void setTextFiled() {nameText = new JTextField(25);snoText = new JTextField(25);ageText = new JTextField(25);sexText = new JTextField(25);StuScore = new JTextField(25);ScoreNumber = new JTextField(25);Stusno = new JTextField(25);UpdateNameText = new JTextField(25);UpdateSexText = new JTextField(25);UpdateSageText = new JTextField(25);UpdateSnoText = new JTextField(25);}private void setAddStuPanel() {/*jp5*/jp5.add(AddName);jp5.add(nameText);jp5.add(AddSno);jp5.add(snoText);jp5.add(AddSex);jp5.add(sexText);jp5.add(AddAge);jp5.add(ageText);jp5.add(AddStu);jp5.add(ReSet);/*jp6*/jp6.add(UpdateSnola);jp6.add(UpdateSnoText);jp6.add(UpdateNamela);jp6.add(UpdateNameText);jp6.add(UpdateSagela);jp6.add(UpdateSageText);jp6.add(UpdateSexla);jp6.add(UpdateSexText);jp6.add(UpdateName);jp6.add(UpdateSage);jp6.add(UpdateSex);jp6.add(UpdatePwd);/*jp7*/jp7.add(Stusnola);jp7.add(Stusno);jp7.add(ScoreNumberla);jp7.add(ScoreNumber);jp7.add(StuScorela);jp7.add(StuScore);jp7.add(AddScore);/*jp8*/jp8.add(concludeStudent);jp8.add(concludeTeacher);jp8.add(conculdeCourse);jp8.add(concludeResult);}private void setDB() {db = new OperationMySql();// 连接 mysqldb.setDburl("jdbc:mysql://localhost:3306/StuInfo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");// 加载驱动db.setDbdriver("com.mysql.cj.jdbc.Driver");db.setUsername("root");db.setPassword("root");}@Overridepublic void mouseClicked(MouseEvent e) {if (e.getSource().equals(QueryStuInfo)) {try {db.setRs(db.excuteQueryStuInfo());} catch (Exception exception) {exception.printStackTrace();}int count = 0;QueryStuInfoResult.setText("");QueryStuInfoResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;QueryStuInfoResult.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**************************************** "));}QueryStuInfoResult.append(QueryStuInfoResult.getText() +"\r\n" + "共有" + count + "条学生记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(QueryTeaInfo)) {try {db.setRs(db.excuteQueryTeaInfo());} catch (Exception exception) {exception.printStackTrace();}int count = 0;QueryTeaInfoResult.setText("");QueryTeaInfoResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;QueryTeaInfoResult.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**************************************** "));}QueryTeaInfoResult.append(QueryTeaInfoResult.getText() +"\r\n" + "共有" + count + "条教师记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(QueryCourse)) {try {db.setRs(db.excuteCourseInfo());} catch (Exception exception) {exception.printStackTrace();}int count = 0;QueryCourseResult.setText("");QueryCourseResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;QueryCourseResult.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**************************************** "));}QueryCourseResult.append(QueryCourseResult.getText() +"\r\n" + "共有" + count + "条课程记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(QuerySelectCourse)) {try {db.setRs(db.excuteCourseSelectInfo());} catch (Exception exception) {exception.printStackTrace();}int count = 0;QuerySelCourseResult.setText("");QuerySelCourseResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;QuerySelCourseResult.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"+ "课程分数" + db.getRs().getString(5) +("\r\n**************************************** "));}QuerySelCourseResult.append(QuerySelCourseResult.getText() +"\r\n" + "共有" + count + "条课程记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(AddStu)) {String _name = nameText.getText(), _age = ageText.getText(), _sno = snoText.getText(), _sex = sexText.getText();try {db.setRs(db.executeInsertStuInfo(_name, _age, _sno, _sex));nameText.setText("");snoText.setText("");ageText.setText("");sexText.setText("");JOptionPane.showOptionDialog(this, "添加学生信息成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);} catch (Exception exception) {JOptionPane.showOptionDialog(this, "添加失败", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(UpdatePwd)) {String _Sno = UpdateSnoText.getText();try {int changeline = db.executeUpdatePwd(_Sno);if (changeline > 0) {JOptionPane.showOptionDialog(this, "学生密码重置成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "学生密码更新失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(UpdateName)) {String _Sno = UpdateSnoText.getText(), _Sname = UpdateNameText.getText();try {int changeline = db.executeUpdateSname(_Sno, _Sname);if (changeline > 0) {JOptionPane.showOptionDialog(this, "学生姓名更新成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "学生姓名更新失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(UpdateSage)) {String _Sno = UpdateSnoText.getText(), _Sage = UpdateSageText.getText();try {int changeline = db.executeUpdateAge(_Sno, _Sage);if (changeline > 0) {JOptionPane.showOptionDialog(this, "学生年龄更新成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "学生年龄更新失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(UpdateSex)) {String _Sno = UpdateSnoText.getText(), _Ssex = UpdateSexText.getText();try {int changeline = db.executeUpdateSex(_Sno, _Ssex);if (changeline > 0) {JOptionPane.showOptionDialog(this, "学生性别更新成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "学生性别更新失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(ReSet)) {nameText.setText("");snoText.setText("");ageText.setText("");sexText.setText("");}if (e.getSource().equals(AddScore)) {String _Sno = Stusno.getText(), _Cno = ScoreNumber.getText(), _grade = StuScore.getText();try {int changeline = db.executeAddScore(_Sno, _Cno, _grade);if (changeline > 0) {Stusno.setText("");ScoreNumber.setText("");StuScore.setText("");JOptionPane.showOptionDialog(this, "学生成绩添加成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "学生成绩添加失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(concludeStudent)) {try {db.setRs(db.excuteStuConclude());} catch (Exception exception) {exception.printStackTrace();}int count = 0;concludeResult.setText("");concludeResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;concludeResult.append("\r\n" + "第" + count + "条记录:" + "\r\n"+ "学生姓名:" + db.getRs().getString(1) + "\r\n"+ "学生选修的总学分数:" + db.getRs().getString(2) + "\r\n"+ "学生的平均成绩:" + db.getRs().getString(3) +("\r\n**************************************** "));}QuerySelCourseResult.append(QuerySelCourseResult.getText() +"\r\n" + "共有" + count + "条记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(concludeTeacher)) {try {db.setRs(db.excuteTeacherConclude());} catch (Exception exception) {exception.printStackTrace();}int count = 0;concludeResult.setText("");concludeResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;concludeResult.append("\r\n" + "第" + count + "条记录:" + "\r\n"+ "职称:" + db.getRs().getString(1) + "\r\n"+ "该职称教师数:" + db.getRs().getString(2) + "\r\n"+ "该职称平均工资:" + db.getRs().getString(3) +("\r\n**************************************** "));}QuerySelCourseResult.append(QuerySelCourseResult.getText() +"\r\n" + "共有" + count + "条记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if (e.getSource().equals(conculdeCourse)) {try {db.setRs(db.excuteCourseConclude());} catch (Exception exception) {exception.printStackTrace();}int count = 0;concludeResult.setText("");concludeResult.setText("*****************查询结果******************* ");try {while (db.getRs().next()) {count++;concludeResult.append("\r\n" + "第" + count + "条记录:" + "\r\n"+ "课程名称:" + db.getRs().getString(1) + "\r\n"+ "课程选课人数:" + db.getRs().getString(2) + "\r\n"+ "课程最高分:" + db.getRs().getString(4) + "\r\n"+ "课程最低分:" + db.getRs().getString(5) + "\r\n"+ "课程平均分" + db.getRs().getString(3) +("\r\n**************************************** "));}QuerySelCourseResult.append(QuerySelCourseResult.getText() +"\r\n" + "共有" + count + "条课程记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}/*SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;*/}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}}

学生操作界面

package Database;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.SQLException;/*学生可以利用学号和密码登录系统,登陆系统后,可以进行选课、修改密码和个人基本信息、查询自己的选课及总学分等操作;*/
public class StuGui extends JFrame implements MouseListener{private JTabbedPane Base;private JPanel jp1, jp2, jp3, jp4;
// 定义选项卡上的嵌板/** jp1,  查询个人信息* jp2,  修改个人信息* jp3,  选课* jp4,  查询选课和总学分**/private JButton UpdateInfo,QueryInfo,SelectCourse,QueryCourse,sumCredit;private TextArea QuerymyInfoResult,QuerymyCourseResult,sumCreditResult;private JLabel UpdatePwd,SelectnewCoursela,sumCreditla;private TextField UpdatePwdFiled,SelectnewCourseText;// 定义一个数据库操作的实例private OperationMySql db = null;private String mysno=null;public static void main(String[] args) {new StuGui("1");}public StuGui(String sno){this.mysno=sno;System.out.println("INIT:"+mysno);setPanel();setBase();setButton();setUpdate();addListener();setTextArea();setThis();setDB();}private void setPanel() {jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jp4 = new JPanel();}private void setBase(){Base=new JTabbedPane(JTabbedPane.TOP);Base.addTab("查询个人信息",jp1);Base.addTab("修改个人信息",jp2);Base.addTab("选课",jp3);Base.addTab("查询选课情况",jp4);}private void setThis(){this.add(Base);this.setTitle("2006200018--学生登入:");this.setLocation(300, 200);this.setSize(500, 400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);}private void setButton(){QueryInfo=new JButton("查询个人信息");UpdateInfo=new JButton("更新个人信息");SelectCourse=new JButton("添加课程");QueryCourse=new JButton("查询已选课程");sumCredit=new JButton("查询已选课程的总学分");QueryInfo.setFont(new Font("宋体", 1, 25));QueryInfo.setBackground(Color.CYAN);QueryInfo.setMargin(new Insets(0, 0, 0, 0));UpdateInfo.setFont(new Font("宋体", 1, 25));UpdateInfo.setBackground(Color.CYAN);UpdateInfo.setMargin(new Insets(0, 0, 0, 0));SelectCourse.setFont(new Font("宋体", 1, 25));SelectCourse.setBackground(Color.CYAN);SelectCourse.setMargin(new Insets(0, 0, 0, 0));QueryCourse.setFont(new Font("宋体", 1, 25));QueryCourse.setBackground(Color.CYAN);QueryCourse.setMargin(new Insets(0, 0, 0, 0));sumCredit.setFont(new Font("宋体", 1, 25));sumCredit.setBackground(Color.CYAN);sumCredit.setMargin(new Insets(0, 0, 0, 0));jp1.add(QueryInfo);jp4.add(QueryCourse);}private void setUpdate(){UpdatePwdFiled=new TextField(25);UpdatePwd=new JLabel("修改密码");UpdatePwd.setBounds(80, 80, 20, 20);UpdatePwd.setFont(new Font("宋体",1,25));jp2.add(UpdatePwd);jp2.add(UpdatePwdFiled);jp2.add(UpdateInfo);SelectnewCoursela=new JLabel("请输入你要选择的课程的编号");sumCreditla=new JLabel("一键查询已选课程的总学分");SelectnewCourseText=new TextField(15);SelectnewCoursela.setBounds(80, 80, 20, 20);SelectnewCoursela.setFont(new Font("宋体",1,25));SelectnewCourseText.setBounds(80, 80, 20, 20);SelectnewCourseText.setFont(new Font("宋体",1,25));sumCreditla.setBounds(80, 80, 20, 20);sumCreditla.setFont(new Font("宋体",1,25));jp3.add(SelectnewCoursela);jp3.add(SelectnewCourseText);jp3.add(SelectCourse);}private void setTextArea(){QuerymyInfoResult=new TextArea(20,27);QuerymyCourseResult=new TextArea(20,27);QuerymyInfoResult.setFont(new Font("宋体", 1, 15));QuerymyCourseResult.setFont(new Font("宋体", 1, 15));jp1.add(QuerymyInfoResult);jp4.add(QuerymyCourseResult);sumCreditResult=new TextArea(2,4);sumCreditResult.setFont(new Font("宋体", 1, 25));jp3.add(sumCreditla);jp3.add(sumCreditResult);jp3.add(sumCredit);}private void addListener(){QueryInfo.addMouseListener( this);UpdateInfo.addMouseListener(this);SelectCourse.addMouseListener(this);QueryCourse.addMouseListener(this);sumCredit.addMouseListener(this);}private void setDB() {db = new OperationMySql();// 连接 mysqldb.setDburl("jdbc:mysql://localhost:3306/StuInfo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");// 加载驱动db.setDbdriver("com.mysql.cj.jdbc.Driver");db.setUsername("root");db.setPassword("root");}@Overridepublic void mouseClicked(MouseEvent e) {if(e.getSource().equals(QueryInfo)){try {db.setRs(db.excutemyInfo(mysno));} catch (Exception exception) {exception.printStackTrace();}QuerymyInfoResult.setText("*****************查询结果******************* ");try {while(db.getRs().next()) {QuerymyInfoResult.append( "\r\n"+"你的个人信息如下:"+"\r\n"+ "姓名:" + db.getRs().getString(2)+ "\r\n"+"学号"+db.getRs().getString(1)+"\r\n"+"性别"+db.getRs().getString(3)+"\r\n"+ "年龄:" + db.getRs().getString(4)+("\r\n******************************************* "));}} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if(e.getSource().equals(UpdateInfo)){try {int changeline = db.executeUpdatePwd(mysno);if (changeline > 0) {JOptionPane.showOptionDialog(this, "密码设置成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "密码设置失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if(e.getSource().equals(SelectCourse)){try {String newCoures=SelectnewCourseText.getText();int changeline = db.executeSelectmycourse(mysno,newCoures);if (changeline > 0) {JOptionPane.showOptionDialog(this, "选课成功!", "数据库操作提示",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);}} catch (Exception exception) {JOptionPane.showOptionDialog(this, "选课失败!", "温馨提示",-1, 1, null, null, null);exception.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if(e.getSource().equals(QueryCourse)){try {db.setRs(db.excutemyCourseSelect(mysno));} catch (Exception exception) {exception.printStackTrace();}int count=0;QuerymyCourseResult.setText("*****************查询结果******************* ");try {while(db.getRs().next()) {count++;QuerymyCourseResult.append("\r\n" + "第" + count + "条记录:" + "\r\n"+ "课程名称:" + db.getRs().getString(1)+ "\r\n"+"课程学分"+db.getRs().getString(2)+"\r\n"+ "成绩:" + db.getRs().getString(3)+("\r\n**************************************** "));}QuerymyCourseResult.append(QuerymyCourseResult.getText() +"\r\n" + "你共有" + count + "条课程记录");} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}if(e.getSource().equals(sumCredit)){try {db.setRs(db.excutemySumCredit(mysno));} catch (Exception exception) {exception.printStackTrace();}try {while(db.getRs().next()) {sumCreditResult.append(db.getRs().getString(1));}} catch (SQLException throwables) {throwables.printStackTrace();}db.CloseRS();db.CloseStmt();db.CloseConnection();}/*SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;*/}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}
}

学生登录界面

public class myLogin 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;private String thisno;public myLogin() throws Exception {// 各组件实例化过程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);}@Overridepublic void actionPerformed(ActionEvent e) {thisno=UserName.getText();// 如果单击【退出】按钮则程序退出if (e.getSource().equals(Cancel)) {System.exit(0);}// 如果单击【登录】按钮则检查用户名和密码是否匹配else if (e.getSource().equals(Login)) {// 如果用户名和密码匹配,则打开具体操作面板try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e2) {e2.printStackTrace();}String _name=UserName.getText(),_pwd=new String(PassWord.getPassword());String url = "jdbc:mysql://localhost:3306/StuInfo ?characterEncoding=utf-8&rewriteBatchedStatement=true";Connection  connection=null;Statement statement=null;ResultSet resultSet=null;String sql="SELECT *from student where sno='"+_name+"'and pwd='"+_pwd+"'";System.out.println("sql:"+sql);System.out.println(_name);System.out.println(_pwd);try {connection=DriverManager.getConnection(url, "root", "root");} catch (SQLException throwables) {throwables.printStackTrace();}try {statement=connection.createStatement();} catch (SQLException throwables) {throwables.printStackTrace();}try {resultSet=statement.executeQuery(sql);} catch (SQLException throwables) {throwables.printStackTrace();}try {if(resultSet.next()){jf.setVisible(false);jf.dispose();new StuGui(thisno);}// 如果用户名和密码不匹配,则给出提示对话框else {JOptionPane.showOptionDialog(jf, "用户名或密码错误", "登陆失败",JOptionPane.CLOSED_OPTION,JOptionPane.ERROR_MESSAGE, null, null, null);}} catch (SQLException throwables) {throwables.printStackTrace();}}}
}

管理员登陆界面

public class ManagerLogin 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;
//    private OperationMySql db = null;public static void main(String[] args) {new ManagerLogin();}public ManagerLogin() {// 各组件实例化过程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);}@Overridepublic void actionPerformed(ActionEvent e) {// 如果单击【退出】按钮则程序退出if (e.getSource().equals(Cancel)) {System.exit(0);}// 如果单击【登录】按钮则检查用户名和密码是否匹配else if (e.getSource().equals(Login)) {// 如果用户名和密码匹配,则打开具体操作面板if (UserName.getText().equals("root") && String.valueOf(PassWord.getPassword()).equals("root")) {new ManagerGui();jf.setVisible(false);jf.dispose();}// 如果用户名和密码不匹配,则给出提示对话框else {JOptionPane.showOptionDialog(jf, "用户名或密码错误", "登陆失败",JOptionPane.CLOSED_OPTION,JOptionPane.ERROR_MESSAGE, null, null, null);}}}
}

实验总结

总结实验过程中涉及到的知识点、实验过程中遇到的问题及解决方法。

实验结果

很多都是用我自己的学号和名字做数据的,就不放图片了。。


实验中遇到的问题

一开始在数据库中插入数据失败,原因是编码方式的问题,不能输入中文,因此修改编码方式即可。

起初对Java中写sql语句还是很陌生,后来再每一次操作的时候都输出一次sql语句,来看哪里有问题,很有效果。下图是一开始不知道为什么登录不了,显示密码错误,后来输出发现是因为我的Java基础不大行,语法上有问题。

ng_name=UserName.getText(),_pwd=PassWord.getPassword().toString();
String _name=UserName.getText(),_pwd=new String(PassWord.getPassword());

虽然之前实验有操作表连接等一系列sql语句,但是让我写并且输出在gui上面的时候,我都很懵地只会select * from xx;完全忘记了有表连接。
于是先把大体功能都实现先,实现后再处理这些问题。等我把大体的功能弄出来后,开始改sql语句,表连接,让输出的信息更全、更好读一些。
而且,对于不确定如何正确编写sql语句,先在数据库自带的服务端中跑一遍sql语句,一点一点修改不正确的地方,其实并不难。通过实验的一整套流程下来,也能很熟悉这些sql语法。

错误:You have an error in your SQL syntax; 是语法上有错误

Unknown column ‘sc.cno’ in ‘where clause’

应更正为后一句sql语句,这里是少了一个表的名称

Subquery returns more than 1 row表示子查询返回了多行数据

重要知识点总结:

有关JDBC部分:
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。

方法executeQuery
用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

Mysql中字符集有关知识:
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。
如果使用 utf8 的话,存储emoji 符号和一些比较复杂的汉字、繁体字就会出错。
何为字符集?
字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。
字符集 就是一系列字符的集合。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉字的。
不同的字符集可以表示的字符范围以及编码规则存在差异。这就导致了一个非常严重的问题:使用错误的编码方式查看一个包含字符的文件就会产生乱码现象。
就比如说你使用 UTF-8 编码方式打开 GB2312 编码格式的文件就会出现乱码。示例:“牛”这个汉字 GB2312 编码后的十六进制数值为 “C5A3”,而 “C5A3” 用 UTF-8 解码之后得到的却是 “ţ”。

有关数据库系统概论部分:
从本次实验中也能体会到数据库管理系统对数据管理的好处。
数据结构化:整体是结构化的,数据之间是有联系的,在设计数据库系统的时候不仅要考虑到某个应用的的数据结构,还需要考虑整个组织之间的数据结构。
数据面向整个系统,可以同时被多个用户多个应用共享使用,大大减少数据的冗余度,节约存储空间,数据共享也能避免数据之间的不相容性和不一致性(指同一数据不同副本的值不一样)。
易于扩充:可以选取整体数据的各种子集用于不同的应用,当需求改变或增加时,只需要选取不同的子集或加上一部分数据就可以满足新的需求。

学生管理系统--【Java+MySQL】--数据库系统概论综合性实验相关推荐

  1. java sql 工资管理,企业工资管理系统(Java+MySQL)Word版

    <企业工资管理系统(Java+MySQL)Word版>由会员分享,可在线阅读,更多相关<企业工资管理系统(Java+MySQL)Word版(24页珍藏版)>请在人人文库网上搜索 ...

  2. 小区物业报修管理系统JAVA Mysql

    小区物业报修管理系统JAVA Mysql(毕业论文10000字以上,共22页,程序代码,MySQL数据库) 项目源码 [项目包含内容] [文档包含内容] [项目功能介绍] 所谓系统需求分析,通俗地说就 ...

  3. 实验管理系统java,大学生创新实验室信息管理系统 java+mysql

    本系统主要针对计算机科学与工程学院,下设专业 比如 信息管理与信息系统 计算机科学与技术 软件工程等. 功能说明: 前台主要拟实现功能详情: 1.登录.注册:大学生创新实验管理系统应分设教师.学生和 ...

  4. Python项目:学生管理系统连接MySQL数据库(增删改查、排序、统计、显示所有信息)

    文章目录 一程序功能(Function) 1. 功能概述 2. 思维导图 二.开始实践 战前准备 定义学生管理系统菜单 定义主函数 1.录入学生信息 2.查找学生信息 3.删除学生信息 4.修改学生信 ...

  5. 学生管理系统Java版

    简单的学生管理系统 主界面编写: 1.用输出语句完成主界面的编写 2.用Scanner语句实现键盘的录入 3.用swich语句完成操作的选择 4.用循环完成再次回到主界面 代码实现: while (t ...

  6. 学生管理系统的mysql数据库设计_MySQL数据库--学生管理系统数据库设计

    目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第1步: 找对象 第2步:找属性 第3步: 找关系 建表原则 第4步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为1张表 ...

  7. 学生管理系统的mysql数据库设计_MySQL 数据库 -- 学生管理系统数据库设计

    MySQL 数据库 -- 学生管理系统数据库设计 目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第 1 步: 找对象 第 2 步: 找属性 第 3 步: 找关系 建表遵守原则 第 ...

  8. 学生成绩管理系统java+mysql+swing入门级项目开发

    夫陶公清风千古,余又何人,敢称庶几 代码已移至Gitee : https://gitee.com/BreezAm/edu-student 文章目录 简要: 登陆运行效果 主界面运行效果图 界面设置运行 ...

  9. Java项目:学生管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 学生管理,教师管理,课程管理,成绩管理,系统管理等等. 二.项目运行 环境配置: Jdk1.8 + Tomc ...

最新文章

  1. Git 常用操作(2)- 创建标签
  2. 美团、饿了么,你凭什么让我多等几分钟?
  3. RegeX —— 可视化正则表达式替换器
  4. 常用汉字的unicode编码
  5. 使用ApplicationContext启动standard模式的Activity报错原因解析
  6. 请举例说明@Qualifier 注解?
  7. 图表达相关书书籍调研
  8. .NET的未来包含一个开源的Mono
  9. [css] 你有用过CSS预处理器吗?喜欢用哪个?原理是什么?
  10. Windows下DNS ID欺骗的原理与实现
  11. 图形用户界面和交互输入方法---图形数据的输入功能
  12. 面向消费者的自动文本分析(Automated Text Analysis for Consumer Research) 2017 JCR 论文阅读
  13. 张一鸣向盖茨基金会捐赠1000万美元 此前国内捐款1亿元用于抗疫
  14. linux清除历史命令记录_Linux运维常用维护命令记录,不是长篇理论,干的实用...
  15. python集合输出_Python集合操作方法详解
  16. 直角三角形 纪中 1385 数学_斜率 英文题解
  17. SDRAM、DDR2、DDR3内存频率:核心频率,工作频率,等效频率
  18. win7计算机资源管理器卡住,Win7资源管理器未响应的解决方法
  19. protected和包访问权限
  20. 解决:关于电脑访问百度很慢的问题

热门文章

  1. OpenCV开发笔记(三十六):红胖子8分钟带你深入了解缩放与图像金字塔(图文并茂+浅显易懂+程序源码)
  2. 怎么扫描图片存为电子版?只需要几步小操作
  3. 计算机代码画玫瑰,如何用代码画一朵玫瑰花
  4. Python画玫瑰花源代码
  5. 微信小程序(一)DES加密
  6. Python爬虫(第五周)
  7. 苹果审核返回崩溃日志 iOS .crash文件处理 symbolicatecrash
  8. Android TV系列 TV APP分析(一)
  9. SQL如何实现Excel自动分列功能?
  10. 极米和当贝投影仪应该怎样抉择?一文告诉你答案