大二上学期末零基础开始用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 {
// 定义数据库连接url
private 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;
}
// 返回当前实例数据库连接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("关闭连接时发生错误!");
}
}
//查询所有学生的信息
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();
// 连接 mysql
db.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");
}
@Override
public 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_name
WHERE column_name operator value
GROUP BY column_name;
*/
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public 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();
// 连接 mysql
db.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");
}
@Override
public 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;*/
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public 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);
}
@Override
public 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);
}
@Override
public 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 解码之后得到的却是 “ţ”。
有关数据库系统概论部分:
从本次实验中也能体会到数据库管理系统对数据管理的好处。
数据结构化:整体是结构化的,数据之间是有联系的,在设计数据库系统的时候不仅要考虑到某个应用的的数据结构,还需要考虑整个组织之间的数据结构。
数据面向整个系统,可以同时被多个用户多个应用共享使用,大大减少数据的冗余度,节约存储空间,数据共享也能避免数据之间的不相容性和不一致性(指同一数据不同副本的值不一样)。
易于扩充:可以选取整体数据的各种子集用于不同的应用,当需求改变或增加时,只需要选取不同的子集或加上一部分数据就可以满足新的需求。