安卓APP源碼和報告——學生信息管理系統(tǒng)
《移動開發(fā)技術II》實踐考核方案
適用網絡工程(網絡軟件開發(fā))2018級
一、考核內容:
環(huán)境配置及移動開發(fā)生命周期、控件的使用、用戶界面設計、數據存儲與訪問、廣播、服務、網絡編程、藍牙應用等知識點。
二、考核方式:
1、通過提交一個綜合的項目,學會運用所學知識解決實際問題。
2、項目題目: XX管理系統(tǒng)APP,購物商城APP等,也可自命題。
三、考核目的:
1、掌握移動開發(fā)的生命周期
2、掌握用戶界面以及自定義界面的使用
3、掌握數據庫的應用
4、掌握移動開發(fā)中網絡程序設計
5、掌握移動開發(fā)的程序設計方法。
四、考核要求:
1、完成項目程序設計;
2、提交的項目運行正常,界面友好,功能完善,異常處理較好;
3、項目中功能符合要求,數據庫設計合理;
4、文檔資料完善。
五、成績評定:
1、記分制:百分制
2、評分標準:
序號資料類型分值評分標準備注1項目描述文檔20需求分析10分數據庫設計10分2源程序代碼60完整的源代碼30分基本功能具備10分界面友好5分無明顯的異常10分添加適當的注釋5分3項目的復雜性10根據每位學生的選題判斷其技術難度4界面的設計10滿足APP界面設計要求,界面友好,便于操作
3、項目提交要求:
(1)項目的源程序文件,添加適當的注釋,格式合理;
(2)項目描述文檔,包括項目名稱,需求分析,項目功能描述及各個文件功能描述;
(3)項目運行的每個頁面截圖到項目文檔中并加以說明;
(4)設計的APP程序應包含登錄頁面、數據顯示頁面、自定義功能頁面、查詢頁面、網絡狀態(tài)連接頁面等,其中數據存儲需要使用Sqlite數據庫,登錄頁面可以使用SharedPerference或者數據庫,并且各個頁面需要布局合理;
(5)提交的源程序、項目描述文檔一起打包后,命名:學號 + 姓名,如181413210張三。
六、考核時間
1、以學院安排為準。
七、其它說明:
學生在多個項目中選擇一個完成,或者自選項目。通過APP項目的設計和提交,使學生能夠逐漸熟悉移動開發(fā)項目的整個流程,為今后的進一步學習打下堅實的基礎
考核教師簽名:
學生信息管理的設計與實現
一、項目名稱:學生信息管理的設計與實現
二、項目完成人:
三、項目需求分析:
學生信息的管理對于學校的管理者來說至關重要,學生信息是高等學校非常重要的一項數據資源,是一個教育單位不可缺少一部分。特別是近幾年來,國家政策的調整,我國高等院校大規(guī)模的擴招,給高等院校的教學管理、學生管理、后勤管理等方面都帶來不少的沖擊。其包含的數據量大,涉及的人員面廣,而且需要及時更新,故較為復雜,難以單純地依靠人工管理,而且傳統(tǒng)的人工管理方式既不易于規(guī)范化,管理效率也不高,系統(tǒng)針對學校學生信息的特點以及管理中實際需要而設計。優(yōu)點如下:
用戶可以登錄注冊
詳細記錄每位學生信息,并且可以做出統(tǒng)計
系統(tǒng)操作人性化、簡單易用
保證軟件的安全性
界面流暢
四、運行環(huán)境
操作系統(tǒng):android
數據庫:Sqlite
五、系統(tǒng)功能模塊
(1)注冊、登錄頁面 (2)頁面
admin 666
學生信息錄入界面 (4) 信息錄入成功界面
(5)學生信息瀏覽界面 (6)修改學生信息成功界面
(7)查詢學生信息界面 (8)學生信息刪除界面
(9)學生信息退出界面
核心代碼如下:
AddStudentsActivity類:
public class?AddStudentsActivity?extends?AppCompatActivity?implements?View.OnClickListener {
private?ImageButton?BtnBack;//返回按鈕
private?TextView?tv_title;//頭標題
private?EditText?EtName,?EtNumber,?EtYear,?EtSex,?EtBirth,?EtAddress,?EtPhone;
//姓名、學號、年齡、性別、出生年月、地址、電話
private?Button?BtnSave;//保存按鈕
DbStudents?dbStudents;//數據庫
List<StudentsBean>?mData;//數據源
String?number;//學號
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_students);
tv_title=findViewById(R.id.tv_title);//綁定控件
BtnBack?= findViewById(R.id.btn_back);
BtnSave?= findViewById(R.id.btn_save);
BtnBack.setOnClickListener(this);
BtnSave.setOnClickListener(this);
EtNumber?= findViewById(R.id.add_et_number);
EtName?= findViewById(R.id.add_et_name);
EtYear?= findViewById(R.id.add_et_year);
EtSex?= findViewById(R.id.add_et_sex);
EtBirth?= findViewById(R.id.add_et_birthday);
EtAddress?= findViewById(R.id.add_et_address);
EtPhone?= findViewById(R.id.add_et_phone);
dbStudents=?new?DbStudents(this);
mData?=?new?ArrayList<>();
initData();
}
/**
* 保存修改的信息
* */
private void?initData() {
Intent intent = getIntent();
if?(intent !=?null) {
number?= intent.getStringExtra(“number”);
if?(number?!=?null) {
tv_title.setText(“修改學生信息”);
BtnSave.setText(“修 改”);
EtNumber.setText(intent.getStringExtra(“number”));
EtName.setText(intent.getStringExtra(“name”));
EtYear.setText(intent.getStringExtra(“year”));
EtSex.setText(intent.getStringExtra(“sex”));
EtBirth.setText(intent.getStringExtra(“birth”));
EtAddress.setText(intent.getStringExtra(“address”));
EtPhone.setText(intent.getStringExtra(“phone”));
}
}
}
@Override
public void?onClick(View v) {
switch?(v.getId()) {
case?R.id.btn_back:
Intent intent1 =?new?Intent(AddStudentsActivity.this, MainActivity.class);
startActivity(intent1);
break;
case?R.id.btn_save:
//輸入
String number =?EtNumber.getText().toString().trim();
String name =?EtName.getText().toString().trim();
String year =?EtYear.getText().toString().trim();
String sex =?EtSex.getText().toString().trim();
String birth =?EtBirth.getText().toString().trim();
String address =?EtAddress.getText().toString().trim();
String phone =?EtPhone.getText().toString().trim();
StudentsBean studentsBeans =?dbStudents.QueryFromStudentByNumber(number);
if?(number !=?null) {//修改操作
if?(name.length() > 0) {
if?(dbStudents.updateStudent(number, name, year,sex,birth,address,phone)) {
Toast.makeText(AddStudentsActivity.this,“修改成功”,Toast.LENGTH_LONG).show();
setResult(2);
showDeleteDialog2();
}
}?else?{
Toast.makeText(AddStudentsActivity.this,“修改的內容不能為空!”,Toast.LENGTH_LONG).show();
}
}
if?(TextUtils.isEmpty(name)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失?。≌堓斎胄彰? Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(number)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失?。≌堓斎雽W號”, Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(year)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失?。≌堓斎肽挲g”, Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(sex)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失?。≌堓斎胄詣e”, Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(birth)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失?。≌堓斎氤錾暝隆? Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(address)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失??!請輸入地址”, Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(phone)) {
Toast.makeText(AddStudentsActivity.this,?“錄入失敗!請輸入電話”, Toast.LENGTH_SHORT).show();
}else if?(studentsBeans !=?null){
Toast.makeText(AddStudentsActivity.this,?“學號重復”, Toast.LENGTH_SHORT).show();
}
else?{
System.out.println(“是否為空: “+dbStudents);
dbStudents.insertStudents(number, name, year, sex, birth, address, phone);
showDeleteDialog();
}
}
}
/**
* 修改提示框
* */
private void?showDeleteDialog2() {
final?AlertDialog.Builder builder =?new?AlertDialog.Builder(this);
builder.setTitle(“修改成功提示”)
.setMessage(“已成功修改!”)
.setPositiveButton(“ok”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
Intent intent=new?Intent(AddStudentsActivity.this,MainActivity.class);
startActivity(intent);
}
});
builder.create().show();
}
/**
* 保存提示框
* */
private void?showDeleteDialog() {
final?AlertDialog.Builder builder =?new?AlertDialog.Builder(this);
builder.setTitle(“錄入成功提示”)
.setMessage(“已成功錄入!\n是否繼續(xù)?”)
.setPositiveButton(“否”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
Intent intent=new?Intent(AddStudentsActivity.this,MainActivity.class);
startActivity(intent);
}
})
.setNegativeButton(“是”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
//將輸入框清空
EtNumber.setText(“”);
EtName.setText(“”);
EtYear.setText(“”);
EtSex.setText(“”);
EtBirth.setText(“”);
EtAddress.setText(“”);
EtPhone.setText(“”);
}
});
builder.create().show();
}
DeleteStudentsActivity類:
public class?DeleteStudentsActivity?extends?AppCompatActivity {
ListView?listView;//列表
List<StudentsBean>?mData;//數據源
Adapter_del?adapter;//適配器
DbStudents?dbStudents;//數據庫
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_delete_students);//控件綁定
listView?= findViewById(R.id.del_lv);
dbStudents?=?new?DbStudents(this);
mData?=?new?ArrayList<>();
System.out.println(“長度為:”?+?mData.size());
//設置適配器:加載每一行數據到列表當中
adapter?=?new?Adapter_del(this,?mData);
listView.setAdapter(adapter);
loadData();
setLVClickListener();
}
/**
* listView長按事件
*/
private void?setLVClickListener() {
listView.setOnItemLongClickListener(new?AdapterView.OnItemLongClickListener() {
@Override
public boolean?onItemLongClick(AdapterView<?> parent, View view,?int?position,?long?id) {
StudentsBean studentsBean =?mData.get(position);
deleteItem(studentsBean);
return false;
}
});
}
/**
* 長按刪除
* */
private void?deleteItem(final?StudentsBean studentsBean) {
final?String delNumber = studentsBean.getNumber();
AlertDialog.Builder builder =?new?AlertDialog.Builder(this);
builder.setTitle(“提示信息”).setMessage(“您確定要刪除這條記錄么?”)
.setNegativeButton(“取消”,?null)
.setPositiveButton(“確定”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
DbStudents.deleteItemFromStudentByNumber(delNumber);
mData.remove(studentsBean);?//實時刷新,從數據源刪除
adapter.notifyDataSetChanged();
}
});
builder.create().show();
}
/**
* 顯示學生信息列表
* */
private void?loadData() {
List<StudentsBean> list = DbStudents.search();
mData.clear();
mData.addAll(list);
adapter.notifyDataSetChanged();
}
/**
* 按鈕點擊事件
* */
public void?onClick(View v) {
switch?(v.getId()) {
case?R.id.iv_back:
Intent intent =?new?Intent(DeleteStudentsActivity.this, MainActivity.class);
startActivity(intent);
finish();
break;
}
}
DataSupper類
public class Users extends DataSupport {
private String name;
private String password;
private String email;
private String addrs;
private int age;
private String sex;
public Users ( String name, String password) {
this.name = name;
this.password = password;
}
public Users ( String name, String password,String email,String addrs,String sex,int age) {
this.name = name;
this.password = password;
this.addrs = addrs;
this.email = email;
this.age = age;
this.sex = sex;
}
public Users () {
}
public String get_name () {
return name;
}
public String get_password () { return password; }
public String get_email() {
return email;
}
public int get_age(){ return age; }
public String get_addrs(){ return addrs; }
public String get_sex() { return sex; }
public void set_name(String name) {
this.name=name;
}
public void setPassword(String password) {
this.password = password;
}
public void setEmail(String email) {
this.email = email;
}
public void setAge(int age) {
this.age = age;
}
public void setAddrs(String addrs) { this.addrs = addrs; }
public void setSex(String sex) { this.sex = sex; }
}
MainActivity類:
public class?MainActivity?extends?AppCompatActivity?implements?View.OnClickListener{
private?Button?btnAdd,btnSearch,btnMod,btnQuery,btnDelete,btnBack;
//按鈕:錄入、瀏覽、修改、查詢、刪除、退出
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//事件綁定
btnAdd=findViewById(R.id.add_students);
btnSearch=findViewById(R.id.search_students);
btnMod=findViewById(R.id.mod_students);
btnDelete=findViewById(R.id.delete_students);
btnQuery=findViewById(R.id.query_students);
btnBack=findViewById(R.id.btn_back);
btnBack.setOnClickListener(this);
btnQuery.setOnClickListener(this);
btnDelete.setOnClickListener(this);
btnMod.setOnClickListener(this);
btnAdd.setOnClickListener(this);
btnSearch.setOnClickListener(this);
}
/**
* 按鈕點擊事件
* */
@Override
public void?onClick(View v) {
switch?(v.getId()){
case?R.id.add_students:
Intent intent1=new?Intent(MainActivity.this,AddStudentsActivity.class);
startActivity(intent1);
break;
case?R.id.search_students:
Intent intent2=new?Intent(MainActivity.this,SearchStudentsActivity.class);
startActivity(intent2);
break;
case?R.id.mod_students:
Intent intent3=new?Intent(MainActivity.this,ModStudentsActivity.class);
startActivity(intent3);
break;
case?R.id.query_students:
Intent intent4=new?Intent(MainActivity.this,QueryStudentsActivity.class);
startActivity(intent4);
break;
case?R.id.delete_students:
Intent intent5=new?Intent(MainActivity.this,DeleteStudentsActivity.class);
startActivity(intent5);
break;
case?R.id.btn_back:
DigLogShow();
break;
}
}
/**
* 退出提示
* */
private void?DigLogShow() {
final?AlertDialog.Builder builder =?new?AlertDialog.Builder(this);
builder.setTitle(“退出提示”)
.setMessage(“是否退出?”)
.setPositiveButton(“否”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
}
})
.setNegativeButton(“是”,?new?DialogInterface.OnClickListener() {
@Override
public void?onClick(DialogInterface dialog,?int?which) {
Intent intent6=new?Intent(MainActivity.this,LoginActivity.class);
SharedPreferences sharedPreferences = getSharedPreferences(“zidong”, Context.MODE_PRIVATE);
sharedPreferences.edit().clear().apply();
Toast.makeText(MainActivity.this,“退出成功!”,Toast.LENGTH_LONG).show();
startActivity(intent6);
}
});
builder.create().show();
}
}
ModStudentSActivity類:
public class?ModStudentsActivity?extends?AppCompatActivity?implements?View.OnClickListener {
ListView?UpdateLv;//列表
EditText?EtNumber;//學號
List<StudentsBean>?mData;//數據源
Adapter_update?adapter;//適配器對象
DbStudents?dbStudents;//數據庫
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mod_students);//綁定事件
UpdateLv?= findViewById(R.id.update_lv);
EtNumber?= findViewById(R.id.et_update);
mData?=?new?ArrayList<>();
adapter?=?new?Adapter_update(this,?mData);
UpdateLv.setAdapter(adapter);//適配器列表顯示
dbStudents?=?new?DbStudents(this);
}
/**
* 按鈕點擊事件
* */
@Override
public void?onClick(View v) {
switch?(v.getId()) {
case?R.id.iv_back:
Intent intent =?new?Intent(ModStudentsActivity.this, MainActivity.class);
startActivity(intent);
finish();
break;
case?R.id.update_iv:
String number =?EtNumber.getText().toString().trim();
StudentsBean studentsBeans =?dbStudents.QueryFromStudentByNumber(number);//查詢學號是否存在
if?(TextUtils.isEmpty(number)) {
Toast.makeText(this,?“請輸入學號!”, Toast.LENGTH_SHORT).show();
}?else if?(studentsBeans ==?null) {
Toast.makeText(this,?“該學號不存在!”, Toast.LENGTH_SHORT).show();
}?else?{
//開始搜索
List<StudentsBean> list = DbStudents.getStudentListByNumber(number);//查詢該學號的所有信息
mData.clear();//將原來搜索的消息清除
mData.addAll(list);
adapter.notifyDataSetChanged();//實時更新
initData();//修改信息函數
break;
}
}
}
/**
* 修改信息點擊事件,點擊就會進入到修改頁面進行修改
* */
private void?initData() {
dbStudents=?new?DbStudents(this);?//創(chuàng)建數據庫
UpdateLv.setOnItemClickListener(new?AdapterView.OnItemClickListener() {
@Override
public void?onItemClick(AdapterView<?> parent, View view,?int?position,?long?id){
StudentsBean studentsBean =?mData.get(position);
Intent intent =?new?Intent(ModStudentsActivity.this,AddStudentsActivity.class);
intent.putExtra(“number”, studentsBean.getNumber());
intent.putExtra(“name”, studentsBean.getName());
intent.putExtra(“year”, studentsBean.getYear());
intent.putExtra(“sex”, studentsBean.getSex());
intent.putExtra(“birth”, studentsBean.getBirth());
intent.putExtra(“address”, studentsBean.getAddress());
intent.putExtra(“phone”, studentsBean.getPhone());
ModStudentsActivity.this.startActivityForResult(intent, 1);
}
});
}
}
QueryStudentsActivity類:
public class?QueryStudentsActivity?extends?AppCompatActivity?implements?View.OnClickListener {
ListView?QueryLv;//列表
EditText?EtNumber,?EtName;//輸入框學號和姓名
List<StudentsBean>?mData;//數據源
Adapter?adapter;//適配器對象
DbStudents?dbStudents;//數據庫
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_query_students);//綁定所有事件
QueryLv?= findViewById(R.id.query_lv);
EtName?= findViewById(R.id.et_name);
EtNumber?= findViewById(R.id.et_number);
mData?=?new?ArrayList<>();
adapter?=?new?Adapter(this,?mData);
QueryLv.setAdapter(adapter);
dbStudents=new?DbStudents(this);
}
/**
* 按鈕點擊事件
* */
@Override
public void?onClick(View v) {
switch?(v.getId()) {
case?R.id.iv_back:
Intent intent =?new?Intent(QueryStudentsActivity.this, MainActivity.class);
//實現頁面跳轉
startActivity(intent);
finish();
break;
case?R.id.iv_query:
String number =?EtNumber.getText().toString().trim();
String name =?EtName.getText().toString().trim();
if?(TextUtils.isEmpty(number)) {
Toast.makeText(this,?“請輸入學號!”, Toast.LENGTH_SHORT).show();
}?else if?(TextUtils.isEmpty(name)) {
Toast.makeText(this,?“請輸入姓名!”, Toast.LENGTH_SHORT).show();
}?else?{
//開始搜索
List<StudentsBean> list = DbStudents.getStudentListByNumberAndName(number,name);
mData.clear();//將原來搜索的消息清除
mData.addAll(list);//顯示在列表上
adapter.notifyDataSetChanged();//實時更新
break;
}
}
}
SearchStudentsActivity類:
public class?SearchStudentsActivity?extends?AppCompatActivity?implements?View.OnClickListener {
ImageButton?BtnBack;//退出按鈕
ListView?listView;//列表
List<StudentsBean>?mData;//數據源
Adapter?adapter;//適配器
DbStudents?dbStudents;//數據庫
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_students);//綁定事件
BtnBack?= findViewById(R.id.btn_back);
BtnBack.setOnClickListener(this);
listView?= findViewById(R.id.listView);
dbStudents?=?new?DbStudents(this);
mData?=?new?ArrayList<>();
System.out.println(“長度為:”?+?mData.size());
//設置適配器:加載每一行數據到列表當中
adapter?=?new?Adapter(this,?mData);
listView.setAdapter(adapter);
loadData();//顯示學生信息列表函數
}
/**
* 顯示學生信息列表
*/
private void?loadData() {
List<StudentsBean> list = DbStudents.search();
mData.clear();
mData.addAll(list);
adapter.notifyDataSetChanged();//實時更新
}
@Override
public void?onClick(View v) {
switch?(v.getId()) {
case?R.id.btn_back:
Intent intent =?new?Intent(SearchStudentsActivity.this, MainActivity.class);
startActivity(intent);
finish();
break;
}
}
}
六、數據庫設計
七、總結
這次的課程學習時間比較短,所以完成的項目也不算完美,基礎比較差,到做項目的時候問題就全部出來了,所以我還需要繼續(xù)努力學習。
源碼鏈接:https://yunjunet.cn/875239.html