常用模块

collections模块

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

namedtuple: 生成可以使用名字来访问元素内容的tuple

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p.y
2
#类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:
#namedtuple('名称', [属性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])

deque: 双端队列,可以快速的从另外一侧追加和推出对象,deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])

#deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

Counter: 计数器,主要用来计数

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

OrderedDict: 有序字典

>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']

defaultdict: 带有默认值的字典

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

即: { 'k1' : 大于 66  'k2' : 小于 66 }
from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'

time模块

在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:

(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

(2)格式化的时间字符串(Format String): ‘1999-12-06’

%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
格式化符号

(3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

索引(Index)属性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 60
6tm_wday(weekday)0 - 6(0表示周一)
7tm_yday(一年中的第几天)1 - 366
8tm_isdst(是否是夏令时)默认为0

 

 

 

 

 

 

 

 

首先,我们先导入time模块,来认识一下python中表示时间的几种格式:

#导入时间模块
>>>import time

#时间戳
>>>time.time()
1500875844.800804

#时间字符串
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 13:54:37'
>>>time.strftime("%Y-%m-%d %H-%M-%S")
'2017-07-24 13-55-04'

#时间元组:localtime将一个时间戳转换为当前时区的struct_time
time.localtime()
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37, 
                 tm_wday=0, tm_yday=205, tm_isdst=0)

小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

几种格式之间的转换

#时间戳-->结构化时间
#time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致
#time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)

#结构化时间-->时间戳 
#time.mktime(结构化时间)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0
#结构化时间-->字符串时间
#time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则现实当前时间
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 14:55:36'
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
'2017-07-14'

#字符串时间-->结构化时间
#time.strptime(时间字符串,字符串对应格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)

 

#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017'

#时间戳 --> %a %d %d %H:%M:%S %Y串
#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017' 
import time
true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))
time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))
dif_time=time_now-true_time
struct_time=time.gmtime(dif_time)
print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,
                                       struct_time.tm_mday-1,struct_time.tm_hour,
                                       struct_time.tm_min,struct_time.tm_sec))
计算时间差

random模块

>>> import random
#随机小数
>>> random.random()      # 大于0且小于1之间的小数
0.7664338663654585
>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838

#随机整数
>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数
>>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数


#随机选择一个返回
>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
#随机选择多个返回,返回的个数为函数的第二个参数
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合
[[4, 5], '23']


#打乱列表顺序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打乱次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]
import random

def v_code():

    code = ''
    for i in range(5):

        num=random.randint(0,9)
        alf=chr(random.randint(65,90))
        add=random.choice([num,alf])
        code="".join([code,str(add)])

    return code

print(v_code())
生成随机验证码

os模块

'''
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.environ  获取系统环境变量

os.path
os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
                        即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
'''

sys模块

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

序列化模块

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

json

Json模块提供了四个功能:dumps、dump、loads、load

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
loads和dumps
import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()

f = open('json_file')
dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)
load和dump
import json
f = open('file','w')
json.dump({'国籍':'中国'},f)
ret = json.dumps({'国籍':'中国'})
f.write(ret+'\n')
json.dump({'国籍':'美国'},f,ensure_ascii=False)
ret = json.dumps({'国籍':'美国'},ensure_ascii=False)
f.write(ret+'\n')
f.close()
ensure_ascii关键字参数
Serialize obj to a JSON formatted str.(字符串表示的json对象) 
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 
ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。) 
If check_circular is false, then the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse). 
If allow_nan is false, then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification, instead of using the JavaScript equivalents (NaN, Infinity, -Infinity). 
indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的json数据也叫pretty-printed json 
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 
default(obj) is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. 
sort_keys:将数据根据keys的值进行排序。 
To use a custom JSONEncoder subclass (e.g. one that overrides the .default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.
其他参数说明
import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
print(json_dic2)
json的格式化输出

pickle

pickle,用于python特有的类型 和 python的数据类型间进行转换

pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)
pickle

shelve

shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。

import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
f.close()

import shelve
f1 = shelve.open('shelve_file')
existing = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing)

这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB

import shelve
f = shelve.open('shelve_file', flag='r')
existing = f['key']
f.close()
print(existing)

由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。

import shelve
f1 = shelve.open('shelve_file')
print(f1['key'])
f1['key']['new_value'] = 'this was not here before'
f1.close()

f2 = shelve.open('shelve_file', writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
f2.close()
设置writeback

writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。

 

转载于:https://www.cnblogs.com/NeroCl/p/8284344.html

第1章 认识C#及开发环境 1.1 C#概述 2 1.1.1 C#发展历程 2 1.1.2 C#语言编程环境 2 1.2 .NET Framework 2.0简介 2 1.2.1 什么是.NET Framework 2.0 2 1.2.2 .NET Framework 2.0特性 3 1.3 安装集成开发环境Visual Studio 2005 4 1.3.1 安装Visual Studio 2005开发环境 4 1.3.2 安装MSDN帮助 7 1.3.3 如何使用MSDN帮助 9 1.3.4 利用MSDN帮助附带的示例学习编程 11 1.4 启动Visual Studio 2005开发环境 12 1.4.1 启动Visual Studio 2005 12 1.4.2 创建项目 12 1.5 熟悉Visual Studio 2005集成开发环境 13 1.5.1 新特性 14 1.5.2 主窗口 14 1.5.3 菜单栏 14 1.5.4 工具栏 18 1.5.5 文档窗口 18 1.5.6 工具箱窗口 19 1.5.7 解决方案资源管理器窗口 20 1.5.8 属性窗口 20 1.5.9 代码编辑器 21 1.5.10 “错误列表”面板 22 1.5.11 “输出”面板 22 1.6 程序调试 22 1.6.1 断点操作 22 1.6.2 使用开始、中断和停止执行功能调试程序 23 1.6.3 单步执行 25 1.6.4 运行到程序的指定位置 25 第2章 QQ企业通 2.1 设计思路 28 2.2 关键技术 28 2.2.1 INI文件的应用 28 2.2.2 线程的应用 30 2.2.3 在Socket中发送大容量的消息 30 2.2.4 将流序列化或反序列化为对象 31 2.2.5 用InnerList列表记录信息 31 2.3 设计过程 32 2.3.1 类库的设计 33 2.3.2 客户端注册模块设计 40 2.3.3 客户端登录模块设计 42 2.3.4 客户端QQ模块设计 43 2.3.5 客户端消息发送模块设计 48 2.3.6 服务器端控制台模块设计 52 第3章 SQL数据表提取器模块 3.1 概述 56 3.2 关键技术 56 3.2.1 如何备份数据库 56 3.2.2 如何还原数据库 57 3.2.3 如何附加数据库 58 3.2.4 如何分离数据库 59 3.2.5 设置数据库模式 59 3.3 设计过程 61 3.3.1 主窗体 61 3.3.2 获取服务器名称 62 3.3.3 获取所有数据库 63 3.3.4 获取所有数据表 64 3.3.5 备份数据库 66 3.3.6 还原数据库 67 3.3.7 附加数据库 68 3.3.8 分离数据库 70 3.3.9 导出表结构 71 3.3.10 导出数据 74 第4章 万能搜索模块 4.1 设计思路 80 4.2 关键技术 80 4.2.1 如何制作一个接口程序 80 4.2.2 实现接口程序的信息互传 80 4.2.3 如何将接口程序加载到其他程序中 82 4.2.4 怎样操作RichtextBox控件的选择文本 82 4.2.5 如何获取数据表中字段的描述信息 83 4.3 设计过程 83 4.3.1 获取数据表中字段的中文信息 84 4.3.2 添加数据表的查询条件 86 4.3.3 向SQL语句中添加括号 89 4.3.4 查询生成后的SQL语句 90 4.3.5 主程序获得接口信息 92 第5章 万能打印模块 5.1 设计思路 94 5.2 关键技术 94 5.2.1 打印设置(PrintDocument类) 94 5.2.2 打印预览对话框(PrintPreview Dialog) 95 5.2.3 打印对话框(PrintDialog) 96 5.2.4 获取指定颜色值和字体样式 97 5.2.5 DataGridView控件的相关应用 97 5.3 设计过程 98 5.3.1 打印信息的设置 98 5.3.2 表格样式的设置 100 5.3.3 打印类的设置 101 5.3.4 打印数据信息 108 第6章 决策分析模块 6.1 设计思路 112 6.2 关键技术 112 6.2.1 游标的基本操作 112 6.2.2 存储过程的基本操作 115 6.2.3 透视表的基本概念 117 6.2.4 统计表的基本操作 117 6.2.5 单击显示右键菜单 118 6.3 设计过程 118 6.3.1 主窗体的初始化 119 6.3.2 透视表的筛选 127 6.3.3 透视表的设计 130 6.3.4 统计表的设计 132 第7章 自定义图表控件 7.1 设计思路 136 7.2 关键技术 137 7.2.1 控件的生成 137 7.2.2 如何在项目中添加控件 137 7.2.3 在“属性”对话框中添加属性 137 7.2.4 用GDI+绘制图形 139 7.2.5 如何在控件上绘制图形 143 7.2.6 获取扇形外弧中心点的位置 143 7.3 设计过程 144 7.3.1 向自定义控件中添加属性 144 7.3.2 获取绘制图表的初始值数据 149 7.3.3 绘制标签框 153 7.3.4 绘制图表中的表格 157 7.3.5 绘制条形图 163 7.3.6 绘制面形图 170 7.3.7 绘制饼形图 174 第8章 电子邮件收发模块 8.1 概述 180 8.2 关键技术 180 8.2.1 Base64编码格式 180 8.2.2 SMTP服务 181 8.2.3 POP3协议 184 8.2.4 使用Jmail组件接收邮件 186 8.2.5 邮件发送类的使用 188 8.2.6 使用正则表达式验证邮件格式 190 8.3 设计过程 191 8.3.1 数据库设计 191 8.3.2 系统登录 191 8.3.3 邮件发送实现 192 8.3.4 为邮件上传多个附件 193 8.3.5 邮件接收实现 194 8.3.6 查看邮件详细信息 196 8.3.7 下载附件的实现 197 8.3.8 删除邮件实现 198 8.3.9 用户管理 198 第9章 短信群发模块 9.1 设计思路 202 9.2 关键技术 202 9.2.1 短信猫中API函数的使用 202 9.2.2 短信猫中的短信接收格式 205 9.2.3 窗体间的互操作 205 9.2.4 锁定模块主窗体 206 9.2.5 使用ADO.NET连接Access数据库 206 9.3 设计过程 207 9.3.1 数据库设计 207 9.3.2 群发短信实现 209 9.3.3 已发送短信管理 213 9.3.4 接收短信实现 215 9.3.5 常用联系人管理 219 9.3.6 常用短语管理 221 第10章 桌面精灵模块 10.1 概述 226 10.2 关键技术 226 10.2.1 阴阳历转换算法 226 10.2.2 调用系统API实现鼠标穿透效果 230 10.2.3 修改注册表控制程序开机自启动 231 10.2.4 通过控制窗体透明度实现日历透明显示效果 231 10.2.5 拖动无标题栏窗体 232 10.2.6 将窗体的关闭位置写入到注册表中 232 10.2.7 将程序图标写入到托盘 232 10.3 设计过程 233 10.3.1 桌面精灵模块公共类设计 233 10.3.2 当前日期的农历、天干地支年、节日及星座显示 235 10.3.3 定时提醒的实现 240 10.3.4 日历窗体效果控制 242 10.3.5 转到某天、某周、某月及某年的实现 243 10.3.6 节日管理 245 10.3.7 提醒管理 249 第11章 文件批量处理器 11.1 概述 256 11.2 关键技术 256 11.2.1 文件流技术 256 11.2.2 文件解压缩技术 258 11.2.3 获取系统文件及文件夹图标 262 11.2.4 获取指定目录下的所有文件及文件夹 265 11.2.5 Word操作技术 266 11.2.6 进度条的显示 266 11.2.7 对ListView控件中的项进行排序 267 11.3 设计过程 267 11.3.1 主窗体预览 267 11.3.2 批量复制、剪切文件 268 11.3.3 批量复制、剪切文件夹 270 11.3.4 批量重命名文件 271 11.3.5 批量删除文件及文件夹 275 11.3.6 搜索文件及文件夹 276 11.3.7 批量压缩、解压文件 278 11.3.8 分割、合并文件 280 第12章 图片管理工具模块 12.1 概述 286 12.2 关键技术 286 12.2.1 上下移动ListBox选中项 286 12.2.2 将文件复制到剪切板 287 12.2.3 格式转换 288 12.2.4 图片幻灯片 288 12.2.5 图片旋转 289 12.3 设计过程 290 12.3.1 主窗体 290 12.3.2 打开图片目录 291 12.3.3 图片格式转换 292 12.3.4 设为桌面背景 294 12.3.5 图片特效 296 12.3.6 图片调节 300 12.3.7 图片水印 304 12.3.8 幻灯片放映 306 12.3.9 图片打印 308 第13章 FTP文件管理模块 13.1 设计思路 312 13.2 关键技术 312 13.2.1 架设FTP服务器 312 13.2.2 登录FTP服务器 317 13.2.3 获取服务器上文件的大小 318 13.2.4 向FTP服务器发送命令 319 13.2.5 调用系统API 321 13.3 设计过程 322 13.3.1 主窗体设计 322 13.3.2 登录FTP服务器 323 13.3.3 获取本地磁盘 325 13.3.4 获取指定磁盘中的文件 326 13.3.5 获取本地磁盘中文件的图标 327 13.3.6 获取FTP服务器中的所有文件 329 13.3.7 批量上传文件 333 13.3.8 批量下载文件 337 13.3.9 删除FTP中的文件或文件夹 340 第14章 魔法兔子模块 14.1 概述 344 14.2 关键技术 344 14.2.1 获取进程信息 344 14.2.2 获取计算机信息 347 14.2.3 修改注册表 349 14.3 设计过程 349 14.3.1 主窗体 349 14.3.2 功能菜单设计 350 14.3.3 系统检测 353 14.3.4 系统优化 356 14.3.5 超级工具 360 14.3.6 实用工具 367 14.3.7 任务管理器 369 14.3.8 选项设置 371 第15章 学生考试模块 15.1 设计思路 376 15.2 关键技术 376 15.2.1 获取试题数目 376 15.2.2 验证用户名和密码 377 15.2.3 随机抽取试题 377 15.2.4 自动评分 377 15.3 设计过程 378 15.3.1 数据库设计 378 15.3.2 公共类设计 380 15.3.3 登录验证 381 15.3.4 主窗体实现 382 15.3.5 开始考试 384 15.3.6 修改密码 393 15.3.7 分数查询 394 15.3.8 管理员界面 394 15.3.9 用户管理 395 15.3.10 成绩查询 399 15.3.11 考试设置 401 15.3.12 添加试题 403 15.3.13 修改试题 406 第16章 网页浏览器模块 16.1 概述 410 16.2 关键技术 410 16.2.1 网页浏览器核心控件 410 16.2.2 网页多页面显示 415 16.2.3 获取网页源码 416 16.3 设计过程 417 16.3.1 主窗体 417 16.3.2 查看网页源码 427 16.3.3 添加到收藏夹 427 16.3.4 整理收藏夹 429 第17章 电话客服管理模块 17.1 设计思路 432 17.2 关键技术 432 17.2.1 语音卡中的API函数 432 17.2.2 硬件语音卡驱动分析 437 17.2.3 窗体间传值 438 17.2.4 导航菜单的制作 438 17.3 设 计 过 程 439 17.3.1 数据库设计 439 17.3.2 模块主窗体设计 441 17.3.3 自动语音处理 444 17.3.4 通话管理实现 450 17.3.5 员工管理实现 452 17.3.6 产品类别管理 455 第18章 多媒体播放器 18.1 设计思路 460 18.2 关键技术 460 18.2.1 窗体间的信息传递 460 18.2.2 AxWindowsMediaPlayer控件的相关应用 461 18.2.3 在列表框中动态移动选中的项 463 18.2.4 如何在文件夹中遍历文件 463 18.2.5 如何实现播放进度条 464 18.3 设计过程 465 18.3.1 磁性窗体的设置 465 18.3.2 播放窗体的设计 472 18.3.3 列表窗体的设计 482 18.3.4 歌词窗体的设计 485 第19章 屏幕录像模块 19.1 概述 488 19.2 关键技术 488 19.2.1 如何抓取屏幕 488 19.2.2 创建AVI文件 488 19.2.3 向AVI文件中添加视频 489 19.2.4 分解AVI文件 490 19.2.5 设置快捷键 491 19.3 设计过程 494 19.3.1 主窗体设计 494 19.3.2 抓图功能 494 19.3.3 选项设置 496 19.3.4 屏幕录像 497 19.3.5 视频分割 503 第20章 EXE文件加密器 20.1 设计思路 512 20.2 关键技术 512 20.2.1 FileStream对象 512 20.2.2 文件的读写操作 513 20.2.3 如何获取两个日期的月份差 515 20.2.4 获取两个日期的相差天数 516 20.2.5 载取字符串中的指定字符 516 20.3 设计过程 517 20.3.1 获取加密字符串的信息 517 20.3.2 对生成后的数据进行加密 520 20.3.3 对EXE文件进行加密 522 20.3.4 解密文件的设置 524 第21章 视频监控模块 21.1 设计思路 530 21.2 关键技术 530 21.2.1 认识视频监控卡 530 21.2.2 视频监控卡中API函数的使用 532 21.2.3 Pelco-D协议 536 21.2.4 串口通信技术 538 21.2.5 WMI类的使用 540 21.2.6 注册表技术 541 21.3 设计过程 543 21.3.1 视频监控实现 543 21.3.2 云台控制 546 21.3.3 色彩控制 548 21.3.4 图像抓拍及生成监控录像 549 21.3.5 定时录像设置 551 21.3.6 录像回放 552 21.3.7 注册程序 553 21.3.8 实时监控软件运行时间及磁盘空间 554 第22章 网络五子棋游戏 22.1 设计思路 558 22.2 关键技术 558 22.2.1 在下拉列表中绘制图片 558 22.2.2 UDP协议 560 22.2.3 用Socket实现信息传递的必备条件 560 22.2.4 自定义事件的设置 561 22.2.5 动态按钮的设置 562 22.3 设计过程 564 22.3.1 类库的设计 564 22.3.2 客户端注册模块设计 569 22.3.3 客户端登录模块设计 571 22.3.4 五子棋大厅的设计 573 22.3.5 对决窗体的设计 583 22.3.6 网络五子棋服务器窗体的设计 598 第23章 在线升级模块 23.1 设计思路 610 23.2 关键技术 610 23.2.1 FTP上传下载技术 610 23.2.2 XML文件操作 611 23.2.3 INI文件的读写 613 23.2.4 动态生成版本面板 614 23.2.5 使用Hashtable(哈希表)记录版本号及更新信息 614 23.3 类库设计过程 615 23.4 服务器端设计过程 621 23.4.1 服务器端主窗体预览 621 23.4.2 连接FTP服务器 622 23.4.3 向FTP服务器上传新版本 623 23.5 客户端设计过程 626 23.5.1 启动客户端时检测是否有新版本 626 23.5.2 从FTP服务器下载指定版本 628 23.5.3 定时升级设置 630 第24章 Windows应用程序打包与部署境 24.1 Windows Installer简介 634 24.2 Windows应用程序部署 634 24.2.1 创建部署项目 634 24.2.2 可选的部署功能 636 24.3 安装及卸载Windows程序 642 24.3.1 在本地计算机上安装 642 24.3.2 部署到其他计算机 642 24.3.3 卸载安装应用程序 642
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值