课程名称:程序设计基础课程设计
题目: 大学生信息数据管理系统的设计与实现
其实现的主要方法代码如下:
public class ButtonEvents implements ActionListener{
JTextField alluse;
JButton allJbutton;
Statement sql;
ResultSet rs;
public void actionPerformed(ActionEvent e) {
try {
alluse=(JTextField) e.getSource();
if(alluse!=null) { //将事件源转换为JTextField,如果成功则调用allUee方法
allUee();
}
}catch(Exception e1) {
allJbutton=(JButton)e.getSource(); //如果失败(抛出异常),则尝试将事件源转换为JButton,如果按钮的名字是"reg",则调用Jbtton方法
if(allJbutton.getName()=="reg") {
Jbtton();
}
}
}
void allUee() { //JTextField的焦点转移。如果当前的JTextField的名字是"nametext","accounttext"或"passwordtext",则将焦点转移到相应的组件上
if(alluse.getName()=="nametext") {
Register.accounttext.requestFocus();
}
if(alluse.getName()=="accounttext") {
Register.passwordtext.requestFocus();
}
if(alluse.getName()=="passwordtext") {
Register.reg.requestFocus();
}
}
void Jbtton() { //用于处理注册逻辑。首先检查各个输入框是否为空,如果为空则弹出警告消息;如果所有检查都通过,则尝试将用户信息插入到数据库中,如果插入成功则弹出注册成功的消息,如果插入失败弹出用户已存在的消息
boolean nameT=Register.nametext.getText().equals("");
boolean accountT=Register.accounttext.getText().equals("");
char[] str=Register.passwordtext.getPassword();//获取密码
String passwordtext=new String(str);
boolean passwordT=passwordtext.equals("");
str=Register.passwordtext.getPassword();
if(nameT==true) {
JOptionPane.showMessageDialog(null, "姓名不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else if(accountT==true){
JOptionPane.showMessageDialog(null, "学号不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else if(passwordT==true) {
JOptionPane.showMessageDialog(null, "密码不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else {
String name=Register.nametext.getText();
String account=Register.accounttext.getText();
String password=passwordtext;
java.sql.Connection con=Mysqld.con;
PreparedStatement preSql; //使用了预编译的SQL语句来防止SQL注入攻击
String Url = "insert into user values(?,?,?,?)"; //Url是一个预编译的SQL语句,其中的问号?是参数占位符
try {
preSql=con.prepareStatement(Url);
preSql.setString(1, name);
preSql.setString(2, account);
preSql.setString(3, password);
preSql.setString(4, "0");
int ok=preSql.executeUpdate(); //使用数据库连接con来准备SQL语句,然后设置参数占位符的值。executeUpdate()方法用于执行SQL语句
JOptionPane.showMessageDialog(null, "注册成功!","注册消息",JOptionPane.WARNING_MESSAGE);
}catch(SQLException e) {
System.out.println(e);
JOptionPane.showMessageDialog(null, "当前用户已存在","注册消息",JOptionPane.WARNING_MESSAGE);
}
}
}
}
1. 界面实现
1.登录进入主界面,如图。
对于该界面管理员登录(输入相应账户和密码后),点击“登录”。
其实现的主要方法代码如下:
1.1定义了组件和布局:
FlowLayout flowlayout;
JLabel bgimg;//5个标签-----1文本框,1密码框,1登录按钮
JLabel register;
JLabel account;
JLabel password;
JLabel title;
public static JTextField accounttext;
public static JPasswordField passwordtext;
JButton button;
final int WIDTH=500;
final int HEIGHT=313;
javax.swing.JPanel jpanel_1;//放图片
javax.swing.JPanel jpanel_2;//放标题
javax.swing.JPanel jpanel_3;
RegEvent regevent;
ActionListener lintener_1;
2.在构造函数中初始化组件和布局:
public LoginStart() {
init();
setVisible(true); //窗口是否可显示
setResizable(false);//大小不可变
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //设置默认关闭方式
validate();
}
void init() {
...省略其他代码...
}
3.在init()方法中添加各种组件到布局中:
jpanel_1=new javax.swing.JPanel();
jpanel_1.setBounds(0,0,WIDTH,HEIGHT);
jpanel_1.setLayout(null);
jpanel_2=new javax.swing.JPanel();
jpanel_2.setBounds(0,50,WIDTH,50);
jpanel_2.setLayout(flowlayout);
jpanel_2.setOpaque(false);//设置透明
jpanel_3=new javax.swing.JPanel();
jpanel_3.setBounds(100,105,300,130);
jpanel_3.setLayout(flowlayout);
jpanel_3.setOpaque(false);//设置透明
jpanel_3.setBorder(BorderFactory.createTitledBorder("登录界面"));
Fronts fronts=new Fronts();//标题字体
this.setTitle("大学生信息数据管理系统");//标题
Toolkit kit =Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
int x=(width-WIDTH)/2;
int y=(height-HEIGHT)/2;
this.setBounds(x,y,WIDTH,HEIGHT);
ImageIcon img =new ImageIcon("src/img/5.jpg");//设置背景
bgimg=new JLabel(img);
bgimg.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
title=new JLabel("大学生信息数据管理系统"); //添加标题
title.setFont(fronts.title);
3.管理员注册界面,如图。
此界面用于管理员注册账号所用,其实现的主要方法代码如下:
void allEvent() {
listener_1=new ButtonEvents();
nametext.addActionListener(listener_1);
accounttext.addActionListener(listener_1);
passwordtext.addActionListener(listener_1);
reg.addActionListener(listener_1); }
3.主界面,如图4-11。
图4-11 主界面
此界面可供管理员进行信息管理实现以及用户管理实现,其实现的主要方法代码如下:
3.1 定义了组件(如背景图片、菜单栏、菜单和子菜单)和布局;
3.2在构造函数中初始化组件和布局;
3.3创建一个滚动面板来显示表格数据:
void table() {
tablel = getTable();
jscrollpane = new JScrollPane(tablel);// 浏览条
jscrollpane.setPreferredSize(new Dimension(WIDTH - 30, 250));// 窗格设置大小
tablel.setPreferredSize(new Dimension(WIDTH - 30, 1000));// 表格大小
jscrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);// 滑动组件显示
}
JTable getTable() {
if (tablel == null) {
tablel = new JTable();
int[] columnWidth = { 150, 150, 150, 150, 150, 150 };
model = new DefaultTableModel() {
public boolean isCellEditable(int row, int column) {
return false;
}
};// 让表格不可编辑
model.setColumnIdentifiers(columns);
tablel.setModel(model);
columnModel = tablel.getColumnModel();
tablel.getTableHeader().setReorderingAllowed(false);
tablel.getTableHeader().setResizingAllowed(false);
int count = columnModel.getColumnCount();
for (int i = 0; i < count; i++) {
javax.swing.table.TableColumn column = columnModel.getColumn(i);
column.setPreferredWidth(columnWidth[i]);
}
rwo = new Vector(5);
}
return tablel;
}
3.4添加监听事件
2. 功能模块实现
4.4.1 信息管理实现
如图:
此代码主要用于管理员用于对学生数据信息的一些操作,其实现的主要方法代码如下:
1.添加学生信息
public static void addstudent(String name,String sex,String age,String grade,String id) { //用于向数据库中添加学生信息
PreparedStatement preSql;
String sqlStr ="insert into stu(name,sex,age,grade,id) values(?,?,?,?,?)";
try {
preSql=con.prepareStatement(sqlStr);
preSql.setString(1, name);
preSql.setString(2, sex);
preSql.setString(3, age);
preSql.setString(4, grade);
preSql.setString(5, id);
int ok =preSql.executeUpdate();
JOptionPane.showMessageDialog(null, "添加成功","添加数据",JOptionPane.WARNING_MESSAGE);
}catch(SQLException e) {
JOptionPane.showMessageDialog(null, "当前数据已存在,","添加数据",JOptionPane.WARNING_MESSAGE);
}
}
2.删除指定id的学生信息
public static void delStudent(String id) { //用于从数据库中删除指定ID的学生信息
PreparedStatement preSql;
String sqlStr ="delete from stu where id=?";
try {
preSql=con.prepareStatement(sqlStr);
preSql.setString(1, id);
int ok =preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "未找到相关学号","消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "删除成功","消息",JOptionPane.WARNING_MESSAGE);
}
}catch(SQLException e) {
JOptionPane.showMessageDialog(null, "删除失败","添加数据",JOptionPane.WARNING_MESSAGE);
}
}
3.更改学生信息
public static void changeStudent(String name,String sex,String age,String grade,String id,String account) { //用于更改学生的信息
PreparedStatement preSql;
String sqlStr="update stu set name=?,sex=?,age=?,grade=?,id=? where id=?";
try {
preSql=con.prepareStatement(sqlStr);
preSql.setString(1, name);
preSql.setString(2, sex);
preSql.setString(3, age);
preSql.setString(4, grade);
preSql.setString(5, id);
preSql.setString(6,account);
int ok =preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "学号重复或输入学号不存在","更改数据",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "更改成功","更改数据",JOptionPane.WARNING_MESSAGE);
}
}catch(SQLException e) {
System.out.println(e);
}
}
4.查找所有的学生信息
public static void findAllstudent() { //用于查找所有的学生信息
PreparedStatement preSql;
Manage.model.setNumRows(0);//将表格数据为0
String sqlStr="select * from stu ";
try {
preSql=con.prepareStatement(sqlStr);
ResultSet rs=preSql.executeQuery();
LoginEvent.addAble(rs);
}catch(SQLException e) {
System.out.println(e);
}
}
5.删除所有学生信息
public static void deleteDate() { //用于删除所有的学生信息
PreparedStatement preSql;
String sqlStr = "DELETE FROM stu";
try {
preSql = con.prepareStatement(sqlStr);
preSql.executeUpdate();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "删除失败", "添加数据", JOptionPane.WARNING_MESSAGE);
}
}
4.4.2 用户管理实现
管理界面如图4-13:
图4-13管理界面
用户界面如图4-14:
图4-14用户界面
此代码主要用于管理员用于对自身数据信息的一些操作,其实现的主要方法代码如下:
JMenuBar menubar;// 定义菜单条
JMenu menu;// 定义一个菜单
JMenu menu1;
JMenuItem item1, item2, item3;
JMenuItem item_1, item_2;
menubar = new JMenuBar();
menu = new JMenu("管理");
menu1 = new JMenu("用户");
item1 = new JMenuItem("查看在线人数", new ImageIcon("src/img/众多用户_every-user.png"));
item2 = new JMenuItem("查看所有账号", new ImageIcon("src/img/搜索用户_people-search-one.png"));
item3 = new JMenuItem("更改管理员信息", new ImageIcon("src/img/管理箱_dropbox.png"));
item_1 = new JMenuItem("退出", new ImageIcon("src/img/logout.png"));
item_2 = new JMenuItem("重新登录", new ImageIcon("src/img/重新_redo.png"));
3.添加监听事件;
4.更改管理员信息界面,如图4-15:
图4-15 更改管理员信息界面
不足之处:
1.用户界面设计简单:虽然我尽可能让系统操作简单易用,但在设计上仍然较为基础,未能达到极致的用户体验。
2.数据安全性:虽然已有基本的数据加密措施,但对于一些特殊的攻击方式,系统可能仍存在一定的安全隐患。
3.功能完善:系统中的一些功能还不够完善,例如,数据的导入导出功能、报表生成功能等。
4.系统性能:在用户量较大的情况下,系统的响应速度可能会降低,这将影响用户的使用体验。
收获之处:
1.技术提升:实际操作中,我提高了编程技能,更深入地理解了数据库的工作原理。
2.项目管理:我学习到了如何制定和执行项目计划,管理项目进度,这对我们今后的工作有很大帮助。
3.解决问题:在遇到问题时,我学会了如何寻找和使用资源,如何解决问题。
经过这两个星期的课程设计和对相关资料的收集,让我清楚的感到自身编程水平的的局限,不仅在于在实践中的未能将所想实现的设定完全展现出来,感到编程经验的缺乏,另外在实际运用中,更感到自身编程知识的短缺,需不断补充。
在这个程序设计中,虽然这个大学生数据信息管理系统具备的功能尚不完善,也没有良好的用户体验的设定,但经过一定的场景设定,可解决一部分可能的出问题,基本保证可以进行一定操作。
在解决问题中,对面向对象编程语言java及MySQL数据库有进一步了解,可以做一定的操作。亦对数据库E-R图,程序设计的需求分析、概念结构设计、逻辑结构设计到最后编程实现系统的功能以及怎样写程序设计说明书有了一定了解。
通过这一次的课程设计,我学会了很多方法,但是由于这个系统是由我们学生自行设计肯定存在许多不足之处。结合程序的实用性希望在以后的学习和开发中继续补充功能与优化功能和美化界面,我相信,只要不断学习,就可以不断进步,直至成功,道阻且长,行则将至。
至此,基于学生信息管理系统的程序设计基础课程设计已全部完成,源代码会在文章顶部展示