《MIS系統(tǒng)軟件》實驗報告材料操作系統(tǒng)_第1頁
《MIS系統(tǒng)軟件》實驗報告材料操作系統(tǒng)_第2頁
《MIS系統(tǒng)軟件》實驗報告材料操作系統(tǒng)_第3頁
《MIS系統(tǒng)軟件》實驗報告材料操作系統(tǒng)_第4頁
《MIS系統(tǒng)軟件》實驗報告材料操作系統(tǒng)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

標準文案學生學號 0120903490*** 實驗課成績學生實驗報告書實驗課程名稱開課學院指導教師姓名學生姓名學生專業(yè)班級

MIS系統(tǒng)軟件管理學院*****2011 -- 2012 學年 第 二 學期大全標準文案實驗項目名稱加密解密算法實驗成績實驗者**專業(yè)班級信管0901班組別同組者無實驗日期2012年03月07日大全標準文案第一部分:實驗預習報告1、實驗目的、意義通過簡單的加密解密算法的實現理解系統(tǒng)中加密解密的基本思想,熟練掌握使用C語言基本語句。2、實驗基本原理與方法①單字母替換加密方法——愷撒密碼加密方法是把英文字母按字母表的順序編號作為明文,將密鑰定為 m,加密算法為將明文加上密鑰 m,得到密碼表,通過相反的過程由密文得到明文。②單字母替換加密方法——單表置換密碼由密鑰Key構造字符置換表,完成加密和解密過程。③多字母替換加密方法——維吉利亞密碼假設明文 m=m1m2m3?mn;密鑰k=k1k2k3 ?kn,對應密文 c=c1c2c3 ?cn,密文為:ci=(mi+ki )mod26,26個字母的序號依次為 0~25,ci,mi,,ki 是分別是密文明文密鑰中第 i個字母的序號。④轉換加密方法通過將明文每m個字符一組按順序分為若干個字符串,再按照先列后行形成密文,并分析給出解密的方法?;蛘咄ㄟ^給出一個密鑰字符串,將明文按密鑰字符串長度按順序分為若干組字符串,再按照密鑰字符串各個字符的順序形成密文,并分析給出解密的方法。3、主要儀器設備及耗材實驗室提供計算機和上網條件, C語言上機環(huán)境。4、實驗方案與技術路線(綜合性、設計性實驗)大全標準文案第二部分:實驗過程記錄實驗原始記錄(包括實驗數據記錄,實驗現象記錄,實驗過程發(fā)現的問題等)單表置換:先選定一個單詞,例如 BEIJINGTSINGHUA,然后將它排列在密碼對照表(兩行 26列第一行存a到z的字母,第二行存對照的密碼)下方,重復出現的字母以第一次現時對應的明文字母為準;后面以該單詞中未出現的字母按順序排列備齊,生成一個密碼,然后可以用此密碼本進行加密或解密。加密過程:首先輸入加密明文如important,然后輸入密鑰如BEIJINGTSINGHUA。再然后建立臨時密碼表如下:(上一行是字母,下一行是密碼)之后,將important 對照第一行的相應密匙如 i 對應H,依次輸出。結果應為 HDLKOQBFQ;解密過程:首先輸入密文如 HDLKOQBFQ,然后輸入密匙 BEIJINGTSINGHUA。同理加密過程,可以對照密碼表依次找到密文中對應的原文。結果應為 important 。2.凱撒密碼:把英文字母按字母表的順序編號作為明文,將密鑰定為 m,加密算法為將明文加上密鑰 m,得到密碼表,通過相反的過程由密文得到明文。加密過程:首先輸入明文為 Thisisasecret, 然后輸入密鑰 9,之后同樣會形成兩行對應的同1方法一樣的密碼表:ABCDEFGHIJKLMNOPQRSTUVWXYZXYZABCDEFGHIJKLMNOPQRSTUVW之后,將自動輸出加密后的密文,結果為: cqrb!rb!j!bnlanc ;解密過程:輸入需要解密的密文如: cqrb!rb!j!bnlanc ,然后輸入密鑰 9(為簡便起見,同加密過程使用同樣的密鑰) ,則得到加密過程中的同樣密碼表,然后依次對應輸出原文,結果為Thisisasecret 。3.輪轉法:大全標準文案通過將明文每 m個字符一組按順序分為若干個字符串,再按照先列后行形成密文,并分析給出解密的方法。加密過程:首先輸入明文 itcanallowstudentstogetcloseupviews ,然后輸入密匙5,之后輸入的明文會按照每行 3個字符的形式進行排列,如此例中形成如下的排列:之后,輸出加密后的密文則使用先列后行的方法,此例結果為:iasngovtlttesiclusteeaodtcuwnweolps;解密過程:首先輸入密文 icteccnrbouicumsanb ,然后輸入密匙 5,之后同樣會將輸入的密文按照每行 3個字符的形式排列,形成如下排列:icbcaccountnumberis之后,輸出解密后的明文使用先列后行的方法,此例結果為 icbcaccountnumberis 。維吉利亞密碼:假設明文 m=m1m2m3?mn;密鑰 k=k1k2k3 ?kn,對應密文 c=c1c2c3 ?cn,密文為:ci=(mi+ki )mod26,26個字母的序號依次為 0~25,ci,mi,,ki 是分別是密文明文密鑰中第 i個字母的序號。(如下圖)加密過程:首先輸入明文如 information ,然后輸入密匙如 star,第一個字符的密文可以求得c1=(w+i)mod26=4,,此時對應編號 4的字母為 E,則明文W對應的密文為 E,依次類推,可以將所有明文加密得到密文: AGFFJFAKAHN;大全標準文案解密過程:首先輸入密文 esioqgm,然后輸入與密文字符數相等的密匙如 iloveyu ,將加密過程的原理反過來運用,如第一個密文字符為 E,則對應的編號為 4,然后求的明文為 W,依次類推,求得明文為: whutmis。大全標準文案第三部分 結果與討論(可加頁)實驗結果分析(包括數據處理、實驗現象分析、影響因素討論、綜合分析和結論等)程序設計類實驗: 包括原程序、輸入數據、運行結果、實驗過程發(fā)現的問題及解決方法等;分析與設計、軟件工程類實驗:編制分析與設計報告,要求用標準的繪圖工具繪制文檔中的圖表。系統(tǒng)實施部分要求記錄核心處理的方法、技巧或程序段;其它實驗:記錄實驗輸入數據、處理模型、輸出數據及結果分析運行結果分析:在vc++6.0的編譯環(huán)境下,點擊運行后出現加密算法選擇的界面:(1)凱撒密碼選擇1后回車,閱讀完介紹性文字后,再接著選擇 1進行對輸入字符串進行加密(例如輸入字符串"******'sbirthdayis" ,接著輸入密鑰 7):大全標準文案得到密文:govbephv(z!ipyaokhf!pz!此時我為了對一段字符串進行凱撒解密"govbephv(z!ipyaokhf!pz!",同時輸入密鑰7,同樣會得到加密前的明文:(2)單表置換密碼按照提示,回車后又進入加密算法選擇主界面,此時選擇 2. 單表置換密碼,加密下面一句話todayisapril1,2012,namelyAprilfool'sday :大全標準文案得到密文 pjuzvenzkmed1,2012,gzfxdvAkmedijjd'nuzv ,(沒有處理空格及標點符號等特殊字符,但加密效果已有) 。為了證明對應的解密是否正確,現進行解密環(huán)節(jié),把剛才密文解密,從截圖中可以看到當時加密使用的密鑰時zhouxiaoyeah解密后的字符串跟之前原明文完全一樣。(3)維吉利亞密碼維吉利亞密碼由于需要產生一個維吉利亞字母代換表,此處為了學習方便,在程序運行過程中特意將該表也打印到了屏幕:輸入明文:guoqingjiekuaile ,密鑰:whutms(此例為課件上一例子)大全標準文案選擇解密過程,幫剛才的密文重新翻譯成明文:(4)輪換算法主要函數介紹大全標準文案凱撒密碼:voidkaisa_de();// 解密voidkaisa_en();// 加密void_kaisa(); 調用上面兩個子函數單表置換加密:voiddbzh_alphabeta();// 產生代換字符表voiddbzh_en();// 產生密文,即加密voiddbzh_de();// 產生明文,即解密void_danbiaozhihuan(); 被main()調用,運行時根據選擇調用上面的三個函數維吉利亞密碼:voidwjly_en(); 維吉利亞加密函數voidwjly_de(); 解密函數int_weijiliya(); 調用加密解密函數輪換法加密:大全標準文案voidlunhuan_en();voidlunhuan_de();void_lunhuan();實驗中的問題1)各個加密函數之間的基本上完全獨立,內部定義了太多的自己變量,從空間上看運行起來占用空間較大。可以嘗試定義幾個全局變量,讓他們共用。如輸入的密文,密鑰,產生的明文等等。2)操作不夠人性化。由于時間的原因,沒有在程序的界面上話太多工夫,比如運行完加密或者解密過程后,該轉到第一個主界面(四個加密算法的選擇界面)還是仍然留在當前密碼方法的界面,退出時時直接退出控制臺程序還是退出到開始界面。此外,程序的容錯處理還不完善,一下非法輸入還不能很友好的處理。操縱的人性化四種加密算法源代碼:#include<iostream>#include<string>#include<ctype.h>#include<conio.h>#include<stdlib.h>usingnamespacestd;#defineMING_WEN1000//設明文長度最大為1000charmingwen[MING_WEN];//存放明文charmiwen[MING_WEN];//存放密文charmiyuejvzi[100];//密鑰句子charalphabeta[27];//代換字母表stringstr="abcdefghijklmnopqrstuvwxyz";voidkaisa_de();//解密voidkaisa_en();//加密void_kaisa();voiddbzh_alphabeta();//產生代換字符表voiddbzh_en();//產生密文voiddbzh_de();//產生密文void_danbiaozhihuan();voidwjly_en();voidwjly_de();voidCreate_miyuejvzi(char);int_weijiliya();voidlunhuan_en();voidlunhuan_de();void_lunhuan();大全標準文案voidmain(){intchoice;printf(" \n");// 起始輸出界面printf("-----------------------------------------\n");printf(" 信息管理與信息系統(tǒng) **班\n\n");printf(" ** 學號:0120903490**\n");while(1)/* 循環(huán)測試*/{printf("\n");printf("*****************************************\n");printf("\n");printf(" | 加密解密方法 \n");printf("\n");printf(" | 1 、凱撒密碼 \n");printf(" | 2 、單表置換 \n");printf(" | 3 、維吉利亞密碼 \n");printf(" | 4 、輪換法 \n");printf(" | 5 、退出 \n");printf("----------------------------------------\n");printf(" 請輸入1--5進行選擇:");scanf("%d",&choice);while(choice>5||choice<=0)// 如果輸入數字不符要求,重新輸入,直至正確為止{printf("\n 請輸入選項前面的編號 :");scanf("%d",&choice);}switch(choice)// 調用不同的解密加密算法{case1:_kaisa();break;// 凱撒密碼case2:_danbiaozhihuan();break;// 單表置換密碼case3:_weijiliya();break;// 維吉利亞密碼case4:_lunhuan();break;// 輪換法case5:exit(0);// 退出程序}system("pause");/* 暫停*/system("cls"); /*清屏*/}}//凱撒密碼void_kaisa(){intchoice;大全標準文案do{system("CLS");printf("\n");printf("\t\t 凱撒加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");printf("____________________________________________________________________\n");printf("%15c",'');printf(" 注:---- 愷撒密碼按 c=(m+9)%%26加密----\n");printf("%19c",'');printf("---- 除字母其他字符均按 c=(m+1)%%26加密----\n");printf("%19c",'');printf("---- 當其他其它字符 +1為字母時+26跳過字母加密 ----\n");printf("%19c",'');printf("---- 當其他其它字符 +1超出 ASCII 碼表示范圍時 -128 循環(huán)表示----\n");scanf("%d",&choice);getchar();if(choice==1){kaisa_en();break;}elseif(choice==2){kaisa_de();break;}elseif(choice==3){printf("\n%33c",'');printf("3: 退出\n");exit(0);}else{printf(" 輸入錯誤,按任意鍵繼續(xù) :\n");getchar();system("cls");}}while(choice!=1||choice!=2);}凱撒加密voidkaisa_en()// 加密大全標準文案{intleng,i,miyue;charchc[MING_WEN],chp[MING_WEN];printf(" 請輸入你要加密的明文 :\n");printf("%28c",'');gets(chc);printf(" 請輸入密鑰(如數字9):");scanf("%d",&miyue);leng=strlen(chc);printf("%28c",'');printf(" 密文:\n");printf("%28c",'');for(i=0;i<leng;i++){if(isupper(chc[i])){if(chc[i]+miyue>'Z'){chp[i]=chc[i]+miyue-26;printf("%c",chp[i]);}else{chp[i]=chc[i]+miyue;printf("%c",chp[i]);}}elseif(islower(chc[i])){if(chc[i]+miyue>'z'){chp[i]=chc[i]+miyue-26;printf("%c",chp[i]);}else{chp[i]=chc[i]+miyue;printf("%c",chp[i]);}}else{chp[i]=chc[i]+1;if(chp[i]=='A'||chp[i]=='a')//遇到+1為字母時的處理chp[i]+=26;elseif(chp[i]>127)//遇到+1超出ASCII碼表示范圍時chp[i]=char(chp[i]-128);printf("%c",chp[i]);}大全標準文案}printf("\n");}//凱撒解密voidkaisa_de()// 解密{intleng,i,miyue;charchc[MING_WEN],chp[MING_WEN];printf(" 請輸入你要解密的密文 :\n");printf("%28c",'');gets(chc);printf(" 請輸入密鑰(如數字9):");scanf("%d",&miyue);leng=strlen(chc);printf("%28c",'');printf(" 明文:\n");printf("%28c",'');for(i=0;i<leng;i++){if(isupper(chc[i])){if(chc[i]-miyue<'A'){chp[i]=chc[i]-miyue+26;printf("%c",chp[i]);}else{chp[i]=chc[i]-miyue;printf("%c",chp[i]);}}elseif(islower(chc[i])){if(chc[i]-miyue<'a'){chp[i]=chc[i]-miyue+26;printf("%c",chp[i]);}else{chp[i]=chc[i]-miyue;printf("%c",chp[i]);}}else{chp[i]=chc[i]-1;大全標準文案if(chp[i]=='Z'||chp[i]=='z')// 遇到-1為字母時的處理chp[i]-=26;elseif(chp<0)// 遇到-1超出ASCII碼表示范圍時chp[i]=char(chp[i]+128);printf("%c",chp[i]);}}printf("\n");}///// 單表置換加密void_danbiaozhihuan(){system("CLS");intchoice;printf("\n");printf("\t\t 單表置換加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");scanf("%d",&choice);if(choice==1){printf("請輸入你想加密的字符串(請不要超出%d個字符,不能輸入中文):",MING_WEN);getchar();gets(mingwen);printf(" 你輸入的明文是 :%s\n",mingwen);intmingwen_length=strlen(mingwen);// 明文長度dbzh_alphabeta();// 產生代換字符表dbzh_en();// 加密}if(choice==2){printf(" 請輸入你想解密的字符串 :");getchar();gets(miwen);printf(" 你輸入的密文是 :%s\n",miwen);intmiwen_length=strlen(miwen);// 密文長度dbzh_alphabeta();// 產生代換字符表dbzh_de();}}單表置換產生代換字符表voiddbzh_alphabeta(){inti,j;大全標準文案printf("請輸入密鑰句子,至少為1個字符,最多100個字符,且第一個字符必須是小寫字母:\n");gets(miyuejvzi);// 輸入的密鑰句子,至少為 1個字符,最多 100個字符,且第一個必須為字母printf("%s",miyuejvzi);intlength=strlen(miyuejvzi);intpos=0;// 指示填充位置inttag=1;//alphabeta[0]=miyuejvzi[0];// 填充第0個位置for(i=1;i<length;i++){if(isalpha(miyuejvzi[i])!=0)// 是字母{tag=1;for(j=0;j<=pos;j++){if(alphabeta[j]==miyuejvzi[i])//alphabet 表中已經存在字母miyuejvzi[i]{tag=0;break;}}if(tag==1)alphabeta[++pos]=miyuejvzi[i];}}for(i=0;i<26;i++)// 把英文字母表中還沒有出現在代換字母表中的字母存入代換字母表{tag=1;for(j=0;j<=pos;j++){if(alphabeta[j]==str[i])//alphabet 表中已經存在英文字母表中的第 i個字母{tag=0;break;}}if(tag==1)alphabeta[++pos]=str[i];}cout<<" 原始字母表為 "<<str<<endl;大全標準文案cout<<" 代換密碼表為 "<<alphabeta<<endl;}單表置換加密voiddbzh_en()// 產生密文{對明文中的每一個字母加密計算出該字母在字母表中的序號,a序號為0,b序號為1...,依次類推//alphabeta[0]是序號為0的字母a的密文,alphabeta[1]是序號為1的字母的密文...,依次類推intpos;for(inti=strlen(mingwen);i>=0;i--){if(islower(mingwen[i]))// 假如當前字符是小寫字母{pos=mingwen[i]-'a';// 計算出當前字母在字母表中的序號miwen[i]=alphabeta[pos];}else// 不是字母,原樣復制miwen[i]=mingwen[i];}printf(" 明文為:%s\n",mingwen);printf(" 密文為:%s\n",miwen);}//單表置換解密(產生明文)voiddbzh_de(){for(inti=strlen(miwen);i>=0;i--){if(islower(miwen[i]))// 假如當前字符是小寫字母{for(intj=0;j<26;j++){if(miwen[i]==alphabeta[j])// 當前密文字符 ,在代換字符表的第 j個位置 ,在其明文字符為 str[j];{mingwen[i]=str[j];break;}}}else// 不是字母,原樣復制mingwen[i]=miwen[i];}printf(" 密文為:%s\n",miwen);printf(" 明文為:%s\n",mingwen);}大全標準文案////// 維吉尼亞加密int_weijiliya(){system("CLS");inti,j;char*alphabet="abcdefghijklmnopqrstuvwxyz";charvtable[26][26];printf("vigeneretable\n");printf("\t%s\n",alphabet);for(i=0;i<26;i++){printf("\n %c ",*alphabet);//for(j=0;j<26;j++){if(*alphabet+j<=122){vtable[i][j]=*alphabet+j-32;printf("%c",vtable[i][j]);}else{vtable[i][j]=*alphabet+j-58;printf("%c",vtable[i][j]);}}*alphabet++;printf("\n");}intchoice;printf("\n");printf("\t\tvigenere 密碼(本算法規(guī)定:明文為小寫字母,密文為大寫字母)\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");scanf("%d",&choice);switch(choice){case1:printf(" 請輸入明文(小寫字母) :");getchar();gets(mingwen);printf(" 請輸入密鑰:");gets(miyuejvzi);wjly_en(); //加密break;case2:printf(" 請輸入密文(大寫字母) :");getchar();gets(miwen);printf(" 請輸入密鑰:");gets(miyuejvzi);wjly_de(); //解密break;case3:break;}大全標準文案return0;}維吉利亞加密voidwjly_en(){unsignedintmiyuejvzi_length,mingwen_length,i,j,d,mod;miyuejvzi_length=strlen(miyuejvzi);mingwen_length=strlen(mingwen);d=mingwen_length/miyuejvzi_length;//d 為明文長度除密鑰長度后去整mod=mingwen_length%miyuejvzi_length;//mod 為取余if(d>0){for(i=1;i<d;i++){for(j=0;j<miyuejvzi_length;j++)miyuejvzi[i*miyuejvzi_length+j]=miyuejvzi[j];}for(i=0;i<mod;i++){miyuejvzi[d*miyuejvzi_length+i]=miyuejvzi[i];}for(i=0;i<strlen(miyuejvzi);i++){if(mingwen[i]+miyuejvzi[i]-'a'>122)miwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32-26;elsemiwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32;}}else{for(i=0;i<miyuejvzi_length;i++){if(mingwen[i]+miyuejvzi[i]-'a'>122)miwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32-26;elsemiwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32;}}printf(" 明文是:%s\n",mingwen);printf(" 密鑰是:%s\n",miyuejvzi);printf(" 密文是:%s\n",miwen);}維吉利亞解密voidwjly_de(){unsignedintmiyuejvzi_length,miwen_length,i,j,d,mod;miyuejvzi_length=strlen(miyuejvzi);miwen_length=strlen(miwen);d=miwen_length/miyuejvzi_length;//d 為密文長度除密鑰長度后去整mod=miwen_length%miyuejvzi_length;//mod 為取余大全標準文案if(d>0){for(i=1;i<d;i++){for(j=0;j<miyuejvzi_length;j++)miyuejvzi[i*miyuejvzi_length+j]=miyuejvzi[j];}for(i=0;i<mod;i++){miyuejvzi[d*miyuejvzi_length+i]=miyuejvzi[i];}for(i=0;i<strlen(miyuejvzi);i++){if(miwen[i]+32-miyuejvzi[i]>=0)mingwen[i]=miwen[i]-miyuejvzi[i]+32+'a';elsemingwen[i]=miwen[i]-miyuejvzi[i]+32+'a'+26;}}else{for(i=0;i<miyuejvzi_length;i++){if(miwen[i]+32-miyuejvzi[i]>=0)mingwen[i]=miwen[i]-miyuejvzi[i]+32+'a';elsemingwen[i]=miwen[i]-miyuejvzi[i]+32+'a'+26;}}printf(" 密文是:%s\n",miwen);printf(" 密鑰是:%s\n",miyuejvzi);printf(" 明文是:%s\n",mingwen);}轉換加密voidlunhuan_en(){charData[50];charShade[50];// 存取密文intdlg,i,j,m,cnt,k;for(i=0;i<50;i++){Data[i]='\0';}printf(" 請輸入明文!\n");fflush(stdin);gets(Data);dlg=strlen(Data);for(i=0;i<dlg;i++){if(Data[i]==''){for(k=i+1;k<dlg;k++){大全標準文案Data[k-1]=Data[k];}dlg--;i--;}elseif((Data[i]<'A'||Data[i]>'Z')&&(Data[i]<'a'||Data[i]>'z')){printf(" 你輸入的明文不正確 !\n");break;}elseif(Data[i]>='A'&&Data[i]<='Z'){Data[i]+=32;}}printf("\n 明文是:");puts(Data);cnt=(dlg-1)/5+1;for(i=dlg;i<cnt*5;i++){Data[i]='\0';}m=0;for(i=0;i<5;i++){for(j=0;j<cnt;j++){if(Data[i+5*j]=='\0'){m--;}else{Shade[m]=Data[i+5*j];}m++;}}Shade[dlg]='\0';printf("\n 密文是:");puts(Shade);printf("\n");}////// 輪換解密voidlunhuan_de(){大全標準文案inti,j,slg,m,cnt,k=0;charshade[50];charshow[50];for(i=0;i<50;i++){shade[i]='\0';}printf("\n 請輸入密文!\n");fflush(stdin);gets(shade);slg=strlen(shade);for(i=0;i<slg;i++){if(shade[i]==''){printf("\n 本系統(tǒng)譯文不支持空格 !請重新輸入!");}elseif((shade[i]<'A'||shade[i]>'Z')&&(shade[i]<'a'||shade[i]>'z')){printf("\n 你輸入的密文不正確 !\n");}elseif(shade[i]>='A'&&shade[i]<='Z'){shade[i]+=32;}}printf("\n 輸入的密文是:");puts(shade);cnt=(slg-1)/5+1;for(i=slg;i<5*cnt;i++){shade[i]='\0';}m=0;if(slg%5==1){for(i=0;i<cnt;i++){show[i*5]=shade[k];k++;m=k-1;}for(j=1;j<5;j++){for(i=0;i<cnt-1;i++){show[i*5+j]=shade[m+1];大全標準文案m++;}}m=0;k=0;}elseif(slg%5==2){for(j=0;j<2;j++){for(i=0;i<cnt;i++){show[i*5+j]=shade[k];k++;m=k-1;}}for(j=2;j<5;j++){for(i=0;i<cnt-1;i++){show[i*5+j]=shade[m+1];m++;}}}else{for(i=0;i<cnt;i++){for(j=0;j<5;j++){if(shade[j*cnt+i]=='\0'){}else{show[m]=shade[j*cnt+i];m++;}}}}show[slg]='\0';printf("\n 明文是:");puts(show);printf("\n");}void_lunhuan()// 只實現先行后列的方法大全標準文案{intchoice;system("CLS");printf("\n");printf("\t\t 輪換加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");fflush(stdin);scanf("%d",&choice);switch(choice){case1:case'a':lunhuan_en();break;case2:lunhuan_de();break;default:break;}}---------------------------------------------------------------------------------------------------------------------------實驗報告評語及成績(請按優(yōu),良,中,及格,不及格五級評定)成績:教師簽字:大全標準文案實驗項目名稱進程管理實驗實驗成績實驗者**專業(yè)班級**組別同組者無實驗日期2012年03月15日第一部分:實驗預習報告1、實驗目的、意義用高級語言編寫和調試一個進程調度程序,以加深對進程的概念及進程調度算法的理解。2、實驗基本原理與方法進程調度算法:采用最高優(yōu)先數優(yōu)先的調度算法(即把處理機分配給優(yōu)先數最高的進程)和先來先服務算法。每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數、到達時間、需要運行時間、已用 CPU時間、進程狀態(tài)等等。進程的優(yōu)先數及需要的運行時間可以事先人為地指定(也可以由隨機數產生) 。進程的到達時間為進程輸入的時間。每個進程的狀態(tài)可以是就緒 W(Wait)、運行 R(Run)、或完成 F(Finish)三種狀態(tài)之一就緒進程獲得 CPU后都只能運行一個時間片。用已占用 CPU時間加1來表示。進程的運行時間以時間片為單位進行計算。如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用 CPU時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應將進程的優(yōu)先數減 1(即降低一級),然后把它插入就緒隊列等待 CPU。每進行一次調度程序都打印一次運行進程、就緒隊列、以及各個進程的 PCB,以便進行檢查。重復以上過程,直到所要進程都完成為止。3、主要儀器設備及耗材實驗室提供計算機和上網條件, C語言上機環(huán)境。4、實驗方案與技術路線(綜合性、設計性實驗)大全標準文案第二部分:實驗過程記錄實驗原始記錄(包括實驗數據記錄,實驗現象記錄,實驗過程發(fā)現的問題等)原理分析(1) 假定系統(tǒng)有五個進程,每一個進程用一個進程控制塊 PCB來代表,進程控制塊的格式為:進程名指針要求運行時間優(yōu)先數狀態(tài)其中,進程名——作為進程的標識,假設五個進程的進程名分別為 P1,P2,P3,P4,P5。指針——按優(yōu)先數的大小把五個進程連成隊列,用指針指出下一個進程的進程控制塊的首地址,最后一個進程中的指針為“0”。要求運行時間——假設進程需要運行的單位時間數。優(yōu)先數——賦予進程的優(yōu)先數,調度時總是選取優(yōu)先數大的進程先執(zhí)行。狀態(tài)——可假設有兩種狀態(tài), “就緒”狀態(tài)和“結束”狀態(tài)。五個進程的初始狀態(tài)都為“就緒”,用“R”表示,當一個進程運行結束后,它的狀態(tài)為“結束” ,用“E”表示。在每次運行你所設計的處理器調度程序之前,為每個進程任意確定它的“優(yōu)先數”和“要求運行時間”。為了調度方便,把五個進程按給定的優(yōu)先數從大到小連成隊列。用一單元指出隊首進程,用指針指出隊列的連接情況。例:隊首標志K2KPK2PK3PK4PK5P1123450KKKK45312312415342RRRRRPCB1PCB2PCB3PCB4PCB5處理器調度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數的辦法,進程每運行一次優(yōu)先數就減“1”。由于本實驗是模擬處理器調度,所以,對被選中的進程并不實際的啟動運行,而是執(zhí)行:優(yōu)先數-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當一個進程被選中運行時,必須恢復進程的現場,讓它占有處理器運行,直到出現等待事件或運行結束。在這里省去了這些工作。(5) 進程運行一次后,若要求運行時間 0,則再將它加入隊列(按優(yōu)先數大小插入,且置大全標準文案隊首標志);若要求運行時間 =0,則把它的狀態(tài)修改成“結束” (E),且退出隊列。(6) 若“就緒”狀態(tài)的進程隊列不為空,則重復上面( 4)和(5)的步驟,直到所有進程都成為“結束”狀態(tài)。在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化。為五個進程任意確定一組“優(yōu)先數”和“要求運行時間”,啟動所設計的處理器調度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。主要模塊(1) 數據結構設計定義進程控制塊:structpcb{charname[10];// 進程名charstate;// 進程狀態(tài)intsuper;// 它的前一個運行的進程intntime;// 進程運行完成所需時間intrtime;// 當前進程已運行的時間structpcb*link;// 下一個要執(zhí)行的進程};功能函數(忽略返回值及參數)Input() : 用于建立進程控制塊。主要通過輸入各進程信息,然后根據 sort() 進行優(yōu)先級排序。Sort(): 進程優(yōu)先級排序函數。通過建立鏈表來將各進程按照優(yōu)先級高到低排好序。Running(): 進程運行時間到 ,置就緒狀態(tài)(不考慮資源) 。Check(): 進程查看函數。用于查看當前運行的進程和就緒隊列中的進程。Disp(): 專門用于顯示當前進程。由 check()調用。大全標準文案第三部分 結果與討論(可加頁)實驗結果分析(包括數據處理、實驗現象分析、影響因素討論、綜合分析和結論等)程序設計類實驗: 包括源程序、輸入數據、運行結果、實驗過程發(fā)現的問題及解決方法等;分析與設計、軟件工程類實驗:編制分析與設計報告,要求用標準的繪圖工具繪制文檔中的圖表。系統(tǒng)實施部分要求記錄核心處理的方法、技巧或程序段;其它實驗:記錄實驗輸入數據、處理模型、輸出數據及結果分析1.輸入與輸出(1)在模擬一開始需要數據進程的個數,然后依次輸入進程名,它的優(yōu)先級別(整數) ,數據這一次錄入后,以后就不需要輸入,只需回車不斷查看“進程”執(zhí)行的情況。以后回車每次輸出當前正在“運行”的“進程”和就緒隊列中的情況,包括進程名、狀態(tài)、優(yōu)先級別、總共所需實際和已經運行多久。2.運行結果截圖及分析大全標準文案某一錄入的數據:進程0進程1進程2進程3進程4進程名Pcb1Pcb2Pcb3Pcb4Pcb5優(yōu)先級別23124運行時間15342狀態(tài)RRRRR第一次執(zhí)行時,由于 pcb5的優(yōu)先級是 4,為最高,故先它先執(zhí)行。如下圖:回車,執(zhí)行第二次。由于pcb5還未完成,故優(yōu)先級降1,與pcb2同級,然后pcb2要早于pcb5到達,所以當前運行的時pcb2,pcb5進入就緒隊列:大全標準文案同理,到了第三次,pcb2還需要運行5-1=4個單位時間,優(yōu)先級降1,pcb5重新又獲得占用“CPU”,一個單位時間后,pcb5正好運行完成:以后的執(zhí)行情況同理,剩下的進程中又三個處于 2級,但 pcb1最先到達,所以第四次執(zhí)行進程pcb1(運行1次即可完成):經過實際運行發(fā)現,總夠 15次后,pcb2最后一個運行完成:大全標準文案3.源程序及注釋#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb{/* 定義進程控制塊 PCB*/charname[10];// 進程名charstate;// 進程狀態(tài)intsuper;// 它的前一個運行的進程intntime;intrtime;structpcb*link;}*ready=NULL,*p;typedefstructpcbPCB;voidsort()/* 建立對進程進行優(yōu)先級排列函數 */{PCB*first,*second;intinsert=0;if((ready==NULL)||((p->super)>(ready->super)))/* 優(yōu)先級最大者 ,插入隊首*/{p->link=ready;ready=p;}else/* 進程比較優(yōu)先級 ,插入適當的位置中 */{first=ready;second=first->link;while(second!=NULL){if((p->super)>(second->super))/* 若插入進程比當前進程優(yōu)先數大,*/

溫馨提示

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

評論

0/150

提交評論