在Androidstudio中设计一个简单学生选课系统并给出代码以及XML代码,在这个应用程序中有两个Activity界面,分别是对课程进行操作时的CourseActivity界面,以及对学生操作的PersonActivity界面。在CourseActivity界面可以对课程进行添加,删除以及跳转到PersonActivity功能和通过ListView将所有课程显示在页面上,在PersonActivity中可以对person表数据进行增、删、改等操作和通过ListView将所有学生信息显示在页面上,在这个工程中有两个实体类(Person.java、Course.java)和一个扩展类(Relation.java)但是不用给出这三个类的代码,Person.java类定义了学生的属性信息,Course.java类定义了课程的属性对象,而Relation.java类是学生和课程之间的关系类实现了学生和课程之间的多对多存储关系。三个类的属性定义如下,(1)person类的定义为:id(学生号),myname(学生名),myclass(学生班级),(2)Course类:id(课程号)、name(课程名)、obj(上课对象)、phone(班长电话),(3)Relation类:studentId(学生id)、courseId(课程Id)。定义三个数据表,表结构分别为:student表、course表、relations表,通过定义DBOpenHelper类继承SQLiteOpenHelper类来创建数据库,使用SQLite存储数据

时间: 2024-02-01 21:16:41 浏览: 22
这里给出一个简单的实现,包括CourseActivity和PersonActivity界面的代码以及相应的XML布局文件。需要注意的是,这里只给出了对于课程和学生的基本操作,没有实现多对多关系的存储和操作。具体实现可以参考Relation类的定义,使用join操作等。 CourseActivity.java ```java public class CourseActivity extends AppCompatActivity { private ListView courseList; private List<Course> courses; private CourseAdapter courseAdapter; private EditText courseIdEditText; private EditText courseNameEditText; private EditText courseObjEditText; private EditText coursePhoneEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_course); // 初始化ListView courseList = findViewById(R.id.course_list); courses = new ArrayList<>(); courseAdapter = new CourseAdapter(this, courses); courseList.setAdapter(courseAdapter); // 初始化EditText courseIdEditText = findViewById(R.id.course_id_edit_text); courseNameEditText = findViewById(R.id.course_name_edit_text); courseObjEditText = findViewById(R.id.course_obj_edit_text); coursePhoneEditText = findViewById(R.id.course_phone_edit_text); // 从数据库中读取数据并显示 refreshCourseList(); // 设置ListView的点击事件,可以跳转到PersonActivity界面查看选修该课程的学生 courseList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Course course = courses.get(position); Intent intent = new Intent(CourseActivity.this, PersonActivity.class); intent.putExtra("courseId", course.getId()); startActivity(intent); } }); } // 刷新ListView private void refreshCourseList() { courses.clear(); courses.addAll(CourseDao.getAllCourses(this)); courseAdapter.notifyDataSetChanged(); } // 添加课程 public void addCourse(View view) { String id = courseIdEditText.getText().toString(); String name = courseNameEditText.getText().toString(); String obj = courseObjEditText.getText().toString(); String phone = coursePhoneEditText.getText().toString(); // 检查输入是否为空 if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name) || TextUtils.isEmpty(obj) || TextUtils.isEmpty(phone)) { Toast.makeText(this, "输入不能为空!", Toast.LENGTH_SHORT).show(); return; } // 创建Course对象并插入到数据库中 Course course = new Course(id, name, obj, phone); CourseDao.addCourse(this, course); // 刷新ListView refreshCourseList(); // 清空EditText courseIdEditText.setText(""); courseNameEditText.setText(""); courseObjEditText.setText(""); coursePhoneEditText.setText(""); Toast.makeText(this, "添加成功!", Toast.LENGTH_SHORT).show(); } // 删除课程 public void deleteCourse(View view) { // 获取选中的课程 SparseBooleanArray selectedItems = courseAdapter.getSelectedItems(); for (int i = selectedItems.size() - 1; i >= 0; i--) { if (selectedItems.valueAt(i)) { Course course = courses.get(selectedItems.keyAt(i)); CourseDao.deleteCourse(this, course.getId()); } } // 刷新ListView refreshCourseList(); courseAdapter.clearSelection(); } } ``` PersonActivity.java ```java public class PersonActivity extends AppCompatActivity { private ListView personList; private List<Person> persons; private PersonAdapter personAdapter; private EditText personIdEditText; private EditText personNameEditText; private EditText personClassEditText; private String courseId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_person); // 获取传递过来的课程id Intent intent = getIntent(); courseId = intent.getStringExtra("courseId"); // 初始化ListView personList = findViewById(R.id.person_list); persons = new ArrayList<>(); personAdapter = new PersonAdapter(this, persons); personList.setAdapter(personAdapter); // 初始化EditText personIdEditText = findViewById(R.id.person_id_edit_text); personNameEditText = findViewById(R.id.person_name_edit_text); personClassEditText = findViewById(R.id.person_class_edit_text); // 从数据库中读取数据并显示 refreshPersonList(); // 设置ListView的长按事件,可以删除选中的学生 personList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Person person = persons.get(position); PersonDao.deletePerson(PersonActivity.this, person.getId()); refreshPersonList(); return true; } }); } // 刷新ListView private void refreshPersonList() { persons.clear(); persons.addAll(PersonDao.getPersonsByCourseId(this, courseId)); personAdapter.notifyDataSetChanged(); } // 添加学生 public void addPerson(View view) { String id = personIdEditText.getText().toString(); String name = personNameEditText.getText().toString(); String myclass = personClassEditText.getText().toString(); // 检查输入是否为空 if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name) || TextUtils.isEmpty(myclass)) { Toast.makeText(this, "输入不能为空!", Toast.LENGTH_SHORT).show(); return; } // 创建Person对象并插入到数据库中 Person person = new Person(id, name, myclass); PersonDao.addPerson(this, person); // 创建Relation对象并插入到数据库中 Relation relation = new Relation(id, courseId); RelationDao.addRelation(this, relation); // 刷新ListView refreshPersonList(); // 清空EditText personIdEditText.setText(""); personNameEditText.setText(""); personClassEditText.setText(""); Toast.makeText(this, "添加成功!", Toast.LENGTH_SHORT).show(); } // 修改学生 public void updatePerson(View view) { // 获取选中的学生 SparseBooleanArray selectedItems = personAdapter.getSelectedItems(); for (int i = selectedItems.size() - 1; i >= 0; i--) { if (selectedItems.valueAt(i)) { Person person = persons.get(selectedItems.keyAt(i)); // 更新数据库中的Person对象 person.setName(personNameEditText.getText().toString()); person.setMyclass(personClassEditText.getText().toString()); PersonDao.updatePerson(this, person.getId(), person); // 刷新ListView refreshPersonList(); } } personAdapter.clearSelection(); } } ``` activity_course.xml ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="课程列表" android:textSize="20sp" android:textStyle="bold" /> <ListView android:id="@+id/course_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:choiceMode="multipleChoice" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="16dp"> <EditText android:id="@+id/course_id_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="课程号" /> <EditText android:id="@+id/course_name_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="课程名" /> <EditText android:id="@+id/course_obj_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="上课对象" /> <EditText android:id="@+id/course_phone_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="班长电话" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="addCourse" android:text="添加" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="deleteCourse" android:text="删除" /> </LinearLayout> </LinearLayout> ``` activity_person.xml ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="学生列表" android:textSize="20sp" android:textStyle="bold" /> <ListView android:id="@+id/person_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:choiceMode="multipleChoice" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="16dp"> <EditText android:id="@+id/person_id_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="学号" /> <EditText android:id="@+id/person_name_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="姓名" /> <EditText android:id="@+id/person_class_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="班级" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="addPerson" android:text="添加" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="updatePerson" android:text="修改" /> </LinearLayout> </LinearLayout> ```

相关推荐

最新推荐

recommend-type

android studio实现简单考试应用程序实例代码详解

主要介绍了android studio实现简单考试应用程序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Android中使用Kotlin实现一个简单的登录界面

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。接下来本文通过实例代码给大家讲解Android中使用Kotlin实现一个简单的登录界面,一起看看吧
recommend-type

详解Android Studio实现用户登陆界面demo(xml实现)

主要介绍了详解Android Studio实现用户登陆界面demo,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Android编程实现两个Activity相互切换而不使用onCreate()的方法

主要介绍了Android编程实现两个Activity相互切换而不使用onCreate()的方法,结合实例形式分析了多个Activity切换而不重新创建的操作技巧,需要的朋友可以参考下
recommend-type

在Android系统源码中预置APK的方法

今天小编就为大家分享一篇关于在Android系统源码中预置APK的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。