学生管理系统
文章目录
一、项目概述
(1)项目目标和主要内容
<1>实现一个简单的学生信息管理的程序。
<2>要求系统能为客户提供下列各项服务:教学管理人员能够使用程序对学生基本信息、课程信息进行管理,包括数据的添加、修改、删除和浏览;能够对学生选课进行管理,包括添加学生选课信息、录入成绩;能够使用查询功能,快速查看到指定学生或指定课程的基本信息以及所指定学生的选课信息;能够对学生选课情况进行简单的统计,包括所选的总的课程数、总学分数及平均成绩。
<3>要注意添加学生基本信息、课程信息相关数据时,学号和课程号不能重复;还有在添加学生选课信息时,要求该学生和课程必须是存在的,而且不能添加重复的选课信息。提供友好的交互界面,可以方便用户进行功能选择,实现信息的管理和查询,并可清晰地显示相关信息。
(2)项目的主要功能
<1>教学管理人员可以使用程序对学生基本信息、课程信息进行管理,包括数据的添加、修改、删除和浏览;能够对学生选课进行管理,包括添加学生选课信息、录入成绩;能够使用查询功能,快速查看到指定学生或指定课程的基本信息以及所指定学生的选课信息;能够对学生选课情况进行简单的统计,包括所选的总的课程数、总学分数及平均成绩。
二、项目初步设计
1.项目总体框架
2.模块划分图及描述
主要分为2个模块:
<1>对学生信息的修改,如增加,删减,信息的更新。
<2>学生信息的保存
3.类关系图
4.程序流程图
三、实验准备
1.安装MySQL
详细教程参考链接
2.学习Java结构体
Java中想用结构体的话,可以写个类来实现。
用类实现结构体并对其进行操作时,有两种方式可选:
1.把要存储的数据设为私有变量,然后另写函数对其进行读写
2.把要存储的数据设为public变量,在其他主函数类中直接访问修改。
详细代码参考链接
3.排序算法
选择一种合适算法进行成绩查询和排序
十大经典排序算法
4.增、查、改、删功能的实现
四、可能遇到的问题
1.文件操作
①使用FileReader类对文件操作时,若要获取整个字符串,可先用File类对象获取文件长度,定义大小刚好合适的字符数组,使用FileReader类对象的read(char[] arr)将文件存储在字符数组中,然后转化为字符串进行操作。
②使用FileWriter类的对象进行写入文件时,可根据不同情况选择从头写入还是末尾追加进行打开文件。写入文件成功后牢记关闭对象引用,防止文件丢失。
2.字符串操作
①使用正则表达式,用于分割字符串。空白字符可用\s表示。则换行符"\r\n"的对应正则表达式为:regex = “\s{2}”。
②删除某一字符串str1时可用str = str.replace(str1,"")进行删除。
③从键盘读取一个字符串时可用sc.next()进行读取。
五、详细代码
一共分为五类,各类的作用参考2.3
Dbutil类:
package Software;
import java.sql.*;
public class Dbutil {
public static final String DRIVER_NAME="oracle.jdbc.driver.OracleDriver";
public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
public static final String USER = "Mysql80";
public static final String PASS = "3306";
public static Connection getCon()throws ClassNotFoundException,
SQLException{
Connection con=null;
Class.forName(DRIVER_NAME);
con= DriverManager.getConnection(URL,USER,PASS);
return con;
}
public static void close(Connection con, Statement stmt, ResultSet rs){
try {
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}
if(con!=null){
con.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
Main类
package Software;
public class Main {
public static void main(String[] args) {
StuManage a=new StuManage();
a.menu();
}
}
Stu类
package Software;
public class Stu {
private String A;
private String name;
private String B;
private String result;
public String getA() {
return A;
}
public void setA(String A) {
this.A = A;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getB() {
return B;
}
public void setB(String B) {
this.B = B;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Stu() {
super();
}
public Stu(String A, String name, String B, String result) {
super();
this.A = A;
this.name = name;
this.B = B;
this.result = result;
}
}
StuDao类
package Software;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class StuDao {
private Connection con;
private PreparedStatement stmt;
private ResultSet rs;
public boolean add(Stu stu){
String sql="insert into stu(stu_A,stu_name,stu_B,stu_result) values(?,?,?,?)";
try {
con= Dbutil.getCon();
stmt=con.prepareStatement(sql);
stmt.setString(1,stu.getA());
stmt.setString(2,stu.getName());
stmt.setString(3,stu.getB());
stmt.setString(4,stu.getResult());
} catch (SQLException throwables) {
throwables.printStackTrace();
return false;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}finally {
Dbutil.close(con,stmt,rs);
}
return true;
}
public List<Stu> list(){
List<Stu> list=new ArrayList<>();
String sql="select * from stu";
try{
con= Dbutil.getCon();
stmt=con.prepareStatement(sql);
rs=stmt.executeQuery();
while (rs.next()) {
Stu stu=new Stu();
stu.setA(rs.getString("stu_A"));
stu.setName(rs.getString("stu_name"));
stu.setB(rs.getString("stu_B"));
stu.setResult(rs.getString("result"));
list.add(stu);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
Dbutil.close(con,stmt,rs);
}
return list;
}
public Stu findSomeone(String A){
Stu stu=null;
String sql="select * from stu where stu_no=?";
try{
con= Dbutil.getCon();
stmt=con.prepareStatement(sql);
stmt.setString(1,A);
rs=stmt.executeQuery();
while(rs.next()){
stu=new Stu();
stu.setA(rs.getString("stu_A"));//取结果集里面学号这一列的值赋给
stu.setName(rs.getString("stu_name"));
stu.setB(rs.getString("stu_B"));
stu.setResult(rs.getString("stu_result"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
Dbutil.close(con,stmt,rs);
}
return stu;
}
public boolean upDate(Stu stu){
String sql="update stu set stu_name=?,phone=? wherestu_no=?";
try{
con= Dbutil.getCon();
stmt=con.prepareStatement(sql);
stmt.setString(3, stu.getA());
stmt.setString(1, stu.getName());
stmt.setString(2, stu.getB());
stmt.setString(4,stu.getResult());
stmt.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
Dbutil.close(con,stmt,rs);
}
return true;
}
public boolean del(String id){
String sql="delete from stu where stu_no=?";
try {
con= Dbutil.getCon();
stmt=con.prepareStatement(sql);
stmt.setString(1,id);
stmt.executeLargeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
Dbutil.close(con,stmt,rs);
}
return true;
}
}
StuManage类:
package Software;
import java.util.List;
import java.util.Scanner;
public class StuManage {
public void menu() {
int choose;
do {
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("请选择(1-5):");
Scanner scanner = new Scanner(System.in);
choose = scanner.nextInt();
System.out.println("******************************");
switch (choose) {
case 1:
myAdd();
break;
case 2:
myUpdate(); //菜单选择2,是修改学生
break;
case 3:
myDel();
break;
case 4:
myList();
break;
case 5: //菜单选择5,是退出该系统
System.out.println("您选择了退出系统,确定要退出吗?(y/n)");
Scanner scan=new Scanner(System.in);
String scanExit=scan.next();
if(scanExit.equals("y")){
System.exit(-1);
System.out.println("您已成功退出系统,欢迎您再次使用!");
}
break;
default:
break;
}
}while (choose!=5);
}
private void myList() {
System.out.println("************************");
System.out.println("====查询学生====");
System.out.println("该学生的信息如下:");
System.out.println("学号\t姓名\t选课信息\t成绩查询");
StuDao stuDao=new StuDao();
List<Stu>list=stuDao.list();
for(Stu stuList:list)
{
System.out.println(stuList.getA());
System.out.println(stuList.getName());
System.out.println(stuList.getB());
System.out.println(stuList.getResult());
}
System.out.println("***************");
}
private void myUpdate() {
Scanner s=new Scanner(System.in);
String no;
System.out.println("====修改学生====");
System.out.println("请输入要修改的学生学号:");
no=s.next();
System.out.println("该学生的信息如下:");
StuDao stuDao=new StuDao();
System.out.println("学生学号:"+stuDao.findSomeone(no).getA());
System.out.println("学生姓名:"+stuDao.findSomeone(no).getName());
System.out.println("选课信息:"+stuDao.findSomeone(no).getB());
System.out.println("成绩查询:"+stuDao.findSomeone(no).getResult());
System.out.println("请输入新的学生信息:");
Scanner stuUp=new Scanner(System.in);
String A,name,B,result;
System.out.println("学生学号");
A=stuUp.next();
System.out.println("学生姓名:");
name=stuUp.next();
System.out.println("选课信息:");
B=stuUp.next();
System.out.println("成绩查询");
result=stuUp.next();
Stu stu=new Stu(A,name,B,result);
boolean ok= stuDao.upDate(stu);
if(ok){
System.out.println("保存成功");
}else {
System.out.println("保存失败");
}
}
private void myDel() {
Scanner s=new Scanner(System.in);
String no;
System.out.println("====删除学生====");
System.out.println("请输入要删除的学生学号:");
no=s.next();
System.out.println("该学生的信息如下:");
StuDao stuDao=new StuDao();
System.out.println("学生学号:"+stuDao.findSomeone(no).getA());
System.out.println("学生姓名:"+stuDao.findSomeone(no).getName());
System.out.println("选课信息:"+stuDao.findSomeone(no).getB());
System.out.println("成绩查询:"+stuDao.findSomeone(no).getResult());
System.out.println("是否真的删除(y/n):");
Scanner scanner3=new Scanner(System.in);
String x=scanner3.next();
if (x.equals("y")) {
Stu stu=new Stu(no,null,null,no);
StuDao dao=new StuDao();
boolean ok=dao.del(no);
if (ok) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
}
private void myAdd() {
String continute = null;
do {
Scanner s=new Scanner(System.in);
String A,name,B,result;
System.out.println("====新增学生====");
System.out.println("学号:");
A=s.next();
System.out.println("姓名:");
name=s.next();
System.out.println("选课信息:");
B=s.next();
System.out.println("成绩查询:");
result=s.next();
Stu stu=new Stu(A,name,B,result);
StuDao dao= new StuDao();
boolean ok=dao.add(stu);
if(ok){
System.out.println("保存成功");
}else {
System.out.println("保存失败");
}
System.out.println("是否继续添加(y/n):");
Scanner scanner2=new Scanner(System.in);
continute=scanner2.next();
}while (continute.equals("y"));
}
}
六、程序运行结果分析
1、项目的难点和关键点
项目的难点在于数据库的应用,信息的录入和保存,学习增加删减查询的功能实现
2、项目的评价:
可以对数据的修改和存储查询,但是功能待完善,还在继续完善。