【管理系統(tǒng)中計算機應(yīng)用】實踐報告26頁
《【管理系統(tǒng)中計算機應(yīng)用】實踐報告26頁》由會員分享,可在線閱讀,更多相關(guān)《【管理系統(tǒng)中計算機應(yīng)用】實踐報告26頁(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、中南林業(yè)科技大學(xué) 《管理系統(tǒng)中計算機應(yīng)用》 實踐報告 姓 名:XXX 專 業(yè): 人力資源管理 院 (系): 中南林業(yè)科技大學(xué)成教學(xué)院 實習(xí)時間: 2013年4月18日 實習(xí)地點: XXXXXXXXXX 指導(dǎo)教師評語:
2、 成績: 簽名: 年 月 日 撰寫及批改注意事項 一、填寫信息 1、學(xué)生填寫信息齊全、字跡清晰、日期真實; 2、教師批改后的簽名和日期應(yīng)完整; 3、報告中封面、圖、程序要求打印(封面與此頁要求正反雙面打印,教師評語要求手寫)。 二、實習(xí)報告的撰寫 1、實習(xí)報告撰寫認真細致,數(shù)據(jù)
3、計算正確、誤差分析準(zhǔn)確、實驗結(jié)論 分析符合科學(xué)規(guī)律。 2、實習(xí)報告有繪制的圖形、圖表時,要求 (1)用電腦繪制; (2)應(yīng)在報告中注明圖號、表號。 三、批改實驗報告 1、一律采用百分制; 2、批改時應(yīng)對錯分明,錯誤之處應(yīng)有文字說明或指出錯誤的標(biāo)記; 3、指導(dǎo)教師評語的內(nèi)容: (1)對本次認識實習(xí)完成情況的評語; (2)對本次認識實習(xí)報告的評語; 目 錄 1. 軟件編譯理論及實踐教程實習(xí)內(nèi)容 4 2. 套接字編程 6 2.1 使用說明書 6 2.2 原理說明書 7 2.3
4、 程序注釋 7 3. 連接數(shù)據(jù)庫 19 3.1 使用說明書 19 3.2 原理說明書 20 3.3 程序注釋 20 4. 實習(xí)總結(jié)、體會與收獲 26 (正 文 部 分) 1.軟件編譯理論及實踐教程實習(xí)內(nèi)容 一:我的電腦磁盤分析: 0000000000 管理節(jié)點1 000000003F 000000003F C盤(48.8GB) 00061AB827 00061AB827 管理節(jié)點2 00061AB
5、866 00061AB866 D盤(73.4GB) 000F48CDDA 000F48CDDA 分區(qū)間隙 000F48CE18 000F48CE18 管理節(jié)點3 000F48CE19 000F48CE19 E盤(73.4GB) 001876E38D 001876E38D 分區(qū)間隙 001876E3CB 001876E3CB 管理節(jié)點4 001876E3CC
6、001876E3CC F盤(102.4GB) 0025422D6C1 剩余扇區(qū) 二. PING.EXE十六進制源碼分析 在文件存儲空間中,ping.exe十六進制源碼分析如下: 2. 套接字編程 2.1.使用說明書: 第一步:
7、先打開服務(wù)器端(server.exe).根據(jù)提示輸入端口號,需要輸入大于5001小于65535的值,否則就是用默認的5001作為端口值 第二步:創(chuàng)建套接字并選擇協(xié)議。 第三步:打開客戶端(client.exe),根據(jù)提示,將客戶端(server.exe)所在的服務(wù)器的IP地址輸入進去。 第四步:輸入在服務(wù)器端(server.exe)中建立的端口號值。 第五步:選擇和服務(wù)器端(server.exe)中一樣的協(xié)議 第六步:收發(fā)數(shù)據(jù) 第七步:關(guān)閉連接。 2.2原理說明書 2.3程序注釋 /*************
8、*****************************************\
* client.c - 簡單的 TCP/UDP 套接字客戶程序 windows環(huán)境 *
\******************************************************/
#include
9、‘ws2_32’庫 int main(void) { unsigned short port = 5001; //端口號 int socket_type = SOCK_STREAM; //缺省使用TCP連接 char Buffer[1280]; //收發(fā)緩沖區(qū) unsigned int addr; //IP地址變量 int retval,i; //臨時變量 struct sockaddr_in server, from; //套接字地址結(jié)構(gòu)變量 struct hostent *hp; //主機信息結(jié)
10、構(gòu)變量指針 WSADATA wsaData; //windows套接字信息 SOCKET conn_socket; //套接字變量 //先輸入客戶程序所需要的基本信息:服務(wù)器地址,端口號,套接字類型 printf("請輸入服務(wù)器地址:"); scanf("%s", Buffer); printf("請輸入端口號( >5000 ):"); scanf("%d", &i); if(i < 5000 || i > 65535) printf("不正確的端口號%d,用缺省端口號5001\n", i); else port
11、= i; printf("請輸入套接字類型( 1,TCP; 2, UDP ):"); scanf("%d",&i); if(i == 1) socket_type = SOCK_STREAM;//設(shè)定為SOCK_STREAM else if(i == 2) socket_type = SOCK_DGRAM;//設(shè)定為SOCK_DGRAM else printf("不正確的輸入%d,使用TCP數(shù)據(jù)流\n", i); //在windows環(huán)境下,需要先初始化協(xié)議棧 if ((retval = WSAStartup(0x202, &wsaData)
12、) != 0) //WSAStartup函數(shù)調(diào)用,用來初始//socket { printf("WSAStartup 失敗,錯誤號:%d\n",retval); WSACleanup();//當(dāng)調(diào)用了WSAStartup之后,就需要調(diào)用WSACleanup函數(shù)釋放內(nèi)存 return -1; } //取得主機IP地址 if (isalpha(Buffer[0])) //是域名或命名地址,用首字母的是否在A-Z,或者a-z來判斷是域名還是IP地址 hp = gethostbyname(Bu
13、ffer);//從一個主機數(shù)據(jù)庫中提取出主機信息 else { addr = inet_addr(Buffer);//是點分地址 hp = gethostbyaddr((char *)&addr,4,AF_INET);//根據(jù)網(wǎng)絡(luò)地址,獲得主機信息,執(zhí)行成功,就返回一個指向主機信息的結(jié)構(gòu) } if (hp == NULL ) { printf("不能解析地址[%s]: 錯誤號%d\n", Buffer, WSAGetLastError());//用于獲取錯誤信息 WSACleanu
14、p(); exit(1); } // 拷貝 解析的信息到sockaddr_in結(jié)構(gòu)中 memset(&server,0,sizeof(server));//分配內(nèi)存空間,由server返回 memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);//信息的copy server.sin_family = hp->h_addrtype;//組協(xié)議初始化 server.sin_port = htons(port);//端口號初始化 //建立套接字 con
15、n_socket = socket(AF_INET,socket_type,0); if (conn_socket <0 ) { printf("socket()失敗,錯誤號:%d\n", WSAGetLastError()); WSACleanup(); return -1; } //對于流式套接字,需要先建立連接 //其實也可以使用connect(),send(),recv()等函數(shù)在windows里面一樣實現(xiàn)數(shù)據(jù)報套接字功能 if(socket_type != SOCK_DGRAM) {
16、 printf("正在連接到: %s\n",hp->h_name); if (connect(conn_socket,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR) { printf("connect()失敗,錯誤號:%d\n",WSAGetLastError()); closesocket(conn_socket);//如果創(chuàng)建失敗,就關(guān)閉連接套接字 WSACleanup(); return -1; } } while(1)
17、{ //得到要發(fā)送的信息字符串 puts("\n輸入送到服務(wù)器的信息:"); gets(Buffer); if(!strlen(Buffer)) //如果沒有輸入信息,繼續(xù)循環(huán) continue; //發(fā)送網(wǎng)絡(luò)信息 if(socket_type != SOCK_DGRAM) retval = send(conn_socket, Buffer, strlen(Buffer)+1, 0); //面向tcp,類似BSD write() else retval = sendto(conn_socket, B
18、uffer, strlen(Buffer)+1, 0, //發(fā)送字符串的時候,須將字符串的結(jié)束符\0發(fā)送 (struct sockaddr*)&server, sizeof(server)); //面向UDP if (retval == SOCKET_ERROR) { printf("發(fā)送失敗,錯誤號: %d\n", WSAGetLastError()); break; } else printf("發(fā)送信息:%s\n", Buffer); //接收網(wǎng)絡(luò)信息
19、 i = sizeof(from); if(socket_type != SOCK_DGRAM) retval = recv(conn_socket, Buffer, sizeof(Buffer), 0 );//面向tcp,類似BSD read() else retval = recvfrom(conn_socket, Buffer, sizeof(Buffer), 0, (struct sockaddr*)&from, &i); //面向UDP if (retval == SOCKET_ERROR) {
20、 printf("接收信息失敗,錯誤號:%d\n",WSAGetLastError()); break; } else if (retval == 0) // 對于面向連接的套接字,需要判斷對方是否關(guān)閉連接 { printf("服務(wù)器關(guān)閉連接\n"); break; } else //正確接收到網(wǎng)絡(luò)信息 printf("收到 %d 字節(jié)信息:%s \n", retval, Buffer); //程序的一個退出條件
21、 if(!stricmp(Buffer, "quit")) break; } //關(guān)閉套接字 closesocket(conn_socket); WSACleanup(); return 0; } /*******************************************************\ * server.c - 簡單 TCP/UDP 套接字服務(wù)器程序 windows環(huán)境 * \*******************************************************/ #incl
22、ude
23、etval, fromlen, i, isconnected = 0; //臨時變量 struct sockaddr_in local, from; //套接字地址結(jié)構(gòu)變量 SOCKET listen_socket, msgsock; //套接字變量 WSADATA wsaData; //windows套接字信息 //先輸入服務(wù)器程序所需要的基本信息:端口號,套接字類型 printf("請輸入端口號( >5000 ):"); scanf("%d", &i); if(i < 5000 || i > 65535) printf("
24、不正確的端口號%d,用缺省端口號5001\n",i); else port = i; printf("請輸入套接字類型( 1,TCP; 2, UDP ):"); scanf("%d", &i); if(i == 1) socket_type = SOCK_STREAM; else if(i == 2) socket_type = SOCK_DGRAM; else printf("不正確的輸入%d,使用TCP數(shù)據(jù)流\n",i); //在windows環(huán)境下,需要先初始化協(xié)議棧 if ((retval = WSAStartup(
25、0x202, &wsaData)) != 0) //初始化套接字版本等信息 { printf("WSAStartup 失敗,錯誤號:%d\n", retval); WSACleanup();//在創(chuàng)建失敗,或者程序結(jié)束,都要調(diào)用 return -1; } //建立套接字 listen_socket = socket(AF_INET, socket_type, 0); if (listen_socket == INVALID_SOCKET) { printf("socke
26、t()失敗,錯誤號:%d\n", WSAGetLastError()); WSACleanup(); return -1; } // 拷貝 解析的信息到sockaddr_in結(jié)構(gòu)中 local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons(port); //邦定網(wǎng)絡(luò)地址到套接字 if (bind(listen_socket,(struct sockaddr*)&local,
27、sizeof(local) ) == SOCKET_ERROR) //綁定網(wǎng)絡(luò)地址 { printf("bind()失敗,錯誤號:%d\n", WSAGetLastError()); WSACleanup(); return -1; } //對于流式套接字,讓套接字處于監(jiān)聽狀態(tài),等待連接到來 if (socket_type != SOCK_DGRAM) { if (listen(listen_socket,5) == SOCKET_ERROR) //監(jiān)聽網(wǎng)絡(luò) {
28、 printf("listen()失敗,錯誤號:%d\n", WSAGetLastError()); WSACleanup(); return -1; } } printf("監(jiān)聽端口:%d, 使用協(xié)議:%s\n", port, (socket_type == SOCK_STREAM)? "TCP": "UDP"); while(1) { fromlen =sizeof(from); if (socket_type == SOCK_
29、DGRAM ) msgsock = listen_socket; else if( isconnected == 0) {//對于TCP連接,如果沒有連接,等待一個連接的到來 msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen); if (msgsock == INVALID_SOCKET) { printf("accept()失敗,錯誤號:%d\n",WSAGetLastError(
30、)); WSACleanup(); return -1; } isconnected = 1; printf("從%s收到連接, 端口是:%d\n", inet_ntoa(from.sin_addr), htons(from.sin_port)); } //等待接收網(wǎng)絡(luò)信息 if (socket_type != SOCK_DGRAM) retval = recv(msgsock, Buffer,
31、sizeof (Buffer), 0 ); //面向tcp,類似BSD read() else { retval = recvfrom(msgsock, Buffer, sizeof (Buffer), 0, (struct sockaddr *)&from, &fromlen); //面向UDP printf("從%s收到數(shù)據(jù)報,端口是:%d\n", inet_ntoa(from.sin_addr), htons(from.sin_port)); } //結(jié)果判斷
32、 if (retval == SOCKET_ERROR) { printf("recv()失敗,錯誤號:%d\n", WSAGetLastError()); closesocket(msgsock); continue; } else if (retval == 0) { printf("客戶端關(guān)閉連接\n"); closesocket(msgsock); continue;
33、 } else //正常接收 { printf("收到 %d 字節(jié)的數(shù)據(jù):%s \n", retval, Buffer); if (socket_type != SOCK_DGRAM) {//對于TCP連接,我們收到"exit"有一個關(guān)閉連接的操作 if(!stricmp(Buffer, "exit")) { printf("關(guān)閉TCP 連接,等待下一次連接...\n"); closesocket(msgsock); isconnected = 0; continue;
34、} } } //信息回送 printf("將同樣的信息回送給客戶端...\n\n"); printf("please input the message:\n"); scanf("%s",Buffer); if (socket_type != SOCK_DGRAM) retval = send(msgsock, Buffer, strlen(Buffer)+1, 0); //面向tcp,類似BSD write() else retval = send
35、to(msgsock, Buffer, strlen(Buffer)+1, 0, (struct sockaddr *)&from, fromlen); //面向UDP if (retval == SOCKET_ERROR) { printf("send()失敗,錯誤號:%d\n", WSAGetLastError()); } //程序的一個退出條件 if(!stricmp(Buffer, "quit")) break; } WSACleanup();
36、return 0; } 3.連接數(shù)據(jù)庫 3.1使用說明書 第一步:在開始菜單中找到SQL SERVER并打開 第二步:建立一個新的數(shù)據(jù)庫。在SQL SERVER中建立一個名為student的數(shù)據(jù)庫 第三步:在student庫下創(chuàng)建一個Stu_Info表,并在表中包含以下字段名:snum,sname,ssex,sage,smajor。輸入一些數(shù)據(jù),進行測試。 第四步:在安全性中設(shè)置密碼為123. 第三步:編譯生成可執(zhí)行的文件,點擊運行。根據(jù)提示框中的信息,輸入我們需要插入的數(shù)據(jù)。關(guān)閉程序。 第四步:在次點擊運行,查看我們插入的數(shù)據(jù)是否成功的插入。 3.2原理
37、說明 通過ADO訪問數(shù)據(jù)庫的技術(shù)進行數(shù)據(jù)庫編程。我們需要在計算機上配置數(shù)據(jù)源。配置數(shù)據(jù)源的過程,就是和讓數(shù)據(jù)庫的驅(qū)動程序來對數(shù)據(jù)庫進行操作,以便使我們再程序中,可以調(diào)用驅(qū)動程序來完成我們需要完成的工作。處理ADO訪問技術(shù)之外,還有ODBC(開放式數(shù)據(jù)庫互聯(lián))等。 3.3程序注釋 /******************************************************************* 利用ADO訪問MS SQL2000 要求: 【1】輸出Stu_Info表內(nèi)的每一條記錄 【2】添加一條新記錄 【3】刪除名字為"李立"的記錄 ********
38、*********************************************************/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \//導(dǎo)入動態(tài)鏈接庫,使我們可以使用ADO編程
no_namespace rename("EOF", "EndOfFile") //為了防止命名沖突,不使用命名空間
#include
39、ass STU //定義學(xué)生類 { public: char snum[10]; //學(xué)號 char sname[10]; //姓名 char ssex[2]; //姓別 long sage; //年齡 char smajor[20]; //專業(yè) public: STU(){} ~STU(){} }; int main() { STU student; //定義學(xué)生對象 ::CoInitialize(NULL); // 初始化OLE/COM庫環(huán)境 ,為訪問ADO接口做準(zhǔn)備 _Recor
40、dsetPtr m_pRecordset("ADODB.Recordset"); //建立記錄集 _ConnectionPtr m_pConnection("ADODB.Connection"); //建立連接 _bstr_t bstrSQL("select * from stu_info"); //查詢語句 char * query_cmd = "DELETE FROM stu_info WHERE sname = 李立"; try //異常處理 { // 創(chuàng)建Connection對象 m_pConnection.CreateInstance("
41、ADODB.Connection"); // 設(shè)置連接字符串,必須是BSTR型或者_bstr_t類型 _bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;"; //若數(shù)據(jù)庫在網(wǎng)絡(luò)上則Server為形如(192.168.1.5,3340) //用戶sa和密碼123只是針對我的庫 m_pConnection->Open(strConnect,"","",adModeUnknown); if(m_pConnection==NULL) c
42、err<<"Lind data ERROR!\n"; // 創(chuàng)建記錄集對象 m_pRecordset.CreateInstance(__uuidof(Recordset)); // 取得表中的記錄 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText); _variant_t vsnum,vsname,vsage,vssex,vsmajor; //對應(yīng)庫中的snum,sname,sage,ssex,smajo
43、r cout << "學(xué)號 姓名 年齡 姓別 專業(yè)"; cout << "\n----------------------------------------------------------------\n"; while (!m_pRecordset->EndOfFile) //如果記錄集沒有到記錄的尾端 { vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//這兒給字段編號和字段名都可以 vsname = m_pRecordset->GetCollect("sname")
44、; vsage = m_pRecordset->GetCollect("sage"); vssex = m_pRecordset->GetCollect("ssex"); vsmajor = m_pRecordset->GetCollect("smajor"); if (vsnum.vt != VT_NULL&&vsname.vt != VT_NULL&&vsage.vt != VT_NULL &&vssex.vt != VT_NULL&&vsmajor.vt != VT_NULL)//如果不為空 { cout.setf(ios::left); /
45、/設(shè)置左對齊
cout << setw(14) << (char*)(_bstr_t)vsnum; //輸出學(xué)號
cout << setw(14) << (char*)(_bstr_t)vsname; //輸出姓名
cout << setw(8) << vsage.lVal; //輸出年齡
cout << setw(8) << (char*)(_bstr_t)vssex; //輸出性別
cout < 46、out << endl;
}
m_pRecordset->MoveNext(); ///移到下一條記錄
}
cout << "\n----------------------------------------------------------------\n"; //輸入將要插入的信息
cout << "\n請輸入你要添加的學(xué)生信息\n";
cout << "學(xué)號:";
cin >> student.snum;
cout << "\n姓名:";
cin >> student.sname;
cout << "\n年齡:";
c 47、in >> student.sage;
cout << "\n姓別:";
cin >> student.ssex;
cout << "\n專業(yè):";
cin >> student.smajor;
m_pRecordset->MoveFirst(); //移動到第一條記錄
m_pRecordset->AddNew(); ///添加新記錄
m_pRecordset->PutCollect("snum",_variant_t(student.snum)); //將數(shù)據(jù)添加進去輸入庫
m_pRecordset->PutCollect("sname",_va 48、riant_t(student.sname));
m_pRecordset->PutCollect("sage",_variant_t(student.sage));
m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
m_pRecordset->Update();//更新操作,如果不更新,對數(shù)據(jù)庫的操作將沒有得到相應(yīng)的操作
m_pConnection->Execute( 49、query_cmd,NULL,1); //用Execute執(zhí)行sql語句來刪除
m_pRecordset->Close(); // 關(guān)閉記錄集
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
cerr << "\nERROR:" << (char*)e.Description();//拋出異常
}
if(m_pConnection->State)
m_pConnection->Close();
::CoUninitialize();
return 0;
}
4.實習(xí)總結(jié)、體會與收獲
通過這些天老師給我們講授實習(xí)課,我知道的我們專業(yè)的實用性,以及在軟件工程上我們應(yīng)該怎么學(xué),學(xué)些什么,光靠課堂上我們學(xué)習(xí)的東西十分有限,要充分利用課余時間,利用圖書館和互聯(lián)網(wǎng)。學(xué)習(xí)這個專業(yè),要求我們要深入進去,不能只學(xué)會些皮毛,要不斷跟進時代的步伐,不斷學(xué)習(xí)新的知識,開拓視野,才能在這個專業(yè)上有更好的作為,使我們走得更遠,這門課程的學(xué)習(xí)使我受益匪淺,為以后的學(xué)習(xí)打下了基礎(chǔ),激發(fā)了我的學(xué)習(xí)興趣,使我明確了自己的專業(yè)方向。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案