Android开发实战---一个汽车销售APP,有汽车列表页、汽车详情页、贷款计算页3个界面。
Android开发实战设计并实现一个汽车销售APP,要求至少有汽车列表页、汽车详情页、贷款计算页3个界面。
已开源:https://github.com/yan123666/wlf
实现结果:
1.计算金额界面
package com.car.carimport android.os.Bundle
import android.view.View
import android.widget.*
import androidx.appcompat.app.AppCompatActivity/*** 计算金额界面*/
class CalculateActivity : AppCompatActivity() {private var dividel:Boolean=trueoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_calculate_wlf)//获取传递过来车辆信息var carBean:CarBean = intent.getSerializableExtra("car") as CarBean//显示车辆价格var et_price = findViewById<TextView>(R.id.et_price)et_price.setText("¥"+(carBean.price!!.toDouble()*10000))//初始化布局var seek_DisCount_Percent = findViewById<SeekBar>(R.id.seek_DisCount_Percent)var tv_DisCount_Account = findViewById<TextView>(R.id.tv_DisCount_Account)var tv_Total = findViewById<TextView>(R.id.tv_Total)var tv_percent = findViewById<TextView>(R.id.tv_percent)var rg = findViewById<RadioGroup>(R.id.rg)var rb_no = findViewById<RadioButton>(R.id.rb_no)var rb_yes = findViewById<RadioButton>(R.id.rb_yes)var tv_DownPayment = findViewById<TextView>(R.id.tv_DownPayment)var tv_Loan = findViewById<TextView>(R.id.tv_Loan)var sp_Periods = findViewById<Spinner>(R.id.sp_Periods)var tv_period = findViewById<TextView>(R.id.tv_period)//给下拉框添加监听事件 选择分期时间sp_Periods.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {override fun onItemSelected(adapterView: AdapterView<*>, view: View, i: Int, l: Long) {//判断是否分期 ,如果分期 计算if (dividel){//首付费用 分期费用各一半tv_DownPayment.setText("¥"+(carBean.price!!.toDouble()*10000/2))//分期费用tv_Loan.setText("¥"+(carBean.price!!.toDouble()*10000/2))//6 个月 12个月 24个月 每期的费用if (i==0){tv_period.setText("¥"+(carBean.price!!.toDouble()*10000/2/6))}else if (i==1){tv_period.setText("¥"+(carBean.price!!.toDouble()*10000/2/12))}else if (i==2){tv_period.setText("¥"+(carBean.price!!.toDouble()*10000/2/24))}}}override fun onNothingSelected(adapterView: AdapterView<*>?) {}}//是否分期切换监听rg.setOnCheckedChangeListener { group, checkedId ->//分期if (checkedId == R.id.rb_yes) {dividel = truetv_DownPayment.setText("¥"+(carBean.price!!.toDouble()*10000/2))tv_Loan.setText("¥"+(carBean.price!!.toDouble()*10000/2))val i=sp_Periods.selectedItemPosition //当前选中期数//每期费用if (i==0){tv_period.setText("¥"+(carBean.price!!.toDouble()*10000/2/6))}else if (i==1){tv_period.setText("¥"+(carBean.price!!.toDouble()*10000/2/12))}else if (i==2){tv_Loan.setText("¥"+(carBean.price!!.toDouble()*10000/2/24))}} else {//不分期dividel = falsetv_DownPayment.setText("")tv_Loan.setText("")//每期费用tv_period.setText("")}}/*** 监听优惠力度 当优惠力度发生改变的时候 实际总的金额也变化*/seek_DisCount_Percent.setOnSeekBarChangeListener(object :SeekBar.OnSeekBarChangeListener{override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {tv_percent.setText(""+(progress)+"%")tv_Total.setText("¥"+(carBean.price!!.toDouble()*10000-carBean.price!!.toDouble()*10000*progress/100))tv_DisCount_Account.setText("¥"+(carBean.price!!.toDouble()*10000*progress/100))}override fun onStartTrackingTouch(seekBar: SeekBar?) {}override fun onStopTrackingTouch(seekBar: SeekBar?) {}})}
}
2.车辆列表适配器
package com.car.carimport android.content.Context
import android.view.View
import android.widget.BaseAdapter
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import java.util.ArrayList/*** 车辆列表适配器*/
class CarAdapter(context: Context, mData: MutableList<CarBean>) : BaseAdapter() {private var data = mDataprivate var mContext=context;override fun getCount(): Int {return data.size}override fun getItem(position: Int): Any {return data[position]}override fun getItemId(position: Int): Long {return position.toLong()}override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {val convertView = View.inflate(mContext, R.layout.item_layout_wlf, null)var car = this.data[position]/*** 初始化控件*/val img=convertView.findViewById<ImageView>(R.id.iv_img) //车辆图片val tv_title=convertView.findViewById<TextView>(R.id.tv_title) //车辆名val tv_mileage=convertView.findViewById<TextView>(R.id.tv_mileage) //公里数val tv_price=convertView.findViewById<TextView>(R.id.tv_price) //车辆价格//车辆图片img.setImageResource(car.img)//车辆名字tv_title.text = car.name//车辆公里数tv_mileage.text = car.describe;//车辆价格tv_price.text = car.price+"万";return convertView}
}
3.车辆类
package com.car.carimport java.io.Serializable/*** 车辆类*/
class CarBean(id: Int, type: String, name: String, price: String, describe: String, pic: Int) : Serializable {var id = id //车辆IDvar type: String? = type //车辆类型var name: String? = name //车辆名var price: String? = price //车辆价格var describe: String? = describe //公里数描述var img = pic //车辆图片
}
4.数据库操作类
package com.car.carimport android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.SQLException
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper/*** sqlite 数据库操作类*/
class DatabaseUtil
(private val mCtx: Context
) {private var mDbHelper: DatabaseHelper? = nullprivate var mDb: SQLiteDatabase? = nullprivate class DatabaseHelper constructor(context: Context?) :SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {override fun onCreate(db: SQLiteDatabase) {//创建表db.execSQL(CREATE_TABLE)}override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}}/*** 打开数据库** @return instance of DatabaseUtil* @throws SQLException*/@Throws(SQLException::class)fun open(): DatabaseUtil {mDbHelper = DatabaseHelper(mCtx)mDb = mDbHelper!!.writableDatabasereturn this}/*** This method is used for closing the connection.*/fun close() {mDbHelper!!.close()}/*** 插入数据** @param name* @param grade* @return long*/fun insert(type: String?, name: String?, price: String?, describe: String?, img:Int): Long {val initialValues = ContentValues()initialValues.put("type", type);initialValues.put("name", name);initialValues.put("price", price);initialValues.put("describe", describe);initialValues.put("img", img);return mDb!!.insert(DATABASE_TABLE, null, initialValues)}/*** 查询全部数据*/@SuppressLint("Range")fun queryAllPersonData(): List<CarBean>? {//查询全部数据val cursor: Cursor =mDb!!.query(DATABASE_TABLE, null, null, null, null, null, null, null)val list: MutableList<CarBean> = ArrayList()if (cursor.count > 0) {//移动到首位cursor.moveToFirst()for (i in 0 until cursor.count) {val id = cursor.getInt(cursor.getColumnIndex("id"))val type = cursor.getString(cursor.getColumnIndex("type"))val name = cursor.getString(cursor.getColumnIndex("name"))val price = cursor.getString(cursor.getColumnIndex("price"))val describe = cursor.getString(cursor.getColumnIndex("describe"))val pic = cursor.getInt(cursor.getColumnIndex("img"))val model = CarBean(id,type,name,price,describe,pic)list.add(model)//移动到下一位cursor.moveToNext()}}cursor.close()mDb!!.close()return list}/*** This method will deleteAll record.** @return*/fun deleteAll(): Boolean {return mDb!!.delete(DATABASE_TABLE, " 1 ", null) > 0}companion object {private const val TAG = "DatabaseUtil"/*** Database Name 数据库名*/private const val DATABASE_NAME = "car_data"/*** Database Version 数据库版本*/private const val DATABASE_VERSION = 1/*** Table Name 数据库表名*/private const val DATABASE_TABLE = "tb_car"/*** Table columns 数据库字段名*/const val KEY_ID = "id"const val KEY_TYPE = "type"const val KEY_NAME = "name"const val KEY_PRICE = "price"const val KEY_DESCRIBE = "describe"const val KEY_IMG = "img"/*** Database creation sql statement*/private const val CREATE_TABLE =("create table " + DATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, "+ KEY_TYPE + " text not null, "+ KEY_NAME + " text not null, "+ KEY_PRICE + " text not null, "+ KEY_DESCRIBE + " text not null, "+ KEY_IMG + " integer not null);")}
}
5.车辆详情界面
package com.car.carimport android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView/*** 车辆详情界面*/
class DetailsActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_details_wlf)//获取传递数据var carBean:CarBean = intent.getSerializableExtra("car") as CarBean//初始化布局var iv_img = findViewById<ImageView>(R.id.iv_img)var tv_detail_msg = findViewById<TextView>(R.id.tv_detail_msg)var bt_buy = findViewById<Button>(R.id.bt_buy)//显示数据 图片显示和详情iv_img.setImageResource(carBean.img)tv_detail_msg.setText(carBean.name+carBean.describe+carBean.price+"万")//跳转到计算界面bt_buy.setOnClickListener {val intent = Intent(this, CalculateActivity::class.java);intent.putExtra("car", carBean)startActivity(intent)}}
}
6.车辆列表界面
package com.car.carimport android.content.Intent
import android.os.Bundle
import android.widget.AdapterView
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity/*** 车辆列表界面*/
class MainActivity : AppCompatActivity() {private lateinit var listView: ListViewprivate var carAdapter: CarAdapter?=nullprivate var data= mutableListOf<CarBean>()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main_wlf)listView = findViewById<ListView>(R.id.lv)initData()//跳转到详情界面listView.onItemClickListener =AdapterView.OnItemClickListener { adapterView, view, i, l ->//传递车辆信息val intent = Intent(this, DetailsActivity::class.java);intent.putExtra("car", data[i])startActivity(intent)}}/*** 初始化数据*/private fun initData() {//数据库开启val dbUtil=DatabaseUtil(this);dbUtil.open()//查询数据库里是否存在数据var queryAllPersonData = dbUtil.queryAllPersonData()//存在数据if (null!=queryAllPersonData&&queryAllPersonData.size>0){data= queryAllPersonData as MutableList<CarBean>//初始化是脾气carAdapter = CarAdapter(this,data)//设置适配器listView.adapter=carAdapter}else{//不存在 插入3个默认数据dbUtil.open()//插入数据dbUtil.insert("轿车","小鹏汽车P7 2022款","18.5","2023年(700公里)",R.mipmap.img1);dbUtil.insert("轿车","保时捷 2021款","158.5","2023年(2700公里)",R.mipmap.img2);dbUtil.insert("轿车","别克E5 2023款","20.5","2023年(500公里)",R.mipmap.img3);//再次查询数据库 确认查询成功 设置适配器现实数据var queryAllPersonData1 = dbUtil.queryAllPersonData()data= queryAllPersonData1 as MutableList<CarBean>carAdapter = CarAdapter(this,data)listView.adapter=carAdapter}}
}
界面设计:
1.金额计算页面:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"android:padding="20sp"tools:context=".CalculateActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Price"android:layout_height="wrap_content"></TextView><EditTextandroid:id="@+id/et_price"android:layout_width="0dp"android:gravity="right|center_vertical"android:layout_weight="1"android:layout_height="match_parent"></EditText></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="DisCount Percent"android:layout_height="wrap_content"></TextView><SeekBarandroid:id="@+id/seek_DisCount_Percent"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"></SeekBar><TextViewandroid:id="@+id/tv_percent"android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="DisCount Account"android:layout_height="wrap_content"></TextView><TextViewandroid:id="@+id/tv_DisCount_Account"android:layout_width="0dp"android:layout_weight="1"android:gravity="right|center_vertical"android:layout_height="match_parent"></TextView></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Total"android:layout_height="wrap_content"></TextView><TextViewandroid:id="@+id/tv_Total"android:layout_width="0dp"android:layout_weight="1"android:gravity="right|center_vertical"android:layout_height="match_parent"></TextView></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginTop="40dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Dividel?"android:layout_gravity="center_vertical"android:layout_height="wrap_content"></TextView><RadioGroupandroid:id="@+id/rg"android:layout_width="0dp"android:layout_weight="1"android:gravity="center"android:orientation="vertical"android:layout_height="wrap_content"><RadioButtonandroid:id="@+id/rb_no"android:layout_width="wrap_content"android:text="No"android:layout_height="wrap_content"></RadioButton><RadioButtonandroid:id="@+id/rb_yes"android:layout_width="wrap_content"android:text="Yes"android:checked="true"android:layout_height="wrap_content"></RadioButton></RadioGroup></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="DownPayment"android:layout_height="wrap_content"></TextView><TextViewandroid:id="@+id/tv_DownPayment"android:layout_width="0dp"android:gravity="right|center_vertical"android:layout_weight="1"android:layout_height="match_parent"></TextView></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Loan"android:layout_height="wrap_content"></TextView><TextViewandroid:id="@+id/tv_Loan"android:layout_width="0dp"android:layout_weight="1"android:gravity="right|center_vertical"android:layout_height="match_parent"></TextView></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Periods"android:layout_height="wrap_content"></TextView><Spinnerandroid:id="@+id/sp_Periods"android:layout_width="0dp"android:gravity="right"android:layout_marginLeft="20sp"android:entries="@array/phones_array"android:layout_weight="1"android:layout_height="match_parent"></Spinner></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="45dp"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:text="Per period"android:layout_height="wrap_content"></TextView><TextViewandroid:id="@+id/tv_period"android:layout_width="0dp"android:layout_weight="1"android:gravity="right|center_vertical"android:layout_height="match_parent"></TextView></LinearLayout>
</LinearLayout>
2.立即购买控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="20dp"tools:context=".DetailsActivity"><ImageViewandroid:id="@+id/iv_img"android:layout_width="match_parent"android:layout_height="wrap_content"></ImageView><TextViewandroid:id="@+id/tv_detail_msg"android:layout_width="match_parent"android:textColor="#DD306B"android:layout_marginTop="20sp"android:textSize="14sp"android:layout_height="wrap_content"></TextView><Buttonandroid:id="@+id/bt_buy"android:layout_width="wrap_content"android:text="立即购买"android:layout_marginTop="20dp"android:layout_gravity="center_horizontal|bottom"android:layout_height="wrap_content"></Button></LinearLayout>
3.车辆展示页面
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:id="@+id/lv"android:layout_height="match_parent"tools:context=".MainActivity"></ListView>
4.布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/iv_img"android:layout_width="120dp"android:layout_height="120dp"></ImageView><LinearLayoutandroid:layout_width="match_parent"android:orientation="vertical"android:paddingLeft="10dp"android:layout_height="120dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:gravity="center_vertical"android:textColor="#1677C5"android:textSize="16sp"android:layout_height="45dp"></TextView><TextViewandroid:id="@+id/tv_mileage"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:textColor="#505151"android:gravity="center_vertical"android:textSize="12sp"></TextView><TextViewandroid:id="@+id/tv_price"android:layout_width="match_parent"android:layout_height="0dp"android:textColor="#131313"android:gravity="center_vertical"android:textSize="18sp"android:layout_weight="1"></TextView></LinearLayout>
</LinearLayout>
配置文件:
strings.xml
<resources><string name="app_name">汽车销售APP</string><string-array name = "phones_array"><item>6 months</item><item>12 months</item><item>24 months</item></string-array>
</resources>
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools"><!-- Base application theme. --><style name="Theme.Car" parent="Theme.MaterialComponents.DayNight.DarkActionBar"><!-- Primary brand color. --><item name="colorPrimary">@color/purple_500</item><item name="colorPrimaryVariant">@color/purple_700</item><item name="colorOnPrimary">@color/white</item><!-- Secondary brand color. --><item name="colorSecondary">@color/teal_200</item><item name="colorSecondaryVariant">@color/teal_700</item><item name="colorOnSecondary">@color/black</item><!-- Status bar color. --><item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item><!-- Customize your theme here. --></style>
</resources>
themes.xml
详细项目正在发布到开源社区ing
Android开发实战---一个汽车销售APP,有汽车列表页、汽车详情页、贷款计算页3个界面。相关推荐
- android记账app开发全过程,android开发实战-记账本APP(一)
记账本开发流程: 对于一个记账本的初步开发而言,我实现的功能有: ①实现一个记账本的页面 ②可以添加数据并更新到页面中 ③可以将数据信息以图表的形式展现 (一)首先,制作一个记账本的页面. ①在系统自 ...
- Xamarin Android开发实战(上册)
Xamarin Android开发实战(上册)大学霸内部资料 试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamarin ...
- 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...
- 《Java和Android开发实战详解》——1.2节Java基础知识
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 《Java和Android开发实战详解》——2.2节构建Java应用程序
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...
- android垃圾清理动画,[Android开发实战]金山清理大师(猎豹清理大师)一键加速快捷方式动画实现...
转载请注明出处:http://blog.csdn.net/ruils/article/details/16922557 最近有人问我金山清理大师桌面上的一键加速的动画是如何实现的,我下了个金山清理大师 ...
- Android开发日志打卡APP(二)
Android开发日志打卡APP(二) 文章目录 Android开发日志打卡APP(二) 前言 开发过程 一.背景和标题 二.日志图标 三.日志弹框 前言 在之前的文章中,准备工作已经完成,现在我们将 ...
- Android开发日志打卡APP(一)
Android开发日志打卡APP(一) 文章目录 Android开发日志打卡APP(一) 简介 界面展示 内容总结 1.控件 2.布局 3.技术 开发过程 准备工作 启动页面 底部导航栏 简介 初 ...
- android开发 实现动态获得app的cpu占有率并导出文件的两种方法。
android开发 实现动态获得app的cpu占有率并导出文件的两种方法. 最近在做学校实验室的项目的时候,师兄要求我对app的性能进行评估,主要是从电量.cpu占有率.python模型的响应时间三者 ...
最新文章
- EBS查询当前LOV SQL
- JedisPool资源池优化
- ps怎么制作流体_PS教程:制作渐变流体效果海报
- (转)RemoteView 设置控件属性
- Session的模拟
- 再次理解javascript中的事件
- 零基础想学大数据?别急!先搞清这一点
- 小型OSPF路由网络的搭建
- matplotlib绘制双坐标轴(双纵轴)
- 你要的摄像头检测来啦
- 大数据数据湖之hudi
- python获取小图在大图中的坐标和相似度
- 【Node.js】node入门全攻略
- 热电偶测温专用芯片介绍
- MapStruct、ignore
- 黑莓安全丑闻:加拿大警方2010年就能随意解密用户信息
- 好悲伤?快去MuseNet上听听Gaga风的肖邦!
- jQuery插件之form
- 【GIS作业报告】上海房价分布三维渔网图
- 二本院校计算机类好找工作吗,二本院校中比较吃香的几个专业,工资待遇很高,受到考生家长追捧...
热门文章
- 搭建嵌入式双系统启动
- 耶鲁大学公开课博弈论(十八-十九)—— 信息集与最优子博弈
- 个人云盘kodexplorer安装
- 光谱特征选择---非信息变量剔除UVE
- GitBlit获取pull和 上传push 代码操作
- 软件测试学习——数据库
- 【IVI】7. Android AutoMotive 与车机之间物理互联原理
- NYOJ 55 懒省事的小明(优先队列)
- 进一步做好全国计算机信息高新技术考试推广工作的实施意见,关于印发《进一步做好全国计算机信息高新技术考试推广工作的实施意...
- 安装python38_RHEL8 安装 python3.6.9(191023更改,加入Python3.8安装)