《管理系統(tǒng)中計算機應(yīng)用》實踐報告(總26頁)
《《管理系統(tǒng)中計算機應(yīng)用》實踐報告(總26頁)》由會員分享,可在線閱讀,更多相關(guān)《《管理系統(tǒng)中計算機應(yīng)用》實踐報告(總26頁)(25頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 《管理系統(tǒng)中計算機應(yīng)用》 實踐報告 設(shè)計題目: 管理系統(tǒng)中計算機應(yīng)用 助學(xué)院校: 河南理工大學(xué) 自考助學(xué)專業(yè): 機電設(shè)備管理與維修 姓 名: 賀珂珂 自考助學(xué)學(xué)號: 040213200112 成 績: 指導(dǎo)教師簽名: 河南理工大學(xué)成人高等教育 2O 年 月 日 目 錄 1. 軟件編譯理論及實踐教程實習(xí)內(nèi)容 4
2、 2. 套接字編程 6 2.1 使用說明書 6 2.2 原理說明書 7 2.3 程序注釋 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
3、 管理節(jié)點2 00061AB866 00061AB866 D盤(73.4GB) 000F48CDDA 000F48CDDA 分區(qū)間隙 000F48CE18 000F48CE18 管理節(jié)點3 000F48CE19 000F48CE19 E盤(73.4GB) 001876E38D 001876E38D 分區(qū)間隙 001876E3CB 001876E3CB
4、 管理節(jié)點4 001876E3CC 001876E3CC F盤(102.4GB) 0025422D6C1 剩余扇區(qū) 二. PING.EXE十六進制源碼分析 在文件存儲空間中,ping.ex
5、e十六進制源碼分析如下: 2. 套接字編程 2.1.使用說明書: 第一步:先打開服務(wù)器端(server.exe).根據(jù)提示輸入端口號,需要輸入大于5001小于65535的值,否則就是用默認(rèn)的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原理說明書
6、
2.3程序注釋
/******************************************************\
* client.c - 簡單的 TCP/UDP 套接字客戶程序 windows環(huán)境 *
\******************************************************/
#include
7、gma comment (lib,"ws2_32")//添加‘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)變量
8、struct hostent *hp; //主機信息結(jié)構(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,用缺省端
9、口號5001\n", i); else port = 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
10、 = WSAStartup(0x202, &wsaData)) != 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地址
11、 hp = gethostbyname(Buffer);//從一個主機數(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())
12、;//用于獲取錯誤信息 WSACleanup(); 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)
13、;//端口號初始化 //建立套接字 conn_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(s
14、ocket_type != SOCK_DGRAM) { 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
15、; } } while(1) { //得到要發(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
16、retval = sendto(conn_socket, Buffer, 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ā)送信息:
17、%s\n", Buffer); //接收網(wǎng)絡(luò)信息 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 (r
18、etval == SOCKET_ERROR) { 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", ret
19、val, Buffer); //程序的一個退出條件 if(!stricmp(Buffer, "quit")) break; } //關(guān)閉套接字 closesocket(conn_socket); WSACleanup(); return 0; } /*******************************************************\ * server.c - 簡單 TCP/UDP 套接字服務(wù)器程序 windows環(huán)境 * \*********************************
20、**********************/
#include
21、r[1024]; //收發(fā)緩沖區(qū) int retval, 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 <
22、5000 || i > 65535) printf("不正確的端口號%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é)議棧
23、 if ((retval = WSAStartup(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_SOCK
24、ET) { printf("socket()失敗,錯誤號:%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_soc
25、ket,(struct sockaddr*)&local, 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) == SOCK
26、ET_ERROR) //監(jiān)聽網(wǎng)絡(luò) { 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);
27、 if (socket_type == SOCK_DGRAM ) msgsock = listen_socket; else if( isconnected == 0) {//對于TCP連接,如果沒有連接,等待一個連接的到來 msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen); if (msgsock == INVALID_SOCKET) { printf("accept(
28、)失敗,錯誤號:%d\n",WSAGetLastError()); 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) r
29、etval = recv(msgsock, Buffer, 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)
30、); } //結(jié)果判斷 if (retval == SOCKET_ERROR) { printf("recv()失敗,錯誤號:%d\n", WSAGetLastError()); closesocket(msgsock); continue; } else if (retval == 0) { printf("客戶端關(guān)閉連接\n"); closesocket(msgsock
31、); continue; } 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); isconnec
32、ted = 0; continue; } } } //信息回送 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() e
33、lse retval = sendto(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
34、; } WSACleanup(); 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í)行的
35、文件,點擊運行。根據(jù)提示框中的信息,輸入我們需要插入的數(shù)據(jù)。關(guān)閉程序。 第四步:在次點擊運行,查看我們插入的數(shù)據(jù)是否成功的插入。 3.2原理說明 通過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
36、SQL2000
要求: 【1】輸出Stu_Info表內(nèi)的每一條記錄
【2】添加一條新記錄
【3】刪除名字為"李立"的記錄
*****************************************************************/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \//導(dǎo)入動態(tài)鏈接庫,使我們可以使用ADO編程
no_namespace rename("EOF", "EndOfFile") //為了防止命名沖突,不使用命名空間
#include 37、am> //標(biāo)準(zhǔn)輸入輸出流
#include 38、定義學(xué)生對象
::CoInitialize(NULL); // 初始化OLE/COM庫環(huán)境 ,為訪問ADO接口做準(zhǔn)備
_RecordsetPtr 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 = 李立"; 39、
try //異常處理
{
// 創(chuàng)建Connection對象
m_pConnection.CreateInstance("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_pConnect 40、ion->Open(strConnect,"","",adModeUnknown);
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
// 創(chuàng)建記錄集對象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的記錄
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
_var 41、iant_t vsnum,vsname,vsage,vssex,vsmajor; //對應(yīng)庫中的snum,sname,sage,ssex,smajor
cout << "學(xué)號 姓名 年齡 姓別 專業(yè)";
cout << "\n----------------------------------------------------------------\n";
while (!m_pRecordset->EndOfFile) //如果記錄集沒有到記錄的尾端
{
vsnum = m_pRecordset->GetCollect(_variant_t((lo 42、ng)0));//這兒給字段編號和字段名都可以
vsname = m_pRecordset->GetCollect("sname");
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 ! 43、= VT_NULL&&vsmajor.vt != VT_NULL)//如果不為空
{
cout.setf(ios::left); //設(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 < 44、<< (char*)(_bstr_t)vsmajor; //輸出專業(yè)
cout.unsetf(ios::left); //取消左對齊
cout << endl;
}
m_pRecordset->MoveNext(); ///移到下一條記錄
}
cout << "\n----------------------------------------------------------------\n"; //輸入將要插入的信息
cout << "\n請輸入你要添加的學(xué)生信息\n";
cout << "學(xué)號:";
cin >> student.s 45、num;
cout << "\n姓名:";
cin >> student.sname;
cout << "\n年齡:";
cin >> student.sage;
cout << "\n姓別:";
cin >> student.ssex;
cout << "\n專業(yè):";
cin >> student.smajor;
m_pRecordset->MoveFirst(); //移動到第一條記錄
m_pRecordset->AddNew(); ///添加新記錄
m_pRecordset->PutCollect("snum",_var 46、iant_t(student.snum)); //將數(shù)據(jù)添加進去輸入庫
m_pRecordset->PutCollect("sname",_variant_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_pRecor 47、dset->Update();//更新操作,如果不更新,對數(shù)據(jù)庫的操作將沒有得到相應(yīng)的操作
m_pConnection->Execute(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_ 48、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è)上有更好的作為,使我們走得更遠(yuǎn),這門課程的學(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)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六級上冊科學(xué)ppt課件-誰選擇了它們-教科版
- 護理核心制度培訓(xùn)一_圖文課件
- 部編《池子與河流》課件
- SWOT分析法(非常全面)課件
- 主題班會我的成長目標(biāo)課件
- 城市交通擁堵及治理總結(jié)課件
- 輸血相關(guān)性急性肺損傷課件
- 議論文的謀篇布局與論點的提出ppt課件
- 六級上冊科學(xué)ppt課件-地球的近鄰——月球-冀人版
- 疾病預(yù)防、冬季保暖-課件
- 中考英語語法復(fù)習(xí)之狀語從句ppt課件集4
- 《百分?jǐn)?shù)的意義和讀寫》參考ppt課件
- 主題班會堅持就是勝利課件
- 第二章--用人單位對大學(xué)生的要求概況ppt課件
- 教科版六年級科學(xué)上冊第三單元檢測卷(含答案)課件