1 课题简介
-
- 背景及研究现状
国道是分布在中国境内的带状构造物,具有很强的地理分布特性,决定了他必然是地理信息系统技术运用的主要领域,于是国道信息系统应运而生。国道信息管理系统是利用计算机、现代数据库技术,按一定方式合理组织信息流,从而向用户提供查询信息的应答系统。
国道交通领域由于公路路网本身所具有的空间地理属性,一直是GIS最具代表性的重要应用领域之一。近年来,随着GIS与GPS(全球定位系统)技术的融合,使得GIS在交通运输的规划和管理,国道的规划、设计、管理等方面的应用有了很大发展。
-
- 设计内容与设计思路
国道信息界面设计包括国道信息的录入、更改、删除、查询。后续登录时可以跳转到相关界面,方便用户查询。
根据要求写出国道类所包含的属性,对属性进行封装,设置为私有,封装后属性通过set、get方法获得。之后加入若干构造方法,再根据查询、删除、增加等要求添加其他方法,最后所有方法交给被调用处输出。同时为了方便用户使用,应采取GUI(图形用户接口),利用其中的容器窗口、布局管理器、Swing常用组件等创建交互界面,对其添加事件处理机制,完成需求设计。[1]
2.2 需求分析
2.2.1 系统设计目标
随着经济交通等快速发展,国道正向着大型化、规模化的方向发展,国道数量不断增加,在这种情况下单靠人工来处理相关信息工作量将很大。用计算机可使人们从繁重工作中解脱出来,仅用一些简单操作便可及时准确的获得需要的信息。
该系统具体任务就是设计一个国道信息管理系统,由计算机代替人工执行一系列诸如增加国道信息、变更国道信息、删除国道信息、查询国道信息等操作。使管理工作系统化、规范化、自动化,从而达到提高管理效率的目的。
设计指导思想是界面美观大方、操作简单明了,有良好的容错性,在用户出现误操作时可以及时给出警告,以便用户进行改正。
2.2.2 系统功能需求分析
国道是指具有全国性政治、经济意义的主要干线公路,包括重要的国际公路,国防公路,连接首都与各省、自治区、直辖市首府的公路,连接各大经济中心、港站枢纽、商品生产基地和战略要地的公路。国道查询系统可以使用户迅速查出国道相关信息,为出行人员提供最优的行车路线,避免环境不熟所带来的困难。
表2-1 系统功能需求分析表
序号 | 模块名称 | 描述 |
1 | 登录注册 | 用户注册信息后登录 |
2 | 管理员 | 进行数据增加、删除、修改,账号的管理 |
3 | 普通用户 | 只能进行相关查询 |
2.2.3 系统性能需求分析
软件系统应满足国家信息化建设规范及相关数据接口要求,具有良好的伸缩性、可扩展性,根据国道不断发展引出的新需求对其进行重新配置、改进。提供科学、合理、完善的数据编码规范与标准,满足用户需求。系统数据库应采用可跨平台的数据库解决,数据库应具有较好的安全性、兼容性。用户界面统一、标准、易于使用。
2.3 系统总体设计
2.3.1 系统总体结构设计
系统总体结构采用C/S架构
C/S 架构是一种典型的两层架构,其客户端包含一个或多个在用户的电脑上运行的程序,服务器端是数据库服务器端,客户端通过数据库连接访问服务器端的数据。当服务器在接到客户端的请求时,将所请求的资源再返回给客户端这个过程就是响应,登录国道信息查询系统时,我们输入账号和密码后点击登录,这就是一个请求,在服务器收到这个请求时,服务器会去对比数据库,通过账号去核实你的密码,正确后就登录到查询界面。[2]
2.3.2 系统功能模块设计
登录注册模块:
首先在登录页面上会显示账号和密码,如果用户输入的账号密码正确,点击安全登录,则发生跳转,若不正确,则显示“用户名或密码错误”。进入页面以后,点击注册功能,对未注册的账号进行注册完成登录,其中注册所需内容包括:姓名,账号,密码以及再一次确认密码。若密码与确认密码不一致,则出现密码前后不一致的提示。
主界面模块:
首页主要几个按钮组成,增加数据,删除数据,查询数据,修改数据。其中添加数据具有对新增国道进行信息添加的管理权限,删除数据主要实现移除废弃国道信息的功能。查询数据主要实现的是对国道信息进行查询管理,在查询信息中可以查看国道的编号、起始地、目的地、长度、所属省份等。修改数据是可以由管理员实现对国道信息的修改。
管理员模块:
管理员通过登录界面进入主界面后,点击左上角的“管理”图标,可以对在线账号进行查询,同时也可以查询所有账号的数量。所有账号包括管理员的账号可以通过这里修改账号的密码,其中管理员可以修改员工的密码。点击左上角的“账号”可以退出和注销账号。
2.3.3 主要业务流程
首先是登录注册,在登录页面上会提示输入账号和密码,如果是第一次使用的用户,就点击左下角注册按钮,其中注册所需内容包括:姓名,账号,密码以及确认密码。若两次输入密码不一致,则出现密码前后不一致的提示。如果用户输入的账号密码正确,点击登录,则发生跳转,若不正确,则显示“用户名或密码错误”。
登录成功后接下来进入主界面,首页主要由几个按钮组成,增加数据,删除数据,查询数据,修改数据。其中添加数据具有对新增国道进行信息添加的管理权限,删除数据主要实现移除废弃国道信息的功能。修改数据是可以由管理员实现对国道信息的修改。查询数据主要实现的是对国道信息进行查询管理,可以根据国道起始地、目的地、长度和所属省份等信息进行不同的查询。查询信息将在下列表格中显示。
如果是国道信息管理员,进入主界面后可以点击左上角的“管理”图标,对在线账号进行查询,同时也可以查询所有账号的数量。所有账号包括管理员的账号可以通过这里修改账号的密码,其中管理员可以修改员工的密码。点击左上角的“账号”图标可以退出和注销账号。
2.4 系统数据库设计
2.4.1 数据库概念模型设计
2.4.2数据库逻辑结构设计
关系型数据库Relational Database
满足运营系统的运行和业务处理的需要,而且能够满足一定时期业务量的增长;满足连接的整体可靠性, 具有优秀的可扩展性原则, 为的是日后发展的需要;服务器的安全性与系统的整体安全性密不可分,如:网络系统的安全、数据加密、密码体制等;服务器需要在其自身,包括软硬件,都应该从安全的角度上设计考虑[3],在借助于外界的安全设施保障下,保证本身的高安全性。
进行需求分析,了解用户需要;概念结构设计[4],对用户需求进行综合、归纳和抽象;逻辑结构设计,用各个实体定义的属性画出总体E-R图;物理结构设计,选取一个最适合应用环境的物理结构;数据库实施,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行;不断进行数据库的运行和维护。[5]
表2-2 user表结构
Column Name | Date Type | Width | 空值情况 |
name | Char | 20 | 主关键字 |
account | Char | 20 | 不为空 |
password | Char | 20 | 不为空 |
start | Char | 20 | 不为空 |
表2-3 nationalroad表结构
Column Name | Date Type | Width | 空值情况 |
Num | Char | 20 | 主关键字 |
StartPlace | Char | 20 | 不为空 |
End Place | Char | 20 | 不为空 |
Length | Char | 20 | 不为空 |
Province | Char | 20 | 不为空 |
2.4.3 数据库关系设计
3 系统详细设计
3.1系统采用的关键技术
3.1.1界面面显示逻辑与底层数据操作分离
软件设计要分层是为了应对软件需求的变化来考虑的, 而软件设计分层就是为了在不同的层次上应对这些稳定性不同的需求,在上层设计中响应不稳定的需求,而在下层设计中实现稳定的需求,而在分层后的设计中使得上层依赖下层,而不允许下层依赖上层,则可以使得应对大部分需求变化时对系统的修改最少,这就是软件分层的原理和原则。
在一般的MIS系统中,通常数据库结构是最稳定的,轻易不会修改,扩充是有可能的,所以通常数据层放在最下层;而业务逻辑也相对稳定。
3.2.2数据库连接与访问
JDBC java语言连接数据库,首先注册驱动 (告诉Java要连接什么数据库),说明连接的数据库服务器地址,数据库类型,要访问的数据库名[6],访问的端口。之后获得连接 (表示JVM的进程与数据库之间的通道打开),然后会获得数据库操作对象 、执行sql 语句,处理查询结果集 (只有执行select 语句才有的步骤)。使用完后,一定要释放资源。[7]
3.2 系统框架的实现(或基本配置)
3.2.1 主要的类与接口
表3-1 主要的类及其功能
类与接口 | 实现的名称 | 简单描述 |
MainView.java | 主界面 | 基本信息处理功能增删查改和管理员管理的图形化界面 |
LoginStartView.java | 初始登录界面 | 账号,密码,登录,注册的图形化界面 |
ReaisterView.iava | 注册界面 | 点击“注册”后的用户注册界面 |
ChangeAccountMessageView.java | 更改用户信息的界面 | 更改用户信息的窗口界面 |
ChangeOwnPasswordView.java | 更改用户个人密码的界面 | 更改用户个人密码的窗口界面 |
RegEvent.java | 注册事件 | 点击注册弹出注册界面 |
LogEvent.java | 登录事件 | 管理员管理功能 增删改查 |
AccountEvent.java | 用户注册界面各组件的触发事件 | 文本框回车下一行 确认注册按钮的条件判断 |
WindowsEven.java | 窗口事件 | 主界面的窗口关闭时 改变状态(是否在线) |
Mysqld.java | 数据库连接 | 包含数据操作 |
Fronts.java | 字体类 | 设置所有字体,方便调用 |
RunGetAccountStart.java | 获得用户状态 | |
MainView.java | 主界面 | 基本信息处理功能增删查改和管理员管理的图形化界面 |
3.3.2 系统主要配置文件
项目研发过程中,总会遇到一些经常改变的参数,比如要连接的数据库的连接地址、名称、用户名、密码;再比如访问三方服务的 URL 等等。考虑到程序的通用性,这些参数往往不能直接写死在程序里,通常借助配置文件来处理。
3.3具体功能模块的实现
3.3.1 主界面模块
功能模块的界面列表及功能描述
页面的设计
新建一个MainView类,通过定义布局,创建对象,初始化,设计背景,完成主页面的设计。[8]
public class MainView extends JFrame { //定义布局 FlowLayout flowlayout;//定义一个布局 //定义窗口的高度和宽度 //窗口变量 final int WIDTH=800;//设置顶层框架的宽度 final int HEIGHT=725;//设置顶层框架的高度 //定义标签 JLabel bgimg;//顶层的图片 //定义菜单栏 JMenuBar menubar;//顶一个菜单条 JMenu menu,menu1;//定义一个菜单 JMenuItem item1,item2,item3,item4;//带标签的菜单项 JMenuItem item1_1,item1_2; //定义一个盘子 javax.swing.JPanel jpanel_1;//放图片和其他的盘子 javax.swing.JPanel jpanel_2;//用来放表格 //定义标签 JLabel Name; public static JTextField Nametext; JLabel StartPlace; public static JTextField StartPlacetext; JLabel EndPlace; public static JTextField EndPlacetext; JLabel Length; public static JTextField Lengthtext; JLabel Province; public static JTextField Provincetext; JButton add,del,change,show,reset; JLabel namebecondition;//编号条件 public static JTextField namebeconditiontext;//编号文本 public static JTextArea resultText;//显示结果 //表格的数据 Object columns[] ={"编号","起始地","目的地","长度","所属省份"};//标题信息 JTable tableL=null; JScrollPane jscrollpane; static Vector<?> rwo; static Object a[][]; static int row ; public static DefaultTableModel model; static TableColumnModel columnModel; //定义一个监听 ActionListener lintener_1; //定义一个窗口监听 WindowsEven lintener_2; public MainView() { init(); setVisible(true); //设置当前窗口是否可显示 setResizable(false);//窗口的大小不可边 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//设置默认关闭方式 validate();//让组件生效 } void init() { //定义布局 flowlayout=new FlowLayout(FlowLayout.CENTER);//居中对齐 //第一步设置最底层的布局 this.setLayout(null); 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("img/QQ截图20230107111538.png");//将图片读取放到img变量里面 bgimg=new JLabel(img); bgimg.setBounds(-50,-5,img.getIconWidth(),100);//设置背景图片 设置背景位置 //添加菜单栏 menubar=new JMenuBar();//构造菜单条 menu=new JMenu("管理"); menu1=new JMenu("账号"); item1=new JMenuItem("查看在线的账号",new ImageIcon("img/11.jpg")); item2=new JMenuItem("查看所有账号",new ImageIcon("img/22.jpg")); item3=new JMenuItem("更改账号信息",new ImageIcon("img/33.jpg")); item4=new JMenuItem("更改账户密码",new ImageIcon("img/44.jpg")); item1_1=new JMenuItem("退出",new ImageIcon("img/I1_1.jpg")); item1_2=new JMenuItem("注销",new ImageIcon("img/I1_2.jpg")); menu.add(item1); menu.add(item2); menu.add(item3); menu.add(item4); menu1.add(item1_1); menu1.add(item1_2); menubar.add(menu); menubar.add(menu1); //初始化第一个面板 jpanel_1 =new javax.swing.JPanel(); jpanel_1.setLayout(flowlayout);//居中对齐 jpanel_1.setBorder(BorderFactory.createTitledBorder("基本信息处理")); jpanel_1.setBounds(0, 100, WIDTH-14, 100); //添加编号按钮 Name=new JLabel("编号"); //添加编号文本 Nametext=new JTextField(10); //添加起始地 StartPlace=new JLabel("起始地"); //添加起始地文本 StartPlacetext =new JTextField(10); //添加目的地 EndPlace=new JLabel("目的地"); //添加目的地文本 EndPlacetext=new JTextField(10); //添加长度 Length=new JLabel("长度"); //添加长度文本 Lengthtext=new JTextField(10); //添加所属省份 Province=new JLabel("所属省份"); //添加所属省份文本 Provincetext=new JTextField(10); //添加5个按钮 add=new JButton("增加数据"); del=new JButton("删除数据"); change=new JButton("修改数据"); show=new JButton("查找数据"); reset=new JButton("重置数据"); namebecondition=new JLabel("请在文本框输入正确的编号:");//所属编号条件 namebeconditiontext=new JTextField(14);//所属编号条件文本 //设置第二个面板的布局 jpanel_2 =new javax.swing.JPanel(); jpanel_2.setLayout(flowlayout); jpanel_2.setBounds(0, 200, WIDTH-14, 300); jpanel_2.setBorder(BorderFactory.createTitledBorder("国道数据信息显示")); table(); //添加显示结果信息文本框 resultText=new JTextArea(); resultText.setBounds(10,510 , WIDTH-30, 150); resultText.setBorder(BorderFactory.createTitledBorder("账号信息显示")); resultText.setEditable(false); jpanel_1.add(Name); jpanel_1.add(Nametext); jpanel_1.add(StartPlace); jpanel_1.add(StartPlacetext); jpanel_1.add(EndPlace); jpanel_1.add(EndPlacetext); jpanel_1.add(Length); jpanel_1.add(Lengthtext); jpanel_1.add(Province); jpanel_1.add(Provincetext); jpanel_1.add(namebecondition); jpanel_1.add(namebeconditiontext); jpanel_1.add(add); jpanel_1.add(del); jpanel_1.add(change); jpanel_1.add(show); jpanel_1.add(reset); jpanel_2.add(jscrollpane); this.add(jpanel_2); this.add(jpanel_1); this.add(menubar); this.add(bgimg); this.setJMenuBar(menubar); this.add(resultText); setAllName(); allEvent(); } 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};//设置列宽 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; } void allEvent() { lintener_1=new LoginEvent(); lintener_2=new WindowsEven(); item1.addActionListener(lintener_1); item2.addActionListener(lintener_1); item3.addActionListener(lintener_1); item4.addActionListener(lintener_1); item1_1.addActionListener(lintener_1); item1_2.addActionListener(lintener_1); add.addActionListener(lintener_1); del.addActionListener(lintener_1); change.addActionListener(lintener_1); show.addActionListener(lintener_1); reset.addActionListener(lintener_1); this.addWindowListener(lintener_2); } void setAllName() { item1.setName("item1"); item2.setName("item2"); item3.setName("item3"); item4.setName("item4"); item1_1.setName("item1_1"); item1_2.setName("item1_2"); add.setName("add"); del.setName("del"); change.setName("chan"); show.setName("show"); reset.setName("reset"); show.setName("show"); reset.setName("reset"); } } |
3.3.2登录注册模块
登陆页面:
登录页面的作用,当且仅当输入了正确的且已注册的账号密码,点击登录按钮时才能登陆成功进入主页,否则会提示相应的错误。
- 页面的设计
新建一个LoginStartView类,通过定义布局,创建对象,初始化,设计背景,完成登录页面的设计。
核心代码如下:
public class LoginStartView extends JFrame {
JLabel bgimg; JLabel register; JLabel account; JLabel password; JLabel title; public static JTextField accounttext; public static JPasswordField passwordtext; JButton ok; final int WIDTH = 500; final int HEIGHT = 300; JPanel jpanel_1; JPanel jpanel_2; JPanel jpanel_3;
public LoginStartView() {
setTitle("国道信息管理系统");//设置窗体的标题 setSize(500,300);//设置窗体大小,宽度500像素,高度300像素 setLocationRelativeTo(null);//设置窗口出现位置居中 Image image =new ImageIcon("src/Img/792684628574433882.jpg").getImage(); setIconImage(image);//设置图标 init(); this.setVisible(true); this.setResizable(false); this.setDefaultCloseOperation(2); this.validate(); } void init() { this.jpanel_1 = new JPanel(); this.jpanel_1.setBounds(0, 0, 500, 50); this.jpanel_1.setLayout((LayoutManager)null);
this.jpanel_2 = new JPanel(); this.jpanel_2.setBounds(0, 50, 500, 50); this.jpanel_2.setLayout(new FlowLayout(FlowLayout.CENTER)); this.jpanel_2.setOpaque(false);
this.jpanel_3 = new JPanel(); this.jpanel_3.setBounds(120, 90, 250, 130); this.jpanel_3.setLayout(new FlowLayout(FlowLayout.CENTER,40,17 )); this.jpanel_3.setOpaque(false);
ImageIcon img = new ImageIcon("src/img/img_2.png"); this.bgimg = new JLabel(img); this.bgimg.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); //字体类 new Fronts();
this.title = new JLabel("国道信息管理系统"); this.title.setFont(Fronts.title); this.title.setForeground(Color.white);
this.account = new JLabel("账号 "); this.account.setFont(Fronts.account); this.account.setForeground(Color.white); accounttext = new JTextField(20); accounttext.setFont(Fronts.accounttext); accounttext.setForeground(new Color(224, 57, 151));
this.password = new JLabel("密码 "); this.password.setFont(Fronts.account); this.password.setForeground(Color.white); passwordtext = new JPasswordField(20); passwordtext.setFont(Fronts.accounttext);
this.ok = new JButton("登录"); this.ok.setPreferredSize(new Dimension(100, 25)); this.ok.setFont(Fronts.ok); this.ok.setBackground(Color.white); this.ok.setForeground(new Color(43,67,105)); this.ok.setName("ok");
this.register = new JLabel("注册账号"); this.register.setBounds(10, 230, 100, 40); this.register.setFont(Fronts.register); this.register.setForeground(Color.white);
this.jpanel_1.add(this.register); this.jpanel_1.add(this.register);
this.jpanel_3.add(this.account); this.jpanel_3.add(accounttext); this.jpanel_3.add(this.password); this.jpanel_3.add(passwordtext); this.jpanel_3.add(this.ok);
this.jpanel_2.add(this.title);
this.jpanel_1.add(this.jpanel_2); this.jpanel_1.add(this.jpanel_3); this.jpanel_1.add(this.bgimg); this.add(this.jpanel_1);
// this.allEvent(); } |
2)密码校验和数据处理
账号和密码跟数据库里面的是一样那就登录,写入状态数据。主要代码(具体的数据读写调用mysqld类中的方法):
button= (JButton) e.getSource(); if(button.getName()=="ok") { //如果账号和密码跟数据库里面的是一样那就登录 同写入状态数据 String account=LoginStartView.accounttext.getText(); String passworn=new String (LoginStartView.passwordtext.getPassword());
if(Mysqld.logAccount( account, passworn)) { //登录事件 //对数据库数据进行读写 LogEvent.accountA=account; //同是也写入登录状态 0 是不在线 1在线 //第一步先查询当前账号的登录状态 start=Mysqld.findAccountStart(accountA);//返回一个字符串的状态
if(start.equals("1")) { int a=JOptionPane.showConfirmDialog(null,"当前账号已经登录,是否继续登录","登录消息",JOptionPane.YES_NO_OPTION); //0代表确认 1代表 否
if(a==0) { //将数据库的状态瞬间改为0 Mysqld.setStart(accountA,"0"); NationalRoadSystem.loginstartA.close(); mainView=new MainView();//打开登录界面 while(Mysqld.findAccountStart(accountA).equals("1")) { checkStart(); break; } } }else { Mysqld.setStart(accountA,"1"); NationalRoadSystem.loginstartA.close(); mainView=new MainView();//打开登录界面 checkStart(); } }else { JOptionPane.showMessageDialog(null, "密码错误", "登录消息",JOptionPane.WARNING_MESSAGE); } |
注册页面
在登录页面点击注册按钮即可进入注册页面,进入界面以后,点击注册功能,对未注册的账号进行注册完成登录,其中注册所需内容包括:姓名,账号,密码以及再一次确认密码。若密码与确认密码不一致,则出现密码后不一致的提示。
页面设计
新建一个RegisterView类,通过定义布局,监听,按钮以及标签,对相关内容进行初始化完成注册界面的设计(代码同登录界面),其次当注册时,出现的一些错误以及会给出的提示
2)校验和数据处理
核心代码如下:
boolean nameT=RegisterView.nametext.getText().equals(""); boolean accountT=RegisterView. accounttext.getText().equals(""); //获取密码 char[] str=RegisterView.passwordtext.getPassword(); String passwordtext =new String(str);
boolean passwordT=passwordtext.equals(""); str=RegisterView.okpasswordtext.getPassword(); String okpasswordtext =new String(str); boolean okpasswordT=okpasswordtext.equals("");
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 if(okpasswordT==true) { JOptionPane.showMessageDialog(null, "确认密码不能为空", "注册消息",JOptionPane.WARNING_MESSAGE); }else if(passwordtext.equals(okpasswordtext)==false){ //如果确认密码和密码是不一样的 JOptionPane.showMessageDialog(null, "密码输入不一致", "注册消息",JOptionPane.WARNING_MESSAGE); }else {
//写入数据: //姓名文本 String name=RegisterView.nametext.getText(); //账号文本 String account=RegisterView. accounttext.getText(); //密码文本 String password= passwordtext;
java.sql.Connection con=Mysqld.con; PreparedStatement preSql; String Uri="insert into user values(?,?,?,?)"; try { preSql=con.prepareStatement(Uri); preSql.setString(1, name); preSql.setString(2, account); preSql.setString(3, password); preSql.setString(4, "0"); preSql.executeUpdate(); JOptionPane.showMessageDialog(null, "注册成功", "注册消息",JOptionPane.WARNING_MESSAGE); }catch(SQLException e) { JOptionPane.showMessageDialog(null, "当前账号已经存在", "注册消息",JOptionPane.WARNING_MESSAGE);
}
|
4 系统测试
4.1 系统测试方法
创建Test类
通过jdbc-odbc桥连接驱动来操作数据库,在应用程序段组织SQL语句
用已经创建的数据连接对象来创建SQL语句执行对象,结果集对象来保存查询结果
4.2 系统测试用例
功能模块测试主要包括这几个方面:
页面设计测试:页面的标签及输入框是否有缺失,界面文字是否正确。
页面操作测试:页面按钮能否正常响应,数据存在的多组用例。
有数据列表项的页面测试:新增数据不能与已有数据关键字相同,是否删除正确、修改数据后正确更新列表。
测试项目 | 预置条件 | 输入 | 执行步骤 | 预期输出 |
主页面控件测试 | 主页面正常显示 | 无 | 无 | 界面显示文字和按钮文字显示正确,按钮齐全,控件整齐 |
查询功能测试 | 查询结果正常显示 | 所需查询的属性 | 点击查询按钮 | 下方表格内显示查询结果 |
删除功能测试 | 查询结果正常显示 | 输入不存在编号 | 点击删除按钮 | 提示未找到相关编号 |
删除功能测试 | 查询结果正常显示 | 输入存在编号 | 点击删除按钮 | 提示删除成功 |
修改功能测试 | 查询结果正常显示 | 输入编号有误 | 点击修改按钮 | 提示编号重复或者输入编号不存在 |
修改功能测试 | 查询结果正常显示 | 输入正确属性 | 点击修改按钮 | 提示更改成功 |
增加功能测试 | 查询结果正常显示 | 输入编号重复 | 点击增加按钮 | 提示当前编号已经存在 |
增加功能测试 | 查询结果正常显示 | 输入正确属性 | 点击增加按钮 | 添加成功 |