学生管理系统——数据库、java基础
1、项目分层
view层:视图层
controller层:控制层
service层:业务层
dao层:数据库访问层
domain:实体包
tools:工具类
2、jar包
3、配置文件
4、程序设计
(1)domain包,主要存放javabean
package pers.zhb.student.domain; public class Course {
private String courseno;
private String cname;
private String type;
private float credit; public Course() { } @Override
public String toString() {
return "Course [courseno=" + courseno + ", cname=" + cname + ", type="
+ type + ", credit=" + credit + "]";
} public String getCourseno() {
return courseno;
} public void setCourseno(String courseno) {
this.courseno = courseno;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public float getCredit() {
return credit;
} public void setCredit(float credit) {
this.credit = credit;
} }
package pers.zhb.student.domain; public class Log {
private String account;
private String password;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Log [account=" + account + ", password=" + password + "]";
} }
package pers.zhb.student.domain; public class Score {
private String classno;
private String classname; public String getClassno() {
return classno;
} public void setClassno(String classno) {
this.classno = classno;
} public String getClassname() {
return classname;
} public void setClassname(String classname) {
this.classname = classname;
} @Override
public String toString() {
return "Score [classno=" + classno + ", classname=" + classname + "]";
} }
package pers.zhb.student.domain; public class Student {
private String studentno;
private String sname;
private String sex;
private String birthday;
private String classno;
private float point; public String getStudentno() {
return studentno;
} public void setStudentno(String studentno) {
this.studentno = studentno;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getBirthday() {
return birthday;
} public void setBirthday(String birthday) {
this.birthday = birthday;
} public String getClassno() {
return classno;
} public void setClassno(String classno) {
this.classno = classno;
} public float getPoint() {
return point;
} public void setPoint(float point) {
this.point = point;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} private String phone;
private String email; @Override
public String toString() {
return "Student [studentno=" + studentno + ", sname=" + sname
+ ", sex=" + sex + ", birthday=" + birthday + ", classno="
+ classno + ", point=" + point + ", phone=" + phone
+ ", email=" + email + "]";
}
}
定义了学生、班级、分数等的属性和方法。
(2)dao层:
package pers.zhb.student.dao; import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler; import pers.zhb.student.domain.Log;
import pers.zhb.student.domain.Score;
import pers.zhb.student.domain.Student;
import pers.zhb.student.domain.Course;
import pers.zhb.student.tools.JDBCUtils; public class StudentDao {
BasicDataSource datasource = JDBCUtils.getDataSource();
private QueryRunner qr = new QueryRunner(datasource); // 注册
public void register(Log reg) {
try {
String sql = "INSERT INTO Login(account,password) VALUES(?,?)";
Object[] params = { reg.getAccount(), reg.getPassword() };
qr.update(sql, params); } catch (SQLException e) {
throw new RuntimeException(e);
}
} // 登录
public List<Log> Login() {// 每一条记录封装到JavaBean中,再将JavaBean放入List集合
try {
String sql = "select * from Login";
List<Log> list = qr.query(sql, new BeanListHandler<Log>(Log.class)); return list;
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("学生信息查询失败");
} } // 添加学生信息
public void addStudent(Student stu) {
try {
String sql = "INSERT INTO student(studentno,sname,sex,birthday,classno,point,phone,email) VALUES(?,?,?,?,?,?,?,?)";
Object[] params = { stu.getStudentno(), stu.getSname(),
stu.getSex(), stu.getBirthday(), stu.getClassno(),
stu.getPoint(), stu.getPhone(), stu.getEmail() };
qr.update(sql, params); } catch (SQLException e) {
throw new RuntimeException(e);
} } // 删除学生信息
public void deleteStudent(String snum) {
try { String sql = "DELETE from Student where studentno =?";
Object[] delete = { snum };
qr.update(sql, delete); } catch (SQLException e) {
throw new RuntimeException(e);
} } // 修改学生信息
public void updataStudent(Student stu) {
try {
String sql = "Update Student set sname=?,sex=?,birthday=?,classno=?,point=?,phone=?,email=? Where studentno=?";
Object[] update = { stu.getSname(), stu.getSex(),
stu.getBirthday(), stu.getClassno(), stu.getPoint(),
stu.getPhone(), stu.getEmail(), stu.getStudentno(), };
qr.update(sql, update);
} catch (SQLException e) {
throw new RuntimeException(e);
}
} // 查询全部学生信息,单表查询
public List<Student> selectAllStudent() {// 每一条记录封装到JavaBean中,再将JavaBean放入List集合
try {
String sql = "select * from Student";
List<Student> list = qr.query(sql, new BeanListHandler<Student>(
Student.class)); return list;
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("学生信息查询失败");
} } // 查询学分在2到5之间的课程号、课程名、课程类型,并将查询结果按课程类型升序排列,同一类型的课程按学分降序排列
public List<Course> selectCourse() {// 每一条记录封装到JavaBean中,再将JavaBean放入List集合
try {
String sql = "select courseno,cname,type,credit from course where credit between 2 and 5 order by type asc ,credit desc";
List<Course> list = qr.query(sql, new BeanListHandler<Course>(
Course.class));
return list;
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("课程信息查询失败");
} } // 查询计算机学院各个班级的编号、名称,如果平均值低于700则不显示,多表连接
public List<Score> selectScore() {// 每一条记录封装到JavaBean中,再将JavaBean放入List集合
try {
String sql = "select class.classno,class.classname from class,student where student.classno=class.classno and class.department='计算机学院' group by student.classno,class.classname,class.classno having AVG(point)>=700";
List<Score> list = qr.query(sql, new BeanListHandler<Score>(
Score.class));
return list;
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("信息查询失败");
} } }
该层主要是对数据库的操作,通过sql语句实现对数据库的增删改查操作,从而实现对学生信息的管理。
(3)Service层:
package pers.zhb.student.services; import java.util.List; import pers.zhb.student.dao.StudentDao;
import pers.zhb.student.domain.Course;
import pers.zhb.student.domain.Log;
import pers.zhb.student.domain.Student;
import pers.zhb.student.domain.Score; public class StudentService {
private StudentDao dao = new StudentDao(); public List<Log> Login() {
return dao.Login();
} public void register(Log reg) {
dao.register(reg);
} public void addStudent(Student stu) {
dao.addStudent(stu);
} public void deleteStudent(String snum) {
dao.deleteStudent(snum);
} public void updataStudent(Student stu) {
dao.updataStudent(stu);
} public List<Student> selectAllStudent() {
return dao.selectAllStudent();
} public List<Course> selectCourse() {
return dao.selectCourse();
} public List<Score> selectScore() {
return dao.selectScore();
} public boolean checkPassword(String str) {
boolean b = str.matches("[a-zA-Z_0-9]{6}");
return b;
} }
4、Controller层
package pers.zhb.student.controller; import java.util.List; import pers.zhb.student.domain.Course;
import pers.zhb.student.domain.Log;
import pers.zhb.student.domain.Student;
import pers.zhb.student.domain.Score;
import pers.zhb.student.services.StudentService; public class StudentController {
private StudentService service = new StudentService();
public void register(Log reg){
service.register(reg);
}
public List<Log> Login() {
return service.Login();
}
public void addStudent(Student stu) {
service.addStudent(stu);
} public void deleteStudent(String snum) {
service.deleteStudent(snum);
} public void updataStudent(Student stu, String studentno) {
service.updataStudent(stu);
} public List<Student> selectAllStudent() {
return service.selectAllStudent();
}
public List<Course> selectCourse() {
return service.selectCourse();
}
public List<Score> selectScore() {
return service.selectScore();
} }
(5)视图层
package pers.zhb.student.view; import java.util.Iterator;
import java.util.List;
import java.util.Scanner; import pers.zhb.student.controller.StudentController;
import pers.zhb.student.domain.Course;
import pers.zhb.student.domain.Log;
import pers.zhb.student.domain.Score;
import pers.zhb.student.domain.Student;
import pers.zhb.student.services.StudentService; public class MainView {
private StudentController controller = new StudentController();
private StudentService service = new StudentService(); public void run() {
Scanner sc = new Scanner(System.in); while (true) {
System.out.println();
System.out.println("============欢迎登录学生管理系统============");
System.out.println("1:增加学生信息");
System.out.println("2:删除学生信息");
System.out.println("3:修改学生信息");
System.out.println("4:查询学生信息");
System.out.println("5:退出");
System.out.println("请您输入要操作的功能序号:"); int choose = sc.nextInt(); switch (choose) {
case :
addStudent();
break;
case :
deleteStudent();
break;
case :
updataStudent();
break;
case :
select();
break;
case :
System.out.println("您已退出学生信息管理系统。");
System.exit();
break;
default:
System.out.println("输入有误");
break;
}
}
} public void select() {// 学生查询、课程查询、
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println();
System.out.println("============欢迎进入学生信息查询页面============");
System.out.println("1:查询所有学生信息");
System.out.println("2:查询学分在2到5之间的课程号、课程名、课程类型");
System.out.println("3:查询计算机学院各个班级的编号、名称,如果平均值低于700则不显示");
System.out.println("4:进入主页面");
System.out.println("请您输入要操作的功能序号:");
int choose = sc.nextInt();
switch (choose) {
case :
selectAll();
break;
case :
selectCourse();
break;
case :
selectScore();
break;
case :
run();
}
}
} public void register() {// 注册
System.out.println("a:新用户");
System.out.println("b:老用户");
Scanner sc = new Scanner(System.in);
String registerChoose = sc.next();
if (registerChoose.equals("a")) {
Log l = new Log();
System.out.println("请输入账号:");
l.setAccount(sc.next());
System.out.println("请输入六位密码(字母、数字、下划线):");
String password=sc.next(); if(service.checkPassword(password)){
l.setPassword(password);
}
else{
System.out.println("密码的格式不正确");
System.exit();
}
service.register(l);
System.out.println("您已注册成功");
}
if (registerChoose.equals("b")) {
Login();
}
} public void Login() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号");
String account = sc.next();
System.out.println("请输入密码");
String password = sc.next();
Iterator<Log> listIt = service.Login().iterator();// 获取集合的实现类对象,并调用集合的iterator()
while (listIt.hasNext()) {
Log l = listIt.next();
if (account.equals(l.getAccount())
&& password.equals(l.getPassword())) {
System.out.println(l.getAccount() + "," + "您已登录成功");
run();
}
}
Iterator<Log> listIt1 = service.Login().iterator();// 获取集合的实现类对象,并调用集合的iterator()
while (listIt1.hasNext()) {
Log l = listIt1.next();
if (account.equals(l.getAccount()) == true
|| password.equals(l.getPassword()) == false) {
System.out.println("登录失败");
System.exit();
}
} } public void addStudent() {// 添加学生信息
Scanner sc = new Scanner(System.in);
Student stu = new Student();
System.out.println("请输入学号:");
stu.setStudentno(sc.next());
System.out.println("请输入姓名:");
stu.setSname(sc.next());
System.out.println("请输入性别");
stu.setSex(sc.next());
System.out.println("请输入出生日期");
stu.setBirthday(sc.next());
System.out.println("请输入班级编号");
stu.setClassno(sc.next());
System.out.println("请输入入学成绩");
stu.setPoint(sc.nextFloat());
System.out.println("请输入联系电话");
stu.setPhone(sc.next());
System.out.println("请输入电子邮箱");
stu.setEmail(sc.next());
service.addStudent(stu);
System.out.println(stu.getSname() + "的信息添加成功"); } public void deleteStudent() {// 删除某一个学生的信息
System.out.println("请输入要删除的学生的学号");
Scanner sc = new Scanner(System.in);
String snum = sc.next();
service.deleteStudent(snum);
System.out.println("学号为" + snum + "的学生信息删除成功");
} public void updataStudent() {// 修改学生信息
Scanner sc = new Scanner(System.in); Student stu = new Student();
System.out.println("请输入学号:");
stu.setStudentno(sc.next());
System.out.println("请输入新的姓名:");
stu.setSname(sc.next());
System.out.println("请输入新的性别");
stu.setSex(sc.next());
System.out.println("请输入新的出生日期");
stu.setBirthday(sc.next());
System.out.println("请输入新的班级编号");
stu.setClassno(sc.next());
System.out.println("请输入新的入学成绩");
stu.setPoint(sc.nextFloat());
System.out.println("请输入新的联系电话");
stu.setPhone(sc.next());
System.out.println("请输入新的电子邮箱");
stu.setEmail(sc.next());
service.updataStudent(stu); } public void selectAll() {// 查询所有
List<Student> list = controller.selectAllStudent();
if (list.size()!= )
print(list);
else
System.out.println("没有查询到数据");
} private void print(List<Student> list) {// 查询所有
System.out.println("全部学生信息:");
for (Student students : list) {
System.out.println(students);
}
} public void selectCourse() {// 查询课程
List<Course> list = controller.selectCourse();
if (list.size() != )
printCourse(list);
else
System.out.println("没有查询到数据");
} private void printCourse(List<Course> list) {// 查询课程
System.out
.println("学分在2到5之间的课程号、课程名、课程类型,并将查询结果按课程类型升序排列,同一类型的课程按学分降序排列:");
for (Course courses : list) {
System.out.println(courses);
}
} public void selectScore() {// 查询分数
List<Score> list = controller.selectScore();
if (list.size() != )
printScore(list);
else
System.out.println("没有查询到数据");
} private void printScore(List<Score> list) {// 查询分数
System.out.println("查询计算机学院各个班级的编号、名称,如果平均值低于700则不显示:");
for (Score scores : list) {
System.out.println(scores);
}
} }
(6)工具类
package pers.zhb.student.tools; import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; public class JDBCUtils {
private static BasicDataSource datasource = new BasicDataSource();
/*
* BasicDataSource类,实现了datasource接口
*/ static {// 静态代码块,对象BasicDataSource对象中的配置,自定义 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("DB.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
// 数据库基本的连接信息,必须要设置(必须项)
datasource.setDriverClassName(pro.getProperty("driver"));
datasource.setUrl(pro.getProperty("url"));
datasource.setUsername(pro.getProperty("username"));
datasource.setPassword(pro.getProperty("password"));
// 对象连接池中的连接数量配置,可以不设置(基本项)
datasource.setInitialSize();// 初始化的连接数
datasource.setMaxActive();// 最大连接数量
datasource.setMaxIdle();// 最大空闲数
datasource.setMinIdle();// 最小空闲
} // 返回BasicDataSource类的对象
public static BasicDataSource getDataSource() {
return datasource;
}
}
这里用到的是DBCP连接池,用之前需要导入包,工具类从配置文件获取创建连接需要的数据,配置文件有利于对数据库连接参数的修改。
(7)主函数
package pers.zhb.StudentMangemrent; import pers.zhb.student.view.MainView; public class MainApp {
public static void main(String[] args) {
MainView mainWay=new MainView();
mainWay.register();
mainWay.run();// MainView类的匿名对象调用方法
}
}
5、程序分析
(1)登录时如果选择老用户,表明已经注册,Login数据表中已经有该用户的信息,可以直接登陆,否则需要注册,将数据放入数据库。
(2)通过正则规则,限制了密码必须为字母数字、下划线的六位字符串。因为用户名被设置为主键,所以用户名不能重复。
(3)对连接池和工具类的运用,减少了代码的重复率,方便了数据库的连接。
(4)通过sql语句,实现了增删改查,其中查询涉及单表和多表查询。
6、测试结果
将数据库与学生管理系统结合,实现了系统的注册、登录,增删改查的操作。
学生管理系统——数据库、java基础的更多相关文章
- 学生管理系统之Java+Mysql
主页面: 代码如下:package appstu.view; import java.awt.BorderLayout;import java.awt.Dimension;import java.aw ...
- Java 简化版学生管理系统(IO版)
Student management system 学生管理系统IO版 详细知识点可参考一下几篇文章 常用API Java 之ArrayList集合及应用 Java 之IO流及应用 Compreh ...
- 史上最强学生管理系统之ArrayList版
其实不管是网上或者培训班,都会有学生管理系统的最基础版本,本人也不过是照猫画虎,在某些细节方面进行了一些渲染,使这个最基本的小程序更加人性化和便于利于操作一点,个人愚见,大牛勿喷,欢迎转载(请注明出处 ...
- java基础-day11
第11天 综合练习 今日内容介绍 u 综合练习 第1章 综合练习 1.1 综合练习一 A:键盘录入3个学生信息(学号,姓名,年龄,居住地)存入集合,要求学生信息的学号不能重复 B:遍历集 ...
- Winform 学生管理系统增删改查
数据库: create database adonet go use adonet go create table xue ( code ), name ), sex bit, birth datet ...
- MySql操作命令创建学生管理系统
1.创建学生管理系统数据库xscj create detabase 数据库名: 2.打开数据库 use 数据库名: //创建数据库之后,该数据库不会自动成为当前数据库需要用use来指定 3.创建表名 ...
- Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,
1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...
- java版本的学生管理系统
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...
随机推荐
- 关于#define 的宏替换的一些问题
#define PI 3.14; int main() { , s = ; s = r * r * PI; s = PI * r * r; // s = 3.14; * r * r; printf(& ...
- pb笔记之数据窗口设置操作
1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Pro ...
- [Luogu5280][ZJOI2019]线段树(线段树+DP)
https://www.luogu.org/blog/Sooke/solution-p5280 首先想到对线段树上每个点分别维护有多少棵线段树在它上有标记(f[]),然后想到对于每个操作,根据转移的不 ...
- hdu 3265 第一类斯特林数
先和第二类做一个对比 第一类Stirling数是有正负的,其绝对值是包含n个元素的集合分作k个环排列的方法数目.递推公式为, S(n,0) = 0, S(1,1) = 1. S(n+1,k) = S( ...
- 关于/var/log/maillog 时间和系统时间不对应的问题 -- 我出现的是日志时间比系统时间慢12个小时
那么让我们来见证奇迹的时刻吧!! 首先你要看下/etc/localtime的软连接,到哪了 一般就是这块出问题了 检查这里就绝对不会错的 对比图 : 这种情况, 删除/etc/localtime : ...
- EntityFramework进阶(三)- 根据IQueryable获取DbContext
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 有时候我们要通过IQueryable获取所在的DbContext信息,这是完全可以的. 以下代码从个人开源框架中 ...
- FICO-财务凭证验证及替代
转载:https://wenku.baidu.com/view/9e2dae57d15abe23492f4d39.html?sxts=1561613818537 https://wenku.baidu ...
- selenium异常
记一下让我花时间去找解决办法的异常 org.openqa.selenium.ElementNotInteractableException: element not interactable 第一次出 ...
- py-1 语言介绍
一.编程与编程语言 1.编程的目的 计算机的发明,是为了用机器取代并解放人力.而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑.电脑一样自动执 ...
- 记录--linux下mysql数据库问题
本次主要记录一下linux下mysql数据库的一些问题,也是之前经常用到的知识,这里简单总结一些问题,方便自己以后的回顾.原来一直使用的是阿里云的RDS数据库mysql版,主要是因为上次阿里云做活动可 ...