Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
1. BÁO CÁO THỰC TẬP TUẦN 5
ĐỀ TÀI:
PHÁT TRIỂN PHẦN MỀM QUẢ LÍ KHÁCH HÀNG
TRÊN ANDROID TRÊN ĐIỆN THOẠI SỬ DỤNG
ANDROID
Xây Dựng các class liên quan đơn
hàng, sản phẩm, database
GVHD : Thầy Võ Đỗ Thắng
SVTH : Trương Duy Linh
MSSV : 51101863
2. - Class DonHang
//Class đơn hàng chứa thông tin đơn hàng gồm mã, tên, date, smoney
public class DonHang implements Serializable{
private static final long serialVersionUID = 1L;
private String maDH;
private String tenDH;
private String date;
private String smoney;
//khởi tạo danh sách sản phẩm
private ArrayList<SanPham>arrsp=new ArrayList<SanPham>();
public DonHang(){
}
public DonHang(String maDH,String tenDH,String date,String smoney){
this.maDH=maDH;
this.tenDH=tenDH;
this.date=date;
this.smoney=smoney;
}
//các tác vụ get,set
public String gettenDH(){return tenDH;}
public void settenDH(String ten){this.tenDH=ten;}
public String getmaDH(){return maDH;}
public void setmaDH(String ma){this.maDH=ma;}
public String getdate(){return date;}
public void setdate(String date){this.date=date;}
public String getsmoney(){return smoney;}
public void setsmoney(String smoney){this.smoney=smoney;}
//thêm sản phẩm cho đơn hàng
public void Themsp(SanPham sp){
int i=0;
for(;i<arrsp.size();i++){
SanPham old=arrsp.get(i);
if(old.getmaSP().trim().equalsIgnoreCase(sp.getmaSP().trim())){
break;
}
}
if(i<arrsp.size()){
arrsp.set(i, sp);
3. }
else{
arrsp.add(sp);
}
}
//lấy sản phẩm tại vị trí index của mảng
public SanPham get(int index){
return arrsp.get(index);
}
//lấy sô lượng sản phẩm
public int size(){
return arrsp.size();
}
//lấy danh sách sản phẩm của đon hàng đó
public ArrayList<SanPham> getListSP(){
return this.arrsp;
}
//--------------------------------------------
@Override
public String toString()
{
return this.maDH+" "+this.tenDH+" "+this.date+" "+this.smoney;
}
}
- Class DanhSachDonHang
public class DanhSachDonHang extends Activity{
ImageButton btnbackDH;
ListView lvdh;
Button btnthemdh;
KhachHang kh=null;
ArrayAdapter<DonHang> adapter=null;
ArrayList<DonHang> arrdh=null;
DonHang donhang=null;
DatabaseHandler db;
private int position =-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dsdh);
btnbackDH=(ImageButton)findViewById(R.id.btnbackDH);
lvdh=(ListView)findViewById(R.id.lvDH);
btnthemdh=(Button)findViewById(R.id.btnthemdh);
4. db=new DatabaseHandler(this);
arrdh=new ArrayList<DonHang>();
getData();
Event();
registerForContextMenu(lvdh);
}
/*
* Lấy khách hàng là chủ của các đơn hàng này
* Lấy danh sách các sản phẩm từ CSDL
*/
public void getData(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
kh=(KhachHang)b.getSerializable("KHACHHANG");
arrdh=kh.getListDH();
Them_sp_va_tinh_giadonhang();//-----------
adapter=new
ArrayAdapter<DonHang>(this,android.R.layout.simple_list_item_1,arrdh);
lvdh.setAdapter(adapter);
}
//Xử lí các sự kiện
public void Event(){
//Xử lí sự kiện trở về danh sách khách hàng
btnbackDH.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", kh);
i.putExtra("DATA", b);
setResult(MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG,i);
finish();
}
});
//Xử lí sự kiện click vào item ListView
lvdh.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int arg, long id) {
donhang=arrdh.get(arg);
position=arg;
5. return false;
}
});
//Xử lí sự kiện thêm đơn hàng cho vào danh sách đơn hàng
btnthemdh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
doThemDonHang();
}
});
}
//Đăng kí Contextmenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_dh, menu);
}
//Xử lí xự kiện click item trong contextmenu
//Gồm: sửa, xóa, xem danh sách sản phẩm
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.mnusuadh:doSuaDonHang();break;
case R.id.mnuxoadh:doXoaDonHang();break;
case R.id.mnudssp:doDanhSachSanPham();break;
}
return super.onContextItemSelected(item);
}
//Intent gọi Activity DanhSachSanPham
public void doDanhSachSanPham(){
//for(SanPham
san:db.getdssp_ofdh(Integer.parseInt(donhang.getmaDH()))){
//donhang.Themsp(san);
//}
Intent i=new Intent(this, DanhSachSanPham.class);
Bundle bundle=new Bundle();
6. bundle.putSerializable("DONHANG", donhang);
i.putExtra("DATA", bundle);
startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_SAN_PHAM);
}
//Thêm các sản phẩm vào mỗi đơn hàng tương ứng
//tính giá của đơn hàng thông qua các sản phẩm đó
public void Them_sp_va_tinh_giadonhang(){
for(DonHang dhang:arrdh){
int gia=0;
for(SanPham san:db.getdssp_ofdh(Integer.parseInt(dhang.getmaDH()))){
dhang.Themsp(san);
gia+=Integer.parseInt(san.getprice());
}
dhang.setsmoney(String.valueOf(gia));
db.updateDonHang(dhang);
}
}
//Hiển thị form AlertDialog, thực hiện việc xóa đơn hàng
public void doXoaDonHang() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("XOA");
builder.setMessage("Bạn có chắc muốn xóa");
builder.setIcon(R.drawable.ic_launcher);
builder.setNegativeButton("Không", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setPositiveButton("Có",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
arrdh.remove(donhang);
db.delete_quanhe_DH_SP_tu_DH(donhang);
db.delete_quanhe_KHDH_tu_DH(donhang);
db.deleteDonHang(donhang);
adapter.notifyDataSetChanged();
}
7. });
builder.show();
}
//Intent gọi Activity Activity_SuaDonHang
public void doSuaDonHang() {
Intent i=new Intent(this,Activity_SuaDonHang.class);
Bundle b=new Bundle();
b.putSerializable("DONHANG", donhang);
i.putExtra("DATA", b);
startActivityForResult(i,MainActivity.MO_ACTIVITY_SUA_DON_HANG);
}
//Intetn gọi Activity Activity_ThemDonHang
public void doThemDonHang(){
Intent i=new Intent(this, Activity_ThemDonHang.class);
Bundle b=new Bundle();
b.putSerializable("DONHANG", donhang);
i.putExtra("DATA", b);
startActivityForResult(i, MainActivity.MO_ACTIVITY_THEM_DON_HANG);
}
//Nhận result từ thêm, sửa đơn hàng và cập nhật danh sách sản phẩm thành công
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==MainActivity.SUA_DON_HANG_THANHCONG){
Bundle b=data.getBundleExtra("DATA");
DonHang d=(DonHang)b.getSerializable("DONHANG");
arrdh.set(position, d);
db.updateDonHang(d);
adapter.notifyDataSetChanged();
}
else if(resultCode==MainActivity.THEM_DON_HANG_THANHCONG){
Bundle b=data.getBundleExtra("DATA");
DonHang d=(DonHang)b.getSerializable("DONHANG");
arrdh.add(d);
db.addDonHang(d);
db.addof_cus(kh, d);
adapter.notifyDataSetChanged();
}
else
if(resultCode==MainActivity.CAPNHAT_DS_SAN_PHAM_THANHCONG){
Bundle bundle=data.getBundleExtra("DATA");
8. DonHang d=(DonHang)bundle.getSerializable("DONHANG");
arrdh.get(position).getListSP().clear();
arrdh.get(position).getListSP().addAll(d.getListSP());
//Them_sp_va_tinh_giadonhang();//-----------
int p=0;
for(SanPham s:arrdh.get(position).getListSP()){
p+=Integer.parseInt(s.getprice());
}
arrdh.get(position).setsmoney(String.valueOf(p));
db.updateDonHang(arrdh.get(position));
adapter.notifyDataSetChanged();
}
}
}
- Class Activity_SuaDonHang
public class Activity_SuaDonHang extends Activity {
EditText txtma,txtten,txtdate,txtmoney;
Button btnxoa,btnluu;
DonHang donhang=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//goi layout activity_them_don_hang
setContentView(R.layout.activity_them_don_hang);
//get id của các View Button
txtma=(EditText)findViewById(R.id.txtmaDH);
txtten=(EditText)findViewById(R.id.txttenDH);
txtdate=(EditText)findViewById(R.id.txtngay);
txtmoney=(EditText)findViewById(R.id.txtmoney);
btnxoa=(Button)findViewById(R.id.btnxoatt);
btnluu=(Button)findViewById(R.id.btnsavettdh);
setdefault();
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
9. // TODO Auto-generated method stub
txtten.setText("");
txtdate.setText("");
txtmoney.setText("");
txtten.requestFocus();
}
});
//lưu thông tin từ layout vao donhang,
//set result sưa đơn hàng thành công
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ten=txtten.getText()+"";
String ngay=txtdate.getText()+"";
String money=txtmoney.getText()+"";
donhang.settenDH(ten);
donhang.setdate(ngay);
donhang.setsmoney(money);
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("DONHANG",donhang);
i.putExtra("DATA", b);
setResult(MainActivity.SUA_DON_HANG_THANHCONG,i);
finish();
}
});
}
//get thông tin đơn hàng từ gói DATA
public void setdefault(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
donhang=(DonHang)b.getSerializable("DONHANG");
txtma.setText(donhang.getmaDH());
txtten.setText(donhang.gettenDH());
txtdate.setText(donhang.getdate());
txtmoney.setText(donhang.getsmoney());
10. }
}
- Class Activity_ThemDonHang
public class Activity_ThemDonHang extends Activity {
EditText txtma,txtten,txtngay,txtmoney;
Button btnxoa,btnluu;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_them_don_hang);
db=new DatabaseHandler(this);
txtma=(EditText)findViewById(R.id.txtmaDH);
txtten=(EditText)findViewById(R.id.txttenDH);
txtngay=(EditText)findViewById(R.id.txtngay);
txtmoney=(EditText)findViewById(R.id.txtmoney);
btnxoa=(Button)findViewById(R.id.btnxoatt);
btnluu=(Button)findViewById(R.id.btnsavettdh);
//clear các dữ liệu hiển thị trên layout
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtma.setText("");
txtten.setText("");
txtngay.setText("");
txtmoney.setText("");
txtma.requestFocus();
}
});
//Xử lí lưu các thông tin vào dh đóng gói và truyền lại cho
//Activity DanhSachDonHang
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ma=txtma.getText()+"";
String ten=txtten.getText()+"";
String ngay=txtngay.getText()+"";
String tien=txtmoney.getText()+"";
11. if(db.checkTrung(ma,"id_dh","donhang")==0)
{
DonHang dh=new DonHang(ma,ten,ngay,tien);
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("DONHANG", dh);
i.putExtra("DATA", b);
setResult(MainActivity.THEM_DON_HANG_THANHCONG,i);
finish();
}
}
});
}
}
- Các Class trong Pakage có cấu trúc tương tự như trong Package donhang.
- Ngoài ra còn cấu trúc Các menu
+ context_menu_dh: chứa các item Xửa, Xóa, Xem Danh sách sản phẩm
+ context_menu_kh: chứa các item Xửa, Xóa, chuyển khách hàng, xem danh sách cơ
hội
+ context_menu_level:chứa các item level VIP, THUONG, TIMNANG
+context_menu_sp: chứa các item Xửa, Xóa sản phẩm.
- Cấu trúc AndroidManifest
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity_ChuyenKhachHang"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog">
</activity>
<activity
android:name=".Activity_SuaKhachHang"