根据前面E-R图设计出实现系统功能所需要的数据库表的结构,并以表格的形式列出每一个数据库表的表结构,即字段名、类型、长度、小数位数、是否主键、索引、是否允许为空、说明等。并介绍表与表之间的逻辑关系。如表3.1所示:
表3.1user
字段名
数据类型
长度
主键
索引
外键
可空
rowid
text
是
否
userid
int
50
password
表3.2goods
shopname
20
shopintro
shopprice
10
shopnum
Unknow
shopdeller
30
表3.3buyer_goods(部门表)
id
buyerid
buyershopnum
表3.4商家模块
编号
输入
处理
输出
1
用户名和密码
根据输入用户名从数据库中找一个同名的用户并且进行密码比对
2
向数据库中插入一个新的商家用户
成功则提示失败则转到添加页面
表3.10部门管理模块
向数据库中插入一个新的顾客用户
充值
输入充值金额
成功则提示充值成功
3
购买
点击要购买商品
成功点击已购商品显示购买的商品则购买成功
注册包括商家注册和顾客注册。
顾客注册包括输入账号,输入密码,输入充值金额之后点顾客,最后点击注册。
商家注册包括输入账号,输入密码,输入充值金额之后点商家,最后点击注册。
顾客和商家注册代码如下:
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
try{
//打开数据库,如果数据库不存在则创建数据库
mSQLiteDatabase=this.openOrCreateDatabase(DATABASE_NAME,
Activity.MODE_PRIVATE,null);
}catch(Exceptionex){
Toast.makeText(this,"打开或创建数据库异常:"+ex.getMessage(),2000).show();
}
edt_userid=(EditText)this.findViewById(R.id.edt_userid);
edt_userpwd=(EditText)this.findViewById(R.id.edt_userpwd);
edt_usermoney=(EditText)this.findViewById(R.id.edt_usermoney);
Buttonbt3=(Button)findViewById(R.id.button3);
bt3.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
ShopregActivity.this.finish();
});
Buttonbutton_register=(Button)this.findViewById(R.id.button_register);
button_register.setOnClickListener(newOnClickListener(){
Stringuserid=edt_userid.getText().toString();
Stringuserpwd=edt_userpwd.getText().toString();
intusermoney=Integer.parseInt(edt_usermoney.getText().toString());
RadioButtonradio_buyer=(RadioButton)findViewById(R.id.radio_buyer);
Stringtype="seller";
if(radio_buyer.isChecked()){
type="buyer";
mSQLiteDatabase.execSQL("insertintouservalues('"+userid+"','"+userpwd+"','"+usermoney+"','"+type+"')");
Toast.makeText(ShopregActivity.this,"注册成功!",2000).show();
}catch(Exceptione){
Toast.makeText(ShopregActivity.this,"新增用户失败:"+e.getMessage(),2000).show();
添加商品的名称价格数量,之后点击发布商品。
商家发布商品代码:@Override
Stringshopname=edit_shopname.getText().toString();
Stringshopintro=edit_shopintro.getText().toString();
intshopprice=Integer.parseInt(edit_shopprice.getText()
.toString());
intshopnum=Integer.parseInt(edit_shopnum.getText()
Stringsql="insertintogoodsvalues('"+shopname+"','"
+shopintro+"',"+shopprice+","+shopnum+",'"+userId+"')";
mSQLiteDatabase=openOrCreateDatabase(DATABASE_NAME,
mSQLiteDatabase.execSQL(sql);
Toast.makeText(ShopAddsActivity.this,"添加商品成功!",
1000).show();
Intenti=newIntent(ShopAddsActivity.this,
null);//SellerCheckShopActivity.class
Bundleb=newBundle();
b.putString("user",userId);
i.putExtra("data",b);
startActivity(i);
Toast.makeText(ShopAddsActivity.this,
"添加商品异常!"+e.getMessage(),1000).show();
主要可以查看商家发布的商品名称,自己的余额,如果余额不足可以输入充值金额然后点击充值按钮进行充值。
购买商品代码实现:publicvoidonClick(Viewv){
Stringshopname=tv.getText().toString();
buy_shopnum=Integer.parseInt(edt_buy_shopnum.getText().toString());
intprice=Integer.parseInt(shopprice);
inttotal_price=buy_shopnum*price;
Stringa="selectusermoneyfromuserwhereuserid='"+userId+"'";
Cursorcursor=mSQLiteDatabase.rawQuery(a,null);
while(cursor.moveToNext()){
buyermoney=cursor.getInt(cursor.getColumnIndex("usermoney"));
if(buyermoney>=total_price){
Stringsql="updategoodssetshopnum=shopnum-"+buy_shopnum+"whereshopname='"+shopname+"'";
sql="updateusersetusermoney=usermoney-"+total_price+"whereuserid='"+userId+"'";
sql="insertintobuyer_goods(buyerid,shopname,buyshopnum)values('"+userId+"','"
+shopname+"','"+buy_shopnum+"')";
Toast.makeText(ShopbSelectActivity.this,"购买成功!",
Intenti=newIntent(ShopbSelectActivity.this,
ShopbSelectActivity.class);
else{Toast.makeText(ShopbSelectActivity.this,"余额不足,请充值!",
3000).show();}
Toast.makeText(ShopbSelectActivity.this,
充值代码实现:
btn_myshop.setOnClickListener(newOnClickListener(){
ShopbuyerActivity.class);
Bundleb=newBundle();//发送数据
edt_addmoney=(EditText)this.findViewById(R.id.edittext_addmoney);
btn_addmoney=(Button)this.findViewById(R.id.button_addmoney);
btn_addmoney.setOnClickListener(newOnClickListener(){
Stringaddmoney=edt_addmoney.getText().toString();
Stringsql="updateusersetusermoney=usermoney+"+addmoney+"whereuserid='"+userId+"'";
Toast.makeText(ShopbSelectActivity.this,"成功充值"+addmoney+"元!",
点击查看已购商品,页面跳转到已购商品的页面,页面显示你当前的余额和你所购买的商品名称,商品单价,购买商品数量和你购买时商家的名称。点击返回按钮可以返回到前一个页面。
查看已购商品代码实现:
privatevoidselectData(){
Stringsql="selectg.shopname,g.shopprice,bd.buyshopnum,g.shopsellerfrombuyer_goodsasbd,goodsasgwherebd.buyerid='"
+userId+"'andbd.shopname=g.shopname";
Cursorcursor=mSQLiteDatabase.rawQuery(sql,null);
if(cursor!=null){
//定义存储查询结果的List,每一行数据类型为Map
List
Map
//遍历游标对象,每一行获取的数据存放到Map
map=newHashMap
map.put("shopname",cursor.getString(cursor.getColumnIndex("shopname")));
map.put("shopprice",cursor.getInt(cursor.getColumnIndex("shopprice")));
map.put("buyshopnum",cursor.getInt(cursor.getColumnIndex("buyshopnum")));
map.put("shopseller",cursor.getString(cursor.getColumnIndex("shopseller")));
list.add(map);
//创建Adapter,并于ListView绑定
SimpleAdapteradapter=newSimpleAdapter(this,list,R.layout.buyer_myshop,
newString[]{"shopname","shopprice","buyshopnum","shopseller"},
newint[]{R.id.tv_buyer_myshopname,R.id.tv_buyer_myshopprice,R.id.tv_buyer_myshopnum,
R.id.tv_buyer_mysellername});
lv1.setAdapter(adapter);
privatevoidselectBuyermoney(){
Stringsql="selectusermoneyfromuserwhereuserid='"+userId+"'";
//获得查询结果对应的游标对象
map.put("usermoney",cursor.getInt(cursor.getColumnIndex("usermoney")));
SimpleAdapteradapter=newSimpleAdapter(this,list,R.layout.buyer_money2,newString[]{"usermoney"},
newint[]{R.id.tv_buyer_money2});
lv2.setAdapter(adapter);
本次实习所用的开发环境为
开发技术:android
数据库:sqlLite
开发工具:eclipse
2、测试注册功能
3、测试添加商品功能
4、测试用户购买充值功能
5、测试查已购商品功能
以上截图测试了本系统的大部分功能,并且成功实现了每个功能。
本次课程设计,让我受益匪浅,这次的课程设计把自己学的java集合利用上去了,非常开心。还有就是虽然上课听老师讲课,但是自己学完做做作业之后就没再看过,现在很多知识都忘记了,通过这次的课程设计我回忆了一遍android的基础东西,而且把java知识复习了,通过这次的android课程设计让我更加了解了这门学科,让自己更有兴趣的去学习这门学科,让我感觉非常开心。
然后就是通过这次的课程设计我感觉到了写代码需要非常严谨,在这次的课程设计中我深有体会,尤其是调用layout中的控件,在我感觉如果写的不严谨在你调用这个控件时就非常的困难,所以我们在课程设计需要把每个控件的ID设置严谨一点,这样我们才能轻松地调用这个控件,还有就是不能有一点错误,不然整个程序就会不能顺利地运行,还有一点就是需要做到不懂就问的习惯,让老师同学帮助一下这样的话,让你在写代码将会更加的流畅,还有一点就是不论遇到什么困难和难题都需要我们的坚持,在坚持之后我们一定能够成功完成。总之,在这次的课程设计当中我学习到了很多知识,让我也巩固了一下书本上的知识,此次的课程设计在我学习生涯上起到了至关重要的一步。
附录:
商城购物系统的实现
使用技术:
UI设计:建立了5个界面
数据库使用:运用sqlLite数据库建立了3个表分别是用户信息表、商品表和用户购买商品表。
查看已购商品的跳转界面。
ListView的使用:使用了2个listview实现了商家添加商品的显示和查看用户已购商品的显示。
UML类图:
代码:
清单文件:
/ShopCenter/src/com/example/shopcenter/MainActivity.java
/ShopCenter/src/com/example/shopcenter/ShopAddsActivity.java
/ShopCenter/src/com/example/shopcenter/ShopbSelectActivity.java
/ShopCenter/src/com/example/shopcenter/ShopbuyerActivity.java
/ShopCenter/src/com/example/shopcenter/ShopregActivity.java
/ShopCenter/res/layout/activity_buyer_check_shop.xml
/ShopCenter/res/layout/activity_buyer_select_shop.xml
/ShopCenter/res/layout/activity_main.xml
/ShopCenter/res/layout/activity_register.xml
/ShopCenter/res/layout/activity_seller_add_shop.xml
/ShopCenter/res/layout/buyer_money.xml
/ShopCenter/res/layout/buyer_money2.xml
/ShopCenter/res/layout/buyer_myshop.xml
/ShopCenter/res/layout/buyer_shop.xml
/ShopCenter/res/layout/shop_buyer.xml
布局文件:
截图:
Java原代码:
主界面
packagecom.example.shopcenter;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity{
//定义用于访问SQLite的对象
privateSQLiteDatabasemSQLiteDatabase=null;
//数据库名称
privatestaticfinalStringDATABASE_NAME="test.db";
privatestaticfinalStringCREATE_TABLE_USER="createtableifnotexistsuser(useridtextprimarykey,userpwdtext,usermoneyinteger,usertypetext)";
privatestaticfinalStringCREATE_TABLE_GOODS="createtableifnotexistsgoods(shopnametextprimarykey,shopintrotext,shoppriceinteger,shopnuminteger,shopsellertext)";
privatestaticfinalStringCREATE_TABLE_BUYER_GOODS="createtableifnotexistsbuyer_goods(idintegerprimarykeyautoincrement,buyeridtext,shopnametext,buyshopnuminteger)";
privateEditTextedt_login_userid,edt_login_userpwd;
setContentView(R.layout.activity_main);
mSQLiteDatabase.execSQL(CREATE_TABLE_USER);
mSQLiteDatabase.execSQL(CREATE_TABLE_GOODS);
mSQLiteDatabase.execSQL(CREATE_TABLE_BUYER_GOODS);
Toast.makeText(this,"创建用户表异常:"+ex.getMessage(),2000).show();
Buttongoto_register=(Button)this.findViewById(R.id.button_goto_register);
goto_register.setOnClickListener(newOnClickListener(){
Intenti=newIntent(MainActivity.this,ShopregActivity.class);
edt_login_userid=(EditText)this.findViewById(R.id.edt_login_userid);
edt_login_userpwd=(EditText)this.findViewById(R.id.edt_login_userpwd);
Buttonuser_login=(Button)this.findViewById(R.id.button_login);
user_login.setOnClickListener(newOnClickListener(){
Stringlogin_userid=edt_login_userid.getText().toString();
Stringlogin_userpwd=edt_login_userpwd.getText().toString();
Stringsql="select*fromuserwhereuserid='"+login_userid+"'anduserpwd='"+login_userpwd+"'";
if(cursor.moveToNext()){
Stringtype=cursor.getString(cursor.getColumnIndex("usertype"));
b.putString("user",login_userid);
if(type.equals("seller")){
Intenti=newIntent(MainActivity.this,ShopAddsActivity.class);
}else{
Intenti=newIntent(MainActivity.this,ShopbSelectActivity.class);
Toast.makeText(MainActivity.this,"账号或密码错误!",2000).show();
Toast.makeText(MainActivity.this,e.getMessage(),2000).show();
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
用户注册类:
importandroid.widget.RadioButton;
publicclassShopregActivityextendsActivity{
privateEditTextedt_userid,edt_userpwd,edt_usermoney;
getMenuInflater().inflate(R.menu.register,menu);
商品发布类:
publicclassShopAddsActivityextendsActivity{
privateEditTextedit_shopnum,edit_shopname,edit_shopprice,edit_shopintro;
privateStringuserId;
Buttonbutton_addshop,button_reset,button_seller_myshop;
setContentView(R.layout.activity_seller_add_shop);
Intenti=this.getIntent();
Bundleb=i.getBundleExtra("data");
userId=b.getString("user");
edit_shopname=(EditText)findViewById(R.id.edt_shopname);
edit_shopintro=(EditText)findViewById(R.id.edt_shopintro);
edit_shopprice=(EditText)findViewById(R.id.edt_shopprice);
edit_shopnum=(EditText)findViewById(R.id.edit_shopnum);
Buttonbt5=(Button)findViewById(R.id.button5);
bt5.setOnClickListener(newOnClickListener(){
ShopAddsActivity.this.finish();
button_addshop=(Button)findViewById(R.id.button_addshop);
button_addshop.setOnClickListener(newOnClickListener(){
//Toast.makeText(ShopAddsActivity.this,
//"添加商品异常!"+e.getMessage(),1000).show();
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.seller_add_shop,menu);
已购商品类:
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importandroid.widget.AdapterView;
importandroid.widget.ListView;
importandroid.widget.SimpleAdapter;
importandroid.widget.TextView;
importandroid.widget.AdapterView.OnItemClickListener;
publicclassShopbuyerActivityextendsActivity{
privateStringuserId,shopname;
privateTextViewtv;
privateListViewlv1,lv2;
intbuyermoney;
setContentView(R.layout.activity_buyer_check_shop);
Intenti=this.getIntent();//接收数据
lv2=(ListView)this.findViewById(R.id.lv_buyer_money);
lv1=(ListView)this.findViewById(R.id.lv_buyer_myshop);
mSQLiteDatabase=openOrCreateDatabase(DATABASE_NAME,Activity.MODE_PRIVATE,null);
selectBuyermoney();
selectData();
Buttonbt1=(Button)findViewById(R.id.button1);
bt1.setOnClickListener(newOnClickListener(){
ShopbuyerActivity.this.finish();
lv1.setOnItemClickListener(newOnItemClickListener(){
publicvoidonItemClick(AdapterView<>arg0,Viewarg1,intarg2,longarg3){
//根据参数arg2获取当前位置的数据(行),并根据key获取对应的value
@SuppressWarnings("unchecked")
Map
tv.setText(map.get("shopname").toString());
shopname=map.get("shopname").toString();
getMenuInflater().inflate(R.menu.buyer_check_shop,menu);
商品购买类:
importandroid.annotation.SuppressLint;
@SuppressLint("ShowToast")
publicclassShopbSelectActivityextendsActivity{
privateButtonbtn_selectshop,btn_myshop,btn_addmoney;
privateStringshopprice;
EditTextedt_addmoney,edt_buy_shopnum;
intbuy_shopnum;
setContentView(R.layout.activity_buyer_select_shop);
tv=(TextView)this.findViewById(R.id.tv_buyer_selectshopname);
lv1=(ListView)this.findViewById(R.id.lv_buyer_shop);
publicvoidonItemClick(AdapterView<>arg0,Viewarg1,intarg2,
longarg3){
Map
.getItemAtPosition(arg2);
shopprice=map.get("shopprice").toString();
edt_buy_shopnum=(EditText)this.findViewById(R.id.edittext_buy_shopnum);
btn_selectshop=(Button)this.findViewById(R.id.button_buyer_selectshop);
btn_selectshop.setOnClickListener(newOnClickListener(){
btn_myshop=(Button)this.findViewById(R.id.button_buyer_myshop);
getMenuInflater().inflate(R.menu.buyer_select_shop,menu);
Stringsql="select*fromgoods";
map.put("shopintro",cursor.getString(cursor.getColumnIndex("shopintro")));
map.put("shopnum",cursor.getString(cursor.getColumnIndex("shopnum")));
SimpleAdapteradapter=newSimpleAdapter(this,list,
R.layout.buyer_shop,newString[]{"shopname","shopintro","shopprice",
"shopnum","shopseller"},newint[]{R.id.tv_buyer_myshopname,R.id.tv_buyer_myshopintro,R.id.tv_buyer_myshopprice,
R.id.tv_buyer_shopnum,R.id.tv_buyer_sellername});
R.layout.buyer_money,newString[]{"usermoney"},newint[]{R.id.tv_buyer_money});