Change
随着二手房交易市场的进一步完善,人们将更能容易实现居者有其屋的理想,二手房交易市场像其他市场一样将为人们的生活水平的提高做出更大的贡献。消费者需求的实现,二手房市场的正常运行,都会促进二手房业的发展。而二手房业的发展,又将从投资和消费两个角度对国民经济的发展带来推动作用。因为在任何一个国家和地区,二手房业都是国民经济的一个重要构成部门。过去依靠人工操作完成的房地产的信息管理及中介服务,如楼盘销售情况和楼盘的信息或者客户的信息。其得到的数据不仅容易遗漏、误报,而且不能及时把数据之间的关系形象化表现出来,无法进一步掌握房地产的最新动态。设计开发二手房交易管理系统,旨在应用现代的信息网络化管理技术解决二手房交易管理中存在的问题,减少房地产交易时间,增进、加强交易过程监控,降低工作人员工作强度。
二手房交易管理系统是一种以互联网为基础的交易模式,通过本系统能够方便、灵活地对管理房源信息、交易信息(包括合同管理)、交易状态以及客户信息,简化和帮助房产中介的相关工作,同时方便用户查询和购买二手房产。
该系统主要记录买家、卖家、二手房房源信息、管理员、订单和合同、反馈、公告的基本情况。
买家基本信息:买家基本信息包括:注册号、购房者ID、真实姓名、密码、Email、地址、电话
卖房者基本信息:卖家基本信息包括: 注册号、卖房者ID、真实姓名、密码、Email、地址、电话
二手房基本信息:二手房基本信息包括:房源编号、发布房源的卖家编号、所属地址、房源名称,朝向、建筑单位、户型、面积、楼层、单元号、车库面积、装修状况、物业管理费,房源状态、价钱
管理员基本信息:管理员基本信息包括:管理员ID、密码、姓名、联系方式
购买订单基本信息:购买订单基本信息包括:订单号、买方注册号、卖方注册号、房源编号
合同基本信息:房屋居间服务合同基本信息包括:订单号、交易进度、合同方式、中介姓名、中介电话、签订时间
公告基本信息:公告基本信息包括:公告编号、主题、发布时间、公告内容、公告总数、房源总数、管理员ID
反馈信息表:反馈信息基本信息包括:买家号、反馈信息内容
用户登录系统时:需要输入正确的注册号、密码和身份,方可登陆系统
买家登录系统后:只能修改查看个人信息,查看本人交易情况
卖家登录系统后:只能修改查看个人信息及本人发布的房源信息,查看交易情况
买家和卖家都可以查看交易状况:只有管理员可以查看和修改交易状况
实体完整性:买家注册号、卖家注册号、房源编号、管理员ID、订单号、公告号分别为买家、卖家、二手房信息表、管理员、订单、公告的主码
参照完整性:订单的买家和卖家注册号和卖方买方基本信息表的注册号相对应,合同中的订单号和订单中的订单号相对应,公告的管理员id和管理员基本信息表的id相对应
用户定义的完整性:房源信息中的房源状态:未操作用0表示,签订合同用2表示
前台环境:eclipse
数据库环境:sql sever 2008
运行环境:windows 7及以上
该系统的基本业务要求为:
一个买家可以产生多个订单,一个订单只能由一个购房者产生
一个卖家可以出售多套二手房,一套二手房只能由一个卖家出售
一个卖房者可以发布多个二手房信息,一个房源信息只能由一个卖房者发布
一个管理员可以管理多个用户信息,用户信息都可以由管理员管理
一个订单可以产生一个合同,一个合同只能由一个订单产生
根据二手房交易管理的业务情况,该系统共分成系统登录、管理员,购房者,卖房者,交易五大系统模块。
注册、登录认证/退出功能
用户首次登录需要注册,输入6位的注册号,输入用户名和密码;在系统进行登录认证的时候,需要判别用户的身份,也就是区别管理员、租房者、购房者与卖房者,把权限作为变量传递给相应的页面,验证注册号和密码,保证安全登录。
交易管理子系统
跟进合同状态、方式等
签订合同后改变房源状态
与订单相联系
购房者子系统
查看所有房源信息和查看指定条件的房源信息
查询购房者的个人信息
修改购房者的个人信息;
提交及查看订单
查看交易
发布并查看反馈信息
退出系统
卖房者子系统
发布房源信息
查看卖房者的个人信息;
修改卖房者的个人信息
查看房源信息
管理员子系统
管理公告
管理用户
管理房源
查询管理员信息
交易管理
退出系统
系统总功能图
本项目中的实体包括六个:买家实体、卖家实体、二手房实体、反馈实体、公告实体和管理员实体,根据需求分析的结果,以下为对应的ER图:
卖家实体属性图
买家实体属性图
二手房实体属性图
管理员实体属性图
公告实体属性图
反馈实体属性图
买家和房源是一对多的关系,一个买家可以对多个房子提交订单,一个房子可以被多个买家提交订单;买家和反馈是一对多的关系,一个买家可以提交多条反馈,一个反馈只能由一个买家提交;管理员与公告是一对多的关系,一个管理员可以发布多条公告,一个公告只能由一个管理员发布;卖家与房源是一对多关系,一个卖家可以发布多个房源,一个房源只能由一个卖家发布;卖家买家与管理员由合同联系。
系统实体联系图
根据E-R图向关系模型的转换原则,一个实体型转换为一个关系模式,实体的属性就是关系的属性。因此按照图8-8中所画的E-R图,本数据库中应当包括六张表:买家信息表、卖家信息表、二手房信息表、管理员信息表、反馈表和公告表。
根据实体型间联系的转换原则:
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
综上所述,该数据库中的逻辑结构设计如表1至表8所示。
购房者信息表
Buyer | Buyer | Buyer | Buyer | Buyer | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
注册号 | B_no | char | 10 | 否 | 主码 |
购房者ID | B_id | char | 10 | 否 | |
真实姓名 | B_name | char | 10 | 否 | |
密码 | B_password | char | 10 | 否 | 6位以上字符 |
B_email | char | 20 | 否 | ||
地址 | B_add | char | 20 | 否 | |
电话 | B_tel | char | 20 | 否 |
卖房者信息表
Seller | Seller | Seller | Seller | Seller | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
注册号 | S_no | char | 10 | 否 | 主码 |
卖房者ID | S_id | char | 10 | 否 | |
真实姓名 | S_name | char | 10 | 否 | |
密码 | S_password | char | 10 | 否 | 6位以上字符 |
S_email | char | 20 | 否 | ||
地址 | S_add | char | 20 | 否 | |
电话 | S_tel | char | 20 | 否 |
二手房信息表
Houseinfo | Houseinfo | Houseinfo | Houseinfo | Houseinfo | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
房源编号 | H_no | char | 10 | 否 | 主码 |
房源名称 | H_name | char | 10 | 否 | |
所属地址 | reg_ad | char | 10 | 是 | |
建筑单位 | Item_cop | char | 10 | 是 | |
朝向 | dir | char | 10 | 是 | 朝阳/朝阴 |
户型 | Stru_na | char | 10 | 是 | |
面积 | area | char | 10 | 是 | |
楼层 | floor | char | 10 | 是 | |
单元号 | unit_no | char | 10 | 是 | |
车库面积 | cararea | char | 10 | 是 | |
装修状况 | fitment | char | 10 | 是 | |
物业管理费 | serverfee | char | 10 | 是 | |
房源状态 | status | int | 10 | 否 | 0未操作/2为交易 |
价格 | money | int | 10 | 否 |
管理员信息表
Admin | Admin | Admin | Admin | Admin | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
管理员ID | A_id | Char | 10 | 否 | 主码 |
姓名 | A_name | Char | 10 | 否 | |
联系方式 | A_tel | Char | 20 | 否 | |
密码 | A_password | Char | 10 | 否 | 至少6位 |
反馈信息表
feedback | feedback | feedback | feedback | feedback | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
买家注册号 | B_no | char | 10 | 是 | 主码 |
买家反馈 | buyerfk | char | 10 | 是 |
公告信息表
Notice | Notice | Notice | Notice | Notice | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
公告编号 | A_no | char | 10 | 否 | 主码 |
主题 | subject | char | 10 | 否 | |
公告时间 | time | char | 10 | 否 | |
内容 | content | char | 100 | 是 | |
公告总数 | A_sum | char | 10 | 是 | |
房源总数 | H_sum | char | 10 | 否 | |
管理员ID | A_id | char | 10 | 否 | 外码 |
订单表
B_order | B_order | B_order | B_order | B_order | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
订单号 | order_no | int | 10 | 否 | 主码 |
买家注册号 | B_no | char | 10 | 是 | |
卖家注册号 | S_no | char | 10 | 是 | |
房源编号 | H_no | char | 10 | 是 | |
订单状态 | order_stu | char | 10 | 是 |
合同表
contrat | contrat | contrat | contrat | contrat | |
---|---|---|---|---|---|
中文含义 | 字段名称 | 数据类型 | 字符长度 | 是否允许为空 | 备注 |
订单编号 | order_no | int | 10 | 否 | |
交易进度 | progress | char | 50 | 否 | |
合同类型 | con_style | char | 50 | 否 | |
管理员姓名 | A_name | char | 10 | 否 | |
合同签订时间 | con_time | char | 10 | 否 | |
管理员电话 | A_tel | char | 20 | 否 |
买家子系统流程图
交易子系统流程图
public class HouseInfo extends JFrame{
static Connection con;
static PreparedStatement sql;
static ResultSet res;
/*连接数据库*/
public Connection getConnection()
{
String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=Second_hand house";
String userName="sa";
String userPwd="sa";
try
{
Class.forName(driverName);
}catch(Exception e){
e.printStackTrace();
}
try{
con=DriverManager.getConnection(dbURL,userName,userPwd);
}catch(Exception e){
e.printStackTrace();
}
return con;
}
//点击按钮激活查询
JButton button_1 = new JButton("");
button_1.setOpaque(false);
button_1.setIcon(newImageIcon("sousuo.png"));
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new select(usename).setVisible(true);
}
});
//查询时查询数据库并将结果传送到JTable,关闭数据库连接避免异常
public void fillTable() {
DefaultTableModel dtm=(DefaultTableModel) info.getModel();
Connection con=null;
try {
con= houseInfo.getConnection();
ResultSet rs=getinfo.HouseList(con);
while(rs.next()) {
Vector<Object> v=new Vector<Object>();
v.add(rs.getString("H_no"));
v.add(rs.getString("S_no"));
v.add(rs.getObject("H_name"));
v.add(rs.getObject("reg_ad"));
v.add(rs.getObject("Item_cop"));
v.add(rs.getObject("dir"));
v.add(rs.getObject("Stru_na"));
v.add(rs.getObject("area"));
v.add(rs.getObject("floor"));
v.add(rs.getObject("unit_no"));
v.add(rs.getObject("cararea"));
v.add(rs.getObject("fitment"));
v.add(rs.getObject("serverfee"));
v.add(rs.getObject("status"));
v.add(rs.getObject("money"));
v.add("提交租房订单");
v.add("提交买房订单");
dtm.addRow(v);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally {
try {
if(con!=null){
con.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
//查询数据库操作
public ResultSet HouseList(Connection con) throws Exception{
String sql ="select * from Houseinfo";
PreparedStatement pstmt=con.prepareStatement(sql);
return pstmt.executeQuery();
}
//点击表格最后两列可提交租房或买房订单
info = new JTable();
info.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Point point=e.getPoint();
int row=info.rowAtPoint(point);
int column=info.columnAtPoint(point);
if(column==15){
try {
int result=JOptionPane.showConfirmDialog(null, "确定提交租房订单?");
if (result==JOptionPane.YES_OPTION) {
String str=(String)info.getValueAt(row, 0);
String str1=(String)info.getValueAt(row, 1);
getinfo.selBS(con, usename, str,str1);
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//提交订单数据库操作
public void selBS(Connection con,String s,String s1,String s2) throws Exception//s=usename,s1=H_no,s2=S_no
{
String sql ="insert into B_order(B_no,S_no,H_no,order_stu) values(?,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1,s);
pstmt.setObject(2, s2);
pstmt.setObject(3,s1);
pstmt.setObject(4, "提交租房订单");
pstmt.execute();
}
//仅查询数据库操作与查询全部房源不同
public ResultSet HouseList1(Connection con,Object s,Object s1,Object s2,Object s3,Object s4,Object s5) throws Exception {
Object a = null,b=null,c=null;
if(s=="50-150平"){
a=">=50 and area<150";
}
else if(s=="150-200平"){
a=">=150 and area<200";
}
else if(s=="200平以上"){
a=">=200";
}
if(s3=="1-3层") {
b=">=1 and floor<3";
}
else if(s3=="3-7层"){
b=">=3 and floor<7";
}
else if (s3=="7层以上") {
b=">=7";
}
if(s4=="100万以下") {
c=">=0 and money<100";
}
else if(s4=="100万-200万") {
c=">=100 and money<200";
}
else if (s4=="200万以上") {
c=">=200";
}
String sql ="select * from Houseinfo where area"+a+" and dir=? and Stru_na=? and floor"+b+" and money"+c+" and fitment=?";
//System.out.println(sql);
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1, s1);
pstmt.setObject(2, s2);
pstmt.setObject(3, s5);
return pstmt.executeQuery();
}
//仅查询数据库不同,其他基本相同
public ResultSet BuyerList1(Connection con,String usename) throws Exception {
Object use =usename;
String sql ="select * from Buyer where B_no=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1, use);
return pstmt.executeQuery();
}
//获取文本框中输入的信息,进行数据库修改,可实现只修改一项或多项
String str=new String(passwordField.getPassword());
if(!str.equals(null)&&!str.equals("")){
String sql="update Buyer set B_password=? where B_no=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1, str);
pstmt.setObject(2, usename);
pstmt.execute();
}
String str1=textField_1.getText();
if(!str1.equals(null)&&!str1.equals("")){
String sql1="update Buyer set B_id=? where B_no=?";
PreparedStatement pstmt1=con.prepareStatement(sql1);
pstmt1.setObject(1, str1);
pstmt1.setObject(2, usename);
pstmt1.execute();
}
String str2=textField_2.getText();
if(!str2.equals(null)&&!str2.equals("")){
String sql2="update Buyer set B_email=? where B_no=?";
PreparedStatement pstmt2=con.prepareStatement(sql2);
pstmt2.setObject(1, str2);
pstmt2.setObject(2, usename);
pstmt2.execute();
}
String str3=textField_3.getText();
if(!str3.equals(null)&&!str3.equals("")){
String sql3="update Buyer set B_add=? where B_no=?";
PreparedStatement pstmt3=con.prepareStatement(sql3);
pstmt3.setObject(1, str3);
pstmt3.setObject(2, usename);
pstmt3.execute();
}
String str4=textField_4.getText();
if(!str4.equals(null)&&!str4.equals("")){
String sql4="update Buyer set B_tel=? where B_no=?";
PreparedStatement pstmt4=con.prepareStatement(sql4);
pstmt4.setObject(1, str4);
pstmt4.setObject(2, usename);
pstmt4.execute();
}
//查看订单,并映射到JTable中
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {},
new String[] {"\u8BA2\u5355\u53F7", "\u4E70\u5BB6\u53F7", "\u5356\u5BB6\u53F7", "\u623F\u6E90\u7F16\u53F7", "\u8BA2\u5355\u72B6\u6001"}
));
scrollPane.setViewportView(table);
this.fillTable();
}
public void fillTable() {
DefaultTableModel dtm=(DefaultTableModel) table.getModel();
Connection con=null;
try {
con= houseInfo.getConnection();
String sql ="select * from B_order where B_no=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1,usename);
ResultSet rs=pstmt.executeQuery();
while(rs.next()) {
Vector v=new Vector();
v.add(rs.getString("order_no"));
v.add(rs.getObject("B_no"));
v.add(rs.getObject("S_no"));
v.add(rs.getObject("H_no"));
v.add(rs.getObject("order_stu"));
/*v.add(rs.getObject("S_name"));
v.add(rs.getObject("S_tel"));
v.add(rs.getObject("B_name"));
v.add(rs.getObject("B_tel"));*/
dtm.addRow(v);
}
Vector v=new Vector();
for(int i=0;i<30;i++) {
dtm.addRow(v);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally {
try {
if(con!=null){
con.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
//点击文本区域书写反馈,点击提交可将反馈信息提交
TextArea textArea = new TextArea("点击输入文字...");
textArea.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1){
textArea.setText("")
}
}
});
textArea.setBounds(0, 0, 440, 88);
contentPane.add(textArea);
JButton button = new JButton("提交");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str=textArea.getText();
try {
int valuex=JOptionPane.showConfirmDialog(feedback.this, "你确认要提交吗?", "请确认", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (valuex==JOptionPane.YES_OPTION) {
getinfo.fankui(con,str,usename);
textArea.setText("");
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
);
//填写反馈信息对数据库的操作
public void fankui(Connection con,String s,String usename) throws Exception{
String sql="insert into feedback (B_no,buyerfk) values(?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, usename);
pstmt.setString(2, s);
pstmt.execute();
}
//点击查看反馈信息,即可查看该用户的反馈
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {},
new String[] {"\u53CD\u9988"}
));
scrollPane.setViewportView(table);
this.fillTable();
}
public void fillTable() {
DefaultTableModel dtm=(DefaultTableModel) table.getModel();
Connection con=null;
try {
con= houseInfo.getConnection();
ResultSet rs=getinfo.seefankui(con,usename);
while(rs.next()) {
Vector<Object> v=new Vector<Object>();
v.add(rs.getString("buyerfk"));
dtm.addRow(v);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally {
try {
if(con!=null){
con.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
//查看反馈信息数据库操作
public ResultSet seefankui(Connection con,String usename) throws Exception{
String sql ="select buyerfk from feedback where B_no= ?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, usename);
return pstmt.executeQuery(); }
//由管理员上传合同情况,并保存到数据库可由用户查看
JButton button = new JButton("\u63D0\u4EA4");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str1=textField.getText();//订单号
String str2=textField_7.getText();//交易进度
String str3=textField_5.getText();//合同类型
String str4=textField_8.getText();//中介姓名
String str5=textField_6.getText();//签订时间
String str6=textField_9.getText();//中介电话
try {
getinfo.contract(con, str1, str2, str3, str4, str5, str6);
getinfo.changehouseinfo(con,str1 );
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//数据库操作
public void fankui(Connection con,String s,String usename) throws Exception {
String sql="insert into feedback (B_no,buyerfk) values(?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, usename);
pstmt.setString(2, s);
pstmt.execute();
}
//查看反馈信息,映射到JTable中
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {},
new String[] {
"\u6CE8\u518C\u53F7", "\u4EA4\u6613\u8FDB\u5EA6",
"\u5408\u540C\u7C7B\u578B", "\u4E2D\u4ECB\u59D3\u540D",
"\u7B7E\u8BA2\u65F6\u95F4", "\u4E2D\u4ECB\u7535\u8BDD"
}
));
scrollPane.setViewportView(table);
this.fillTable();
}
public void fillTable() {
DefaultTableModel dtm=(DefaultTableModel) table.getModel();
Connection con=null;
try {
con= houseInfo.getConnection();
String sql ="select * from contract where order_no in (select order_no from B_order where B_no=? )";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1,usename);
ResultSet rs=pstmt.executeQuery();
while(rs.next()) {
Vector v=new Vector();
v.add(rs.getString("order_no"));
v.add(rs.getObject("progress"));
v.add(rs.getObject("con_style"));
v.add(rs.getObject("A_name"));
v.add(rs.getObject("con_time"));
v.add(rs.getObject("A_tel"));
dtm.addRow(v);
}
Vector v=new Vector();
for(int i=0;i<30;i++) {
dtm.addRow(v);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally {
try {
if(con!=null){
con.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
//数据库操作
//上传合同情况(管理员操作)
public void contract(Connection con,String s,String s1,String s2,String s3,String s4,String s5) throws Exception{
String sql="insert into contract (order_no,progress,con_style,A_name,con_time,A_tel)values(?,?,?,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1,s);
pstmt.setObject(2,s1);
pstmt.setObject(3,s2);
pstmt.setObject(4,s3);
pstmt.setObject(5,s4);
pstmt.setObject(6,s5);
pstmt.execute();
}
//签订合同改变房源信息中的房源状态
public void changehouseinfo(Connection con,String s) throws Exception{
String sql="update Houseinfo set status=? where H_no in(select H_no from B_order where order_no=?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setObject(1,"2");
pstmt.setObject(2,s);
pstmt.execute();
}
测试方法:黑盒测试
测试用例:点击查询
测试结果:显示全部房源信息
测试方法:黑盒测试
测试用例:50-150平,一室,朝阳,1-3层,100万以下,装修状况为中的房源
测试结果:筛选查询出房源
测试方法:黑盒测试
测试用例:买家注册号为200000的用户
测试结果:查询出该买家的信息
测试方法:黑盒测试
测试用例:修改昵称为“美丽人生”,地址为“北京”
测试结果:修改个人信息
修改个人信息
修改完查询
测试方法:黑盒测试
测试用例:对房源号为“1100001”,卖家号为“100001”的房源提交租房申请
测试结果:提交订单,可查看到订单记录中有该订单
测试方法:黑盒测试
测试用例:买家号为“200000”的用户提交反馈
测试结果:提交反馈,可查看
测试方法:黑盒测试
测试用例:点击按钮
测试结果:退出系统成功
测试方法:黑盒测试
测试用例:订单号为36,交定金,全额,负责人小李,电话13662089012,签订时间2018/11/13
测试结果:上传合同,用户可查看合同
上传合同情况
查看交易进度
从各种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计等,亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个系统的时候才发现其中的难度。经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。
我们学习并应用了sql语言,对数据库的创建、修改、删除方法有了一定的了解,通过导入表和删除表、更改表学会了对于表的一些操作,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。
本次采用swing和MVC模式,比较方面快捷,因为要多处使用到对数据库的操作,若只是普通的连接调用那么不仅会连接麻烦而且会在修改时容易出现错误,这在我们的代码整合时充分体现了快捷性,只改变了一下数据库密码及数据库名称就可以轻松连接我们各个组员的代码。
[1] 王珊,萨师煊.数据库系统概论(第5版.北京:高等教育出版社,2014.
[2] 马忠贵. 数据库技术及应用——Microsoft SQL Server 2008+Java. 北京:国防工业出版社, 2012.
[3] 李刚. Java程序员之旅—Java数据库技术详解. 北京:化学工业出版社,2010.
[4] 贾蓉生,胡大源,林金池. Java典型应用彻查1000例-数据库应用基础.北京:科学出版社.2009.
[5] 郑阿奇. SQL Server实用教程(第4版).北京:电子工业出版社,2015.
[6] 王珊、陈红《数据库系统原理教程》清华大学出版社1998年7月
[7] 石树刚、郑振梅《关系数据》北京清华大学出版社1994年
[8] 郑人杰等《使用软件工程》(第二版)北京大学清华大学出版社1997年