火车售票系统(Web服务开发)

该博客介绍了如何使用WebAPI实现火车售票系统的用户管理功能,包括模型层、仓储层和控制器层的设计。在模型层,定义了管理员实体类;仓储层实现了数据库操作,如账号密码验证、账户注册和删除;控制器层处理前端请求。客户端通过HttpClient调用WebAPI进行注册、登录和删除操作。博客还展示了实际运行的截图。

WebAPI完整代码:
WebAPI(第一组)

客户端完整代码:
TrainTicketSystem(第一组)

一、WebAPI

本次实验中,我们将用户类与数据库相关的操作封装在了webapi里,在第二次实验的基础上,查询账号密码、登录、注册等功能将改变为通过自己设计的api间接访问数据库,而不是直接操作数据库。
基于Rest风格的webapi(WebServer项目)

(1)model层

model层即数据库实体层,也被称为entity层。
一般数据库一张表对应一个实体类,类属性同表字段一一对应。
在本项目中,model层中的Product类即对应于管理员类。里面的属性账号、密码分别于数据库中管理员表的字段一一对应。

namespace Webserver.Models
{
   
   
    public class Product
    {
   
   
        private int id;
        private int password;

        public int Id
        {
   
   
            get
            {
   
   
                return id;
            }
            set
            {
   
   
                id = value;
            }
        }

        public int Password
        {
   
   
            get
            {
   
   
                return password;
            }
            set
            {
   
   
                password = value;
            }
        }

    }
}

(2)repository层

这一层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
本项目中,我们在ProductRepository.cs中访问数据库,包括查询账号密码是否正确、当前账号是否在表中已经存在、新增账号和删除管理员账户几个功能。

//查询账号密码是否正确以便于登录
        public bool CheckIsPwdCorrect(int Account, int Password)
        {
   
   
            DatabaseConnection();
    
import java.util.*; import java.sql.*; import java.awt.FlowLayout; import java.awt.event.*; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.JOptionPane; public class BookTheTicket implements Runnable{ private Thread clocker,time; String s1,s2,s3,s4; long startTime,endTime; long nowTime, leftTime, leftSec, leftMin; boolean flag=false; private char chs[]=new char[8]; private Connection con = null; private Statement stmt = null; ResultSet rs=null,rs2=null; String str; public BookTheTicket(String s1,String s2,String s3,String s4) { this.s1=s1;//用户名 this.s2=s2;//订票数量 this.s3=s3;//车次 this.s4=s4;//定第n天的票 clocker = new Thread(this,"clock"); clocker.start(); time=new Thread(this,"ti"); time.start(); } //生成随机码 //*******************************************************************************************************************************************// public void play() { SimpleDateFormat dateFormat = new SimpleDateFormat(); long endtime; Calendar startCalendar = Calendar.getInstance(); endtime=startCalendar.getTime().getTime()+48*60*60*1000; //获取系统当天时间并加两天 for(int i=0;i<8;i++) { Random r2=new Random(); int m=0; do { m=r2.nextInt(124); }while(m<48||m>122||(m>90&&m<97)||(m>57&&m<65)); chs[i]=(char)m; //将筛选合格的字符存储在chs数组中 } str=String .valueOf(chs[0]); //获取chs[i]给str 如果不进行此步,str默认是null,合并后的字符串总以null开头 for(int j=1;j<chs.length;j++) str+=chs[j]; //连接数据库 //*******************************************************************************************************************************************// try { Class.forName("oracle.jdbc.driver.OracleDriver"); //DriverManager.registerDriver( //new oracle.jdbc.OracleDriver()); }catch (ClassNotFoundException e) {} //url 定义了数据库服务器的ip地址和服务端口号以及要连接的数据名 String url = "jdbc:oracle:thin:@192.168.5.16:1521:lieche"; // 定义登陆数据库的用户名和密码 String user = "system"; String password = "111111"; try { //创建一个连接对象con con = DriverManager.getConnection(url, user, password); //创建statement对象 stmt = con.createStatement(); }catch (SQLException e){} try { stmt.executeUpdate("insert into dingpiao(用户名,订票时间,过期时间,订票数量,订票验证码,车次) values('"+s1+"','"+dateFormat.format(startCalendar.getTime())+"','"+dateFormat.format(endtime)+"','"+s2+"','"+str+"','"+s3+"')"); // stmt.executeUpdate("update "+s3+" set 总票=总票-1,第"+s4+"天剩余=第"+s4+"天剩余-1 where 车次='"+s3+"' "); }catch (SQLException e) { e.printStackTrace(); } Calendar startCalendar1 = Calendar.getInstance(); startTime = startCalendar1.getTime().getTime(); // 获得开始时候的那个时间点 endTime = startTime+10*1000; // 从开始时刻开始加10秒之后过期 flag = true; } public void run() { Calendar now; while(((Thread.currentThread()).getName()).equals("clock")) { now = Calendar.getInstance(); nowTime = now.getTime().getTime(); } while(((Thread.currentThread()).getName()).equals("ti")) while(flag){ leftTime = endTime - nowTime; leftSec = leftTime / 1000; leftMin = leftTime / (60 * 1000); if(leftSec == 0) { flag=false; try { stmt.executeUpdate("delete from dingpiao where 用户名='"+s1+"'"); stmt.executeUpdate("update "+s3+" set 总票=总票+1,第"+s4+"天剩余=第"+s4+"天剩余+1 where 车次='"+s3+"'"); }catch (SQLException e) { e.printStackTrace(); } // System.exit(1); } try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } } } public ResultSet query(){ try { rs = stmt.executeQuery("select * from dingpiao where 用户名="+"'"+s1+"'"); System.out.println(rs.getString(1)); } catch (SQLException e) {} return rs; } public ArrayList L(){ int i=1; ArrayList list=new ArrayList(); rs2=query(); try { rs2.next(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while(i<=6) {try { list.add(rs.getString(i)); } catch (SQLException e) { e.printStackTrace(); } i++; } return list; } // public static void main(String[] args){ // BookTheTicket f=new BookTheTicket("u4", "3", "D101", "1"); // f.play(); // ArrayList list=new ArrayList(); // list=f.L(); // System.out.println(list.get(0).toString()); // // // } }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值