安卓課程設計報告
(2019—2020學年 第一學期)
學生學籍管理系統設計
系 別: 信息與控制工程系
專 業: 計算機科學與技術
班 級: 1702
學 號: 173230216
姓 名: 張子健
指導教師 郭丹
完成時間 2019年12月5日
目錄
一.選題的目的和意義............................................................................................3
二、系統需求分析..................................................................................................3
2.1 用戶需求.......................................................................................................3
2.2 功能需求.......................................................................................................3
2.3 UML類圖......................................................................................................3
三、系統的設計,測試與實現..............................................................................4
1.系統的設計.......................................................................................................4
1.1例圖分析....................................................................................................4
1.2文件列表....................................................................................................5
2.系統的實現.......................................................................................................6
3.系統的測試......................................................................................................14
一.測試環境..................................................................................................14
二.測試過程.....................................................................................................14
四、課程設計總結..................................................................................................18
一.選題的目的和意義
隨着社會的進步,尤其是計算機技術與網絡的發展,人們對於數據傳輸,遠程控制的實時性要求越來越高,這就使得計算機技術的發展越來越面向網絡。現代學校管理無疑成為網絡應用的典型代表,這些年電腦計算機的速度質的提高,成本的下降,IT互聯網大眾趨勢的發展。我們使用電腦的高效率才處理數據信息成為可能。學生學籍管理系統的出現,正是管理人員與信息數據,計算機的進入互動時代的體現。友好的人機交互模式,清晰簡明的圖形界面,高效安全的操作使得我們對成千上萬的的信息的管理得心入手。通過這個系統,可以做到信息的規范處理,科學統計和快速的查詢,從而減少管理方面的工作量。毋庸置疑,切實有效的把計算機管理引入學校教務管理中,對於促進學校管理制度,提高學校教學質量與辦學水平有着顯著意義。
二.系統需求分析
2.1 用戶需求
學生學籍管理系統,可用於學校等機構的學生學籍的管理,查詢,更新與維護,使用方便,易用性強。該系統實現的大致功能;用戶登陸。提供了學生學籍信息的查詢,添加,修改,刪除;學生信息的錄入,修改,刪除,查詢等功能。管理員管理擁有最高的權限。
2.2 功能需求
1.添加學生信息:在開始界面中點擊添加,進入添加界面,管理員可在此界面輸入學生信息,包括學生的姓名,年齡,系別,專業和創建日期,然后通過activity之間的互相跳轉實現各模塊功能
2.查詢學生信息:可在主界面打開顯示,通過輸入已添加的學生信息快速查詢學生的基本情況。
3.修改學生信息:設計思路與添加學生信息類似,可以對已經添加的學生信息進行修改。
4、刪除學生信息:選擇想要刪除的學生信息后點擊在主頁面的剪子按鈕即可完成刪除功能,可以刪除已經添加的學生信息。
2.3 UML類圖
三.系統的設計,實現與測試
1.系統的設計
代碼
1.1例圖分析
1.2文件列表
2.系統的實現
原文件代碼
Java MainActivity原碼
package com.example.z.student;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import java.io.Serializable;
import java.time.Month;
import java.time.MonthDay;
import java.time.Year;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, TimePicker.OnTimeChangedListener {
Button bt_add;
Button bt_send;
EditText et_name;
AutoCompleteTextView et_major;
EditText et_age;
RadioGroup rg_sex;
Spinner academyspinner;
EditText et_date;
private Calendar cal;
private int y, m, d;
DBop dbop = new DBop();
ArrayList<StuInfo> studentlist = new ArrayList<StuInfo>();
MySQLiteAccess mySQLiteAccess = new MySQLiteAccess(MainActivity.this, 1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_add = (Button) findViewById(R.id.bt_add);
bt_send = (Button) findViewById(R.id.bt_send);
academyspinner = (Spinner) findViewById(R.id.academy);
et_date = (EditText) findViewById(R.id.et_date);
et_name = (EditText) findViewById(R.id.et_name);
et_major = (AutoCompleteTextView) findViewById(R.id.et_major);
et_age = (EditText) findViewById(R.id.et_age);
rg_sex = (RadioGroup) findViewById(R.id.rg_sex);
String[] arr = {"物聯網工程", "計算機科學", "電子信息", "通信工程"};
ArrayAdapter<String> arrayAdapter = new ArrayAdapter(this, R.layout.au_textview, arr);
et_major.setAdapter(arrayAdapter);
bt_add.setOnClickListener(this);
bt_send.setOnClickListener(this);
et_date.setKeyListener(null);
et_date.setOnClickListener(this);
dbop.test(this);
initSpinner();
}
private boolean isDigital(String num) //正則表達式判斷輸入是否為數字
{
return num.matches("[0-9]{1,}");
}
private String getRadioInfo(RadioGroup radioGroup) {
String info = "";
int num = radioGroup.getChildCount();
for (int i = 0; i < num; i++) {
RadioButton rd = (RadioButton) radioGroup.getChildAt(i);
if (rd.isChecked()) {
info = rd.getText().toString();
break;
}
}
return info;
}
private String getCheckBoxInfo(LinearLayout CheckBoxgroup) {
String info = "";
int num = CheckBoxgroup.getChildCount();
for (int i = 0; i < num; i++) {
CheckBox cb = (CheckBox) CheckBoxgroup.getChildAt(i);
if (cb.isChecked()) {
info += cb.getText().toString() + "\n";
}
}
return info;
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
switch (v.getId()) {
case R.id.bt_add:
String aca = academyspinner.getSelectedItem().toString();
String name = et_name.getText().toString();
String major = et_major.getText().toString();
String age = et_age.getText().toString();
String sex = getRadioInfo(rg_sex);
// String kecheng = getCheckBoxInfo(check).toString();
String date = et_date.getText().toString();
CharSequence a = et_age.getText();
if (TextUtils.isEmpty(a) | TextUtils.isEmpty((et_major.getText())) | TextUtils.isEmpty(et_name.getText())) {
Toast.makeText(MainActivity.this, "請輸入完整信息", Toast.LENGTH_SHORT).show();
return;
} else if (aca == "選擇學院") {
Toast.makeText(MainActivity.this, "請選擇正確的學院", Toast.LENGTH_SHORT).show();
return;
} else if (!isDigital(a.toString())) {
et_age.setError("請輸入數字");
} else {
StuInfo stu = new StuInfo(name, major, age, sex,aca, date);
studentlist.add(stu);
StuInfo s = new StuInfo(name, sex, age, aca, major, date);
dbop.insert(s);
Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
}
break;
case R.id.bt_send:
if (studentlist.isEmpty()) {
Toast.makeText(MainActivity.this, "請先添加信息", Toast.LENGTH_SHORT).show();
return;
} else {
intent.putExtra("students", (Serializable) studentlist);
intent.setClass(MainActivity.this, StudentList.class);
startActivity(intent);
}
break;
case R.id.et_date:
DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
et_date.setText(year + "-" + (++month) + "-" + dayOfMonth);
}
};
getDate();
DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, listener, y, m, d);
datePickerDialog.show();
break;
}
}
private void initSpinner() {
String[] arr = {"信息科學與工程系", "管理系", "電氣系", "機械系", "生物系", "選擇系"};
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, arr);
academyspinner.setAdapter(arrayAdapter);
academyspinner.setSelection(arr.length - 1, true);
}
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
}
private void getDate() {
cal = Calendar.getInstance();
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH);
d = cal.get(Calendar.DAY_OF_MONTH);
}
private void test() {
MySQLiteAccess mySQLiteAccess = new MySQLiteAccess(this, 1);
mySQLiteAccess.getReadableDatabase();
}
}
類說明:完成學生成績管理的主界面以及按鈕操作。
Java StudentAdapter原碼
package com.example.z.student;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.util.List;
public class StudentAdapter extends BaseAdapter implements View.OnClickListener{
private List<StuInfo> stuDates;//數據源
private Context stuContext;//布局加載器
private InnerItemOnClickListener innerItemOnClickListener;
DBop dbOperate=new DBop();//有參的構造函數,為數據源,上下文對象復制,同時實例化布局加載器
public StudentAdapter(Context context,List list) {
this.stuDates=list;
this.stuContext=context;
dbOperate.test(context);//初始化一下數據庫,不然后面delete用的時候database是空的
}
//有多少條數據,需要創建多少個item布局
@Override
public int getCount() {
return stuDates.size();
}
//返回position對應位置的數據
@Override
public Object getItem(int position) {
return stuDates.get(position);
}
//返回position對應位置item的id
@Override
public long getItemId(int position) {
return position;
}
/**
* 具體定義加載item布局,並將數據顯示到item布局上的方法。
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View stuView=View.inflate(stuContext,R.layout.list,null);
//實例化stulist布局上的控件
TextView tv_id=stuView.findViewById(R.id.li_id);
TextView tv_name=stuView.findViewById(R.id.li_name);
TextView tv_academy=stuView.findViewById(R.id.li_academy);
ImageView iv_edit=stuView.findViewById(R.id.li_edit);
ImageView iv_delete=stuView.findViewById(R.id.li_delete);
final StuInfo student=(StuInfo) stuDates.get(position);
tv_id.setText(String.valueOf(student.getId()));
tv_name.setText(student.getName());
tv_academy.setText(student.getAcademy());
iv_edit.setImageResource(R.drawable.edit);
iv_delete.setImageResource(R.drawable.delete);
//增加監聽
iv_edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context=v.getContext();
Intent intent=new Intent();
intent.setClass(context,Edit.class);
intent.putExtra("altStu",student);
((Activity)context).startActivity(intent);
}
});
iv_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbOperate.delete(student.getId());
stuDates.remove(student);
StudentAdapter.this.notifyDataSetChanged();
}
});
//給刪除和編輯設置標志
iv_edit.setTag(position);
iv_delete.setTag(position);
return stuView;
}
//創建內部控件監聽接口
interface InnerItemOnClickListener{
abstract void itemClick(View view);
}
public void setOnInnerOnClickListenner(InnerItemOnClickListener listener)
{
this.innerItemOnClickListener=listener;
}
@Override
public void onClick(View v) {
innerItemOnClickListener.itemClick(v);
}
}
類說明:完成學生學籍錄入管理的主界面以及按鈕操作。
- 系統的測試
一. 測試環境
1.設計環境:Android studio
2.測試環境:Android studio虛擬機
二.測試過程
- 測試能否正常運行程序
- 測試添加頁面能否正常添加姓名,年齡,系別,專業和日期
- 測試能否查詢學生信息
- 測試能否修改學生信息
- 測試能否刪除學生信息
測試結果
1.測試能否正常運行程序
2.測試添加頁面能否正常添加姓名,年齡,系別,專業和日期
3.測試能否查詢學生信息
4.測試能否修改學生信息
5.測試能否刪除學生信息
四. 課程設計總結
此系統是我做的一個簡單的學生學籍管理系統,它的優點在於簡單明了,容易上手操作,便於修改內容,從系統代碼也比較容易修改,缺點是功能不是很強大,而且代碼有些地方比較繁瑣,僅僅是一個設計,在實際用途中還是有一定的技術差距。
在設計中我深知自己掌握的知識還遠遠不夠,掌握的一些理論知識應用到實踐中去,總會出現這樣的問題,光知道書本上的知識是遠遠不夠的,一定要把理論知識和實踐結合起來。
把學到的知識應用到時間中去,多做多練,才可以把理論的精華發揮出來,知識不是知道,了解就好,而是要去應用並且發展它,讓它得到充分的應用,從而解決一些問題,這才是學習的根本目的。在這次課程設計中,得到了老師和同學們很多的幫助,學到了很多書本上學不到的知識,今后,我還要加強學習,努力使自己成為一位專業的計算機人員,為我今后從事的工作服務。