📄 clientmain.java
字号:
//客户端命令行程序
import java.io.FileReader;
import java.io.LineNumberReader;
import database.DatabaseAccess;
public class ClientMain
{
long timeIn,timeOut,time;
org.omg.CORBA.ORB orb;
Bank.AccountManager manager;
static String dataSource = "jdbc:odbc:DataOutput";
DatabaseAccess da;
public static void main(String[] args)
{
ClientMain client = new ClientMain(args);
//第一次访问存在ID的时刻
client.timeIn = System.currentTimeMillis();
int k = 1;
for(int i=1; i<=10000;i++)
{
//一次访问
client.Access(client.randomId());
System.out.println(k++);
//每访问500个记录一下访问时间
if(i%500 == 0){
//每完成500次访问时的时刻
client.timeOut = System.currentTimeMillis();
//每完成500次访问所需的时间
client.time = client.timeOut - client.timeIn;
client.timeIn = client.timeOut;
client.save("DataOutput",i/500,client.time);
}
}
//第一次访问不存在的ID的系统时间
client.timeIn = System.currentTimeMillis();
int m=1;
for(int j=1;j<=10000;j++)
{
client.Access(client.randomNotExitId());
System.out.println(m++);
if(j%500 == 0){
//每完成500次访问时的时刻
client.timeOut = System.currentTimeMillis();
//每完成500次访问所需的时间
client.time = client.timeOut - client.timeIn;
client.timeIn = client.timeOut;
client.save("DataOutput1",j/500,client.time);
}
}
}
public ClientMain(String[] args)
{
try{
//初始化ORB
orb = org.omg.CORBA.ORB.init(args, null);
//利用POA全名与对象标识"BankManager"查找账户管理员
LineNumberReader input = new LineNumberReader(new FileReader("managerServer.ior"));
String ior = input.readLine();
org.omg.CORBA.Object obj = orb.string_to_object(ior);
manager = Bank.AccountManagerHelper.narrow(obj);
da = new DatabaseAccess(dataSource);
}catch(Exception e){
System.out.println("error:" + e);
e.printStackTrace();
System.exit(0);
}
}
public void Access(String id)
{
try{
//创建一个调用AccountManager的GetAccountById()操作的请求对象
org.omg.CORBA.Request requestGetAccountById = manager._request("getAccountById");
//设置请求的实际参数
requestGetAccountById.add_in_arg().insert_string(id);
//设置请求的返回结果的类型
requestGetAccountById.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objref));
//以同步通信的方式发送请求
requestGetAccountById.invoke();
//提取返回结果
org.omg.CORBA.Object account = requestGetAccountById.result().value().extract_Object();
//继续以DII方式调用account的getBalance()方法
requestGetBalance(account,id);
//继续以DII方式调用account的deposit()方法
org.omg.CORBA.Request requestDeposit = account._request("deposit");
requestDeposit.add_in_arg().insert_float(100);
requestDeposit.invoke();
//继续以DII方式调用account的withdraw()方法
org.omg.CORBA.Request requestWithdraw = account._request("withdraw");
requestWithdraw.add_in_arg().insert_float(50);
requestWithdraw.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_boolean));
requestWithdraw.invoke();
if(requestWithdraw.return_value().extract_boolean()){
requestGetBalance(account,id);
}
///继续以DII方式调用AccountManager的releaseObject()方法
org.omg.CORBA.Request requestReleaseObject = manager._request("releaseObject");
requestReleaseObject.add_in_arg().insert_Object(account);
requestReleaseObject.invoke();
System.out.println("这次查询操作结束!\n");
}catch(NullPointerException e){
System.out.println("刚输入的ID号不存在,请重新输入...\n");
}catch(StringIndexOutOfBoundsException exc){
System.out.println("刚输入的ID号不存在,请重新输入...\n");
}catch(Exception exc){
exc.printStackTrace();
}
}
public void requestGetBalance(org.omg.CORBA.Object account,String id )
{
//继续以DII方式调用account的getBalance()方法
org.omg.CORBA.Request requestGetBalance = account._request("getBalance");
requestGetBalance.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_float));
requestGetBalance.invoke();
System.out.println("ID为"+id + "\t账户名为" + id.substring(5)
+"\t余额为" + requestGetBalance.return_value().extract_float() + "元");
}
public void save(String table,int id,long time)
{
try{
String sql = "INSERT INTO "+ table+" VALUES("+id+","+ time +")";
da.update(sql);
}catch(Exception e){
e.printStackTrace();
}
}
public String randomId()
{
int random = 1 + (int)(Math.random() * 10000);
String randomId;
if(random<10){
randomId = "000000000"+random;
}else if(random>=10&&random<100){
randomId = "00000000"+random;
}else if(random>=10&&random<1000){
randomId = "0000000"+random;
}else {
randomId = "000000"+random;
}
return randomId;
}
public String randomNotExitId()
{
int random = 1+ (int)(Math.random() * 10000);
return ""+ random;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -