MpAndroidChart各种图表我都用了一遍,并且已经熟练掌握。总结我的Demo
来源:互联网 发布:ubuntu chrome 下载源 编辑:程序博客网 时间:2024/04/29 15:53
首先从作者那里下载 MpAndroidChart.jar : https://github.com/PhilJay/MPAndroidChart
怎么导入项目我就不罗嗦了 ,来不及解释了,看图看代码
import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.data.BarData;import android.app.Activity;import android.os.Bundle;import android.view.Window;public class MainActivity extends Activity {private BarChart mBarChart,mBarChart2,mBarChart3,mBarChart4,mBarChart5,mBarChart6,mBarChart7,mBarChart8,mBarChart9; private BarData mBarData; private BarCharts mBarCharts;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);mBarCharts = new BarCharts();// 创建多张图表mBarChart = (BarChart) findViewById(R.id.spreadBarChart);mBarChart2 = (BarChart) findViewById(R.id.spreadBarChart2);mBarChart3 = (BarChart) findViewById(R.id.spreadBarChart3);mBarChart4 = (BarChart) findViewById(R.id.spreadBarChart4);mBarChart5 = (BarChart) findViewById(R.id.spreadBarChart5);mBarChart6 = (BarChart) findViewById(R.id.spreadBarChart6);mBarChart7 = (BarChart) findViewById(R.id.spreadBarChart7);mBarChart8 = (BarChart) findViewById(R.id.spreadBarChart8);mBarChart9 = (BarChart) findViewById(R.id.spreadBarChart9); mBarData = mBarCharts.getBarData(14, 500); mBarCharts.showBarChart(mBarChart, mBarData); mBarData = mBarCharts.getBarData(14, 900); mBarCharts.showBarChart(mBarChart2, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart3, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart4, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart5, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart6, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart7, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart8, mBarData); mBarData = mBarCharts.getBarData(14, 100); mBarCharts.showBarChart(mBarChart9, mBarData);}}
然后再设置图表属性:
package com.mpadnroidchart.barchartdemo;import java.util.ArrayList;import android.graphics.Color;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.components.Legend.LegendForm;import com.github.mikephil.charting.components.XAxis;import com.github.mikephil.charting.components.XAxis.XAxisPosition;import com.github.mikephil.charting.data.BarData;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;/** * @author 正月 | ZhouDaDo */public class BarCharts {private String[] color = {"#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD"};public void showBarChart(BarChart barChart, BarData barData) {// 数据描述 barChart.setDescription(""); // 如果没有数据的时候,会显示这个,类似ListView的EmptyView barChart.setNoDataTextDescription("You need to provide data for the chart."); // 是否显示表格颜色 barChart.setDrawGridBackground(false); // 设置是否可以触摸 barChart.setTouchEnabled(true); // 是否可以拖拽 barChart.setDragEnabled(false); // 是否可以缩放 barChart.setScaleEnabled(false); // 集双指缩放 barChart.setPinchZoom(false); // 设置背景 barChart.setBackgroundColor(Color.parseColor("#01000000")); // 如果打开,背景矩形将出现在已经画好的绘图区域的后边。 barChart.setDrawGridBackground(false); // 集拉杆阴影 barChart.setDrawBarShadow(false); // 图例 barChart.getLegend().setEnabled(false); // 设置数据 barChart.setData(barData); // 隐藏右边的坐标轴 (就是右边的0 - 100 - 200 - 300 ... 和图表中横线) barChart.getAxisRight().setEnabled(false); // 隐藏左边的左边轴 (同上)// barChart.getAxisLeft().setEnabled(false); // 网格背景颜色 barChart.setGridBackgroundColor(Color.parseColor("#00000000")); // 是否显示表格颜色 barChart.setDrawGridBackground(false); // 设置边框颜色 barChart.setBorderColor(Color.parseColor("#00000000")); // 说明颜色 barChart.setDescriptionColor(Color.parseColor("#00000000")); // 拉杆阴影 barChart.setDrawBarShadow(false); // 打开或关闭绘制的图表边框。(环绕图表的线) barChart.setDrawBorders(false); Legend mLegend = barChart.getLegend(); // 设置比例图标示 // 设置窗体样式 mLegend.setForm(LegendForm.CIRCLE); // 字体 mLegend.setFormSize(4f); // 字体颜色 mLegend.setTextColor(Color.parseColor("#00000000")); XAxis xAxis = barChart.getXAxis();xAxis.setPosition(XAxisPosition.BOTTOM);xAxis.setDrawGridLines(false);xAxis.setSpaceBetweenLabels(2); barChart.animateY(1000); // 立即执行的动画,Y轴 } public BarData getBarData(int count, float range) { ArrayList<String> xValues = new ArrayList<String>(); for (int i = 0; i < count; i++) { xValues.add(""+(i+1)+"周");// 设置每个壮图的文字描述 } ArrayList<BarEntry> yValues = new ArrayList<BarEntry>(); for (int i = 0; i < count; i++) { float value = (float) (Math.random() * range/*100以内的随机数*/) + 3; yValues.add(new BarEntry(value, i)); } // y轴的数据集合 BarDataSet barDataSet = new BarDataSet(yValues, "测试饼状图"); ArrayList<Integer> colors = new ArrayList<Integer>(); for(int i = 0;i < count ;i++){ colors.add(Color.parseColor(color[i])); } barDataSet.setColors(colors); // 设置栏阴影颜色 barDataSet.setBarShadowColor(Color.parseColor("#01000000")); ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>(); barDataSets.add(barDataSet); barDataSet.setValueTextColor(Color.parseColor("#FF8F9D")); // 绘制值 barDataSet.setDrawValues(true); BarData barData = new BarData(xValues, barDataSets); return barData; }}
点击下载柱状图Demo
有的小伙伴觉得柱状图不过瘾,需要多个柱状图在一起来表示一种信息 : 像这样的
来不及解释了,上代码 。
package com.barchart.barchart3sdemo;import android.app.Activity;import android.os.Bundle;import android.view.Window;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.data.BarData;public class MainActivity extends Activity {private BarChart3s mBarChart3s;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);BarChart chart = (BarChart) findViewById(R.id.chart);mBarChart3s = new BarChart3s(chart); BarData data = new BarData(mBarChart3s.getXAxisValues(), mBarChart3s.getDataSet()); // 设置数据 chart.setData(data); }}
package com.barchart.barchart3sdemo;import java.util.ArrayList;import android.graphics.Color;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.components.Legend.LegendForm;import com.github.mikephil.charting.components.XAxis;import com.github.mikephil.charting.components.XAxis.XAxisPosition;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;public class BarChart3s {public BarChart3s(BarChart chart) {// 数据描述 chart.setDescription(""); // 动画 chart.animateY(1000); // 设置是否可以触摸 chart.setTouchEnabled(true); // 是否可以拖拽 chart.setDragEnabled(false); // 是否可以缩放 chart.setScaleEnabled(false); // 集双指缩放 chart.setPinchZoom(false); // 隐藏右边的坐标轴 chart.getAxisRight().setEnabled(false); // 隐藏左边的左边轴 chart.getAxisLeft().setEnabled(false); Legend mLegend = chart.getLegend(); // 设置比例图标示 // 设置窗体样式 mLegend.setForm(LegendForm.SQUARE); // 字体 mLegend.setFormSize(4f); // 字体颜色 mLegend.setTextColor(Color.parseColor("#7e7e7e")); XAxis xAxis = chart.getXAxis();xAxis.setPosition(XAxisPosition.BOTTOM);xAxis.setDrawGridLines(false);xAxis.setSpaceBetweenLabels(2); chart.invalidate();}public ArrayList<BarDataSet> getDataSet() { ArrayList<BarDataSet> dataSets = null; ArrayList<BarEntry> valueSet1 = new ArrayList<BarEntry>(); BarEntry v1e1 = new BarEntry(110.000f, 0); // Jan valueSet1.add(v1e1); BarEntry v1e2 = new BarEntry(40.000f, 1); // Feb valueSet1.add(v1e2); BarEntry v1e3 = new BarEntry(60.000f, 2); // Mar valueSet1.add(v1e3); BarEntry v1e4 = new BarEntry(30.000f, 3); // Apr valueSet1.add(v1e4); BarEntry v1e5 = new BarEntry(90.000f, 4); // May valueSet1.add(v1e5); BarEntry v1e6 = new BarEntry(100.000f, 5); // Jun valueSet1.add(v1e6); ArrayList<BarEntry> valueSet2 = new ArrayList<BarEntry>(); BarEntry v2e1 = new BarEntry(150.000f, 0); // Jan valueSet2.add(v2e1); BarEntry v2e2 = new BarEntry(90.000f, 1); // Feb valueSet2.add(v2e2); BarEntry v2e3 = new BarEntry(120.000f, 2); // Mar valueSet2.add(v2e3); BarEntry v2e4 = new BarEntry(60.000f, 3); // Apr valueSet2.add(v2e4); BarEntry v2e5 = new BarEntry(20.000f, 4); // May valueSet2.add(v2e5); BarEntry v2e6 = new BarEntry(80.000f, 5); // Jun valueSet2.add(v2e6); ArrayList<BarEntry> valueSet3 = new ArrayList<BarEntry>(); BarEntry v3e1 = new BarEntry(20.000f, 0); // Jan valueSet3.add(v3e1); BarEntry v3e2 = new BarEntry(60.000f, 1); // Feb valueSet3.add(v3e2); BarEntry v3e3 = new BarEntry(90.000f, 2); // Mar valueSet3.add(v3e3); BarEntry v3e4 = new BarEntry(150.000f, 3); // Apr valueSet3.add(v3e4); BarEntry v3e5 = new BarEntry(120.000f, 4); // May valueSet3.add(v3e5); BarEntry v3e6 = new BarEntry(40.000f, 5); // Jun valueSet3.add(v3e6); BarDataSet barDataSet1 = new BarDataSet(valueSet1, "数据1注解"); barDataSet1.setColor(Color.parseColor("#F26077")); barDataSet1.setBarShadowColor(Color.parseColor("#01000000")); BarDataSet barDataSet2 = new BarDataSet(valueSet2, "数据2注解"); barDataSet2.setColor(Color.parseColor("#00C0BF")); barDataSet2.setBarShadowColor(Color.parseColor("#01000000")); BarDataSet barDataSet3 = new BarDataSet(valueSet3, "数据3注解"); barDataSet3.setColor(Color.parseColor("#DEAD26")); barDataSet3.setBarShadowColor(Color.parseColor("#01000000")); dataSets = new ArrayList<BarDataSet>(); dataSets.add(barDataSet1); dataSets.add(barDataSet2); dataSets.add(barDataSet3); return dataSets; } public ArrayList<String> getXAxisValues() { ArrayList<String> xAxis = new ArrayList<String>(); xAxis.add("星期一"); xAxis.add("星期二"); xAxis.add("星期三"); xAxis.add("星期四"); xAxis.add("星期五"); xAxis.add("星期六"); return xAxis; }}
点击下载BarChart3sDemo
但是我们有时需求希望可以在柱状图上再来个折线图。或者来一条线代表柱状图的平均值。 像这样
来不及解释了,看代码:
package com.mpchart.barchartcombined;import java.util.ArrayList;import java.util.List;import java.util.Map;import android.graphics.Color;import com.github.mikephil.charting.charts.CombinedChart;import com.github.mikephil.charting.charts.CombinedChart.DrawOrder;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.components.Legend.LegendForm;import com.github.mikephil.charting.components.XAxis;import com.github.mikephil.charting.components.XAxis.XAxisPosition;import com.github.mikephil.charting.components.YAxis;import com.github.mikephil.charting.data.BarData;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;import com.github.mikephil.charting.data.BubbleData;import com.github.mikephil.charting.data.BubbleDataSet;import com.github.mikephil.charting.data.BubbleEntry;import com.github.mikephil.charting.data.CandleData;import com.github.mikephil.charting.data.CandleDataSet;import com.github.mikephil.charting.data.CandleEntry;import com.github.mikephil.charting.data.CombinedData;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.LineData;import com.github.mikephil.charting.data.LineDataSet;import com.github.mikephil.charting.data.ScatterData;import com.github.mikephil.charting.data.ScatterDataSet;import com.github.mikephil.charting.utils.ColorTemplate;public class BarChartCombined {private final int itemcount = 12;protected String[] mMonths = new String[] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"};protected String[] colors = {"#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD","#C4FF8E","#FFF88D","#FFD38C","#8CEBFF","#FF8F9D","#6BF3AD"};// 设置图表样式public BarChartCombined(CombinedChart mChart) {mChart.setDescription(""); mChart.setDrawGridBackground(false); mChart.setDrawBarShadow(false); // 设置是否可以触摸 mChart.setTouchEnabled(true); // 是否可以拖拽 mChart.setDragEnabled(false); // 是否可以缩放 mChart.setScaleEnabled(false); // 集双指缩放 mChart.setPinchZoom(false); // 下面的图例图例 mChart.getLegend().setEnabled(false); // 设置背景透明 mChart.setBackgroundColor(Color.parseColor("#00000000")); // draw bars behind lines mChart.setDrawOrder(new DrawOrder[] {DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.CANDLE, DrawOrder.LINE, DrawOrder.SCATTER}); // 下面标记解释设置 Legend mLegend = mChart.getLegend(); // 设置比例图标示 // 设置窗体样式 mLegend.setForm(LegendForm.CIRCLE); // 字体 mLegend.setFormSize(4f); // 字体颜色 mLegend.setTextColor(Color.parseColor("#000000")); /*YAxis rightAxis = mChart.getAxisRight(); rightAxis.setDrawGridLines(false);*/ /*YAxis leftAxis = mChart.getAxisLeft(); leftAxis.setDrawGridLines(false);*/ XAxis xAxis = mChart.getXAxis(); xAxis.setPosition(XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); xAxis.setSpaceBetweenLabels(2); CombinedData data = new CombinedData(mMonths); data.setData(generateLineData()); data.setData(generateBarData());//data.setData(generateBubbleData());//data.setData(generateScatterData());//data.setData(generateCandleData()); // 隐藏右边的坐标轴 mChart.getAxisRight().setEnabled(false); // 隐藏左边的左边轴 mChart.getAxisLeft().setEnabled(false); mChart.setData(data); // 立即执行的动画,Y轴 mChart.animateY(1000); // 刷新图表// mChart.invalidate();}// 柱状图上面的折线图public LineData generateLineData() { LineData d = new LineData(); ArrayList<Entry> entries1 = new ArrayList<Entry>(); for (int index = 0; index < itemcount; index++) entries1.add(new Entry(45, index)); LineDataSet set1 = new LineDataSet(entries1, "50对比线"); // 设置颜色 set1.setColor(Color.parseColor("#00A918")); // 线宽 set1.setLineWidth(1.0f); // 圈颜色 set1.setCircleColor(Color.parseColor("#00A918")); // 圆的大小 set1.setCircleSize(0f); // 填充颜色 set1.setFillColor(Color.parseColor("#00A918")); // 绘制立方 set1.setDrawCubic(true); // 绘制数据 set1.setDrawValues(true); // 字体大小 set1.setValueTextSize(10f); // 字体颜色 set1.setValueTextColor(Color.parseColor("#00000000")); // 轴依赖 set1.setAxisDependency(YAxis.AxisDependency.LEFT); ArrayList<Entry> entries2 = new ArrayList<Entry>(); for (int index = 0; index < itemcount; index++) entries2.add(new Entry(30, index)); LineDataSet set2 = new LineDataSet(entries2, "50对比线"); // 设置颜色 set2.setColor(Color.parseColor("#A12200")); // 线宽 set2.setLineWidth(1.0f); // 圈颜色 set2.setCircleColor(Color.parseColor("#A12200")); // 圆的大小 set2.setCircleSize(0f); // 填充颜色 set2.setFillColor(Color.parseColor("#A12200")); // 绘制立方 set2.setDrawCubic(true); // 绘制数据 set2.setDrawValues(true); // 字体大小 set2.setValueTextSize(10f); // 字体颜色 set2.setValueTextColor(Color.parseColor("#00000000")); // 轴依赖 set2.setAxisDependency(YAxis.AxisDependency.LEFT); d.addDataSet(set1); d.addDataSet(set2); return d; }public BarData generateBarData() { BarData d = new BarData(); ArrayList<BarEntry> entries = new ArrayList<BarEntry>(); for (int index = 0; index < itemcount; index++) entries.add(new BarEntry(getRandom(100, 3), index)); BarDataSet set = new BarDataSet(entries, "Bar DataSet"); // 设置颜色 List<Integer> colorlist = new ArrayList<Integer>(); for(int i=0;i < itemcount;i++){ colorlist.add(Color.parseColor(colors[i])); } set.setColors(colorlist); // 字体颜色 set.setValueTextColor(Color.parseColor("#FF8F9D")); // 字体大小 set.setValueTextSize(10f); d.addDataSet(set); set.setAxisDependency(YAxis.AxisDependency.LEFT); return d; }public ScatterData generateScatterData() { ScatterData d = new ScatterData(); ArrayList<Entry> entries = new ArrayList<Entry>(); for (int index = 0; index < itemcount; index++) entries.add(new Entry(getRandom(20, 15), index)); ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet"); set.setColor(Color.GREEN); set.setScatterShapeSize(7.5f); set.setDrawValues(false); set.setValueTextSize(10f); d.addDataSet(set); return d; }public CandleData generateCandleData() { CandleData d = new CandleData(); ArrayList<CandleEntry> entries = new ArrayList<CandleEntry>(); for (int index = 0; index < itemcount; index++) entries.add(new CandleEntry(index, 20f, 10f, 13f, 17f)); CandleDataSet set = new CandleDataSet(entries, "Candle DataSet"); set.setColor(Color.rgb(80, 80, 80)); set.setBodySpace(0.3f); set.setValueTextSize(10f); set.setDrawValues(false); d.addDataSet(set); return d; } public BubbleData generateBubbleData() { BubbleData bd = new BubbleData(); ArrayList<BubbleEntry> entries = new ArrayList<BubbleEntry>(); for (int index = 0; index < itemcount; index++) { float rnd = getRandom(20, 30); entries.add(new BubbleEntry(index, rnd, rnd)); } BubbleDataSet set = new BubbleDataSet(entries, "Bubble DataSet"); set.setColors(ColorTemplate.VORDIPLOM_COLORS); set.setValueTextSize(10f); set.setValueTextColor(Color.WHITE); set.setHighlightCircleWidth(1.5f); set.setDrawValues(true); bd.addDataSet(set); return bd; } private float getRandom(float range, float startsfrom) { return (float) (Math.random() * range) + startsfrom; }}
点击下载BarChartCombined
好了,今天写柱状图。等会写饼图和折线图!
1 1
- MpAndroidChart各种图表我都用了一遍,并且已经熟练掌握。总结我的Demo
- MpAndroidChart各种图表我都用了一遍,并且已经熟练掌握。总结我的Demo
- 我都已经做出这么大的让步了
- 我现在对这些各种游戏都失望了为了游戏已经很累了
- Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路
- Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路
- Ajax的各种问题----我相信各种问题我都遇上了,并附解决之道
- 目前已经基本学会了,倒滑并且能够比较熟练的导脚
- 我已经落伍了Expression Web 都SP2了
- 从昨天到今天,我把肮脏的代码重构了一遍
- 看了一遍ActionSoft BPM platform的Online Demo
- 我宁可再来一遍。
- 为什么我一遍看不懂?
- 有关RetroForth的资料我都已经搬到http://forth.3322.org/去了。
- 与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!
- (转)2007北京高考作文题目(太有才了.我都看了无数遍了)
- 这个问题我已经纠结很久了:我的服务器和数据库都很不错,为什么网站运行这么慢?
- 我已经变好了
- RQNOJ21--FBI树(树形结构)
- Windows下MySQL 5.6.27.0.安装及配置
- 2.7 特征分解
- 四、读取视频
- Android屏幕适配全攻略(最权威的官方适配指导)
- MpAndroidChart各种图表我都用了一遍,并且已经熟练掌握。总结我的Demo
- 拍照,系统选择照片
- Android MessageQueue 源码笔记
- Reverse Linked List
- 解析P2P金融的业务安全
- CentOS7下yum安装SAMBA全命令过程
- SqlServer死锁与阻塞检测脚本
- 近期关于YALMIP的一些知识
- Smarty赋值对象方法,配置简化封装类