drop by和 drop in都表示”順便拜訪“區(qū)別在于drop in后面可以跟on、at加賓語,而drop by一般不這么使用。如:Would you drop by when you are in town?你來城里就來玩好嗎?另外,drop in含有臨時生出主意造訪的意思,造訪未經(jīng)事先安排。
創(chuàng)新互聯(lián)公司主要業(yè)務(wù)有網(wǎng)站營銷策劃、成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、微信公眾號開發(fā)、小程序開發(fā)、H5響應(yīng)式網(wǎng)站、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、網(wǎng)絡(luò)營銷推廣資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
看一下它們的造句。
drop in的例子:Drop in to see us any time.隨便什么時候順便來看看我們.I' d like to drop in and see you sometime next week.我想在下周什么時候順便來看看你.It's improper to drop in on him so casually.這樣冒冒失失去找他可不好.
drop by的例子:I have to drop by the bank to get some money.我得到銀行去取一下錢Would you drop by when you are in town?你來城里就來玩好嗎?I'll drop by later to check on you.等一下我會順道去看看你.
#include "graphics.h"
#include "stdlib.h"
#include "stdio.h"
#include "fcntl.h"
#include "dos.h"
union REGS r;
struct MOUSE{
int getit;
int x1;
int y1;
int x2;
int y2;
}ms;
void MSB(float,float,float,float,int,int,int,int,int);
void mouse_drop(struct MOUSE *in);
/*定義鼠標(biāo)拖動的函數(shù),通過鼠標(biāo)的按下、放開來選定一個矩形區(qū)域*/
int data_processor(struct MOUSE m,float *x0,float *x1,float *y0,float *y1);
/*將鼠標(biāo)選定的區(qū)域轉(zhuǎn)化成MSB集的區(qū)域*/
void mouse_IQR(int *num,int *bx,int *cx,int *dx)
{/*調(diào)用鼠標(biāo)的中斷,在這里定義函數(shù)讓下面一些函數(shù)調(diào)用,以減少編程的重復(fù),
在這里,通過int86函數(shù)(在dos.h里)調(diào)用中斷,鼠標(biāo)的中斷號為:33h */
r.x.ax=*num;
r.x.bx=*bx;
r.x.cx=*cx;
r.x.dx=*dx;
int86(0x33,r,r);
*bx=r.x.bx;
*cx=r.x.cx;
*dx=r.x.dx;
*num=r.x.ax;
}
int init_mouse()
{
/*初試化鼠標(biāo),查詢鼠標(biāo)驅(qū)動有沒有安裝,功能號為 0 */
int num=0;
mouse_IQR(num,num,num,num);
if(num!=-1)
return 1;
else return 0;
}
void mouse_show();
void mouse_position(int *x,int *y)
{/*鼠標(biāo)在屏幕中所處的位置*/
int button=0,num=3;
mouse_show();
mouse_IQR(num,button,x,y);
}
void mouse_hide()
{/*隱藏鼠標(biāo)光標(biāo)*/
int num=2;
mouse_IQR(num,num,num,num);
}
void mouse_show()
{/*顯示鼠標(biāo)光標(biāo)*/
int num=1;
mouse_IQR(num,num,num,num);
}
int mouse_click(int k)
{/*查詢鼠標(biāo)是使用左鍵(返回1)還是右鍵(返回2)*/
int bx=0,num=3;
mouse_IQR(num,bx,num,num);
return(bxk);
}
void waiton(int buttom)
{/*等待鼠標(biāo)動作*/
if(buttom==1)
while(mouse_click(1));
if(buttom==2)
while(mouse_click(2));
}
int mousexy(int x1,int y1,int x2,int y2)
{/*查詢鼠標(biāo)是否在區(qū)域內(nèi)*/
int x,y;
mouse_position(x,y);
if(xx1xy1yL||m-1e10) break;
x=xx;
y=yy;
}
color=n%16;
putpixel(x1+i,y1+j,color);
}
}
}
void mouse_drop(struct MOUSE *in)
{
char out[20];
int x,y;
int oldx,oldy;
struct MOUSE r;
r=*in;
setwritemode(1);
setlinestyle(USERBIT_LINE,0x7777,1);
setcolor(15);
if(r.getit==1)
{
mouse_hide();
rectangle(r.x1,r.y1,r.x2,r.y2);
mouse_show();
}
mouse_position(x,y);
r.x1=x;
r.y1=y;
oldx=x;
oldy=y;
r.getit=1;
mouse_hide();
rectangle(x,y,x,y);
mouse_show();
while(mouse_click(1)) {mouse_position(x,y);
if(oldx!=x || oldy!=y){
mouse_hide();
rectangle(r.x1,r.y1,x,y);
rectangle(r.x1,r.y1,oldx,oldy);
mouse_show();
oldx=x;
oldy=y;
}
if(mouse_click(2)){
r.getit=0;
mouse_hide();
rectangle(r.x1,r.y1,oldx,oldy);
mouse_show();
waiton(2);
break;}
}
if(r.getit==1){
r.x2=x;
r.y2=y;
if(x==r.x1 r.y1==y)
r.getit=0;
else
r.getit=1;
}
setlinestyle(SOLID_LINE,0,1);
*in=r;
waiton(1);
setwritemode(0);
setmouse(0,0,getmaxx(),getmaxy());
}
int data_processor(struct MOUSE m,float *x0,
float *x1,float *y0,float *y1)
{
float d1,l1,d2,l2,d,l;
float xx0,xx1,yy0,yy1,x,y;
d1=*x1-*x0;
l1=*y1-*y0;
d2=637;
l2=477;
xx0=m.x1;
xx1=m.x2;
yy0=m.y1;
yy1=m.y2;
if(xx0==xx1 || yy0==yy1) return(0);
if(xx0xx1)
{x=xx0;
xx0=xx1;
xx1=x;
}
if(yy0yy1)
{x=yy0;
yy0=yy1;
yy1=x;
}
d=1;
l=1;
x=*x0;
y=*y0;
*x0=x+(xx0-d)*d1/d2;
*x1=x+(xx1-d)*d1/d2;
*y0=y+(yy0-l)*l1/l2;
*y1=y+(yy1-l)*l1/l2;
if(*x0==*x1 || *y0==*y1)
return(0);
else
return(1);
}
不懂再問!
#include stdio.h
#include string.h
#include stdlib.h
typedef struct tagTeam {
struct tagTeam *next;
char name[256];
int wins;
int draws;
int losses;
int goal;
int drop;
int goalDiff;
int points;
} Team;
void updateTeam(Team *team, int goal, int drop)
{
team-wins += goal drop ? 1 : 0;
team-draws += goal == drop ? 1 : 0;
team-losses += goal drop ? 1 : 0;
team-goal += goal;
team-drop += drop;
team-goalDiff = team-goal - team-drop;
team-points = team-wins * 3 + team-draws;
}
Team* createEmptyTeam()
{
return (Team *)malloc(sizeof(Team));
}
Team* createTeam(const char *name, int goal, int drop)
{
Team *team = (Team *)malloc(sizeof(Team));
team-next = NULL;
strcpy(team-name, name);
team-wins = 0;
team-draws = 0;
team-losses = 0;
team-goal = 0;
team-drop = 0;
team-goalDiff = 0;
team-points = 0;
updateTeam(team, goal, drop);
return team;
}
void deleteTeam(Team *team)
{
free(team);
}
void appendTeam(Team **list, Team *team)
{
if (*list != NULL)
team-next = *list;
*list = team;
}
Team* findTeam(Team *list, const char *name)
{
Team *team = list;
while (team != NULL) {
if (strcmp(team-name, name) == 0)
break;
team = team-next;
}
return team;
}
int saveTeamList(const Team *list)
{
FILE *file;
const Team *team;
file = fopen("standing.bin", "wb");
if (file == NULL) {
printf("Failed to open the file standing.bin\n");
return 1;
}
team = list;
while (team != NULL) {
if (fwrite(team, sizeof(*team), 1, file) != 1) {
printf("Failed to save the team infomation!\n");
return 2;
}
team = team-next;
}
fclose(file);
return 0;
}
int loadTeamList(Team **list)
{
FILE *file;
Team team;
file = fopen("standing.bin", "rb");
if (file == NULL) {
printf("Failed to open the file standing.bin\n");
return 1;
}
while (1) {
Team *team = createEmptyTeam();
if (fread(team, sizeof(*team), 1, file) == 1) {
team-next = NULL;
appendTeam(list, team);
} else {
deleteTeam(team);
break;
}
}
fclose(file);
return 0;
}
void printTeam(const Team *team)
{
printf(
"Team: %s\n"
" wins: %d\n"
" draws: %d\n"
" losses: %d\n"
" goal: %d\n"
" drop: %d\n"
" goalDiff: %d\n"
" points: %d\n",
team-name, team-wins,
team-draws, team-losses,
team-goal, team-drop,
team-goalDiff, team-points
);
}
void printTeamList(const Team *list)
{
const Team *team = list;
int index = 1;
while (team != NULL) {
printf("%d ", index);
printTeam(team);
team = team-next;
index++;
}
}
void storeTeamInfo(
Team **list,
const char *name,
int goal,
int drop
)
{
Team *team = findTeam(*list, name);
if (team != NULL)
updateTeam(team, goal, drop);
else {
team = createTeam(name, goal, drop);
appendTeam(list, team);
}
}
void parseTeamInfo(
const char *matchResult,
char *aName,
int *goal,
int *drop,
char *bName
)
{
sscanf(matchResult, "%s %d:%d %s", aName, goal, drop, bName);
}
int main(void)
{
Team *teamList = NULL;
FILE *file;
char matchResult[1024];
file = fopen("MatchResult.txt", "r");
if (file == NULL) {
printf("Failed to open the file MatchResult.txt\n");
return 1;
}
// 注意,僅支持文件一行不超過1024個字符
// 同時,每一行的格式必須正確。
while (fgets(matchResult, 1024, file)) {
char aName[256], bName[256];
int goal, drop;
parseTeamInfo(matchResult, aName, goal, drop, bName);
storeTeamInfo(teamList, aName, goal, drop);
storeTeamInfo(teamList, bName, drop, goal);
}
fclose(file);
if (saveTeamList(teamList)) {
printf("Failed to save the team list!\n");
return 2;
}
teamList = NULL;
if (loadTeamList(teamList)) {
printf("Failed to load the team list!\n");
return 3;
}
printTeamList(teamList);
return 0;
}
------------------------
MatchResult.txt文件格式:
Abc 4:1 Def
Def 3:2 hij
限制:球隊名中間不能加空格。 且球隊名不長于256個字符。
如果球隊名中間出現(xiàn)空格,可用“_”代替,或修改parseTeamInfo函數(shù)。
256是一個我直接使用的數(shù)字,可用宏替代之。
最后,我沒有釋放內(nèi)存。
一、含義不同
1、存儲過程:存儲過程是 SQL 語句和可選控制流語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。
2、函數(shù):是由一個或多個 SQL 語句組成的子程序,可用于封裝代碼以便重新使用。?函數(shù)限制比較多,如不能用臨時表,只能用表變量等
二、使用條件不同
1、存儲過程:可以在單個存儲過程中執(zhí)行一系列 SQL 語句。而且可以從自己的存儲過程內(nèi)引用其它存儲過程,這可以簡化一系列復(fù)雜語句。
2、函數(shù):自定義函數(shù)諸多限制,有許多語句不能使用,許多功能不能實現(xiàn)。函數(shù)可以直接引用返回值,用表變量返回記錄集。但是,用戶定義函數(shù)不能用于執(zhí)行一組修改全局?jǐn)?shù)據(jù)庫狀態(tài)的操作。
三、執(zhí)行方式不同
1、存儲過程:存儲過程可以返回參數(shù),如記錄集,函數(shù)只能返回值或者表對象。存儲過程的參數(shù)有in,out,inout三種,存儲過程聲明時不需要返回類型。
2、函數(shù):函數(shù)參數(shù)只有in,而函數(shù)需要描述返回類型,且函數(shù)中必須包含一個有效的return語句。
參考資料鏈接:百度百科-存儲過程
參考資料鏈接:百度百科-函數(shù)
Delphi,SQL,PHP,ASP,JSP等.
下為引用,介紹的很詳細(xì)了。
計算機(jī)語言的種類非常的多,總的來說可以分成機(jī)器語言,匯編語言,高級語言三大類。
電腦每做的一次動作,一個步驟,都是按照以經(jīng)用計算機(jī)語言編好的程序來執(zhí)行的,程序是計算機(jī)要執(zhí)行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機(jī)一定要通過計算機(jī)語言向計算機(jī)發(fā)出命令。
計算機(jī)所能識別的語言只有機(jī)器語言,即由0和1構(gòu)成的代碼。但通常人們編程時,不采用機(jī)器語言,因為它非常難于記憶和識別。
目前通用的編程語言有兩種形式:匯編語言和高級語言。
匯編語言的實質(zhì)和機(jī)器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標(biāo)識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成:指令、偽指令和宏指令。匯編程序的每一句指令只能對應(yīng)實際操作過程中的一個很細(xì)微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復(fù)雜、容易出錯,而且使用匯編語言編程需要有更多的計算機(jī)專業(yè)知識,但匯編語言的優(yōu)點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現(xiàn)的,而且源程序經(jīng)匯編生成的可執(zhí)行文件不僅比較小,而且執(zhí)行速度很快。
高級語言是目前絕大多數(shù)編程者的選擇。和匯編語言相比,它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細(xì)節(jié),例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由于省略了很多細(xì)節(jié),編程者也就不需要有太多的專業(yè)知識。
高級語言主要是相對于匯編語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,如目前流行的VB、VC、FoxPro、Delphi等,這些語言的語法、命令格式都各不相同。
高級語言所編制的程序不能直接被計算機(jī)識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行,按轉(zhuǎn)換方式可將它們分為兩類:
解釋類:執(zhí)行方式類似于我們?nèi)粘I钪械摹巴暦g”,應(yīng)用程序源代碼一邊由相應(yīng)語言的解釋器“翻譯”成目標(biāo)代碼(機(jī)器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨立執(zhí)行的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器,但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應(yīng)用程序。
編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機(jī)器語言),因此其目標(biāo)程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(biāo)文件(* .OBJ)才能執(zhí)行,只有目標(biāo)文件而沒有源代碼,修改很不方便。現(xiàn)在大多數(shù)的編程語言都是編譯型的,例如Visual C++、Visual Foxpro、Delphi等。
[NextPage]
學(xué)習(xí)編程,從何入手
如果您想學(xué)習(xí)編程,卻又不知從何入手,那么您不妨看看下面的幾種學(xué)習(xí)方案,可能會給您一些啟示吧!
==============================================
方案一 Basic語言 Visual Basic
優(yōu)點
(1)Basic 簡單易學(xué),很容易上手。
(2)Visual Basic 提供了強(qiáng)大的可視化編程能力,可以讓你輕松地做出漂亮的程序。
(3)眾多的控件讓編程變得象壘積木一樣簡單。
(4)Visual Basic 的全部漢化讓我們這些見了English就頭大的人喜不自禁。
缺點
(1)Visual Basic 不是真正的面向?qū)ο蟮拈_發(fā)文具。
(2)Visual Basic 的數(shù)據(jù)類型太少,而且不支持指針,這使得它的表達(dá)能力很有限。
(3)Visual Basic 不是真正的編譯型語言,它產(chǎn)生的最終代碼不是可執(zhí)行的,是一種偽代碼。它需要一個動態(tài)鏈接庫去解釋執(zhí)行,這使得Visual Basic 的編譯速度大大變慢。
綜述:方案一適合初涉編程的朋友,它對學(xué)習(xí)者的要求不高,幾乎每個人都可以在一個比較短的時間里學(xué)會vB編程,并用VB 做出自己的作品。對于那些把編程當(dāng)做游戲的朋友來說,VB 是您最佳的選擇。
Basic/Visual Basic簡介
==============================================
方案二 Pascal語言 Delphi
優(yōu)點
(1)Pascal語言結(jié)構(gòu)嚴(yán)謹(jǐn),可以很好地培養(yǎng)一個人的編程思想。
(2)Delphi是一門真正的面向?qū)ο蟮拈_發(fā)工具,并且是完全的可視化。
(3)Delphi使用了真編譯,可以讓你的代碼編譯成為可執(zhí)行的文件,而且編譯速度非常快。
(4)Delphi具有強(qiáng)大的數(shù)據(jù)庫開發(fā)能力,可以讓你輕松地開發(fā)數(shù)據(jù)庫。
缺點
Delphi幾乎可以說是完美的,只是Pascal語言的過于嚴(yán)謹(jǐn)讓人感覺有點煩。
綜述: 方案二比較適合那些具有一定編程基礎(chǔ)并且學(xué)過Pascal語言的朋友。
Pascal語言簡介
Delphi簡介
==============================================
方案三 C語言 Visual C++
優(yōu)點
(1)C語言靈活性好,效率高,可以接觸到軟件開發(fā)比較底層的東西。
(2)微軟的MFC庫博大精深,學(xué)會它可以讓隨心所欲地進(jìn)行編程。
(3)VC是微軟制作的產(chǎn)品,與操作系統(tǒng)的結(jié)合更加緊密。
缺點
對使用者的要求比較高,既要具備豐富的C語言編程經(jīng)驗,又要具有一定的WINDOWS編程基礎(chǔ),它的過于專業(yè)使得一般的編程愛好者學(xué)習(xí)起來會有不小的困難。
綜述: VC是程序員用的東西。如果你是一個永不滿足的人,而且可以在編程上投入很大的精力和時間,那么學(xué)習(xí)VC你一定不會后悔的。
C語言簡介
==============================================
方案四 C++語言 C++ Builder
優(yōu)點
(1)C++語言的優(yōu)點全部得以繼承。
(2)完全的可是化。
(3)極強(qiáng)的兼容性,支持OWL、VCL和MFC三大類庫。
(4)編譯速度非常快。
缺點
由于推出的時間太短,關(guān)于它的各種資料還不太多。
綜述:我認(rèn)為C++ Builder 是最好的編程工具。它既保持了C++語言編程的優(yōu)點,又做到了完全的可視化。
C語言簡介
==============================================
方案五 SQL語言 Power Builder
對于一些傳統(tǒng)的數(shù)據(jù)開發(fā)人員來說,F(xiàn)oxpro系列也許讓他們感到更加熟悉。但是對于初學(xué)者來說,PowerBuilder也許是最好的數(shù)據(jù)庫開發(fā)工具。各種各樣的控件,功能強(qiáng)大的PowerBuilder語言都會幫助你開發(fā)出自己的數(shù)據(jù)庫應(yīng)用程序。
[NextPage]
JSP簡介
在Sun正式發(fā)布JSP(Java Server Pages)之后,這種新的Web應(yīng)用開發(fā)技術(shù)很快引起了人們的關(guān)注。JSP為創(chuàng)建高度動態(tài)的Web應(yīng)用提供了一個獨特的開發(fā)環(huán)境。按照 Sun 的說法,JSP能夠適應(yīng)市場上包括Apache WebServer 、IIS4.0在內(nèi)的85%的服務(wù)器產(chǎn)品。
JSP與ASP的簡單比較
JSP與Microsoft的ASP技術(shù)非常相似。兩者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程序代碼的能力。在ASP或JSP環(huán)境下,HTML代碼主要負(fù)責(zé)描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴于Web服務(wù)器,而ASP和JSP頁面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP和JSP都是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。
ASP的編程語言是VBScript之類的腳本語言,JSP使用的是Java,這是兩者最明顯的區(qū)別。
此外,ASP與JSP還有一個更為本質(zhì)的區(qū)別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程序代碼。在ASP下,VBScript代碼被ASP引擎解釋執(zhí)行;在JSP下,代碼被編譯成Servlet并由Java虛擬機(jī)執(zhí)行,這種編譯操作僅在對JSP頁面的第一次請求時發(fā)生。
運行環(huán)境
執(zhí)行 JSP 代碼需要在服務(wù)器上安裝 JSP 引擎。此處我們使用的是 Sun 的 JavaServer Web Development Kit ( JSWDK )。為便于學(xué)習(xí),這個軟件包提供了大量可供修改的示例。安裝 JSWDK 之后,只需執(zhí)行 startserver 命令即可啟動服務(wù)器。在默認(rèn)配置下服務(wù)器在端口 8080 監(jiān)聽,使用 即可打開缺省頁面。
在運行 JSP 示例頁面之前,請注意一下安裝 JSWDK 的目錄,特別是" work "子目錄下的內(nèi)容。執(zhí)行示例頁面時,可以在這里看到 JSP 頁面如何被轉(zhuǎn)換成 Java 源文件,然后又被編譯成 class 文件(即 Servlet )。 JSWDK 軟件包中的示例頁面分為兩類,它們或者是 JSP 文件,或者是包含一個表單的 HTML 文件,這些表單均由 JSP 代碼處理。與 ASP 一樣, JSP 中的 Java 代碼均在服務(wù)器端執(zhí)行。因此,在瀏覽器中使用"查看源文件"菜單是無法看到 JSP 源代碼的,只能看到結(jié)果 HTML 代碼。所有示例的源代碼均通過一個單獨的" examples "頁面提供。
Java Servlet是一種開發(fā)Web應(yīng)用的理想構(gòu)架。 JSP以Servlet技術(shù)為基礎(chǔ),又在許多方面作了改進(jìn)。JSP頁面看起來象普通HTML頁面,但它允許嵌入執(zhí)行代碼,在這一點上,它和ASP技術(shù)非常相似。利用跨平臺運行的JavaBean 組件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。JSP必將成為ASP技術(shù)的有力競爭者。
[NextPage]
SQL語言簡介
SQL全稱是“結(jié)構(gòu)化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實驗室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué),所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應(yīng)用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的數(shù)據(jù)庫管理系統(tǒng),還是像Visual Foxporo,PowerBuilder這些微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。
Structured Query Language包含4個部分:
數(shù)據(jù)查詢語言DQL-Data Query Language SELECT
數(shù)據(jù)操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE
數(shù)據(jù)定義語言DQL-Data Definition Language CREATE, ALTER, DROP
數(shù)據(jù)控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK
SQL的歷史
在70年代初,E.E.Codd首先提出了關(guān)系模型。70年代中期,IBM公司在研制 SYSTEM R關(guān)系數(shù)據(jù)庫管理系統(tǒng)中研制了SQL語言,最早的SQL語言(叫SEQUEL2)是在1976 年 11 月的IBM Journal of RD上公布的。
1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS數(shù)據(jù)庫系統(tǒng)中也實現(xiàn)了SQL。
1986年10月,美國ANSI采用SQL作為關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言(ANSI X3. 135-1986),后為國際標(biāo)準(zhǔn)化組織(ISO)采納為國際標(biāo)準(zhǔn)。
1989年,美國ANSI采納在ANSI X3.135-1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標(biāo)準(zhǔn)語言,稱為ANSI SQL 89, 該標(biāo)準(zhǔn)替代ANSI X3.135-1986版本。該標(biāo)準(zhǔn)為下列組織所采納:
● 國際標(biāo)準(zhǔn)化組織(ISO),為ISO 9075-1989報告“Database Language SQL With Integrity Enhancement”
● 美國聯(lián)邦政府,發(fā)布在The Federal Information Processing Standard Publication(FIPS PUB)127
目前,所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)支持某些形式的SQL語言, 大部分?jǐn)?shù)據(jù)庫打算遵守ANSI SQL89標(biāo)準(zhǔn)。
SQL的優(yōu)點
SQL廣泛地被采用正說明了它的優(yōu)點。它使全部用戶,包括應(yīng)用程序員、DBA管理員和終端用戶受益非淺。
(1) 非過程化語言
SQL是一個非過程化的語言,因為它一次處理一個記錄,對數(shù)據(jù)提供自動導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對單個記錄進(jìn)行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。 SQL不要求用戶指定對數(shù)據(jù)的存放方法。 這種特性使用戶更易集中精力于要得到的結(jié)果。所有SQL語句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對指定數(shù)據(jù)存取的最快速度的手段。查詢優(yōu)化器知道存在什么索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。
(2) 統(tǒng)一的語言
SQL可用于所有用戶的DB活動模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、 應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學(xué)會,最高級的命令在幾天內(nèi)便可掌握。 SQL為許多任務(wù)提供了命令,包括:
● 查詢數(shù)據(jù)
● 在表中插入、修改和刪除記錄
● 建立、修改和刪除數(shù)據(jù)對象
● 控制對數(shù)據(jù)和數(shù)據(jù)對象的存取
● 保證數(shù)據(jù)庫一致性和完整性
以前的數(shù)據(jù)庫管理系統(tǒng)為上述各類操作提供單獨的語言,而SQL 將全部任務(wù)統(tǒng)一在一種語言中。
(3) 是所有關(guān)系數(shù)據(jù)庫的公共語言
由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉(zhuǎn)到另一個。所有用SQL編寫的程序都是可以移植的。
[NextPage]
Java語言簡介
一. Java的由來
當(dāng)1995年SUN推出Java語言之后,全世界的目光都被這個神奇的語言所吸引。那么Java到底有何神奇之處呢?
Java語言其實最是誕生于1991年,起初被稱為OAK語言,是SUN公司為一些消費性電子產(chǎn)品而設(shè)計的一個通用環(huán)境。他們最初的目的只是為了開發(fā)一種獨立于平臺的軟件技術(shù),而且在網(wǎng)絡(luò)出現(xiàn)之前,OAK可以說是默默無聞,甚至差點夭折。但是,網(wǎng)絡(luò)的出現(xiàn)改變了OAK的命運。
在Java出現(xiàn)以前。Internet上的信息內(nèi)容都是一些乏味死板的HTML文檔。這對于那些迷戀于WEB瀏覽的人們來說簡直不可容忍。他們迫切希望能在WEN中看到一些交互式的內(nèi)容,開發(fā)人員也極希望能夠在WEB上創(chuàng)建一類無需考慮軟硬件平臺就可以執(zhí)行的應(yīng)用程序,當(dāng)然這些程序還要有極大的安全保障。對于用戶的這種要求,傳統(tǒng)的編程語言顯得無能為力,面SUN的工程師敏銳地察覺到了這一點,從1994年起,他們開始將OAK技術(shù)應(yīng)用于WEB上,并且開發(fā)出了HotJava的第一個版本。當(dāng)SUN公司1995年正式以Java這個名字推出的時候,幾乎所有的WEB開發(fā)人員都想到:噢,這正是我想要的。于是Java成了一顆耀眼的明星,丑小鴨一下了變成了白天鵝。
二. Java的定義
Java是一種簡單的,面象對象的,分布式的,解釋的,鍵壯的安全的,結(jié)構(gòu)的中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言。
Java的開發(fā)環(huán)境有不同的版本,如sun公司的Java Developers Kit, 簡稱 JDK。后來微軟公司推出了支持Java規(guī)范的Microsoft Visual J++ Java開發(fā)環(huán)境,簡稱 VJ++。
三. Java的特點
1. 平臺無關(guān)性
平臺無關(guān)性是指Java能運行于不同的平臺。Java引進(jìn)虛擬機(jī) 原理,并運行于虛擬機(jī),實現(xiàn)不同平臺的Java接口之間。使 用Java編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類型與 機(jī)器無關(guān),Java虛擬機(jī)(Java Virtual Machine)是建立在 硬件和操作系統(tǒng)之上,實現(xiàn)Java二進(jìn)制代碼的解釋執(zhí)行功能, 提供于不同平臺的接口的。
2. 安全性
Java的編程類似C++,學(xué)習(xí)過C++的讀者將很快掌握J(rèn)ava的精 髓。Java舍棄了C++的指針對存儲器地址的直接操作,程序 運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指 針侵入系統(tǒng)。Java對程序提供了安全管理器,防止程序的 非法訪問。
3. 面向?qū)ο?/p>
Java 吸取了C++面向?qū)ο蟮母拍?將數(shù)據(jù)封裝于類中,利用類 的優(yōu)點,實現(xiàn)了程序的簡潔性和便于維護(hù)性。類的封裝性、 繼承性等有關(guān)對象的特性,使程序代碼只需一次編譯,然后 通過上述特性反復(fù)利用。程序員只需把主要精力用在類和接 口的設(shè)計和應(yīng)用上。Java 提供了眾多的一般對象的類,通 過繼承即可使用父類的方法。在 Java 中,類的繼承關(guān)系是單一的非多重的,一個子類 只有一個父類,子類的父類又有一個父類。Java 提供的 Object 類及其子類的繼承關(guān)系如同一棵倒立的樹形,根類 為 Object 類, Object 類功能強(qiáng)大,經(jīng)常會使用到它及其 它派生的子類。
4. 分布式
Java建立在擴(kuò)展TCP/IP網(wǎng)絡(luò)平臺上。庫函數(shù)提供了用HTTP和FTP協(xié)議傳送和接受信息的方法。這使得程序員使用網(wǎng)絡(luò)上的文件和使用本機(jī)文件一樣容易。
5. 鍵壯性
Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自已操縱內(nèi)存減少了內(nèi)存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大提高了開發(fā)Java應(yīng)用程序的周期。Java提供: Null指針檢測、 數(shù)組邊界檢測、 異常出口、 Byte code校驗。
四. Java與C/C++語言
Java提供了一個功能強(qiáng)大語言的所有功能,但幾乎沒有一點含混特征。C++安全性不好,但C和C++被大家接受,所以Java設(shè)計成C++形式,讓大家很容易學(xué)習(xí)。
Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,并增加了一些很有用的功能,如自動收集碎片。
Java去掉了以下幾個C和C++功能:
指針運算
結(jié)構(gòu)
typedefs
#define
需要釋放內(nèi)存
這將減少了平常出錯的50%。而且,Java很小,整個解釋器只需215K的RAM。
面象對象:Java實現(xiàn)了C++的基本面象對象技術(shù)并有一些增強(qiáng),(為了語言簡單,刪除了一些功能)。Java處理數(shù)據(jù)方式和用對象接口處理對象數(shù)據(jù)方式一樣。
五. Java與Internet
我們知道,早先的 www 僅可以傳送文本和圖片,Java的出現(xiàn)實現(xiàn)了互動的頁面,是一次偉大的革命。
Java并不是為 Internet,WWW而設(shè)計的,它也可以用來編寫?yīng)毩⒌膽?yīng)用程序。Java 是一種面向?qū)ο笳Z言。Java 語言類似于 C++ 語言,所以已熟練掌握 C++語言的編程人員,再學(xué)習(xí) Java 語言就容易得多!Java 程序需要編譯。實際上有兩種 Java 程序:一種 Java 應(yīng)用程序是一個完整的程序,如 Web 瀏覽器。一種 Java 小應(yīng)用程序是運行于 Web 瀏覽器中的一個程序.
Java程序和它的瀏覽器HotJava,提供了可讓你的瀏覽器運行程序的方法。你能從你的瀏覽器里直接播放聲音。你還能播放頁面里的動畫。Java還能告訴你的瀏覽器怎樣處理新的類型文件。當(dāng)我們能在2400 baud線上傳輸視頻圖象時,HotJava將能顯示這些視頻。
當(dāng)今Internet的一大發(fā)展趨勢是電子商務(wù),而Internet的安全問題是必須解決的問題,通常大的部門應(yīng)設(shè)置防火墻,阻止非法侵入。
電子商務(wù)是當(dāng)今的熱門話題,然而傳統(tǒng)的編程語言難以勝任電子商務(wù)系統(tǒng),電子商務(wù)要求程序代碼具有基本的要求:安全、可靠、同時要求能 與運行于不同平臺的機(jī)器的全世界客戶開展業(yè)務(wù)。Java以其強(qiáng)安全性、平臺無關(guān)性、硬件結(jié)構(gòu)無關(guān)性、語言簡潔同時面向?qū)ο螅诰W(wǎng)絡(luò)編程語言中占據(jù)無可比擬的優(yōu)勢,成為實現(xiàn)電子商務(wù)系統(tǒng)的首選語言。
Java程序被放置在Internet服務(wù)器上,當(dāng)用戶訪問服務(wù)器時,Java程序被下載到本地的用戶機(jī)上,由瀏覽器解釋運行。
[NextPage]
PowerBuilder簡介
PowerBuilder的產(chǎn)生
PowerBuilder是美國著名的數(shù)據(jù)庫應(yīng)用開發(fā)工具生產(chǎn)廠商PowerSoft推出的成功產(chǎn)品,其第一版于1991年6月正式投入市場。它是完全按照客戶/服務(wù)器體系結(jié)構(gòu)研制設(shè)計的,采用面向?qū)ο蠹夹g(shù),圖形化的應(yīng)用開發(fā)環(huán)境,是數(shù)據(jù)庫的前端開發(fā)工具。
PowerBuilder的特點
它支持應(yīng)用系統(tǒng)同時訪問多種數(shù)據(jù)庫,其中既包括Oracel,Sybase之類的大型數(shù)據(jù)庫,又包括FOXPRO之類支持ODBC接口的小型數(shù)據(jù)庫,PowerBuilder是完全可視化的數(shù)據(jù)庫開發(fā)工具,它提供了大量的控件,大大加快了項目的開發(fā)速度,也使開發(fā)者更容易掌握數(shù)據(jù)庫的開發(fā)。
它使用的編程語言叫做工PowerScripr,它也是一種高級的,結(jié)構(gòu)化的編程語言。PowerScript提供了一套完整的嵌入式SQL語句,開發(fā)人員可以像使用其它語句一樣自由地使用SQL語言,這樣就大大增強(qiáng)了程序操縱和訪問數(shù)據(jù)庫的能力。可以說PowerBuilder既適合初學(xué)者快速學(xué)習(xí)數(shù)據(jù)庫的開發(fā),又可以讓有經(jīng)驗的開發(fā)人員開發(fā)出功能強(qiáng)大的數(shù)據(jù)庫,是一種適用面非常廣的開發(fā)工具。
PowerBuilder是一個用來進(jìn)行客戶/服務(wù)器開發(fā)的完全的可視化開發(fā)環(huán)境。使用PowerBuilder,你可以用一種可視的直觀的方式來創(chuàng)建應(yīng)用程序的用戶界面和數(shù)據(jù)庫接口。這是一個總的概念,實際上是開發(fā)人員使用PowerBuilder去開發(fā)應(yīng)用程序,由于所開發(fā)的各種應(yīng)用程序充分利用了圖形用戶接口(GUI)的優(yōu)點,所以PowerBuilder被認(rèn)為是一個圖形工具。
在客戶/服務(wù)器結(jié)構(gòu)的應(yīng)用中,PowerBuilder具有描述多個數(shù)據(jù)庫連接與檢索的能力。特別是PowerBuilder能從大多數(shù)流行的RDBMS中存取數(shù)據(jù),且不管數(shù)據(jù)存放在什麼地方;另外,各種應(yīng)用程序又可以獨立于RDBMS,因為PowerBuilder可以使用數(shù)據(jù)庫的標(biāo)準(zhǔn)操作語言SQL(結(jié)構(gòu)化查詢語言)進(jìn)行。
使用PowerBuilder,可以很容易地開發(fā)出功能強(qiáng)大的圖形界面的訪問服務(wù)器數(shù)據(jù)庫的應(yīng)用程序,PowerBuilder提供了建立符合工業(yè)標(biāo)準(zhǔn)的應(yīng)用程序(例如訂單登記、會計及制造系統(tǒng))所需的所有工具。
PowerBuilder應(yīng)用程序由窗口組成,這些窗口包含用戶與之交互的控件。開發(fā)人員可以使用所有標(biāo)準(zhǔn)空間(如按鈕、復(fù)選框、下拉式列表框或編輯框)以及PowerBuilder提供的特殊的使應(yīng)用程序更易于開發(fā)和使用的控件。
通常人們把PowerBuilder看成是一種開發(fā)工具,實際上它比其他工具強(qiáng)得多,是一種強(qiáng)有力的開發(fā)環(huán)境。開發(fā)人員不僅能用它來開發(fā)用戶容易使用的各種應(yīng)用程序還可以通過PowerBuilder修改數(shù)據(jù)庫,利用400多個內(nèi)部定義函數(shù),可以開發(fā)能和其他應(yīng)用程序進(jìn)行的各種應(yīng)用程序。
PowerBuilder正在成為客戶/服務(wù)器應(yīng)用開發(fā)的標(biāo)準(zhǔn)。相對于其他任何客戶/服務(wù)器開發(fā)環(huán)境,PowerBuilder使開發(fā)人員的工作更快、成本更低、質(zhì)量更高、功能更強(qiáng)。
PowerBuilder為應(yīng)用開發(fā)提供了全面綜合性的支持,可以分別概括為如下幾點:
事件驅(qū)動的應(yīng)用程序
功能強(qiáng)大的編程語言與函數(shù)
面向?qū)ο蟮木幊?/p>
跨平臺開發(fā)
開放的數(shù)據(jù)庫連結(jié)系統(tǒng)
PowerBuilder開發(fā)環(huán)境
PowerBuilder開發(fā)環(huán)境由一系列集成的圖形畫板(Painter)組成,應(yīng)用開發(fā)人員通過簡單的鼠標(biāo)操作即可設(shè)計、建立、交互檢驗和測試客戶/服務(wù)器應(yīng)用程序。
[NextPage]
Delphi簡介
Delphi這個名字源于古希臘的城市名。它集中了第三代語言
隨著互聯(lián)網(wǎng)編程技術(shù)的不斷發(fā)展,現(xiàn)在大多數(shù)的軟件開發(fā)都是通過編程語言來實現(xiàn)的,今天我們就一起來了解一下C語言編程開發(fā)技術(shù)都有哪些優(yōu)勢和劣勢。
C語言的一些好的體驗
一次通過閱讀POV-Ray源代碼學(xué)會如何在C語言中實現(xiàn)面向?qū)ο缶幊獭?/p>
通過閱讀GTK+源代碼了解C語言代碼的清晰、干凈和可維護(hù)性。
通過閱讀SIOD和Guile的源代碼,知道如何使用C語言實現(xiàn)Scheme解析器。
使用C語言寫出GNOMEEye的初始版本,并對MicroTile渲染進(jìn)行調(diào)優(yōu)。
C語言的一些不好的體驗
在Evolution團(tuán)隊時,很多東西老是崩潰。那個時候還沒有Valgrind,為了得到Purify這個軟件,需要購買一臺Solaris機(jī)器。
調(diào)試gnome-vfs線程死鎖問題。
調(diào)試Mesa,卻無果。
接手Nautilus-share的初始版本,卻發(fā)現(xiàn)代碼里面居然沒有使用free()。
想要重構(gòu)代碼,卻不知道該如何管理好內(nèi)存。
想要打包代碼,卻發(fā)現(xiàn)到處是全局變量,而且沒有靜態(tài)函數(shù)。
但不管怎樣,還是來說說那些Rust里有但C語言里沒有的東西吧。
自動資源管理
Rust從C++那里借鑒了一些想法,如RAII(ResourceAcquisitionIsInitialization,資源獲取即初始化)和智能指針,并加入了值的單一所有權(quán)原則,還提供了自動化的決策性資源管理機(jī)制。
自動化:不需要手動調(diào)用free()。內(nèi)存使用完后會自動釋放,文件使用完后會自動關(guān)閉,互斥鎖在作用域之外會自動釋放。如果要封裝外部資源,基本上只要實現(xiàn)Drop這個trait就可以了。封裝過的資源就像是編程語言的一部分,因為你不需要去管理它的生命周期。
決策性:資源被創(chuàng)建(內(nèi)存分配、初始化、打開文件等),然后在作用域之外被銷毀。根本不存在垃圾收集這回事:代碼執(zhí)行完就都結(jié)束了。程序數(shù)據(jù)的生命周期看起來就像是函數(shù)調(diào)用樹。
如果在寫代碼時老是忘記調(diào)用這些方法(free/close/destroy),或者發(fā)現(xiàn)以前寫的代碼已經(jīng)忘記調(diào)用,甚至錯誤地調(diào)用,那么以后我再也不想使用這些方法了。
泛型
Vec真的就是元素T的vector,而不只是對象指針的數(shù)組。在經(jīng)過編譯之后,它只能用來存放類型T的對象。
在C語言里需要些很多代碼才能實現(xiàn)類似的功能,所以我不想再這么干了。
trait不只是interface
Rust并不是一門類似那樣的面向?qū)ο缶幊陶Z言,它有trait,看起來就像是里的interface——可以用來實現(xiàn)動態(tài)綁定。如果一個對象實現(xiàn)了Drawable,那么就可以肯定該對象帶有draw()方法。
不過不管怎樣,trait的威力可不止這些。
依賴管理
以前實現(xiàn)依賴管理需要:
手動調(diào)用或通過自動化工具宏來調(diào)用g-config。
指定頭文件和庫文件路徑。
基本上需要人為確保安裝了正確版本的庫文件。
而在Rust里,只需要編寫一個Cargo.toml文件,然后在文件里指明依賴庫的版本。這些依賴庫會被自動下載下來,或者從某個指定的地方獲取。
測試
C語言的單元測試非常困難,原因如下:
內(nèi)部函數(shù)通常都是靜態(tài)的。也就是說,它們無法被外部文件調(diào)用。測試程序需要使用#include指令把源文件包含進(jìn)來,或者使用#ifdefs在測試過程中移除這些靜態(tài)函數(shù)。
需要編寫Makefile文件將測試程序鏈接到其中的部分依賴庫或部分代碼。
需要使用測試框架,并把測試用例注冊到框架上,還要學(xué)會如何使用這些框架。
衛(wèi)生宏(HygienicMacro)
Rust的衛(wèi)生宏避免了C語言宏可能存在的問題,比如宏中的一些東西會掩蓋掉代碼里的標(biāo)識符。Rust并不要求宏中所有的符號都必須使用括號,比如max(5+3,4)。
沒有自動轉(zhuǎn)型
在C語言里,曲靖北大青鳥發(fā)現(xiàn)很多bug都是因為在無意中將int轉(zhuǎn)成short或char而導(dǎo)致,而在Rust里就不會出現(xiàn)這種情況,因為它要求顯示轉(zhuǎn)型。
不會出現(xiàn)整型溢出
這個就不用再多作解釋了。
網(wǎng)頁題目:dropone函數(shù)c語言,r語言drop1函數(shù)
轉(zhuǎn)載來于:http://chinadenli.net/article4/hecdie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、企業(yè)網(wǎng)站制作、面包屑導(dǎo)航、品牌網(wǎng)站制作、網(wǎng)站策劃、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)