【Sprint3冲刺之前】日历表的事件处理和管理(刘铸辉)
我的Sprint2冲刺——日历表的事件处理和管理(刘铸辉,刘静)
我的Sprint2冲刺计划领到的任务是和静姐结对编程,完成日历表的事件处理和管理,下面详细讲解下技术细节。
1.设计结构图
首先要画出整个UI设计图,方便理解这个日历布局和日历样式的绘制。
这里总共分解为两个 View 文件:
1:calender_main.xml(Calender.java用来绘制日历表和日历表中的事件)
作为启动的主画面,新建项目时,首先生成。
schedule_toptext:用来显示年月日,闰几月,年份和干支
flipper:因为要实现左右滑屏,这里采用的方案是使用 ViewFlipper。我们设计的目标是显示公历 1901 - 2100 年区间的月历,相应的帧画面有 (2100 - 1900) * 12 幅帧画面,如果多创建出来,将占用非常大的内存资源。将由 ViewFlipper 来管理,由它决定某一帧何时创建,何时销毁,以节约内存资源。
2:calender_main.xml(代码在CalenderView.java中)
tvtext:日历gridview中的每一个item显示的textview
2.开始制作 Activity 画面
1.首先绘制整个日历的框架
这里有android指定的类,相关资源都从这里获取http://developer.android.com/guide/topics/providers/calendar-provider.html#intents
public CalendarView(){
Date date = new Date();
sysDate = sdf.format(date); //当期日期
sys_year = sysDate.split("-")[];
sys_month = sysDate.split("-")[];
sys_day = sysDate.split("-")[]; } public CalendarView(Context context,Resources rs,int jumpMonth,int jumpYear,int year_c,int month_c,int day_c){
this();
this.context= context;
specialCalendar = new SpecialCalendar();
lunarCalendar = new LunarCalendar();
this.res = rs; int stepYear = year_c+jumpYear;
int stepMonth = month_c+jumpMonth ;
if(stepMonth > ){
//往下一个月滑动
if(stepMonth% == ){
stepYear = year_c + stepMonth/ -;
stepMonth = ;
}else{
stepYear = year_c + stepMonth/;
stepMonth = stepMonth%;
}
}else{
//往上一个月滑动
stepYear = year_c - + stepMonth/;
stepMonth = stepMonth% + ;
if(stepMonth% == ){ }
} currentYear = String.valueOf(stepYear);; //得到当前的年份
currentMonth = String.valueOf(stepMonth); //得到本月 (jumpMonth为滑动的次数,每滑动一次就增加一月或减一月)
currentDay = String.valueOf(day_c); //得到当前日期是哪天 getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth)); } public CalendarView(Context context,Resources rs,int year, int month, int day){
this();
this.context= context;
specialCalendar = new SpecialCalendar();
lunarCalendar = new LunarCalendar();
this.res = rs;
currentYear = String.valueOf(year); //得到跳转到的年份
currentMonth = String.valueOf(month); //得到跳转到的月份
currentDay = String.valueOf(day); //得到跳转到的天 getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth));
}
CalendarView
2.给每一个gridview添加相应的文字,月份,农历,节日等信息
这里面有一个要注意的是
农历计算:农历计算的算法,来源于:http://sean.o4u.com/ap/calendar/,包名是LunarCalendar,就不贴代码了,我也是参考的这篇文章
//给Gridview添加值
@SuppressLint("ResourceAsColor")
public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.calendar, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.tvtext);
String d = dayNumber[position].split("\\.")[];
String dv = dayNumber[position].split("\\.")[];
Log.i("calendarview", d+","+dv);
SpannableString sp = new SpannableString(d+"\n"+dv); Log.i(Tag, "SpannableString---"+sp); sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), , d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sp.setSpan(new RelativeSizeSpan(1.2f) , , d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sp.setSpan(new TypefaceSpan("monospace"), , d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); if(dv != null || dv != ""){
//农历显示的样式
sp.setSpan(new RelativeSizeSpan(0.75f), d.length()+, dayNumber[position].length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } textView.setText(sp);
textView.setTextColor(Color.RED); // 当前月字体属性,设字体和背景
if (position < daysOfMonth + firstDayOfMonth+ && position >= firstDayOfMonth+) { textView.setTextColor(Color.BLACK);// 当月字体设黑
drawable = res.getDrawable(R.drawable.item);
textView.setBackgroundDrawable(drawable);
//星期日和星期六加红
if(position%==||position%==){
textView.setTextColor(Color.rgb(,,));
} }else { //设置周的字体属性,如果position为0-6
if(position<){ textView.setTextColor(Color.BLACK);
textView.setTextSize(14.0f);
// textView.setGravity(45);
drawable = res.getDrawable(R.drawable.week_top);
textView.setBackgroundDrawable(drawable);
}
//设置当月其他不在月内显示的字体为浅灰色
else{ textView.setTextColor(Color.rgb(, , ));
}
}
if(schDateTagFlag != null && schDateTagFlag.length >){
for(int i = ; i < schDateTagFlag.length; i++){
if(schDateTagFlag[i] == position){
//设置有日程安排的标记背景
textView.setBackgroundResource(R.drawable.mark);
}
}
}
//设置当天的背景
if(currentFlag == position){ drawable = res.getDrawable(R.drawable.current_day_bgc);
textView.setBackgroundDrawable(drawable);
textView.setTextColor(Color.WHITE);
}
//获得每个月的周末
Calendar calendar=Calendar.getInstance();
if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
textView.setTextColor(Color.rgb(, , ));
} return convertView;
} //得到某年的某月的天数且这月的第一天是星期几
public void getCalendar(int year, int month){
isLeapyear = specialCalendar.isLeapYear(year); //是否为闰年
daysOfMonth = specialCalendar.getDaysOfMonth(isLeapyear, month); //某月的总天数
firstDayOfMonth = specialCalendar.getWeekdayOfMonth(year, month); //某月第一天为星期几
lastDaysOfMonth = specialCalendar.getDaysOfMonth(isLeapyear, month-); //上一个月的总天数 Log.d("DAY", isLeapyear+" ====== "+daysOfMonth+" ============ "+firstDayOfMonth+" ========= "+lastDaysOfMonth);
getweek(year,month);
} //将一个月中的每一天的值添加入数组dayNuMber中
private void getweek(int year, int month) {
int j = ;
int flag = ;
String lunarDay = ""; //得到当前月的所有日程日期(这些日期需要标记并计数)
dao = new ScheduleDAO(context);
ArrayList<ScheduleDateTag> dateTagList = dao.getTagDate(year,month);
if(dateTagList != null && dateTagList.size() > ){
schDateTagFlag = new int[dateTagList.size()];
} for (int i = ; i < dayNumber.length; i++) {
// 周一
if(i<){
dayNumber[i]=week[i]+"."+" ";
}
else if(i < firstDayOfMonth+){ //前一个月
int temp = lastDaysOfMonth - firstDayOfMonth+-;
//获得阳历对应的农历
lunarDay = lunarCalendar.getLunarDate(year, month-, temp+i,false);
dayNumber[i] = (temp + i)+"."+lunarDay;
}else if(i < daysOfMonth + firstDayOfMonth+){ //本月
String day = String.valueOf(i-firstDayOfMonth+-);
//得到的日期
lunarDay = lunarCalendar.getLunarDate(year, month, i-firstDayOfMonth+-,false);
dayNumber[i] = i-firstDayOfMonth+-+"."+lunarDay;
//对于当前月才去标记当前日期
if(sys_year.equals(String.valueOf(year)) && sys_month.equals(String.valueOf(month)) && sys_day.equals(day)){
//标记当前日期
currentFlag = i;
} //标记日程日期
if(dateTagList != null && dateTagList.size() > ){
for(int m = ; m < dateTagList.size(); m++){
ScheduleDateTag dateTag = dateTagList.get(m);
int matchYear = dateTag.getYear();
int matchMonth = dateTag.getMonth();
int matchDay = dateTag.getDay();
if(matchYear == year && matchMonth == month && matchDay == Integer.parseInt(day)){
schDateTagFlag[flag] = i;
flag++;
}
}
} setShowYear(String.valueOf(year));
setShowMonth(String.valueOf(month));
setAnimalsYear(lunarCalendar.animalsYear(year));
setLeapMonth(lunarCalendar.leapMonth == ?"":String.valueOf(lunarCalendar.leapMonth));
setCyclical(lunarCalendar.cyclical(year));
}else{ //下一个月
lunarDay = lunarCalendar.getLunarDate(year, month+, j,false);
dayNumber[i] = j+"."+lunarDay;
j++;
}
} String dayStr = "";
for(int i = ; i < dayNumber.length; i++){
dayStr = dayStr+dayNumber[i]+":";
}
Log.d("calendarview",dayStr); }
给Gridview添加值
3.设计滑动效果ViewFlipper,给每一个滑动过去的gridview,添加一个addGridView
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int gvFlag = ; //每次添加gridview到viewflipper中时给的标记
if (e1.getX() - e2.getX() > ) {
//像左滑动
addGridView(); //添加一个gridView
jumpMonth++; //下一个月 calV = new CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
//flipper.addView(gridView);
addTextToTopTextView(topText);
gvFlag++;
flipper.addView(gridView, gvFlag);
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_out));
this.flipper.showNext();
flipper.removeViewAt();
return true;
} else if (e1.getX() - e2.getX() < -) {
//向右滑动
addGridView(); //添加一个gridView
jumpMonth--; //上一个月 calV = new CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
gvFlag++;
addTextToTopTextView(topText);
flipper.addView(gridView,gvFlag); this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
this.flipper.showPrevious();
flipper.removeViewAt();
return true;
}
return false;
}
onFling
4.添加一个addGridView,并设置GridView的点击事件
//添加gridview,显示具体的日期
@SuppressLint("ResourceAsColor")
private void addGridView() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
//取得屏幕的宽度和高度
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int Width = display.getWidth();
int Height = display.getHeight(); Log.d(Tag, "屏幕分辨率=="+"height*weight"+Height+Width); gridView = new GridView(this);
gridView.setNumColumns(7);
gridView.setColumnWidth(46);
if(Width == 480 && Height == 800){
gridView.setColumnWidth(69);
}else if(Width==800&&Height==1280){
gridView.setColumnWidth(69);
} gridView.setGravity(Gravity.CENTER_VERTICAL);
gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); // 去除gridView边框
gridView.setVerticalSpacing(1);
gridView.setHorizontalSpacing(1);
gridView.setBackgroundResource(R.drawable.gridview_bk);
gridView.setOnTouchListener(new OnTouchListener() {
//将gridview中的触摸事件回传给gestureDetector public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return CalendarActivity.this.gestureDetector
.onTouchEvent(event);
}
}); gridView.setOnItemClickListener(new OnItemClickListener() {
//gridView中的每一个item的点击事件 public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
//点击任何一个item,得到这个item的日期(排除点击的是周日到周六(点击不响应))
int startPosition = calV.getStartPositon();
int endPosition = calV.getEndPosition();
if(startPosition <= position && position <= endPosition){
String scheduleDay = calV.getDateByClickItem(position).split("\\.")[0]; //这一天的阳历
//String scheduleLunarDay = calV.getDateByClickItem(position).split("\\.")[1]; //这一天的阴历
String scheduleYear = calV.getShowYear();
String scheduleMonth = calV.getShowMonth();
String week = ""; Log.i("日程历史浏览", scheduleDay); //通过日期查询这一天是否被标记,如果标记了日程就查询出这天的所有日程信息
scheduleIDs = dao.getScheduleByTagDate(Integer.parseInt(scheduleYear)
, Integer.parseInt(scheduleMonth), Integer.parseInt(scheduleDay)); //得到这一天是星期几
switch(position%7){
case 0:
week = "星期日";
break;
case 1:
week = "星期一";
break;
case 2:
week = "星期二";
break;
case 3:
week = "星期三";
break;
case 4:
week = "星期四";
break;
case 5:
week = "星期五";
break;
case 6:
week = "星期六";
break;
} scheduleDate = new ArrayList<String>();
scheduleDate.add(scheduleYear);
scheduleDate.add(scheduleMonth);
scheduleDate.add(scheduleDay);
scheduleDate.add(week); LayoutInflater inflater=getLayoutInflater();
View linearlayout= inflater.inflate(R.layout.schedule_detail, null);
add=(Button)linearlayout.findViewById(R.id.btn_add);
quit=(Button) linearlayout.findViewById(R.id.btn_back);
day_tv=(TextView) linearlayout.findViewById(R.id.todayDate);
launarDay=(TextView)linearlayout.findViewById(R.id.tv_launar);
schdule_tip=(com.dream.tdzhushou.base.BorderTextView)linearlayout.findViewById(R.id.schdule_tip);
listView=(ListView)linearlayout.findViewById(R.id.schedulelist1);
//星期
weekday=(TextView)linearlayout.findViewById(R.id.dayofweek);
//农历日期
lunarTime=(TextView)linearlayout.findViewById(R.id.lunarTime);
list=(ListView)linearlayout.findViewById(R.id.schedulelist1); dateInfo=scheduleYear+"年"+scheduleMonth+"月"+scheduleDay+"日";
//添加农历信息
String scheduleLunarDay = getLunarDay(Integer.parseInt(scheduleYear),
Integer.parseInt(scheduleMonth), Integer.parseInt(scheduleDay)); Log.i("LunarDay", scheduleLunarDay);
//设置选中的日期的阳历,星期和农历信息
day_tv.setText(dateInfo);
weekday.setText(week);
addLunarDayInfo(lunarTime);
launarDay.setText( scheduleLunarDay); Log.i("scheduleDate", "scheduleDate的所有信息:"+scheduleDate);
//添加日程按钮
//TableLayout dialog_tab=(TableLayout) linearlayout.findViewById(R.id.dialog_tab);
add.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
if(builder!=null&&builder.isShowing()){
builder.dismiss();
Intent intent = new Intent();
intent.putStringArrayListExtra("scheduleDate", scheduleDate);
intent.setClass(CalendarActivity.this, ScheduleViewAddActivity.class);
startActivity(intent);
}
}
});
//返回按钮
quit.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
if(builder!=null&&builder.isShowing()){
builder.dismiss();
}
}
}); //如果被标记,则加载相应的日程信息列表
if(scheduleIDs != null && scheduleIDs.length > 0){ //list.setAdapter(new MyAdapter());
View inflate=getLayoutInflater().inflate(R.layout.schedule_detail_item, null);
//通过arraylist绑定数据导listview中去
ArrayList<HashMap<String,String>> Data = new ArrayList<HashMap<String, String>>();
ScheduleDAO dao=new ScheduleDAO(CalendarActivity.this);
String time="";
String content="";
for(int i=0;i<scheduleIDs.length;i++){
scheduleVO=dao.getScheduleByID(CalendarActivity.this,Integer.parseInt(scheduleIDs[i]));
time="";
content=""; time=dateInfo+" "+scheduleVO.getTime();
content=scheduleVO.getScheduleContent(); HashMap<String, String> map=new HashMap<String, String>();
map.put("date", time);
map.put("content", content);
Data.add(map); }
String from[]={"date","content"};
int to[]={R.id.itemTime,R.id.itemContent}; SimpleAdapter adapter=new SimpleAdapter(CalendarActivity.this, Data, R.layout.schedule_detail_item, from, to); list.setAdapter(adapter); //点击list的item相应事件
// list.setOnClickListener(CalendarActivity.this);
// list.setOnLongClickListener(CalendarActivity.this); }else{ //如果没有标记位直接则跟换为“暂无安排” schdule_tip.setText("暂无安排");
listView.setVisibility(View.INVISIBLE); } builder = new Dialog(CalendarActivity.this,R.style.FullScreenDialog);
builder.setContentView(linearlayout);
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
WindowManager.LayoutParams lp = builder.getWindow().getAttributes();
lp.width = (int)(display.getWidth()); //设置宽度
lp.height=display.getHeight();
builder.getWindow().setAttributes(lp);
builder.setCanceledOnTouchOutside(true);
builder.show(); list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> adapterview,
View view, int position, long id) { Log.i("日程item点击", "第"+position+"个item");
Intent intent=new Intent(); if(view!=null){ HashMap<String, String> map=(HashMap<String, String>) adapterview.getItemAtPosition(position); ScheduleVO scheduleVO= (ScheduleVO) view.getTag();//
Log.i("scheduleVo", "scheduleVO的值="+scheduleVO); if(scheduleDate!=null){
//intent.putStringArrayListExtra("scheduleDate", scheduleDate);
intent.setClass(CalendarActivity.this,ScheduleInfoDetailActivity.class);
intent.putStringArrayListExtra("scheduleDate", scheduleDate);
intent.putExtra("scheduleVO", scheduleVO); Log.i("scheduleVo", "往intent存放的值"+scheduleVO);
startActivity(intent); }
} }
});
}
}
});
gridView.setLayoutParams(params);
}
addGridView
使用 ViewPager 是因为我在官方教程里看到了这篇文章:Using ViewPager for Screen Slides,里面还提供了例程下载,再结合上图,可以了解整个过程。
运行的流程按我的理解如下:
1 首先要点击到每周日历表CalendarActivity执行,当屏幕初始化显示时,调用 onCreate() (这里用回调方式,可以避免对象在内存中创建,但未让屏幕显示时被执行画图处理,可以节约系统开支)
2 onCreate() 中初始化 ViewFlipper,给出用于页帧管理的对象 CalendarView;并且初始化gridView的设置addGridView设置初始要显示的页码。
3 初始化日历表和日历表中每一个GridView中的信息后,滑动屏幕,会自动跳转到下一个月的信息,并再次初始化CalendarView,addGridView中的信息,并释放上一个ViewFlipper的资源。
4 当某一帧要在屏幕上显示时,CalendarView,addGridView类的 onCreateView() 方法被回调,在 onCreateView() 方法里,CalendarView类的 getView 方法接着被调用,在循环里反复调用,直到一整个月所有的单元格被创建。
5.在点击其中一个gridView时,跳转到ScheduleViewAddActivity,给相应的日期添加日程,并保存在数据库中。
【Sprint3冲刺之前】日历表的事件处理和管理(刘铸辉)的更多相关文章
- 【Sprint3冲刺之前】敏捷团队绩效考核(刘铸辉)
TD学生助手团队已经在4.22~4.30完成了为期9天的Sprint2计划,并在Sprint2总结会议中安排了五一放假每个人的任务分配,下面发布下Sprint2冲刺周期的阶段性成果. Sprint2 ...
- 【Sprint3冲刺之前】TD学生助手——alpha版发布
TD学生助手——alpha版发布 1.设想和目标 1.我们的软件要解决的问题 TD学生助手的主要核心思想就是帮助学生安排他们忙碌的学校生活.主要是通过以下几个方面 1.通过学生的需要进行分类(考试, ...
- 【Sprint3冲刺之前】软件开发计划书
TD校园助手软件开发计划书 1.引言 1.1 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,同时便于老师和其他同学了解我们的项 ...
- 【Sprint3冲刺之前】TDzhushou软件项目测试计划书
TDzhushou软件测试计划文档 文档编号:2014-5-8 产品版本:1.1 产品名称:TDzhushou 文 档 作 者: 解凤娇 日期:2014-5-4 软件测试计划 目录 第一章 ...
- 【Sprint3冲刺之前】项目完成时间表
Sprint2冲刺成果——项目完成时间表 项目完成时间表 经过Sprint2小组总结会议的探讨,我们决定一起约定项目alpha版本,beta版本,release版本的发布时间,发布形式及预计完成效果 ...
- sprint3冲刺总结
维持了一个多月的sprint3次总结终于结束了,我们小组也顺利的完成了我们的项目,总的来说这次完成的项目还是有一定的质量的,无论是外貌形象包装还是功能来说都达到了我们当初所设定的目标,美中不足的就是时 ...
- 【Sprint3冲刺之前】TD学生助手测试用例
项目名称 TDzhushou 项目承担部门 骐骥之队 完成日期 2014/5/29 历史版本: 版本/状态 作者 参与者 起止日期 备注 TDzhushou1.1 解凤娇 骐骥之队 5/3-5/7 2 ...
- sprint3冲刺第一天
1.计划了sprint3要做的内容: 整合前台和后台,然后发布让用户使用,然后给我们反馈再进行改进 2.backlog表格: ID 任务 Est 做了什么 1 实现用户登录与权限判定 4 进行用户分类 ...
- 【Sprint3冲刺之前】项目可行性研究报告
TD校园手机助手软件可行性研究报告 1.引言 在信息化时代高速发展的今天,手机成了每个人的必备物品之一.随着科技的迅猛发展,人们已经不仅仅满足于用手机发短信,打电话,因此,android手机应运而生, ...
随机推荐
- IDE介绍以及Eclipse的简单使用
一.IDE介绍 ① 什么是IDE? 1. IDE全称是”Integrated Development Environment”,中文称为“集成开发环境”; 2.是用于提供程序开发环境的应用程序, ...
- 九度oj 题目1357:疯狂地Jobdu序列
题目描述: 阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样 ...
- JSON的使用_检查JSON工具
json简单说就是javascript中的对象和数组. 1.对象:对象在js中表示为"{}"扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结 ...
- 【bzoj1283】序列 线性规划与费用流
题目描述 给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大. 输入 第1行三个数N,m,k. ...
- 【Luogu】P3211XOR和路径(高斯消元)
题目链接 唉我个ZZ…… 首先考虑到异或是可以每一位分开算的 好的以后再碰见位运算题我一定先往按位开车上想 然后设f[i]为从i点出发到终点是1的概率 高斯消元解方程组即可. #include< ...
- 修改Tomcat HTTP端口号(8080→8088)Eclipse
1.如果不用Eclipse,修改Tomcat的端口号,可以参考这篇: https://jingyan.baidu.com/article/adc815139b12def722bf7377.html t ...
- 如何回答“线上CPU100%排查”面试问题
案例: public class App { public static void main( String[] args ) { int a = 0; while (a < 100) { a ...
- Linux System Programming 学习笔记(四) 高级I/O
1. Scatter/Gather I/O a single system call to read or write data between single data stream and mu ...
- 【Visual Studio】error: /ZI”和“/Gy-”命令行选项不兼容(转)
原文转自 http://bbs.100home.net/view/4206.html [问题说明]vc6项目用vs2015打开时遇到的错误 [解决方法]项目属性->c/c++->常规-&g ...
- Python入门--17--pickle
pickle模块,实际用途也很简单.单一,主要用于保存列表(list),元祖(Tuple),字典(dictionary) 当然,一定是大的列表.字典什么的,成千上万行的字典.列表,才能凸显出它的用武之 ...