-
下拉列表怎么添加多个选择_excel下拉选择项怎么自动填表
2021-01-29 10:40:35excel下拉选择项怎么自动填表总结:(1、打开excel文档,在工作区域以外建立项目名称。也就是下接菜单的项目名称。2、点击单元格,在数据工具栏中选择数据有效性下拉列表中打开数据有效性窗口。3、在窗口有效性中选择...excel下拉选择项怎么自动填表
总结:(1、打开excel文档,在工作区域以外建立项目名称。也就是下接菜单的项目名称。2、点击单元格,在数据工具栏中选择数据有效性下拉列表中打开数据有效性窗口。3、在窗口有效性中选择,允许、序列。4、点击来源后面选择按钮。5、拖动选择菜单项目,这里为了方便以后添加项目,可以在选择区域时多增加空白单元格,以便将来添加时可以直接加入下拉列表。6、确定后可以看到,当前单元格右方出现下拉菜单,可以直接点击进行数据填写。7、拖动复制格式到单元列完成所有表格中相关单元格的下拉输入。)
演示信息:电脑品牌:联想笔记本Y470N。操作系统:win7旗舰版
软件信息:Excel2010
图文步骤:
1、打开excel文档,在工作区域以外建立项目名称。也就是下接菜单的项目名称。
2、点击单元格,在数据工具栏中选择数据有效性下拉列表中打开数据有效性窗口。
3、在窗口有效性中选择,允许、序列。
4、点击来源后面选择按钮。
5、拖动选择菜单项目,这里为了方便以后添加项目,可以在选择区域时多增加空白单元格,以便将来添加时可以直接加入下拉列表。
6、确定后可以看到,当前单元格右方出现下拉菜单,可以直接点击进行数据填写。
7、拖动复制格式到单元列完成所有表格中相关单元格的下拉输入。
-
IOS实现简易版的QQ下拉列表
2021-01-20 09:23:49下面我们通过实例代码来一步步看怎么实现, 首先建立了两个模型类, 一个Friend, 一个FriendGroup类. 数据源用的本地的一个plist文件. plist文件中包含了FriendGroup的name,friends数组等属性. Friend.h 示例代码 #... -
关于下拉列表多选取值,数据库的存储读取的问题
2018-05-24 12:05:13这是一个下拉多选框 ``` List<DetectItem> list = (List)request.getAttribute("list"); if(list == null || list.size() ){ ...两个表怎么建立关联查询,把结果存放到一个集合里。) -
Android编写一个登录界面,利用数据库实现记住密码,注册账号,强制下线,以及类似QQ的下拉列表登录功能
2018-11-26 17:29:47首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧! 1.建立一个所有活动的父类,继承自AppcompatAvtivity...首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧!
1.建立一个所有活动的父类,继承自AppcompatAvtivity类,用来实现全局广播,与强制下线功能相关联:
package com.example.pc_ly.dl; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; /** * Created by pc_ly on 2018/10/29. */ public class BaseActivity extends AppCompatActivity {//所有活动继承的一个类,用来实现全局广播, Intent aa=getIntent(); private Focreof receiver; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addAvtivity(this); } protected void onResume(){ super.onResume(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("com.example.office"); receiver=new Focreof(); registerReceiver(receiver,intentFilter); } protected void onPause(){ super.onPause(); if(receiver!=null){ unregisterReceiver(receiver); receiver=null; } } protected void onDestroy(){ super.onDestroy(); ActivityCollector.removeActivity(this);} class Focreof extends BroadcastReceiver{//当广播成功响应时,弹出一个对话框,显示一些信息,并且之后会回到登录的界面 public void onReceive(final Context context, final Intent intent){ ; AlertDialog.Builder builder=new AlertDialog.Builder(context); builder.setTitle("警告"); builder.setMessage("Dear:"+intent.getStringExtra("t")+"! You are forced to be offline. Please try to login again."); builder.setPositiveButton("OK",new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog,int which){ ActivityCollector.finishAll(); Intent intent=new Intent(context,MainActivity.class); context.startActivity(intent); } }); builder.show(); } } }
2.建立一个管理所有活动的类:
package com.example.pc_ly.dl; import android.app.Activity; import java.util.ArrayList; import java.util.List; /** * Created by pc_ly on 2018/10/29. */ public class ActivityCollector {//管理所有活动 public static List<Activity> activities=new ArrayList<>(); public static void addAvtivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAll(){ for(Activity activity:activities){ if(!activity.isFinishing()){ activity.finish(); } } activities.clear(); } }
3.建立一个初始化数据库的类,并创建对应的表
package com.example.pc_ly.dl; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; import java.sql.SQLClientInfoException; /** * Created by pc_ly on 2018/11/20. */ public class DateBaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK="create table userData (" + "id text, " +"password text)";//创建表的语句 private Context mContext; public DateBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){//初始化一个数据库 super(context,name,factory,version); mContext=context; } public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_BOOK);//执行创建表的语句 Toast.makeText(mContext,"Create succeed",Toast.LENGTH_SHORT).show(); } public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ } }
4.先将登录的界面通过代码写出来,这个比较简单,我就直接上代码了
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="18sp" android:text="Account:" /> <EditText android:id="@+id/account" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:drawableRight="@drawable/jiantou"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="18sp" android:text="Password: "/> <EditText android:id="@+id/password" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:inputType="textPassword"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/rember_1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:text="记住密码"/> </LinearLayout> <Button android:id="@+id/button_1" android:layout_width="match_parent" android:layout_height="60sp" android:text="Login"/> <Button android:id="@+id/zhuce_" android:layout_width="match_parent" android:layout_height="60sp" android:text="注册账号"/> </LinearLayout>
效果大致是这个样子:
其中的记住密码的复选框是有checkbox定义的,然后下拉箭头是一张图片,大家可以去网上下载,然后利用Drawableright属性把它添加到账号框里面去,然后这个界面就做好啦。
5.这一步呢就是将登录界面要实现的功能的代码写出来,代码如下:
package com.example.pc_ly.dl; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.preference.Preference; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.ListPopupWindow; import android.view.MotionEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends BaseActivity{ private SharedPreferences pref;//利用sharePREfreences来保存数据 private SharedPreferences.Editor editor;//用来保存密码的 private DateBaseHelper dphelp; private ListPopupWindow listPopupWindow; private EditText accountEdit; private EditText passwordEdit; private Button login; private Button zhuce; private CheckBox rember; private String list[]; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dphelp=new DateBaseHelper(this,"Userss.db",null,1);//数据库的初始化 rember=(CheckBox)findViewById(R.id.rember_1) ;//这个是复选框,用来选择是否选中密码的 login=(Button)findViewById(R.id.button_1); zhuce=(Button)findViewById(R.id.zhuce_);//初始化 //list.add("li"); listPopupWindow=new ListPopupWindow(MainActivity.this); accountEdit=(EditText)findViewById(R.id.account) ; passwordEdit=(EditText)findViewById(R.id.password) ; pref=PreferenceManager.getDefaultSharedPreferences(this); Boolean isrember=pref.getBoolean("rember_pass",false);//初始设置记住密码为false DateBaseHelper database=new DateBaseHelper(this,"Userss.db",null,1); if(isrember){ int username=perf.getInt("username",0)-1; String id=pref.getString("account"+username,""); String pass=pref.getString("password"+username,""); accountEdit.setText(id); passwordEdit.setText(pass);//把保存的账号和密码读取出来 rember.setChecked(true); } zhuce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {//点击注册跳到注册的页面 Intent intent=new Intent(MainActivity.this,Zhuche.class); startActivity(intent); } }); login.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ accountEdit=(EditText)findViewById(R.id.account);//与相应的文本框对应起来 passwordEdit=(EditText)findViewById(R.id.password); String userName=accountEdit.getText().toString();//获取文本框的数据 String passWord=passwordEdit.getText().toString(); if (login(userName,passWord)) { Toast.makeText(MainActivity.this, "登陆成功,欢迎来到新的世界", Toast.LENGTH_SHORT).show();//成功了弹出登陆成功 editor=pref.edit(); if(rember.isChecked()){//复选框是否被选中 int username=pref.getInt("username",0); editor.putBoolean("rember_pass",true);//把记住密码设置为true editor.putString("account"+username,userName); editor.putString("password"+username,passWord);//把密码和账号分别保存到account和password里面 editor.putInt("username",username+1); } else{ editor.clear();//清空editor保存的东西 } editor.apply();//启用editoy String data=userName; Intent intent=new Intent(MainActivity.this,denglv.class); intent.putExtra("ex",data);//把当前登陆成功的账号的数据传递给下一个活动,用来显示是谁登陆成功了 startActivity(intent); } else { Toast.makeText(MainActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();//失败,弹出登陆失败 } }}); accountEdit.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) {//设置监听事件 final int DRAWABLE_LEFT = 0; final int DRAWABLE_TOP = 1; final int DRAWABLE_RIGHT = 2; final int DRAWABLE_BOTTOM = 3; if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getX() >= (accountEdit.getWidth() - accountEdit .getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { //当点击了箭头位置的时候回调用下面的函数,显示出下拉框 accountEdit.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.jiantou), null); showListPopulWindow(); return true; } } return false; } }); } public void showListPopulWindow(){//用来显示下拉框 final String acc[]=new String[pref.getInt("username",0)];//定义一个账号数组,长度为选择记住密码的登录成功的账号个数 final String pas[]=new String[pref.getInt("username",0)];//定义一个密码数组,长度为选择记住密码的登录成功的账号个数 for(int a=0;a<pref.getInt("username",0);a++){ acc[a]=pref.getString("account"+a,"");//初始化账号数组,把已保存的账号放到数组里面去 pas[a]=pref.getString("password"+a,"");//初始化密码数组,把已保存的密码放到数组里面去 } listPopupWindow = new ListPopupWindow(MainActivity.this); listPopupWindow.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, acc));//把账号的数据显示到下拉列表里面去 listPopupWindow.setAnchorView(accountEdit); listPopupWindow.setModal(true); listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置项点击监听 @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { accountEdit.setText(acc[i]);//当选中下拉框的某一个选项的时候,把选择的选项内容展示在EditText上 passwordEdit.setText(pas[i]);//将选中的账号的密码显示出来,显示在面板上, listPopupWindow.dismiss();//如果已经选择了,隐藏起来 } }); listPopupWindow.show(); } public boolean login(String username,String password) {//验证此账号密码是否正确 SQLiteDatabase db = dphelp.getWritableDatabase(); String sql = "select * from userData where id=? and password=?";//将登录时填的账号和密码在数据库里面进行查询,如果存在该数据,则返回true,否则返回false Cursor cursor = db.rawQuery(sql, new String[] {username, password}); if (cursor.moveToFirst()) { cursor.close(); return true; } return false; } }
上面的注释比较详细,就不一一介绍啦
6.将注册的界面通过代码写出来:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:id="@+id/activity_zhuche" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.pc_ly.dl.Zhuche"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="18sp" android:text="Account:" /> <EditText android:id="@+id/account111" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:drawableRight="@drawable/jiantou"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="18sp" android:text="Password: "/> <EditText android:id="@+id/password111" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:inputType="textPassword"/> </LinearLayout> <Button android:id="@+id/button_111" android:layout_width="match_parent" android:layout_height="60sp" android:text="注册"/> </LinearLayout>
7.将注册界面要实现的功能通过代码写出来:
package com.example.pc_ly.dl; import android.content.ContentValues; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Zhuche extends BaseActivity { private DateBaseHelper dphelper; private EditText a,b; private Button an1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zhuche); dphelper=new DateBaseHelper(this,"Userss.db",null,1); an1=(Button)findViewById(R.id.button_111); an1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //dphelper.getWritableDatabase(); a=(EditText)findViewById(R.id.account111); b=(EditText)findViewById(R.id.password111) ; String newname =a.getText().toString(); String password=b.getText().toString(); Log.d("Zhuche","sss"); if (CheckIsDataAlreadyInDBorNot(newname)) { Toast.makeText(Zhuche.this,"该用户名已被注册,注册失败",Toast.LENGTH_SHORT).show(); } else { if (register(newname, password)) { Toast.makeText(Zhuche.this, "恭喜您 注册成功,即将返回登录界面", Toast.LENGTH_SHORT).show(); Intent intent=new Intent(Zhuche.this,MainActivity.class); startActivity(intent); }} } }); } //向数据库插入数据 public boolean register(String username,String password){ SQLiteDatabase db= dphelper.getWritableDatabase(); /*String sql = "insert into userData(name,password) value(?,?)"; Object obj[]={username,password}; db.execSQL(sql,obj);*/ ContentValues values=new ContentValues(); values.put("id",username); values.put("password",password); db.insert("userData",null,values); db.close(); //db.execSQL("insert into userData (name,password) values (?,?)",new String[]{username,password}); return true; } //检验用户名是否已存在 public boolean CheckIsDataAlreadyInDBorNot(String value){ SQLiteDatabase db=dphelper.getWritableDatabase(); String Query = "Select * from userData where id =?"; Cursor cursor = db.rawQuery(Query,new String[] { value }); if (cursor.getCount()>0){ cursor.close(); return true; } cursor.close(); return false; } }
8.登录成功之后,会跳到一个新的界面,界面的布局代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_denglv" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/text_1" android:gravity="center" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24sp" android:text="HI! haha"/> <Button android:id="@+id/button_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="强制下线"/> </LinearLayout>
9.当点击按钮之后,会实现强制下线的功能,代码如下:
package com.example.pc_ly.dl; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class denglv extends BaseActivity{ private DateBaseHelper hp; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { Intent intent=getIntent(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_denglv); Button force=(Button)findViewById(R.id.button_2); textView=(TextView)findViewById(R.id.text_1) ; textView.setText("Hi,"+intent.getStringExtra("ex"));//显示你的名字出来 force.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Intent aa=getIntent(); String data=aa.getStringExtra("ex"); Intent intent=new Intent("com.example.office"); intent.putExtra("t",data); sendBroadcast(intent);//点击按钮会强制退出,并利用intent传递数据 } }); } }
然后代码差不多就是这个样子啦,最后再贴几张效果图:
有啥疑问的欢迎留言哦
邮箱:2321591758@qq.com
其他博客的链接:
欢迎各位访问哦,这次就到这里啦!
-
Android编写一个登录界面,利用数据库实现记住密码,注册账号,强制下线,以及类似QQ的下拉列表登录功能...
2021-01-31 23:25:35首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧!1.建立一个所有活动的父类,继承自AppcompatAvtivity类,...首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧!
1.建立一个所有活动的父类,继承自AppcompatAvtivity类,用来实现全局广播,与强制下线功能相关联:
package com.example.pc_ly.dl;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
/**
* Created by pc_ly on 2018/10/29.
*/
public class BaseActivity extends AppCompatActivity {//所有活动继承的一个类,用来实现全局广播,
Intent aa=getIntent();
private Focreof receiver;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addAvtivity(this);
}
protected void onResume(){
super.onResume();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("com.example.office");
receiver=new Focreof();
registerReceiver(receiver,intentFilter);
}
protected void onPause(){
super.onPause();
if(receiver!=null){
unregisterReceiver(receiver);
receiver=null;
}
}
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);}
class Focreof extends BroadcastReceiver{//当广播成功响应时,弹出一个对话框,显示一些信息,并且之后会回到登录的界面
public void onReceive(final Context context, final Intent intent){
;
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("警告");
builder.setMessage("Dear:"+intent.getStringExtra("t")+"! You are forced to be offline. Please try to login again.");
builder.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
ActivityCollector.finishAll();
Intent intent=new Intent(context,MainActivity.class);
context.startActivity(intent);
}
});
builder.show();
}
}
}
2.建立一个管理所有活动的类:
package com.example.pc_ly.dl;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pc_ly on 2018/10/29.
*/
public class ActivityCollector {//管理所有活动
public static List activities=new ArrayList<>();
public static void addAvtivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
3.建立一个初始化数据库的类,并创建对应的表
package com.example.pc_ly.dl;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import java.sql.SQLClientInfoException;
/**
* Created by pc_ly on 2018/11/20.
*/
public class DateBaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK="create table userData ("
+ "id text, "
+"password text)";//创建表的语句
private Context mContext;
public DateBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){//初始化一个数据库
super(context,name,factory,version);
mContext=context;
}
public void onCreate(SQLiteDatabase db){
db.execSQL(CREATE_BOOK);//执行创建表的语句
Toast.makeText(mContext,"Create succeed",Toast.LENGTH_SHORT).show();
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
}
}
4.先将登录的界面通过代码写出来,这个比较简单,我就直接上代码了
android:orientation="vertical"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="Account:"
/>
android:id="@+id/account"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:drawableRight="@drawable/jiantou"/>
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="Password: "/>
android:id="@+id/password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:inputType="textPassword"/>
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/rember_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="记住密码"/>
android:id="@+id/button_1"
android:layout_width="match_parent"
android:layout_height="60sp"
android:text="Login"/>
android:id="@+id/zhuce_"
android:layout_width="match_parent"
android:layout_height="60sp"
android:text="注册账号"/>
效果大致是这个样子:
其中的记住密码的复选框是有checkbox定义的,然后下拉箭头是一张图片,大家可以去网上下载,然后利用Drawableright属性把它添加到账号框里面去,然后这个界面就做好啦。
5.这一步呢就是将登录界面要实现的功能的代码写出来,代码如下:
package com.example.pc_ly.dl;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ListPopupWindow;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends BaseActivity{
private SharedPreferences pref;//利用sharePREfreences来保存数据
private SharedPreferences.Editor editor;//用来保存密码的
private DateBaseHelper dphelp;
private ListPopupWindow listPopupWindow;
private EditText accountEdit;
private EditText passwordEdit;
private Button login;
private Button zhuce;
private CheckBox rember;
private String list[];
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dphelp=new DateBaseHelper(this,"Userss.db",null,1);//数据库的初始化
rember=(CheckBox)findViewById(R.id.rember_1) ;//这个是复选框,用来选择是否选中密码的
login=(Button)findViewById(R.id.button_1);
zhuce=(Button)findViewById(R.id.zhuce_);//初始化
//list.add("li");
listPopupWindow=new ListPopupWindow(MainActivity.this);
accountEdit=(EditText)findViewById(R.id.account) ;
passwordEdit=(EditText)findViewById(R.id.password) ;
pref=PreferenceManager.getDefaultSharedPreferences(this);
Boolean isrember=pref.getBoolean("rember_pass",false);//初始设置记住密码为false
DateBaseHelper database=new DateBaseHelper(this,"Userss.db",null,1);
if(isrember){
int username=perf.getInt("username",0)-1;
String id=pref.getString("account"+username,"");
String pass=pref.getString("password"+username,"");
accountEdit.setText(id);
passwordEdit.setText(pass);//把保存的账号和密码读取出来
rember.setChecked(true);
}
zhuce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//点击注册跳到注册的页面
Intent intent=new Intent(MainActivity.this,Zhuche.class);
startActivity(intent);
}
});
login.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
accountEdit=(EditText)findViewById(R.id.account);//与相应的文本框对应起来
passwordEdit=(EditText)findViewById(R.id.password);
String userName=accountEdit.getText().toString();//获取文本框的数据
String passWord=passwordEdit.getText().toString();
if (login(userName,passWord)) {
Toast.makeText(MainActivity.this, "登陆成功,欢迎来到新的世界", Toast.LENGTH_SHORT).show();//成功了弹出登陆成功
editor=pref.edit();
if(rember.isChecked()){//复选框是否被选中
int username=pref.getInt("username",0);
editor.putBoolean("rember_pass",true);//把记住密码设置为true
editor.putString("account"+username,userName);
editor.putString("password"+username,passWord);//把密码和账号分别保存到account和password里面
editor.putInt("username",username+1);
}
else{
editor.clear();//清空editor保存的东西
}
editor.apply();//启用editoy
String data=userName;
Intent intent=new Intent(MainActivity.this,denglv.class);
intent.putExtra("ex",data);//把当前登陆成功的账号的数据传递给下一个活动,用来显示是谁登陆成功了
startActivity(intent);
}
else {
Toast.makeText(MainActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();//失败,弹出登陆失败
}
}});
accountEdit.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {//设置监听事件
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getX() >= (accountEdit.getWidth() - accountEdit
.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
//当点击了箭头位置的时候回调用下面的函数,显示出下拉框
accountEdit.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.jiantou), null);
showListPopulWindow();
return true;
}
}
return false;
}
});
}
public void showListPopulWindow(){//用来显示下拉框
final String acc[]=new String[pref.getInt("username",0)];//定义一个账号数组,长度为选择记住密码的登录成功的账号个数
final String pas[]=new String[pref.getInt("username",0)];//定义一个密码数组,长度为选择记住密码的登录成功的账号个数
for(int a=0;a
acc[a]=pref.getString("account"+a,"");//初始化账号数组,把已保存的账号放到数组里面去
pas[a]=pref.getString("password"+a,"");//初始化密码数组,把已保存的密码放到数组里面去
}
listPopupWindow = new ListPopupWindow(MainActivity.this);
listPopupWindow.setAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_1, acc));//把账号的数据显示到下拉列表里面去
listPopupWindow.setAnchorView(accountEdit);
listPopupWindow.setModal(true);
listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置项点击监听
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
accountEdit.setText(acc[i]);//当选中下拉框的某一个选项的时候,把选择的选项内容展示在EditText上
passwordEdit.setText(pas[i]);//将选中的账号的密码显示出来,显示在面板上,
listPopupWindow.dismiss();//如果已经选择了,隐藏起来
}
});
listPopupWindow.show();
}
public boolean login(String username,String password) {//验证此账号密码是否正确
SQLiteDatabase db = dphelp.getWritableDatabase();
String sql = "select * from userData where id=? and password=?";//将登录时填的账号和密码在数据库里面进行查询,如果存在该数据,则返回true,否则返回false
Cursor cursor = db.rawQuery(sql, new String[] {username, password});
if (cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
}
上面的注释比较详细,就不一一介绍啦
6.将注册的界面通过代码写出来:
android:orientation="vertical"
android:id="@+id/activity_zhuche"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.pc_ly.dl.Zhuche">
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="Account:"
/>
android:id="@+id/account111"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:drawableRight="@drawable/jiantou"/>
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="Password: "/>
android:id="@+id/password111"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:inputType="textPassword"/>
android:id="@+id/button_111"
android:layout_width="match_parent"
android:layout_height="60sp"
android:text="注册"/>
7.将注册界面要实现的功能通过代码写出来:
package com.example.pc_ly.dl;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Zhuche extends BaseActivity {
private DateBaseHelper dphelper;
private EditText a,b;
private Button an1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhuche);
dphelper=new DateBaseHelper(this,"Userss.db",null,1);
an1=(Button)findViewById(R.id.button_111);
an1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//dphelper.getWritableDatabase();
a=(EditText)findViewById(R.id.account111);
b=(EditText)findViewById(R.id.password111) ;
String newname =a.getText().toString();
String password=b.getText().toString();
Log.d("Zhuche","sss");
if (CheckIsDataAlreadyInDBorNot(newname)) {
Toast.makeText(Zhuche.this,"该用户名已被注册,注册失败",Toast.LENGTH_SHORT).show();
}
else {
if (register(newname, password)) {
Toast.makeText(Zhuche.this, "恭喜您 注册成功,即将返回登录界面", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Zhuche.this,MainActivity.class);
startActivity(intent);
}}
}
});
}
//向数据库插入数据
public boolean register(String username,String password){
SQLiteDatabase db= dphelper.getWritableDatabase();
/*String sql = "insert into userData(name,password) value(?,?)";
Object obj[]={username,password};
db.execSQL(sql,obj);*/
ContentValues values=new ContentValues();
values.put("id",username);
values.put("password",password);
db.insert("userData",null,values);
db.close();
//db.execSQL("insert into userData (name,password) values (?,?)",new String[]{username,password});
return true;
}
//检验用户名是否已存在
public boolean CheckIsDataAlreadyInDBorNot(String value){
SQLiteDatabase db=dphelper.getWritableDatabase();
String Query = "Select * from userData where id =?";
Cursor cursor = db.rawQuery(Query,new String[] { value });
if (cursor.getCount()>0){
cursor.close();
return true;
}
cursor.close();
return false;
}
}
8.登录成功之后,会跳到一个新的界面,界面的布局代码如下:
http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/activity_denglv"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:id="@+id/text_1"
android:gravity="center"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="HI! haha"/>
android:id="@+id/button_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="强制下线"/>
9.当点击按钮之后,会实现强制下线的功能,代码如下:
package com.example.pc_ly.dl;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class denglv extends BaseActivity{
private DateBaseHelper hp;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent=getIntent();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_denglv);
Button force=(Button)findViewById(R.id.button_2);
textView=(TextView)findViewById(R.id.text_1) ;
textView.setText("Hi,"+intent.getStringExtra("ex"));//显示你的名字出来
force.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent aa=getIntent();
String data=aa.getStringExtra("ex");
Intent intent=new Intent("com.example.office");
intent.putExtra("t",data);
sendBroadcast(intent);//点击按钮会强制退出,并利用intent传递数据
}
});
}
}
然后代码差不多就是这个样子啦,最后再贴几张效果图:
有啥疑问的欢迎留言哦
其他博客的链接:
欢迎各位访问哦,这次就到这里啦!
-
pb 怎么使用日期控件_EXCEL日期数据录入技巧,使用日期下拉菜单或使用漂亮的控件...
2020-12-21 23:21:41在EXCEL的数据录入当中,有大量的日期输入的时候,单靠手工输入,有时也比较麻烦。有没有一个时间的选择,让日期...利用数据的有效性来建立日期的选择首先建立一个日期列表,供输入数据选择的需要,如下表建立一个需...在EXCEL的数据录入当中,有大量的日期输入的时候,单靠手工输入,有时也比较麻烦。有没有一个时间的选择,让日期的数据录入工作变得简单。使用VBA可以达到这一目的,但是对于像我这样没有VBA基础的,也还是比较麻烦的。下面介绍一个使用控件的方法达到这一个目的。不需要VBA的知识。下面,介绍下日期选择的两种方法。
利用数据的有效性来建立日期的选择
首先建立一个日期列表,供输入数据选择的需要,如下表建立一个需要输入日期的选择列表。
完成后选择需要录入日期的单元格,点击菜单上的"数据"选项卡中的"数据工具",点击"数据验证"
+
在"数据验证"中的允许选择"序列",来源选择建立日期列表中的日期数据列表范围
完成后,在日期输入的列表中就会形成一个日期选择的下拉列表。供日期数据录入时的日期下拉菜单的选择。
利用漂亮的日期控件来输入日期
下面介绍实用控件来进行日期的录入,使用Excel Date Picker插件(samradapps_datepicker.xlam),可以到网上搜索下载
把下载和解压缩后得到的.xlam文件,放到下面的文件夹。这个文件夹的位置略有不同,主要根据各自的用户文件夹而定。:
C:甥敳獲duanzAppDataRoamingMicrosoftAddIns
文件拷贝后,打开Excel,选择 【 文件 -> 选项-> 加载项 】,点击页面下方的"转到",打开加载宏窗口
在"加载宏"的界面中,点击"浏览",选择刚才拷贝的文件,点击确定,完成相关日期插件的加载。
这时我们进行日期数据录入的时候,可以点击后面的小图标,展开日历的相关选项进行日期的选择录入。让日期的数据录入变得便捷。
-
学习遇bug(2)——input下拉搜索框的实现
2019-11-05 20:13:46input下拉搜索框的实现 ...说一下,大佬的做法大概是确定一个input框的位置以后,在input下方建立一个列表。 这个列表是可以自定义样式的(等等你就知道为什么这么说了)。接着js监听器和jqery的方法,加上模... -
element下拉二级多选联动_Excel indirect 函数(2) – 制作多级联动菜单(文末彩蛋)...
2021-01-12 13:35:10今天介绍 indirect 函数的第二种经典应用:制作多级联动下拉菜单。我用的版本是 Excel 2016,其他版本的界面可能略有不同。...依次类推,建立八个队的列表3. 按基本步骤制作队名下拉菜单,具体步骤不赘述,基础... -
使用HTML制作网页[共51页]_怎么制作网页教程
2020-12-05 13:18:38表单的执行原理 Internet 1 2 客户端请求登录通过表单填写账户信息 服务器端验证发来的账号信息然后给出反馈 ...复选框(checkbox) 下拉列表(select) 重置按钮 (reset) 提交按钮(submit) 密码框(password) 常见的表单元 -
android 列表2级联动_Ajax是个好东西!2级联动,轻松搞得定
2021-01-18 04:51:55今日份,“用Ajax实现”【二级联动】;需求说明;...点击零食,弹出坚果,...前台定义两个【下拉菜单】,一级下拉菜单(定义好要分的类别),这里我们就定义,服装,水果,零食。然后在去数据库中建立存储这些数据的表,... -
js怎么定义combobox_Ext Js之ComboBox详解(第二部分)-------译
2020-12-20 03:04:47这就使他在下拉列表中的的数据被限定在数据仓库当中(data store)。在其带来丰富的优点的同时,也带来了许许多多的易发错误的来源。在本部分我会试着阐明一个带有store配置项的combobox。一:明确的建立一个Store对象... -
C#Socket通讯模仿网络聊天
2020-11-22 11:40:35下一步就要根据我们的IP地址去找Socket,能实现这种方法的是键值对集合,用键值对集合去存下拉列表里面的IP。 //将远程连接的客户端的IP地址和Socket存入键值对集合中 Dictionary<string, Soc -
电脑高手必备 Windows系统35招实用技巧
2009-06-11 14:42:10”列表框中选择声音事件,然后从“声音”下拉列表中选择需要的声音文件 作为声音提示。 (3)用户如果对系统提供的声音文件不满意,可以单击“浏览”按钮,弹 出浏览声音对话框。在该对话框中选定声音文件,并... -
ExtAspNet_v2.3.2_dll
2010-09-29 14:37:08-修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页... -
editplus 代码编辑器html c++ jsp css
2009-08-08 13:00:27如果你使用 EditPlus 进行文本编辑,那么每次创建文本文件,编辑后保存时,尽管文件类型下拉列表中显示的是文本文件, EditPlus 还是询问你是否添加".txt"后缀,是不是很烦? 解决方法: ① 在程序目录建立一个空的... -
脉动论坛Ⅲ.rar
2019-08-30 05:54:483. 个人相册,会员可以在个人相册里建立自己的像簿,上传个人像片,并自选是否与他人分享。 4. 带个股上市的股票系统(含全部的前台管理和设置)。 5. 可以记录所有事件的银行系统和服务中心。 6. 仿央视“开心辞典... -
ExtAspNet v2.2.1 (2009-4-1) 值得一看
2010-04-01 09:41:27-重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和... -
asp.net知识库
2015-06-18 08:45:45使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的... -
excel的使用
2012-11-25 17:06:01先在一单元格内填入“*”或“~”等符号,然后单击此单元格,向右拖动鼠标,选中横向若干单元格,单击“格式”菜单,选中“单元格”命令,在弹出的“单元格格式”菜单中,选择“对齐”选项卡,在水平对齐下拉列表中... -
qt 运行出来的框图有残缺
2019-11-14 04:24:12//get_min是一个函数,看它具体怎么实现的,应该是循环遍历了current_date_time,找到最小???? int minDiff = get_min(current_date_time); // 获得是最小的查值 // 完成命令,把距离最新一次全部修改的... -
首页下拉刷新:better-scroll 搜索:搜索用户与动态、使用localStorage保存历史搜索记录 安装 分别两个文件目录下安装依赖npm install,在server文件夹下node app.js,在blogPhone下npm run dev,然后打开...
-
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08建立好后工程文件列表如下图。 2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。 3.选择Dialog without Buttons。 4.类名设为myDlg。 5.点击Finish 完成。注意这里已经默认将其加入到了我们刚建的... -
vc++ 应用源码包_1
2012-09-15 14:22:12这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
首页需要的数据是热门商品的信息,商品信息需要建立一个Bean对象,存储内容是商品的id、商品名称、商品单价、商品类别、商品数量、商品详细信息、商品成色、商品附带的图片地址、热门程度、发表用户的id、留言的...
-
vc++ 应用源码包_2
2012-09-15 14:27:40这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
vc++ 应用源码包_6
2012-09-15 14:59:46这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
vc++ 应用源码包_5
2012-09-15 14:45:16这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
vc++ 应用源码包_4
2012-09-15 14:38:35这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
vc++ 应用源码包_3
2012-09-15 14:33:15这个程序模仿Outlook建立分类列表框。 CClockST_src.zip CClockST_demo.zip 一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的... -
MAPGIS地质制图工具
2013-05-06 16:15:30B、对于属性筛选图元:在筛选图元对话框中①列表框中选择图元类型——当前点/线/区文件,再点确定;弹出表达式输入对话框②然后在字段名称下面选中一个属性字段作为筛选属性;③接着点击操作符区的运算符按钮,并且...
-
apache-jmeter-3.1.7z
-
问题 A: a+b
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
项目经理成长之路
-
MySQL 多实例安装 及配置主从复制实验环境
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
Hbase数据迁移方案
-
凡客诚品 微博营销实践暨品牌创新.ppt
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
动车组轴温检测系统仿真设计.zip
-
NFS 网络文件系统
-
手写js模板编译器
-
梯度下降算法的复杂度
-
libFuzzer视频教程
-
基于Qt的LibVLC开发教程
-
质量保证书-源码
-
中国电信云网融合2030技术白皮书.pdf
-
OC.Gen-X.2.9.2.dmg
-
【正点原子】I.MX6U网络环境TFTP&NFS搭建手册V1.2.pdf
-
在 Linux 上构建企业级 DNS 域名解析服务