安卓课程设计报告
(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.测试能否删除学生信息
四. 课程设计总结
此系统是我做的一个简单的学生学籍管理系统,它的优点在于简单明了,容易上手操作,便于修改内容,从系统代码也比较容易修改,缺点是功能不是很强大,而且代码有些地方比较繁琐,仅仅是一个设计,在实际用途中还是有一定的技术差距。
在设计中我深知自己掌握的知识还远远不够,掌握的一些理论知识应用到实践中去,总会出现这样的问题,光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。
把学到的知识应用到时间中去,多做多练,才可以把理论的精华发挥出来,知识不是知道,了解就好,而是要去应用并且发展它,让它得到充分的应用,从而解决一些问题,这才是学习的根本目的。在这次课程设计中,得到了老师和同学们很多的帮助,学到了很多书本上学不到的知识,今后,我还要加强学习,努力使自己成为一位专业的计算机人员,为我今后从事的工作服务。