哪位大哥能提供一段VC发送邮件的代码?最好能带有注释

哪位大哥能提供一段VC发送邮件的代码?最好能带有注释,第1张

只能说主要代码,程序是一个整体,如果要直接编译通过,那就要整个发了

你自己改下吧

int CMail::sendmail()

{

int crecv

if(smtplogin()==0)

{

return 0

}

//发送mail from 返回250

sprintf(m_sendbuff,"%s%s%s","mail from:<",m_user,"@163.com>\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"250",3)!=NULL)

{

m_error=MAIL_FROM_ERROR

return 0

}

//发送rcpt to 返回250

sprintf(m_sendbuff,"%s%s%s","rcpt to:<",m_rcptto,">\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"250",3)!=NULL)

{

m_error=RCPT_TO_ERROR

return 0

}

//发送data\r\n 返回354

sprintf(m_sendbuff,"%s","data\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"354",3)!=NULL)

{

m_error=DATA_ERROR

return 0

}

//信头

if(!SetMailHeader(m_sendbuff))

{

m_error=MAILHEADER_ERROR

return 0

}

if(senddata()==0)

{

return 0

}

//发送空行

sprintf(m_sendbuff,"%s","\r\n\r\n")

if(senddata()==0)

{

return 0

}

//发送邮件body

sprintf(m_sendbuff,"%s%s",m_data,"\r\n")

if(senddata()==0)

{

return 0

}

if(m_attachment!=NULL)

{

char **pp

for(pp=m_attachment*pp!=0pp++)

{

FILE* fp

char *buf

//准备发送附件,首先发送分界线,必须!

sprintf(m_sendbuff,"%s%s%s","--",BOUNDARY_TEXT,"\r\n")

if(senddata()==0)

{

return 0

}

sprintf(m_sendbuff,"%s%s%s","Content-Type: application/x-msdownloadname=\"",strrchr(*pp,'\\')+1,"\"\r\n")

if(senddata()==0)

{

return 0

}

sprintf(m_sendbuff,"%s","Content-Transfer-Encoding: base64\r\n")

if(senddata()==0)

{

return 0

}

sprintf(m_sendbuff,"%s%s%s","Content-Disposition: attachmentfilename=\"",strrchr(*pp,'\\')+1,"\"\r\n\r\n")

if(senddata()==0)

{

return 0

}

//将文件base64编码后发送

fp=fopen(*pp,"rb")

if(fp==NULL)

{

m_error=OPEN_FILE_ERROR

return 0

}

buf=new char[BUFFERSIZE+1]

memset(buf,0,BUFFERSIZE+1)

int readcount=0

while(!feof(fp))

{

readcount=fread(buf,1,BUFFERSIZE,fp)

if(readcount>0)

{

*(buf+readcount)='\0'

sprintf(m_sendbuff,"%s%s",base64(buf,ENCODE,readcount),"\r\n")

if(senddata()==0)

{

return 0

}

memset(buf,0,BUFFERSIZE+1)

}

}

sprintf(m_sendbuff,"%s","\r\n")

if(senddata()==0)

{

return 0

}

delete[] buf

fclose(fp)

}

}

if(m_attachment!=NULL)

{

//附件发送完毕,发送分界线

sprintf(m_sendbuff,"%s%s%s","--",BOUNDARY_TEXT,"--\r\n")

if(senddata()==0)

{

return 0

}

}

//发送.\r\n 结束 返回250

sprintf(m_sendbuff,"%s",".\r\n")

if(senddata()==0)

{

return 0

}

crecv=recv(s,m_recvbuff,MAX_LENGTH,0)

if(strncmp(m_recvbuff,"250",3)!=NULL)

{

m_error=END_DATA_ERROR

return 0

}

else

{

showmessage(NULL,"邮件发送成功","",NULL)

}

//退出

sprintf(m_sendbuff,"%s","quit\r\n")

if(senddata()==0)

{

return 0

}

if(closesocket(s)!=0)

{

m_error=CLOSE_SOCKET_ERROR

return 0

}

if(WSACleanup()!=0)

{

m_error=CLEANUP_WSA_ERROR

return 0

}

return 1

}

int CMail::senddata()

{

int idx = 0

int csend

int count=strlen(m_sendbuff)

while(count>0)

{

if((csend=send(s,m_sendbuff+idx,count,0))==SOCKET_ERROR)

{

m_error =WSA_SEND_ERROR

return 0

}

if(csend==0)

{

break

}

count-=csend

idx+=csend

}

return 1

}

int CMail::recvdata()

{

int crecv

crecv=recv(s,m_recvbuff,MAX_LENGTH,0)

if(crecv==SOCKET_ERROR)

{

m_error =WSA_RECV_ERROR

return 0

}

else if(crecv==0)

{

m_error=WSA_RECV_ERROR

return 0

}

else

{

}

return 1

}

int CMail::chartoindex(char c)

{

if(c>=65&&c<=90)

{

c-=65

}

else if(c>=97&&c<=122)

{

c-=71

}

else if(c>=48&&c<=57)

{

c+=4

}

else if(c==43)//'+'

{

c=62

}

else if(c==47)//'/'

{

c=63

}

else if(c==61)//'='

{

c=0

}

else

{

m_error=DECODE_ERROR

return 0

}

return c

}

bool CMail::SetMailHeader(char* header)

{

// "Date:","From:","To:",

// "Message-ID:","Subject:","MIME-Version:",

// "Content-Type:","X-Priority:",

// "X-Mailer:","X-CM-TRANSID:","X-CM-SenderInfo:",

// "X-Coremail-Antispam:","\r\n\r\n"

TCHAR szDate[500]

TCHAR sztTime[500]

// Date: <SP><dd><SP><mon><SP><yy><SP><hh>":" <mm>":" <ss><SP><zone><CRLF>

SYSTEMTIME st={0}

::GetSystemTime(&st)

::GetDateFormat(MAKELCID(0x0409,SORT_DEFAULT),0,&st,"ddd\',\' dd MMM yyyy",szDate,sizeof(szDate))

::GetTimeFormat(MAKELCID(0x0409,SORT_DEFAULT),TIME_FORCE24HOURFORMAT,&st,"HH\':\'mm\':\'ss",sztTime,sizeof(sztTime))

sprintf(header,"Date: %s %s\r\n", szDate, sztTime)

// From: <SP><sender> <SP>"<" <sender-email>">" <CRLF>

if(m_mailfrom!=NULL)

{

strcat(header,"From: ")

strcat(header," <")

strcat(header,m_mailfrom)

strcat(header, ">\r\n")

}

// X-Mailer: <SP><xmailer-app><CRLF>

if(m_xmailer!= NULL)

{

strcat(header,"X-Mailer: ")

strcat(header, m_xmailer)

strcat(header, "\r\n")

}

// X-Priority: <SP><number><CRLF>

switch(m_priority)

{

case XPRIORITY_HIGH:

strcat(header,"X-Priority: 2 (High)\r\n")

break

case XPRIORITY_NORMAL:

strcat(header,"X-Priority: 3 (Normal)\r\n")

break

case XPRIORITY_LOW:

strcat(header,"X-Priority: 4 (Low)\r\n")

break

default:

strcat(header,"X-Priority: 3 (Normal)\r\n")

}

// To: <SP><remote-user-mail><CRLF>

if(m_rcptto!=NULL)

{

strcat(header,"To: ")

strcat(header, m_rcptto)

strcat(header, "\r\n")

}

// Subject: <SP><subject-text><CRLF>

if(m_subject!=NULL)

{

strcat(header, "Subject: ")

strcat(header, m_subject)

strcat(header, "\r\n")

}

// MIME-Version: <SP>1.0 <CRLF>

strcat(header,"MIME-Version: 1.0\r\n")

//attachment

if(m_attachment==NULL)

{ //如果没附件

strcat(header,"Content-type: text/plaincharset=GB2312\r\n")

strcat(header,"Content-Transfer-Encoding: 7bit\r\n")

strcat(header,"\r\n")

}

else

{ //如果有附件,设置分界线,每个子段以--BOUNDARY_TEXT行开始,父段则以--BOUNDARY_TEXT--行结束,不同段之间用空行分隔

strcat(header,"Content-Type: multipart/mixedboundary=\"")

strcat(header,BOUNDARY_TEXT)

strcat(header,"\"\r\n")

strcat(header,"\r\n")//这个空行不能少

//第一部分为文本内容

strcat(header,"--")strcat(header,BOUNDARY_TEXT)strcat(header,"\r\n")//加上分界线

//以下跟没附件时的一样

strcat(header,"Content-type: text/plaincharset=GB2312\r\n")//注意GB2312 否则会出现中文乱码

strcat(header,"Content-Transfer-Encoding: 7bit\r\n")

}

// done

return true

}

int CMail::senddata()

{

int idx = 0

int csend

int count=strlen(m_sendbuff)

while(count>0)

{

if((csend=send(s,m_sendbuff+idx,count,0))==SOCKET_ERROR)

{

m_error =WSA_SEND_ERROR

return 0

}

if(csend==0)

{

break

}

count-=csend

idx+=csend

}

return 1

}

int CMail::recvdata()

{

int crecv

crecv=recv(s,m_recvbuff,MAX_LENGTH,0)

if(crecv==SOCKET_ERROR)

{

m_error =WSA_RECV_ERROR

return 0

}

else if(crecv==0)

{

m_error=WSA_RECV_ERROR

return 0

}

else

{

}

return 1

}

int CMail::smtplogin()

{

//调用成员函数connect

if(connect()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strstr(m_recvbuff,"220")==NULL)//220

{

m_error=UNKNOWEN_ERROR

return 0

}

//发送helo 返回250

sprintf(m_sendbuff,"%s","helo 543880135\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"250",3)!=NULL)

{

m_error=HELO_ERROR

return 0

}

//发送auth login 返回334

sprintf(m_sendbuff,"%s","auth login\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"334",3)!=NULL)

{

m_error=AUTH_LOGIN_ERROR

return 0

}

//发送经过base64编码后的用户名,返回334

sprintf(m_sendbuff,"%s%s",base64(m_user,ENCODE,strlen(m_user)),"\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"334",3)!=NULL)

{

m_error=USER_ERROR

return 0

}

//发送经过base64编码后的密码 返回235

sprintf(m_sendbuff,"%s%s",base64(m_pass,ENCODE,strlen(m_pass)),"\r\n")

if(senddata()==0)

{

return 0

}

if(recvdata()==0)

{

return 0

}

if(strncmp(m_recvbuff,"235",3)!=NULL)

{

m_error=PASS_ERROR

return 0

}

return 1

}

int CMail::connect()

{

WSADATA wsadata

struct sockaddr_in sock_addr

HOSTENT *phostent

struct in_addr inaddr

if(WSAStartup(MAKEWORD(1,1),&wsadata)<0)

{

m_error=WSA_INIT_ERROR

return 0

}

/*---------------根据域名获取网络地址,存放在struct in_addr中----------------*/

phostent=gethostbyname(m_server)//pop.163.com

if(phostent!=NULL)

{

// lpAddr=phostent->h_addr_list[0]

memmove(&inaddr,phostent->h_addr_list[0],4)//220.181.12.101

}

else

{

m_error=CONNECTSERVER_ERROR

return 0

}

/*---------------根据域名获取网络地址,存放在struct in_addr中----------------*/

s=socket(AF_INET, SOCK_STREAM,IPPROTO_TCP)//SOCK_STREAM SOCK_DGRAM

sock_addr.sin_family=AF_INET

sock_addr.sin_port=htons(m_port)

sock_addr.sin_addr=inaddr//直接结构体赋值给结构体,或者写成:sock_addr.sin_addr.s_addr=inaddr.S_un.S_addr

if(::connect(s,(struct sockaddr *)&sock_addr,sizeof(sock_addr)))

{

m_error=CONNECT_ERROR

return 0

}

return 1

}

1.打开Foxmail,“工具/系统设置”。

2.在“常规”标签里勾选“检查Foxmail是否是系统默认邮件软件(C)”。

3.关闭Foxmail。打开Foxmail的安装文件夹,找到Foxmail.exe。右键/以管理员身份运行点确定。这样Foxmail就被设置为默认邮件客户端。点击网页上有关Email的链接,会自动d出Foxmail的撰写邮件的窗口。

目录

第1章Java语言基础知识1

1.1Java语言与面向对象的程序设计1

1.1.1面向对象的程序设计思想1

1.1.2Java语言的特点3

1.1.3Java类库4

1.2Java程序概述4

1.2.1Java开发环境4

1.2.2Application举例7

1.2.3Applet举例8

1.2.4Servlet举例10

1.2.5JSP和JavaBean举例13

1.3基本数据类型与表达式14

1.3.1变量与常量14

1.3.2基本数据类型15

1.3.3表达式与运算符16

1.3.4类型转换20

1.4数组的概念21

1.5数组的创建和引用21

1.5.1数组的声明21

1.5.2数组的创建21

1.5.3数组元素的初始化22

1.5.4数组的引用22

1.5.5多维数组23

1.6本章小结26

习题26

第2章类与对象的基本概念27

2.1面向对象的程序设计方法概述27

2.1.1抽象27

2.1.2封装28

2.1.3继承28

2.1.4多态29

2.2类与对象29

2.2.1类的声明30

2.2.2对象的声明与引用31

2.2.3数据成员32

2.2.4方法成员38

2.2.5类的组织——包的概念43

2.2.6类的访问控制45

2.2.7类成员的访问控制45

2.3对象初始化和回收47

2.3.1构造方法47

2.3.2内存回收技术50

2.4应用举例51

2.4.1声明BankAccount类51

2.4.2声明toString()方法52

2.4.3声明存取款方法53

2.4.4使用DecimalFormat类54

2.4.5声明类方法生成特殊的实例54

2.4.6声明类变量55

2.5UML简介57

2.5.1类图58

2.5.2对象图60

2.6本章小结60

习题61

第3章类的方法62

3.1方法的控制流程62

3.1.1if选择结构63

3.1.2switch选择结构64

3.1.3for循环结构67

3.1.4while语句68

3.1.5do�while语句69

3.1.6break语句69

3.1.7continue语句72

3.2异常处理简介74

3.2.1异常处理的意义74

3.2.2错误的分类75

3.2.3异常的处理77

3.2.4生成异常对象83

3.2.5声明自己的异常类84

3.3方法的重载85

3.4本章小结87

习题87

第4章类的重用88

4.1类的继承88

4.1.1继承的概念88

4.1.2继承的语法89

4.1.3隐藏和覆盖92

4.1.4有继承时的构造方法96

4.1.5应用举例98

4.2Object类99

4.3终结类与终结方法103

4.3.1终结类103

4.3.2终结方法104

4.4抽象类105

4.4.1抽象类的声明105

4.4.2抽象方法106

4.5类的组合108

4.5.1组合的语法108

4.5.2组合与继承的比较109

4.5.3组合与继承的结合110

4.6包的应用112

4.6.1Java基础类库概述112

4.6.2自定义包122

4.6.3JAR文件123

4.7本章小结126

习题126

第5章接口与多态128

5.1接口128

5.1.1接口的作用及语法128

5.1.2实现接口130

5.1.3多重继承132

5.1.4接口的扩展134

5.2塑型136

5.2.1塑型的概念136

5.2.2塑型的应用137

5.2.3方法的查找138

5.3多态的概念139

5.3.1多态的目的140

5.3.2绑定的概念141

5.4多态的应用143

5.5构造方法与多态145

5.5.1构造方法的调用顺序146

5.5.2构造方法中的多态方法149

5.6内部类150

5.7本章小结151

习题151

第6章输入输出流153

6.1概论153

6.1.1I/O流的概念153

6.1.2预定义的I/O流类概述154

6.2文件读写158

6.2.1写文本文件158

6.2.2读文本文件160

6.2.3写二进制文件163

6.2.4读二进制文件167

6.2.5File类169

6.2.6处理压缩文件172

6.2.7对象序列化176

6.2.8随机文件读写178

6.3本章小结181

习题181

第7章对象群体的组织183

7.1对象数组183

7.1.1用数组存储对象183

7.1.2对数组元素进行排序194

7.1.3在已排序的数组中查找196

7.2二维数组199

7.3集合201

7.3.1Java集合框架201

7.3.2向量205

7.3.3Enumeration及Iterator类209

7.3.4Map接口及其类层次213

7.3.5哈希表214

7.4本章小结221

习题222

第8章多线程223

8.1多线程编程基础223

8.1.1线程的概念223

8.1.2Thread类223

8.1.3Runnable接口228

8.1.4线程间的数据共享230

8.1.5多线程的同步控制233

8.1.6线程之间的通信239

8.1.7后台线程242

8.2线程的生命周期243

8.2.1线程的几种基本状态243

8.2.2死锁问题244

8.2.3控制线程的生命247

8.3线程的优先级247

8.4本章小结251

习题251

第9章图形用户界面253

9.1Applet概述253

9.2Applet应用程序接口254

9.3绘图255

9.3.1图形环境和图形对象255

9.3.2颜色和字体256

9.3.3使用Graphics类绘图256

9.3.4使用Graphics 2D类绘图259

9.4Swing基础260

9.4.1JFC与Swing260

9.4.2Swing与AWT261

9.4.3在Applet和Application中应用Swing262

9.5Swing的特点和概念265

9.5.1Swing的组件和容器层次265

9.5.2布局管理267

9.5.3事件处理281

9.6Swing组件286

9.6.1顶层容器286

9.6.2中间层容器290

9.6.3原子组件298

9.7其他Swing特性311

9.7.1Action对象311

9.7.2边框312

9.7.3设置外观和感觉314

9.7.4应用线程314

9.7.5定时器317

9.8本章小结318

习题318

第10章JDBC与数据库访问320

10.1数据库基础知识320

10.1.1数据库技术的特点320

10.1.2数据模型321

10.1.3关系表中的主码与外来码322

10.1.4建立一个实例数据库323

10.1.5SQL语言简介326

10.2通过JDBC访问数据库328

10.2.1设置环境330

10.2.2建立连接332

10.2.3对数据库进行 *** 作333

10.2.4执行带参数的SQL语句342

10.3本章小结342

习题342

第11章Servlet程序设计344

11.1Java网络程序设计的基本概念344

11.1.1协议344

11.1.2关于URI345

11.1.3基于套接字的有连接通信346

11.1.4数据报通信347

11.1.5Servlet349

11.2Servlet基础350

11.2.1Servlet容器、Web服务器和应用服务器350

11.2.2Web应用程序352

11.2.3Servlet API352

11.2.4Servlet的基本结构353

11.2.5Servlet编译和安装354

11.3Servlet的生命周期354

11.3.1初始化355

11.3.2销毁355

11.4与客户端交互356

11.4.1提取Servlet信息356

11.4.2提取服务器信息357

11.4.3提取客户端信息358

11.4.4发送HTML信息359

11.5客户端跟踪361

11.5.1使用Cookie361

11.5.2使用Session362

11.6协作与通信364

11.6.1Applet与Servlet的通信366

11.6.2Servlet间的信息共享367

11.7程序举例367

11.8本章小结372

习题372

第12章JSP程序设计374

12.1JSP简介374

12.1.1什么是JSP程序374

12.1.2JSP语法概述376

12.1.3JSP内置对象380

12.1.4一个简单的JSP程序383

12.2JSP与JavaBean387

12.2.1JavaBean简介387

12.2.2在JSP程序中使用JavaBean389

12.3JSP标签库392

12.3.1标签处理类392

12.3.2标签库描述文件393

12.3.3在JSP程序中使用标签394

12.3.4自定义标签库395

12.4JSP与Servlet397

12.4.1Web应用程序的一般结构397

12.4.2JSP与Servlet间的信息共享398

12.4.3JSP与Servlet间的控制传递400

12.4.4Web应用程序举例400

12.5本章小结407

习题407

参考文献409

前言

1. 本书的编写背景

这是一本面向广大初学者的入门教材,是《C++语言程序设计》的姊妹篇,《C++语言程序设计》自1999年第一版出版以来,已经出版了3版,在清华大学等数十所大学的不同专业中使用,取得了良好的教学效果。与《C++语言程序设计》一样,本书同样是基于作者多年来在清华大学讲授“Java语言程序设计”的经验,以及作者本人的研究和开发经验编写的。本书的主要作者均为讲授“Java语言程序设计”课程教授,参与编写的其他作者均为该课程助教。

Java 语言是应用最广泛的面向对象的程序设计语言之一。面向对象的程序设计方法将数据及对数据的 *** 作方法封装在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成类。这样,程序模块间的关系简单,程序模块的独立性、数据的安全性具有良好的保障,通过继承与多态性,使程序具有很高的可重用性,使得软件的开发和维护都更为方便。

面向对象方法的出现,实际上是程序设计方法发展的一个返朴归真过程。软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法。

除了面向对象以外,Java语言的另一个突出特点是与平台无关,可以实现一次编写、各处运行。因此Java被广泛用于网络应用程序开发,以及各种电器设备的嵌入系统。

从语法上看,Java语言与C++语言一样,都是以C语言的语法为基础。那么,学习Java语言是否应该首先学习C语言呢?不是的,虽然Java语言借鉴了 C语言的语法,但是Java本身是一个完整的程序设计语言,而且它与C语言的程序设计思想是完全不同的。因此,Java语言是可以作为程序设计的入门语言来学习的,这正是本书的定位。学习本书并不要求读者有C语言基础,但是有一定基础的读者学习起来会感觉更容易。

2. 本书的特色

本书的特色是内容全面、深入浅出、立体配套。

本书将Java语言作为大学生的计算机程序设计入门语言,不仅详细介绍语言本身,而且介绍面向对象的设计思想和编程方法、UML建模语言、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架等实用开发技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是,不仅要使读者掌握Java语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。当然,要达到能够描述较复杂的问题域还需要学习面向对象的软件工程课等其他课程。

针对初学者和自学读者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言娓娓道来。读者还可以通过配套的《Java语言程序设计学生用书》,在实践中达到对内容的深入理解和熟练掌握。

为了方便教师备课,本书配有《Java语言程序设计教师用书》,包括电子教案(PPT文件)、教学要点和考试样题等。

3. 内容摘要

第1章 Java语言基础知识:作为全书的开篇,本章首先介绍面向对象程序设计的基本概念和Java语言的特点;通过几个简单而典型的例子使读者对Java程序有个感性认识;然后详细介绍Java的基本数据类型和表达式;最后讲解数组的概念、创建和引用。

第2章 类与对象的基本概念:主要介绍类与对象的基本概念、类的声明、对象的生成与销毁、类的组织,最后简要介绍了统一模型语言UML。

第3章 类的方法:介绍方法的流程控制和异常处理机制。

第4章 类的重用:介绍与类的重用有关的内容,包括类的继承、Object类、终结类与终结方法、抽象类、类的组合,以及Java包的应用。

第5章 接口与多态:介绍Java的接口、多态性的概念及实现方法。

第6章 输入输出流:概要介绍基本的输入输出流类,重点介绍最常用的文件读写方式。

第7章 对象群体的组织:介绍以对象数组组织对象群体的方法,概要介绍Java的集合框架,并对常用的集合类Vector、ArrayList、HashTable、HashMap以及与集合类一同使用的Enumeration及Iterator类进行详细介绍。

第8章 多线程:介绍线程的概念,以及如何创建及使用线程等问题。

第9章 图形用户界面:介绍Swing的基础和主要特点、使用方法,容器的层次结构,布局管理,以及如何在Java application和Java Applet中引入图形用户界面。

第10章 JDBC与数据库访问:首先介绍数据库的基本概念,以及基本SQL语句的使用,然后介绍在Java程序中如何实现对数据库的 *** 作。

第11章 Servlet程序设计:首先对与网络相关的概念进行简单讲解,然后简单介绍Java语言Servlet程序的开发方法。

第12章 JSP程序设计:介绍JSP的基本概念和语法,JSP与Java Bean的结合,标签库的应用,以及Web应用程序的MVC架构。

4. 使用指南及相关资源

作者本人使用本书授课时的讲课学时为32学时,实验学时为32学时,课外上机学时为32学时,课内外共96学时,每学时45分钟。建议讲课学时分配如下:

第1章 2学时,第2章 4学时,第3章 3学时,第4章 3学时,第5章3学时,第6章 4学时,第7章 2学时,第8章 3学时,第9章4学时,第10章 2学时,第11章 1学时,第12章1学时。

与本书配套的教材有《Java语言程序设计教师用书》、《Java语言程序设计学生用书》。

本书第1、第9、第11、第12章由郑莉、贾瑞、杨兴朋共同编写,第6、第8、第10章由王行言、贾瑞共同编写,第2~第5、第7章由马素霞编写,周莉梅、赵月斋参加了部分编写工作,全书由郑莉统稿。另外特别感谢刘宝林、刘兆宏、孟威对本书编写工作提供的帮助。

感谢读者选择使用本书,欢迎您对本书内容提出意见和建议,我们将不胜感激。作者的电子邮件地址:[email protected],来信标题请包含Java book。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11442894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存