曲阜师范大学软件学院
[姓名:张忠远]
[学号:2014416719]
[问题定义]通过java项目连接数据库,建立一个可以代替在数据库操作的用户信息管理系统。
[开发工具]用户信息管理系统是用Eclipse开发工具中开发完成的,基于Java开发语言。它是在Windows系统下,以Oracle数据库为开发平台的数据库可视化信息系统。
[设计过程]
需求分析:随着计算机的迅速发展和信息的爆炸式增长,数据库的应用显得尤为重要,通过java建立一个处理数据库信息的系统可代替数据库端的复杂操作,将用户信息方便的展现在系统端,方便操作和增删改查。
系统设计:
- 功能设计
用户信息管理系统功能设计包括查看用户信息、添加用户信息、修改用户信息和删除用户信息四个功能。
- 数据库设计
本系统采用的是Oracle数据库,通过Oracle数据库下的scott用户连接系统,实现系统端对数据库的可视化操作。在这个系统中,我们采用了k_user表下的数据。
- 界面设计
本系统采用的界面设计包括登录界面、添加用户信息界面、修改用户信息界面、删除用户信息界面五个界面。
3.1登录界面
我们通过输入一组提前准备好的k_user表下的数据来进行登录验证,验证成功后进入系统主页目录。如图3.1。
图3.1
登录界面代码:
public void loginView(){
System.out.println("-------欢迎登陆库存管理系统---------");
System.out.println("------1.登录------");
System.out.println("------2.退出------");
//通过控制台输入步骤
Scanner sc=new Scanner(System.in);
System.out.println("请输入操作步骤:");
int opFlag=sc.nextInt();
if(opFlag==1){
System.out.println("登录");
user = userService.checkUser(sc);
if(user == null){
System.out.println("用户名和密码不匹配");
loginView();
}else{
System.out.println("登录成功");
//首页界面todo
indexView(sc);
}
}else{
System.out.println("-----退出库存系统-----");
}
}
//首页界面
登录成功后的页面代码:
public void indexView(Scanner sc){
System.out.println("欢迎["+user.getUsername()+"]登录本系统!");
System.out.println("-----请选择要操作的目录-------");
System.out.println("------3.基础信息管理------");
System.out.println("------3.1用户管理-------");
System.out.println("------3.2部门管理-------");
System.out.println("------3.3仓库管理-------");
System.out.println("------3.4供应商管理-------");
System.out.println("------3.5产品管理-------");
System.out.println("-------4.退出系统-------");
System.out.println("-------请选择操作步骤-------");
String opString = sc.next();
switch(opString){
case "3.1":
System.out.println("登陆用户管理界面");
showUserView(sc);
//todo
break;
case "3.2":
System.out.println("-------登陆部门管理界面-------");
//todo
break;
case "3.3":
System.out.println("-------登陆仓库管理界面-------");
break;
case "3.4":
System.out.println("-------登陆供应商管理界面-------");
break;
case "3.5":
System.out.println("-------登陆产品管理界面-------");
break;
case "4":
System.out.println("-------退出系统-------");
loginView();
break;
default:
indexView(sc);
break;
}
}
public void showUserView(Scanner sc){
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("------请输入要操作的步骤:------");
String opString = sc.next();
switch(opString){
case "1":
System.out.println("------欢迎到用户信息列表页面------");
this.showUserList(sc);
break;
case "2":
System.out.println("------欢迎到新增用户界面------");
//1.建立一个addUser方法
//2.返回到用户信息列表界面
//3.
addUser(sc);
showUserView(sc);
break;
case "3":
System.out.println("------欢迎到更新用户界面------");
//1.updateUser()
updateUser(sc);
showUserView(sc);
//2.返回到用户信息列表界面
break;
case "4":
System.out.println("------欢迎到删除用户界面------");
//1.deteUser()
deleteUser(sc);
//2.返回到用户信息列表界面
showUserView(sc);
break;
case "5":
System.out.println("------返回上一级------");
break;
default:
System.out.println("------输入的指令与操作符不匹配------");
indexView();
break;
}
通过登录成功后的界面建立一个switch—case结构语句,进行接下来的功能选择。
3.2添加用户信息界面
添加用户信息界面调用了User.java的getUsername()、getDeptno()、getPosition()方法,从而使其输出到数据库k_user表中。如图3.2。
图3.2
public void showUserList(Scanner sc){
System.out.println("欢迎进入用户列表界面");
List<User> list = this.userService.showUserList(sc);
for(User user:list){
System.out.println("用户名\t\t部门NO\t\t职位");
System.out.println(user.getUsername()+"\t\t"+user.getDeptno()+"\t\t"+user.getPosition());
}
}
//新增用户界面
public void addUser(Scanner sc){
System.out.println("--------欢迎进入新增用户界面-------");
//todo 调用service层的addUser()方法
this.userService.addUser(sc);
}
3.3修改用户信息界面
修改用户信息界面调用UserService.java的updateUser()方法。如图3.3。
图3.3
//更新用户界面
public void updateUser(Scanner sc){
System.out.println("--------欢迎进入修改用户界面-------");
//todo 调用service层的updateUser()方法
this.userService.updateUser(sc);
}
3.4删除用户信息界面
图3.4
//删除用户信息界面
public void deleteUser(Scanner sc)
{
System.out.println("--------欢迎进入删除用户界面-------");
//调用service层的deleteUser方法
this.userService.deleteUser(sc);
}
4.系统主要开发步骤
- 新建一个java project项目
- 第一层包名:com
- 第二层包名:名字缩写
- 第三层 建立5个并列的包名(实体类entity,工具类util,dao层dao,service层service,表现层view)
- 在util包名下建立dbUtil工具类
Public class DBUtills{
//连接数据库
Public Connection getConnection(){
}
//关闭数据库
Public void closeAll(){
}
//查询数据库
Public ResultSet querySql(String sql,Object params[]){
}
//更新数据库:insert,updete,delete
Public int editSql(String sql,Object params[]){
}
}
- 在entity包名下建立商品的实体类
Public class goods{
属性
//get(),set()
}
- 在view包名下建立Menu.java
Public class menu{
Public static void main(String args[]){
//调用操作的方法
LoginView();
}
//登录界面
Public void loginView(Scanner sc){
}
//首页界面
Public void indexView(Scanner sc){
}
//产品信息页面
Public void showGoodSView(Scanner sc){
}
// public void addGoods(Scanner sc){
调用service层
}
}
- 在service包下新建一个GoodsService类
Public class GoodsService{
Public void addGood(Scanner sc){
//在控制台准备数据
String goodsNo = sc.next();
//…其他列的信息
Goods good -= new GoodS();
good.setGoodsNO(goodsNo);
//调用Dao层的addGoods
Int count = goodsDao.addGoods();
If( count >0){
//更新成功
}else{
//操作失败
}
}
}
- 在dao包名下新建GoodsDao类
Public Class GoodsDao{
Public int AddGoods(Goods good){
//1.连接数据库:工具类的getConnection()
//2.准备sql语句和参数
String sql=”insert into k_goods(列名,列名….) values(Goods_seq.nextVal,?,?....)”;
Object params[] ={good.getGoodsNo(),…….};
//调用工具类的editSql(),执行insert操作
Int count = db.editSql(sql,params);
return count
}
}
[程序调试情况]
我们以一组实验数据为例进行了操作实验。
1.登录。将K_USER表下的一个用户名为001密码为123的数据输入进行登录。登录后进入系统主页。
2.查看用户信息
登录成功后,我们按照提示选择3.1用户管理目录。然后选择1可以查看到输出道控制台的K_USER表下的用户信息。
3.添加用户信息
选择2目录,进入添加用户信息界面。输入一组用户名为robot密码为123年龄为1部门编号为01的数据。我们可以发现后面显示“数据更新成功”。
数据更新成功后,我们从后台sql developer软件登录scott用户,找到K_USER表,发现其中更新了这条数据,则表明数据更新成功。
4.修改用户信息
修改用户信息界面,通过输入数据库中已经存在的数据,输入要修改的用户ID,则可进行修改。这里,我们修改的是K_USER表下用户ID为45的数据,将其用户名改为ro部门编号改为10年龄改为20。数据更新后查看数据库数据消失。也可通过再次回到主页选择查看用户信息进行查看。
5.删除用户信息
删除用户信息前系统会先询问是否确定删除选项,选择“Y”后则继续进行。输入要删除的用户ID,则可将这条数据清除。我们这次选择用户ID为42的一条数据。
删除后发现数据库中这条数据消失了,表明删除数据成功。
程序调试过程中容易出现的错误:
- 程序调试时遇到了数据库无法连接的问题,注意到数据库的用户名和密码是否在代码中写错了,改正后,可以连接实现查看用户的操作。
- 程序调试时进行用户的增删改查时发现无法更新数据,显示更新数据失败。通过排查发现,是因为数据库中没有建立sequence序列,在sql developer输入CREATE SEQUENCE "USER_SEQ" MINVALUE 1 MAXVALUE 999999999999999999999 INCREMENT BY 1 START WITH 41 CACHE 20 NOORDER NOCYCLE ;建立了序列后,再重新运行系统,数据更新成功。
[心得及体会]
通过这个用户信息管理系统的开发与实现,学习到了java语言的强大性,也通过java和oracle的结合实现了对数据库的可视化操作,在写系统的同时学会了如何处理错误并及时解决,学会了debug功能,使得自己不再担心问题的出现,提高了自己的编程能力!