軟件項目實訓報告_第1頁
軟件項目實訓報告_第2頁
軟件項目實訓報告_第3頁
軟件項目實訓報告_第4頁
軟件項目實訓報告_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、遼寧工程技術大學大型軟件項目實訓報告教學單位 軟件學院 專 業(yè) 軟件工程 班 級 08 - 3 學生姓名 張興堂 學 號 0820010329 指導教師 陳 虹 一、實訓目的通過外出實訓提高自己的實戰(zhàn)能力,對軟件編程項目有更深刻的理解。根據(jù)企業(yè)對人才的具體需求,針對軟件學院應屆畢業(yè)生,開展以大型軟件工程項目為目的的實戰(zhàn)訓練,有效提升學生的項目實戰(zhàn)能力和適應市場的能力,最終實現(xiàn)學生比較理想的就業(yè)率和就業(yè)質量。二、實訓時間和地點1實訓時間:2011年11月1月2012年1月6日2實訓地點:北京達內三、實訓單位簡介達內IT培訓集團是中國高端IT培訓機構,致力于培養(yǎng)面向電信和金融領域的Java、C+、

2、C#/.Net、測試、嵌入式、PHP等方面中高端軟件人才,由美國國際數(shù)據(jù)集團IDG、集富亞洲JAFCOASIA和高盛集團投資,是國內首家獲得國際風險投資的IT培訓機構。經(jīng)過8年運營,達內IT培訓集團實現(xiàn)了95%的專業(yè)就業(yè)率,78%的口碑入學率,學員平均畢業(yè)薪資3800元/首月平均薪資。目前,達內IT培訓團已經(jīng)發(fā)展成為集培訓、咨詢、開發(fā)、人才服務于一體的高新技術集團公司,公司下設達內高端IT培訓、達內軟件人才服務中心、達內軟件研發(fā)中心。達內IT培訓集團以中關村科技園區(qū)為依托,在中國軟件業(yè)發(fā)達城市北京、上海、廣州、深圳、大連、南京、武漢、杭州、西安、蘇州、成都、太原20大城市,建立了近40家培訓中

3、心,占地2萬平米,年培訓1萬多名軟件人才。已累計為IBM、微軟、摩托羅拉、華為、中軟、用友、Yahoo、阿里巴巴、TOM、新浪、搜狐、百度、聯(lián)想、神州數(shù)碼、大唐電信、亞信等知名IT企業(yè)培養(yǎng)輸送了5萬多名中高級軟件人才,目前達內全國擁500多名員工,年產(chǎn)值近2億元,是中國最大的中高端軟件人才培訓機構。由于達內IT培訓集團優(yōu)秀的教學效果和行業(yè)領先的經(jīng)營模式贏得了社會各界的廣泛贊譽和好評,近年來達內榮獲了各界權威機構的頒獎:達內成為業(yè)界唯一的一家2006、2007、2008、2009連續(xù)4年入選德勤評選的“中國高科技高成長50強公司”、“亞太地區(qū)高科技高成長500強公司”,中關村管理委員會指定的“軟

4、件人才培養(yǎng)示范基地”、被計算機世界評選的“就業(yè)服務杰出貢獻獎”、被中國計算機報評選的“最具影響力培訓機構獎”、被搜狐評為“中國十大教育集團”、被騰訊評為“中國大學生心目中最具影響力的IT品牌”等等。 四、實訓內容1實訓期間完成的學習任務一Linux系統(tǒng)操作命令首先,我們學習了最基礎的系統(tǒng)操作指令。因為在學習過程中c和c+代碼的編程和修改在linux系統(tǒng)下,所以我們集中精力花費了3天時間學習指令操作。命令:文檔統(tǒng)計: wc日期: date cal關機 poweroff windows:shutdownReboot exit find grep find 目錄列表 匹配標準 -name size

5、-type -atime 通配符操作目錄下有需要通配的內容的時候采使用通配符。* (1) 列舉(2) 范圍?!; | 將上一個命令的輸出作為下一個命令的輸入 cat /etc/passwd | grep -n roottee ls -l | tee a.txt ln 硬連接 軟連接 ln file02 file ln -s file02 sfile users:who:who am i:whoami: 系統(tǒng)進程信息 psps u:詳細方式顯示當前終端下的進程的信息ps -e:當前正在運行的所有進程sleep 10&kill PID jobs: 查看任務kill %n fg %n bg %n s

6、top %n ctrl+c / z man 幫助手冊(1) 系統(tǒng)命令(2) 系統(tǒng)調用 open (3) 庫函數(shù) fopen(4) (5) (6) (7) (8) 管理員的命令 ifconfig service ifconfigip地址:netmask: 默認網(wǎng)關:域名解析 netstat ping ip export HOME: PWD: PATH: LANG: CC: CCC: PS1: PS2 export PS1= /.bashrc source /.bashrc xxx.sh#!/bin/bash cal date ls vi命令模式: i a h j k l ctrl+b f shi

7、ft+9 0 w e b $ 0 x 5x X 5X dd 5dd yw yy p r R u : undo #G 底行命令模式:set nuset cindent:按照C語言的風格進行自動縮進。set tabstop=4:設置tab按鍵的長度 行號+回車 字符串n N /n個空格 %s/string/replace/g w filename#1,#2 w filename q q! wqgedit kateC程序的開發(fā)執(zhí)行次序: 1 寫源文件,后綴名 .c 2 對代碼中的指令進行預處理,以#開頭的 3 代碼編譯,生成 xx.o/xx.obj 4 代碼的連接生成可執(zhí)行文件 a.out/xx.e

8、xe 5 加載文件,把文件從硬盤讀入內存 6 執(zhí)行 gcc 的選項: -c 只編譯不連接 -E 只作預處理 -S 匯編代碼 -std=c89/c99 -o 改變最后的可執(zhí)行文件的名字 二.linu下c程序開發(fā) 庫函數(shù) sqrt 開平方 #include 連接的時候需要連接 數(shù)學庫gcc xxx.c -lm 舉例: 打印1-30 之間不能被4整除的整數(shù)。 while循環(huán)while(表達式) 語句; int i = 1;while(i11) printf(%d ,i+);舉例 : 猜數(shù)游戲。 隨機數(shù): #include rand() 偽隨機數(shù) srand() 設置隨機數(shù)種子 #include ti

9、me() 獲取系統(tǒng)的時間 time(0):返回一個時間 1970年1月1號0:0:0 到現(xiàn)在 所經(jīng)過的秒數(shù) 隨機數(shù): srand(time(0); rand()產(chǎn)生一個隨機數(shù)。無限循環(huán):死循環(huán) while(1) for(;) do-while循環(huán): do 語句; while(表達式);緩沖區(qū):輸入: scanf(數(shù)據(jù)類型); scanf(%*n);* : 將讀取到的內容忽略掉n : 非n的字符scanf(%*c); if(scanf()=0) 輸出緩沖區(qū): n 程序結束 滿 4kb 人工刷新 fflush(stdout);/stdin stderr一維數(shù)組: 數(shù)據(jù)類型相同的一組數(shù)據(jù)。(結構體)

10、 數(shù)組的定義: 數(shù)據(jù)類型 數(shù)組名數(shù)組的長度; char int float 結構體 int a5; 下標: 數(shù)組的初始化: int a5 = 1,2,3,4; int a5 = 0;指定初始化: int a5 = 3 = 4; 二維數(shù)組: 數(shù)據(jù)類型 數(shù)組名行列 行下標 列下標 for() for() aij = 0; 一維: for() ai = 0; 二維數(shù)組初始化: int a23 = ,;函數(shù)的返回值: 函數(shù)返回值的類型必須和return返回值的類型一致。 如果函數(shù)沒有返回值 指定 void C語言中 返回值類型可以省略 默認 int 參數(shù):形式參數(shù) 多個形式參數(shù)之間使用逗號分割 每個形

11、式參數(shù)必須有類型的說明float x,y,z;float aver(float x,y)/錯誤 C語言中沒有bool類型 #include bool true false 本質就是一個整數(shù) #include double sqrt(double); gcc xxx.c -lm 函數(shù)調用 函數(shù)名(實際參數(shù)); 形式參數(shù)和實際參數(shù): 參數(shù)名可以不一樣 函數(shù)聲明: C語言規(guī)定:函數(shù)在使用之前必須聲明。 聲明: 函數(shù)頭; bool prime(int); 可以不寫形式參數(shù)的名字。 隱式聲明: 如果函數(shù)在使用之前并沒有進行聲明,編譯器會自動創(chuàng)建 一個隱式聲明,返回值類型為 int 實際參數(shù)-形式參數(shù) 值

12、傳遞: 拷貝一份數(shù)組賦值給形式參數(shù)。 float aver(float x,float y); t = aver(i,j); i-x j-y aver返回值-t注意: 實際參數(shù)和形式參數(shù)名字一樣,存儲空間不一樣。 高內聚 低耦合 數(shù)組可以作為函數(shù)的參數(shù): 函數(shù)調用傳遞的是數(shù)組的名字 (數(shù)組第一個元素的地址) 數(shù)組的長度 = sizeof(數(shù)組名)/sizeof(元素) 不能實現(xiàn): 數(shù)組傳遞的是地址。 sizeof(地址) = 4 形式參數(shù)為數(shù)組的時候,我們應該設計兩個參數(shù):一個數(shù)組 另外一個 數(shù)字的長度 int function(int a,int length,.) const: 使用con

13、st修飾的變量,只讀變量。 如果形式參數(shù)傳遞的是地址,不希望在被調函數(shù)中修改地址上的 內容 可以使用const來修飾形參 void f(const int a,int length);return : main函數(shù)中使用 整個程序結束。遞歸: 如果一個函數(shù)調用了它本身,遞歸函數(shù)。指針的初級: 指針 就是內存的地址,指針變量就是存儲地址的變量。定義一個指針變量:數(shù)據(jù)類型 *變量名;指針變量所保存的地址-內存上的數(shù)據(jù)類型。* : 告訴編譯器后面的變量是一個指針變量 指針初始化: int *q = NULL;/NULL 0 0.0 空指針:不指向任何地方 指針的賦值: q = &i;運算符: * 取

14、對應地址上的內容。const與指針: (1) const int *q : q指向的數(shù)據(jù)數(shù)值不能改變 q本身可以改變。 (2) int * const q : q本身不可以改變,q指向的數(shù)值是可以改變的。 數(shù)組名 (3) const int * const q字符串: string類型三種表現(xiàn)形式:(1)字面值常量“abcde”,不能作為變量,可以賦值給變量。程序段(代碼段)后面0結束數(shù)值相同的字面值常量在代碼段只有一份。(2)char arr20表示字符串類型的變量(數(shù)組)后面一定加上0printf(%s,arr);-arr是數(shù)組的名字一直打印直到遇到0(3)int a10;int* q=&

15、a0; char str20;char *q=&str0; 指針方式存儲字符串常量的地址??紤]緩沖區(qū)的大小,可能會導致緩沖區(qū)溢出。fgets(char *s,size_t size,FILE* stream);s:指向緩沖區(qū)的指針size:緩沖區(qū)的大小stream:文件指針-stdin注意:fgets會在整個字符串后面增加n操作字符串的庫函數(shù):#include strcpy char* strcpy(char* dest,char* src); 作用:將src指向的字符串拷貝呆dest指向的緩沖區(qū)中。 返回值:dest數(shù)值(地址)。 使用:char str120;char str220;str

16、cpy(str1,str2);strcpy(str1,hello); 注意:strcpy不考慮第一個參數(shù)指向緩沖區(qū)大小。char* strncpy(char* dest,const char* src,size_t size);strcat: char* strcat(char *dest,char* src); 作用:將src指向的字符串鏈接到dest指向的字符串結尾的地方注意:不會考慮dest指向的緩沖區(qū)的大小。char* strncat(char* dest,char* src,size_t size);strlen:-sizeof char name20 = hello; sizeof

17、(name)-20:數(shù)組所占用的內存 int strlen(char* s); strlen(name) = 5; 測量字符串的長度,不包含結尾的nstrcmp:對比兩個字符串 int strcmp(char* s1,char* s2) abc acb 返回值有三種可能: 1 0 相等 2 正數(shù) s1s2 3 負數(shù) s1printf(i/j = %d,i/j);PRINT(x/y)-printf(x/y = %d,x/y); #define PRINT(n) printf(.,n) #運算符: 可以將宏中的參數(shù)轉換為字面值常量。限定: #運算符只能出現(xiàn)在帶參數(shù)的宏替換列表中 字符串: abcd

18、e = abcde#define PRINT(n) printf(#n = %dn,n) - i/j = %dn-i/j = %dn #運算符 作用:將兩個標識符粘合在一起組成一個新的標識符 需求: int float int max_int()-整數(shù)float max_float()-浮點數(shù).#define MAX(type) type max_#type() .MAX(int)- int max_int()MAX(float)- float max_float() 需要很多標識符名字。#define MK_ID(n) i_#nMK_ID(1) - i_1MK_ID(32) - i_32條件

19、編譯: 就是根據(jù)預處理的結果來包含或者排除某一段代碼。#if #endif 預處理器判斷#if后面的宏目前的數(shù)值 0-#if 和 #endif之間的代碼排除 非零 保留defined #if defined DEBUG - DEBUG是不是已經(jīng)定義為一個宏#ifdef = #if defined debug:調試 n多條調試語句(printf)release:發(fā)布 /#define DEBUG#ifdef DEBUG 調試語句#endif#ifndef-#if not defined #include test.h #include test.hmakefile:由很多條規(guī)則組成的:目標文件:

20、 依賴文件生成目標文件所執(zhí)行的指令選擇一條規(guī)則來執(zhí)行make 目標文件如果想要使用定義在其他文件中的全局變量請使用 extern 聲明extern int user_id; 自定義頭文件: 系統(tǒng)提供的頭文件: stdio.h stdlib.h stdbool.h string.h unistd.h math.htime.h stdarg.h等等 多文件程序中,共享全局變量 宏定義共享 函數(shù)聲明共享類型定義共享需要使用頭文件??梢允褂脳l件編譯防止重復引用。/*/#ifndef SYSTEM_H#define SYSTEM_H #include #include #include s1.h#inc

21、lude s2.h#define PI 3.14#define MAX 2000extern int i;extern int j;/函數(shù)的生命int max_min(int,int);void show();/類型定義struct s;#endifstatic :靜態(tài)局部變量靜態(tài)全局變量 static int user_id = 15; 即使使用 extern int user_id;static修飾函數(shù) 這個函數(shù)只能在本文件中使用。結構體:數(shù) 組: 相同數(shù)據(jù)類型的數(shù)據(jù)的集合。結構體: 不同數(shù)據(jù)類型的數(shù)據(jù)的集合。結構體:定義或者使用一個結構體變量之前,先進行類型定義。結構體變量的定義:str

22、uct employee em;初始化:struct employee em = 101,guo,M,20,5000;2 實訓期間完成的實踐項目我在達內老師的帶領下,學習了c和c+基礎之后,做了一個貪吃蛇的小游戲,雖然游戲比較簡略,但是基本功能已經(jīng)實現(xiàn)。(1).功能介紹:產(chǎn)生一個固定大小沒有辯解的游戲區(qū)域,蛇從區(qū)域的中心開始,由玩家通過鍵盤控制蛇的運動方向,用蛇頭去吃隨機分布在游戲區(qū)域內的食物;蛇的運動限制在游戲區(qū)域內,游戲區(qū)域沒有辯解,所以蛇在區(qū)域內做循環(huán)運動:蛇的運動方向為直線運動,只走橫和豎的方向,不走斜線;蛇的運動速度由游戲的難度來控制,難度越高速度越快,游戲難度分為9個等級;蛇的身體

23、長度從1開始每吃掉一份食物就增加一個長度;食物的出現(xiàn)按照隨機分布原則,蛇吃掉一份后隨機在游戲區(qū)域內放一份新的食物;游戲的結束條件為:在控制蛇的過程中蛇頭碰到蛇的身體的任何部位;設計者應該首先考慮實現(xiàn)一個可以游動的蛇。通過尋找規(guī)律,對實際對象進行抽象概括建立對象模型,首先從物理的角度來分析蛇得運動規(guī)律。它是蠕動的,像水一樣流動。他有個特性就是身體的每一個點都經(jīng)過他頭部所在的點,他每一個時刻骨節(jié)所要運動的目的地是他前一個骨節(jié)所在的位置。所以我們事先必須了解并掌握一些基本的畫圖函數(shù),并學會調用和運行。(2).用流程圖示出程序的主要控制流程和處理流程 游戲載入內存并初始化界面判斷游戲是否開始單擊按鈕開

24、始游戲沒有開始游戲,就返回初始界面貪吃蛇開始移動(初始方向向左)根據(jù)鍵盤消息判斷蛇頭的運動方向根據(jù)蛇頭的坐標和食物的坐標判斷蛇是否已經(jīng)得到食物如果已經(jīng)得到食物,則蛇的身體加長,積分器加一如果沒有得到食物,則蛇的身體不變,積分器不變根據(jù)蛇頭的坐標、蛇身體的坐標和墻壁的坐標判斷蛇是否已經(jīng)撞墻或者自己咬到自己如果沒有撞墻并且沒有自己咬到自己則程序繼續(xù)進行如果已經(jīng)撞墻或者自己咬到自己則程序終止貪吃蛇程序結束積分器開始計分下面是項目代碼:#include #include #include #include #include #define NUM 60struct direct /用來表示方向的 in

25、t cx; int cy;typedef struct node /鏈表的結點 int cx; int cy; struct node *back; struct node *next;node;void initGame(); /初始化游戲int setTicker(int); /設置計時器void show(); /顯示整個畫面void showInformation(); /顯示游戲信息(前兩行)void showSnake(); /顯示蛇的身體void getOrder(); /從鍵盤中獲取命令void over(int i); /完成游戲結束后的提示信息void creatLink(

26、); /(帶頭尾結點)雙向鏈表以及它的操作void insertNode(int x, int y); void deleteNode();void deleteLink();int ch; /輸入的命令int hour, minute, second; /時分秒int length, tTime, level; /(蛇的)長度,計時器,(游戲)等級struct direct dir, food; /蛇的前進方向,食物的位置node *head, *tail; /鏈表的頭尾結點int main() initscr(); initGame(); signal(SIGALRM, show); ge

27、tOrder(); endwin(); return 0;void initGame()cbreak(); /把終端的CBREAK模式打開noecho(); /關閉回curs_set(0); /把光標置為不可見keypad(stdscr, true); /使用用戶終端的鍵盤上的小鍵盤srand(time(0); /設置隨機數(shù)種子 /初始化各項數(shù)據(jù)hour = minute = second = tTime = 0;length = 1;dir.cx = 1; dir.cy = 0;ch = A;food.cx = rand() % COLS;food.cy = rand() % (LINES-

28、2) + 2;creatLink();setTicker(20);/設置計時器(這個函數(shù)是書本上的例子,有改動)int setTicker(int n_msecs)struct itimerval new_timeset;long n_sec, n_usecs;n_sec = n_msecs / 1000 ;n_usecs = ( n_msecs % 1000 ) * 1000L ;new_timeset.it_interval.tv_sec = n_sec; new_timeset.it_interval.tv_usec = n_usecs; n_msecs = 1;n_sec = n_ms

29、ecs / 1000 ;n_usecs = ( n_msecs % 1000 ) * 1000L ;new_timeset.it_value.tv_sec = n_sec ; new_timeset.it_value.tv_usec = n_usecs ; return setitimer(ITIMER_REAL, &new_timeset, NULL);void showInformation() tTime+;if(tTime = 1000000) /tTime = 0;if(1 != tTime % 50)return;move(0, 3); /顯示時間printw(time: %d:%

30、d:%d %c, hour, minute, second)second+;if(second NUM)second = 0;minute+;sf(minute NUM)minute = 0;hour+;/顯示長度,等級move(1, 0);int i;for(i=0;inext-cx & 1=dir.cx)| (0=head-next-cx & -1=dir.cx)| (LINES-1=head-next-cy & 1=dir.cy)| (2=head-next-cy & -1=dir.cy)over(1); return;/如果蛇頭砬到自己的身體,則游戲結if(* = mvinch(hea

31、d-next-cy+dir.cy, head-next-cx+dir.cx) )over(2);return;insertNode(head-next-cx+dir.cx, head-next-cy+dir.cy);/蛇吃了一個“食物”if(head-next-cx=food.cx & head-next-cy=food.cy)lenChange = true;length+;/恭喜你,通關if(length = 50)over(3);return;/重新設置食物的位置food.cx = rand() % COLS; food.cy = rand() % (LINES-2) + 2; if(!

32、lenChange) move(tail-back-cy, tail-back-cx); printw( );deleteNode(); move(head-next-cy, head-next-cx); printw(*);void show()signal(SIGALRM, show); /設置中斷信號showInformation();showSnake();refresh(); /刷新真實屏幕void getOrder() /建立一個死循環(huán),來讀取來自鍵盤的命令 while(1) ch = getch(); if(KEY_LEFT = ch) dir.cx = -1; dir.cy =

33、 0; else if(KEY_UP = ch) dir.cx = 0; dir.cy = -1; else if(KEY_RIGHT = ch) dir.cx = 1; dir.cy = 0;else if(KEY_DOWN = ch)dir.cx = 0;dir.cy = 1;setTicker(20);void over(int i) /顯示結束原因 move(0, 0); int j; for(j=0;jcx = 5; temp-cy = 10; head-back = tail-next = NULL; head-next = temp; temp-next = tail; tail-back = temp; temp-back = head;/在鏈表的頭部(非頭結點)插入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論