104
APPENDIX 4: Unbounded Rule-Based Expert System(URB-ES) coding SECTION A: URB-ES code flow
Declaring the variables required for a successful database and server connection define("server","localhost");
define("user", "root");
define("password","");
define("database", "sdm");
$conn = mysqli_connect(server, user, password, database);
if($conn){
//echo "connection success!";
}else{
//echo "connection fail";
}
?>
2. Registering a user
<?php
$data = array();
require 'index.php'; //adding the index.php for connection and quering the database tables
if ( !isset($_POST['fname']) OR !isset($_POST['email']) OR !isset($_POST['password']) ){
echo "Failure!";
} else{
$fullname = $_POST['fname'];
$email = $_POST['email'];
$password = $_POST['password'];
$s = "INSERT INTO tbl_user(user_fullname, user_email, user_password) VALUES('$fullname', '$email', '$password')";
105
$res = mysqli_query($conn, $s);
if( $res ){
echo "User registered!";
} else{
echo "User failed to register!";
} }
1. declaring the variables required for a successful database and server connection define("server","localhost");
define("user", "root");
define("password","");
define("database", "sdm");
$conn = mysqli_connect(server, user, password, database);
if($conn){
//echo "connection success!";
}else{
//echo "connection fail";
}
4. This is the code for registering a user
package assignment2.sdm;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
106
import assignment2.sdm.CustomObjects.Constants;
import assignment2.sdm.CustomObjects.User;
public class RegisterActivity extends AppCompatActivity { private EditText etFullName, etEmail, etPassword;
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
etFullName = (EditText) findViewById(R.id.etFNames);
etEmail = (EditText) findViewById(R.id.etEmail);
etPassword = (EditText) findViewById(R.id.etPassword);
mButton = (Button) findViewById(R.id.btnRegister);
register();
}
private void register(){
final String fullname = etFullName.getText().toString(), email = etEmail.getText().toString(), password = etPassword.getText().toString();
mButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
new Register(new User(fullname, email, password)).execute();
} });
}
class Register extends AsyncTask<Void,Void,Boolean>{
private User user;
public Register(User user) { super();
this.user = user;
}
@Override
protected void onPreExecute() { super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... voids) { URL url;
HttpURLConnection connection;
try{
url = new URL(Constants.reg_url);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10*1000);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
StringBuilder builder = new StringBuilder();
String line;
String data = "";
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
data = URLEncoder.encode("fullname", "UTF-
107
8")+"="+URLEncoder.encode(user.fname,"UTF-8")+"&"+
URLEncoder.encode("email", "UTF- 8")+"="+URLEncoder.encode(user.email,"UTF-8")+"&"+
URLEncoder.encode("password", "UTF- 8")+"="+URLEncoder.encode(user.password,"UTF-8");
writer.write(data);
}catch (Exception e){
Log.e("ASYNC", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean);
startActivity(new Intent(RegisterActivity.this, MainActivity.class));
finish();
} } }
5. Code for Main Activity that provides the ability to choose
package assignment2.sdm;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import assignment2.sdm.CustomObjects.Constants;
import assignment2.sdm.CustomObjects.User;
public class RegisterActivity extends AppCompatActivity { private EditText etFullName, etEmail, etPassword;
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
etFullName = (EditText) findViewById(R.id.etFNames);
etEmail = (EditText) findViewById(R.id.etEmail);
etPassword = (EditText) findViewById(R.id.etPassword);
mButton = (Button) findViewById(R.id.btnRegister);
register();
}
private void register(){
108
final String fullname = etFullName.getText().toString(), email = etEmail.getText().toString(), password = etPassword.getText().toString();
mButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
new Register(new User(fullname, email, password)).execute();
} });
}
class Register extends AsyncTask<Void,Void,Boolean>{
private User user;
public Register(User user) { super();
this.user = user;
}
@Override
protected void onPreExecute() { super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... voids) { URL url;
HttpURLConnection connection;
try{
url = new URL(Constants.reg_url);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10*1000);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
StringBuilder builder = new StringBuilder();
String line;
String data = "";
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
data = URLEncoder.encode("fullname", "UTF- 8")+"="+URLEncoder.encode(user.fname,"UTF-8")+"&"+
URLEncoder.encode("email", "UTF- 8")+"="+URLEncoder.encode(user.email,"UTF-8")+"&"+
URLEncoder.encode("password", "UTF- 8")+"="+URLEncoder.encode(user.password,"UTF-8");
writer.write(data);
}catch (Exception e){
Log.e("ASYNC", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean);
startActivity(new Intent(RegisterActivity.this, MainActivity.class));
finish();
} }
109
}
6. Consulting Activity Code
package assignment2.sdm;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.google.gson.Gson;
import assignment2.sdm.Adapters.CriteriaAdapter;
import assignment2.sdm.CustomObjects.CriteriaList;
import assignment2.sdm.CustomObjects.Utilities;
public class ConsultActivity extends AppCompatActivity { public CriteriaList list;
public CriteriaList mList;
public RecyclerView rvList;
private FloatingActionButton fabCommit;
//this adapter will contain the criteria array of all critic public CriteriaAdapter adapter;
Gson gson; //manipulates data from JSON to GSon and to any kind of object preferred
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_consult);
list = Utilities.fillList();
mList = new CriteriaList();
rvList = (RecyclerView) findViewById(R.id.rv_items);
fabCommit = (FloatingActionButton) findViewById(R.id.fabCommit);
rvList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
adapter = new CriteriaAdapter(this, list);
rvList.setAdapter( adapter );
fabCommit.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { gson = new Gson();
String list_to_json = gson.toJson(mList);
Intent intent = new Intent(ConsultActivity.this, WeightActivity.class);
intent.putExtra("list", list_to_json);
startActivity(intent);
} });
} }
7. Weighing Activity
package assignment2.sdm;
import android.content.Intent;
110
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import assignment2.sdm.Adapters.WeightAdapter;
import assignment2.sdm.CustomObjects.Criteria;
import assignment2.sdm.CustomObjects.CriteriaList;
import assignment2.sdm.CustomObjects.ResultsModelsActivity;
import assignment2.sdm.CustomObjects.Weight;
import assignment2.sdm.CustomObjects.Weights;
public class WeightActivity extends AppCompatActivity implements View.OnClickListener{
private CriteriaList list;
private Gson gson;
private String EXTRA_KEY_NAME = "list";
private String json;
private RecyclerView rvWeights;
private FloatingActionButton fabContinue;
private LinearLayoutManager manager;
private WeightAdapter adapter;
private Weights weights;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weight);
rvWeights = (RecyclerView) findViewById(R.id.rvWeights);
fabContinue = (FloatingActionButton) findViewById(R.id.fabContinue);
manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
rvWeights.setLayoutManager(manager);
try{
json = getIntent().getStringExtra(EXTRA_KEY_NAME);
gson = new Gson();
Type typeCriteriaList = new TypeToken<CriteriaList>(){}.getType();
list = gson.fromJson(json, typeCriteriaList);
if (list == null && list.size() < 0){
Log.e("List", "Nothing is selected!");
}else{
Log.e("List", "Existing, with "+list.size()+" length!");
adapter = new WeightAdapter(this, extractWeights());
rvWeights.setAdapter(adapter);
}
fabContinue.setOnClickListener(this);
}catch (Exception e){
Log.e("Error", e.getMessage());
} }
@Override
public void onClick(View view) {