南郵軟件設(shè)計報告_第1頁
南郵軟件設(shè)計報告_第2頁
南郵軟件設(shè)計報告_第3頁
南郵軟件設(shè)計報告_第4頁
南郵軟件設(shè)計報告_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

年4月19日南郵軟件設(shè)計報告文檔僅供參考軟件設(shè)計報告姓名:琳學(xué)號:B120604215月16日~6月16日目錄第一章軟件設(shè)計介紹 1第二章軟件開發(fā)平臺簡介 2第三章 軟件設(shè)計的內(nèi)容 33.1 分?jǐn)?shù)統(tǒng)計軟件(A1) 33.1.1設(shè)計題目及要求 33.1.2設(shè)計思想及程序流程框圖 33.1.3邏輯功能程序 33.1.4結(jié)果及完善方向 33.2 打字軟件(A2) 33.2.1設(shè)計題目及要求 33.2.2設(shè)計思想及程序流程框圖 33.2.3邏輯功能程序 33.2.4結(jié)果及完善方向 33.3 文本編輯器(A3) 33.3.1設(shè)計題目及要求 33.3.2設(shè)計思想及程序流程框圖 43.3.3邏輯功能程序 43.3.4結(jié)果及完善方向 43.4 加密軟件(A4) 43.4.1設(shè)計題目及要求 43.4.2設(shè)計思想及程序流程框圖 43.4.3邏輯功能程序 43.4.4結(jié)果及完善方向 43.5 進制轉(zhuǎn)換器(A5) 43.5.1設(shè)計題目及要求 43.5.2設(shè)計思想及程序流程框圖 43.5.3邏輯功能程序 43.5.4結(jié)果及完善方向 53.6 學(xué)生成績核算系統(tǒng)的設(shè)計與實現(xiàn)(B1) 53.6.1設(shè)計題目及要求 53.6.2設(shè)計思想及程序流程框圖 53.6.3邏輯功能程序 53.6.4結(jié)果及完善方向 53.7 模擬電信計費系統(tǒng)的設(shè)計與實現(xiàn)(B2) 53.7.1設(shè)計題目及要求 53.7.2設(shè)計思想及程序流程框圖 53.7.3邏輯功能程序 53.7.4結(jié)果及完善方向 5第四章心得體會 6第一章軟件設(shè)計介紹一、所涉及的課程及知識點《高級語言程序設(shè)計》:常量、變量、表示式的基本知識;函數(shù)的定義與調(diào)用;文件讀寫;數(shù)組、指針、結(jié)構(gòu)體等自定義類型的使用;排序等知識。二、目的與任務(wù)目的:經(jīng)過集中時間上機實驗,對學(xué)生的程序設(shè)計能力進行一次綜合訓(xùn)練,使學(xué)生充分發(fā)揮已有的編程能力,熟悉編譯環(huán)境。選擇若干課題,進行審題、分析、設(shè)計和調(diào)試,在程序準(zhǔn)備、程序?qū)崿F(xiàn)、完成文檔、答辯驗收過程中,將全面鞏固已學(xué)過的編程知識,全面提高編程技能,在編程風(fēng)格、調(diào)試器的使用、測試技術(shù)等方面得到全面訓(xùn)練。學(xué)生在程序設(shè)計過程中,學(xué)生需要查找各種資料獲取有用信息解決實際問題,自學(xué)相關(guān)知識,提高文檔書寫能力,加強團隊合作意識,提高口頭表示能力。任務(wù):《軟件設(shè)計》課題共分A、B兩檔。A檔共5題,題目較簡單,第一周完成;B檔共2題,題目是綜合性的,較復(fù)雜,第二周完成。三、主要儀器設(shè)備硬件:微型計算機軟件:C、C++、VisualC++等四、參考書【1】朱立華,王立柱.C語言程序設(shè)計.北京:人民郵電出版社,【2】朱立華,朱建,俞瓊.面向?qū)ο蟪绦蛟O(shè)計及C++.北京:人民郵電出版社,【3】張引等.C程序設(shè)計基礎(chǔ)課程設(shè)計.浙江:浙江大學(xué)出版社,

第二章軟件開發(fā)平臺簡介軟件開發(fā)平臺是一種軟件開發(fā)工具,是以通用技術(shù)架構(gòu)(例如MVC)為基礎(chǔ),集成常見建模工具、二次開發(fā)包、基礎(chǔ)解決方案等而成。能夠大幅縮減編碼率,使開發(fā)者有更多的時間關(guān)注客戶的需求,在項目的需求、設(shè)計、開發(fā)、測試、部署、維護等各個階段均可提供強大的支持。軟件開發(fā)平臺有兩種平臺模式,一種是傳統(tǒng)的c/s架構(gòu)模式,一種是現(xiàn)在比較流行的b/s架構(gòu)模式。軟甲件開發(fā)平臺的分類,一般有三種:一種是SUN公司的SUNONE框架平臺,一種是LAMP,它是Linux、Apache、Mysql、PHP四項技術(shù)的縮寫,還有一種是.NETFramework(一般簡稱為NET框架平臺)。LAMP是一組常見來搭建動態(tài)網(wǎng)站或者服務(wù)器的開源軟件,本身都是各自獨立的程序,可是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個Web應(yīng)用程序平臺。隨著開源潮流的蓬勃發(fā)展,開放了源代碼的LAMP已經(jīng)與J2EE和.NET平臺形成了三足鼎立之勢,而且該軟件開發(fā)的項目在軟件方面的投資成本較低,因此手袋整個IT界的關(guān)注。從網(wǎng)站的流量上來說,70%以上的訪問流量都是LAMP來提供的,LAMP是最強大的網(wǎng)站解決方案。LAMP是基于Linux、Apache、MySQL和PHP的開放資源網(wǎng)絡(luò)開發(fā)平臺,這個術(shù)語來自歐洲,在那里這些程序常見來作為一種標(biāo)準(zhǔn)開發(fā)環(huán)境。名字來源于每個程序的第一個字母。每個程序在所有權(quán)里都符合開發(fā)源代碼標(biāo)準(zhǔn):Linux是開放系統(tǒng),Apache是最通用的網(wǎng)絡(luò)服務(wù)器,MySQL是帶有基于網(wǎng)絡(luò)管理附加工具的關(guān)系數(shù)據(jù)庫,PHP是流行的對象腳本語言,她包含了多數(shù)其它語言的優(yōu)秀特征來使得它的網(wǎng)絡(luò)開發(fā)更加有效。雖然這些開放源代碼程序本身并不是專門設(shè)計成同另外幾個程序一起工作的,但由于她們都是影響較大的開源軟件,擁有許多共同特征,這就導(dǎo)致了這些組件經(jīng)常在一起使用。在過去的幾年里,這些軟件的兼容性不斷完善,在一起的應(yīng)用情形變得更加普遍。越來越多的供應(yīng)商、用戶和企業(yè)投資者日益認(rèn)識到,經(jīng)過LAMP單個組件的開源軟件組成的平臺用來構(gòu)建以及運行各種商業(yè)應(yīng)用和協(xié)作構(gòu)建各種網(wǎng)絡(luò)應(yīng)用程序變?yōu)橐环N可能和實踐,變得更加具有競爭力,更加吸引客戶。LAMP無論是性能、質(zhì)量還是價格都將成為企業(yè)、政府信息化所必須考慮的平臺。JAVA平臺是一種新型的軟件平臺,可用來在網(wǎng)絡(luò)計算機系統(tǒng)開發(fā)和運行高交互性、動態(tài)的、安全的Java小程序和應(yīng)用程序。Java平臺有三種三種版本,這使軟件開發(fā)人員、服務(wù)提供商和設(shè)備生產(chǎn)商能夠針對特定的市場進行開發(fā)。.NET開發(fā)平臺是一種用于建立Web服務(wù)器應(yīng)用程序和Windows桌面應(yīng)用程序的軟件組件,用該平臺創(chuàng)立的應(yīng)用程序在CommonLanguageRuntime(通用語言運行環(huán)境)的控制下進行。CLR是一個軟件引擎,用來加載應(yīng)用程序,確認(rèn)她們能夠沒有錯誤的執(zhí)行,進行相應(yīng)的安全許可驗證,執(zhí)行應(yīng)用程序,然后在運行結(jié)束后將她們刪除。類庫集提供了使應(yīng)用程序能夠讀寫XML數(shù)據(jù)、在Internet上通信、訪問數(shù)據(jù)庫等的代碼。所有的類庫都建立在一個基礎(chǔ)的類庫之上,她提供管理使用最為頻繁的數(shù)據(jù)類型(例如數(shù)值或文本字符串)的功能,以及諸如文件輸入/輸出等底層功能。VisualStudio是微軟公司推出的開發(fā)環(huán)境,VisualStudio能夠用來創(chuàng)立Windows平臺下的Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也能夠用來創(chuàng)立網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office插件。VisualStudio是當(dāng)前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境。VisualStudio包括各種增強功能,例如可視化設(shè)計器(使用.NETFramework3.5加速開發(fā))、對Web開發(fā)工具的大量改進,以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強功能。VisualStudio為開發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)立引人注目的、令人印象深刻并支持AJAX的Web應(yīng)用程序。開發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的Web應(yīng)用程序,這些應(yīng)用程序能夠集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運行并完全訪問ASPNET應(yīng)用程序服務(wù)和Microsoft平臺。.NET支持多種程序設(shè)計語言如:C++.NET、VB.NET、ASP.NET、C等,實現(xiàn)了語言互用性。而Java只能用Java語言。隨著開源潮流的蓬勃發(fā)展,開放源代碼的LAMP已經(jīng)與J2EE和.NET商業(yè)軟件形成三足鼎立之勢。

軟件設(shè)計的內(nèi)容分?jǐn)?shù)統(tǒng)計軟件(A1)3.1.1設(shè)計題目及要求課題內(nèi)容:設(shè)計一個分?jǐn)?shù)統(tǒng)計程序。包括學(xué)生信息的輸入輸出以及排序。經(jīng)過該課題全面熟悉數(shù)組、字符串、文件的使用,掌握程序設(shè)計的基本方法及友好界面的設(shè)計。課題要求:(1)輸入某班級學(xué)生的姓名、分?jǐn)?shù);(2)對(1)的分?jǐn)?shù)進行降冪排列并輸出;(3)具有輸入輸出界面。3.1.2設(shè)計思想及程序流程框圖設(shè)計思想為:建立學(xué)生結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體成員包括存儲姓名的字符型數(shù)組以及存儲分?jǐn)?shù)的整型,使用for循環(huán)語句從輸入處獲取n個學(xué)生的姓名和成績,成績輸入的信息存入結(jié)構(gòu)體數(shù)組。再選擇按成績降冪排名,將結(jié)構(gòu)體數(shù)組從頭進行輸出。算法流程框圖為:開始開始輸入學(xué)生人數(shù)輸入學(xué)生人數(shù)清屏清屏N輸入是否正確?N輸入是否正確?輸入學(xué)生姓名name和分?jǐn)?shù)grade輸入學(xué)生姓名name和分?jǐn)?shù)grade自動降冪排序自動降冪排序輸出排序后的成績單輸出排序后的成績單結(jié)束結(jié)束3.1.3邏輯功能程序#include<stdio.h>#include<string.h>#include<stdlib.h>structstudent//存放學(xué)生信息的結(jié)構(gòu)體{ charname[20];//字符型數(shù)組存放姓名 intgrade;//成績類型}temp,std[100];intmain(){interr;charx[5]; intn; inti; intm; charch[20]; system("colorF9");do{system("cls"); printf("\n\n"); printf("****************************************\n"); printf("\t\n");printf("~O(∩_∩)O~歡迎使用本系統(tǒng)~O(∩_∩)O~\n"); printf("\t\n"); printf("****************************************\n"); printf("\n"); printf("請輸入學(xué)生個數(shù)\n\n"); do{printf("\t\t學(xué)生個數(shù):"); err=0;i=0; scanf("%s",x);//輸入選項 getchar(); while(x[i]!='\0')//依次檢查輸入的字符串是否為數(shù)字 { if(x[i]>'9'||x[i]<'0')err=1; i++; } if(err)printf("\n\t\t請輸入數(shù)字!\n"); }while(err);n=atoi(x);//將字符型數(shù)組x轉(zhuǎn)換成整型nfor(i=0;i<n;i++)//循環(huán)N次輸入學(xué)生信息 { printf("\n\t\t請輸入第%d個人的信息\n\t\t姓名:",i+1);scanf("%s",std[i].name); getchar();printf("\t\t分?jǐn)?shù):");scanf("%d",&std[i].grade); if(std[i].grade<0||std[i].grade>100) {printf("您的輸入錯誤,請重新輸入:\n"); printf("\t\t分?jǐn)?shù):"); scanf("%d",&std[i].grade); } getchar(); } printf("輸入信息:\n"); printf("********************************\n"); printf("姓名成績\n\n"); for(i=0;i<n;i++) { printf("%s%d\n",std[i].name,std[i].grade); }printf("\n\n***********************************\n"); printf("\n排序后信息:\n"); for(m=0;m<n;m++)for(i=0;i<n-m-1;i++) { if(std[i].grade<std[i+1].grade) { temp=std[i]; std[i]=std[i+1]; std[i+1]=temp; //成績按降冪排序 } } printf("\n您所輸入的學(xué)生名次如下:\n\n");printf("********************************************\n");printf("名次姓名成績\n\n"); for(i=0;i<n;i++) {printf("第%d名%s%d\n",i+1,std[i].name,std[i].grade); }printf("\n\n********************************************\n");printf("\t\n"); printf("\t您是否還需要繼續(xù)?(請按Y鍵繼續(xù)/任意鍵退出)");//選擇是否繼續(xù) printf("\t\n"); scanf("%s",ch);printf("\t感謝使用此軟件,歡迎下次光臨~O(∩_∩)O~\n");}while(ch[0]=='Y'||ch[0]=='y');//與開頭組成do-while結(jié)構(gòu)循環(huán) printf("\t"); return0;}3.1.4結(jié)果及完善方向?qū)嶒灲Y(jié)果:初始界面:輸入學(xué)生信息之后直接排序,界面如圖所示:若所輸入的學(xué)生成績在有效范圍(0~100)之外系統(tǒng)將會提示輸入錯誤,界面如下圖:程序分析:此程序功能上滿足基本的題目要求,能夠做到輸入學(xué)生的姓名和成績,能夠按成績降冪排列并輸出。完善方向:基本功能已實現(xiàn),對于實際的系統(tǒng),接下來完善的功能的是能夠選擇不同的科目進行輸入,能夠選擇進行降冪或者升冪排序,同時能添加或刪除學(xué)生信息,對于成績相同的學(xué)生進行并列排名。打字軟件(A2)3.2.1設(shè)計題目及要求課題內(nèi)容:設(shè)計一個打字程序。包括隨機產(chǎn)生字符串,以及字符串比較和統(tǒng)計。經(jīng)過此課題,熟練掌握數(shù)組、格式輸出、字符串處理等。課題要求:(1)隨機產(chǎn)生一字符串,每次產(chǎn)生的字符串內(nèi)容、長度都不同;(2)根據(jù)(1)的結(jié)果,輸入字符串,判斷輸入是否正確,輸出正確率;(3)具有輸入輸出界面。3.2.2設(shè)計思想及程序流程框圖設(shè)計思想為:利用函數(shù)庫里提供的產(chǎn)生隨機函數(shù)rand()產(chǎn)生隨機的字符串長度,默認(rèn)將長度定位在1至10個字符。再產(chǎn)生一串由大小寫字母以及數(shù)字組成的隨機字符串,每產(chǎn)生一個字符串就按字保存至數(shù)組里。顯示產(chǎn)生的字符串,開始打字后,將輸入字符串保存至數(shù)組,打字完畢。再與產(chǎn)生字符進行逐個比較,若相同,則正確個數(shù)加1,最終得出正確率,輸出顯示。算法流程框圖為:開始開始隨機產(chǎn)生字符串隨機產(chǎn)生字符串輸入字符串輸入字符串依次比較,計算正確率依次比較,計算正確率 輸出正確率輸出正確率YY是否繼續(xù)是否繼續(xù)NN結(jié)束結(jié)束3.2.3邏輯功能程序#include<stdio.h>#include<time.h>#include<stdlib.h>#include<iostream>voidmain(void){inti,num,flag,m=0,k,over=1; charstr[100];//產(chǎn)生隨機數(shù)組 charstr1[100];//輸入隨機數(shù)組 charc; floatp; system("colorF9"); while(over)//選擇是否繼續(xù) { num=0;//產(chǎn)生字符長度num初始化為0 m=0;//統(tǒng)計正確個數(shù)變量m初始化為0 system("cls");//清除屏幕 printf("\n\n\n"); printf("***************************************\n"); printf("~O(∩_∩)O~歡迎使用本系統(tǒng)~O(∩_∩)O~\n"); printf("***************************************\n"); printf("*********打字軟件*******\n"); srand(time(NULL));//提取系統(tǒng)時間,以時間為seed產(chǎn)生隨機數(shù) num=1+rand()%10;//產(chǎn)生長度不大于10的字符串 for(k=0;k<num;k++) {flag=rand()%3;//隨機產(chǎn)生小于3的數(shù)if(flag==0)str[k]='A'+rand()%26;//產(chǎn)生大寫字母elseif(flag==1)str[k]='a'+rand()%26;//產(chǎn)生小寫字母 elsestr[k]='0'+rand()%9;//產(chǎn)生數(shù)字 } str[k]='\0'; printf("\n\n\t\t*************************************\n"); printf("隨機字符串個數(shù):\t\t%d\n",num); printf("隨機產(chǎn)生的字符串:\t%s\n",str); printf("\t\t*************************************\n\n"); printf("請輸入上面的字符串:"); scanf("%s",str1);//輸入字符串 getchar(); for(i=0;str1[i]!='\0'&&str[i]!='\0';i++)//進行比較 {if(str[i]==str1[i])m++;//m為正確字符個數(shù)}p=(float)m/num; printf("\n\n\n*************************************\n\n"); printf("正確率為:%.1f%%\n",p*100); printf("正確個數(shù)為:%d\n",m); printf("\n*************************************\n\n\n"); printf("\n"); printf("是否還需繼續(xù)練習(xí)?(任意鍵繼續(xù)/N鍵退出)\n"); scanf("%c",&c);//輸入選項 getchar(); if(c=='N'||c=='n')over=0; }}\3.2.4結(jié)果及完善方向初始界面:即隨機產(chǎn)生的字符串為輸出頁面當(dāng)輸入的字符串與隨機產(chǎn)生的字符串一致時,正確率為100%,如圖:當(dāng)輸入的字符串與隨機產(chǎn)生的字符串不一致時,程序?qū)⒂嬎阏_率并給出輸入正確的個數(shù),如圖:程序結(jié)果分析:此程序能保證每次產(chǎn)生的字符串不一樣,且能正確地輸出準(zhǔn)確率,基本完成了打字訓(xùn)練的任務(wù)。考慮到程序的實用性,能夠為程序添加計時功能、記錄保存功能等,能夠使使用者更加靈活地運用打字軟件。程序完善方向:對于這個程序,不足的就是能夠添加計時功能,在打字前,能夠詢問用戶是否進行計時,還能夠添加功能,由用戶自己選擇可從從其它文件導(dǎo)入一段字符串。文本編輯器(A3)3.3.1設(shè)計題目及要求課題內(nèi)容:設(shè)計一個簡單的文本編輯器,該系統(tǒng)要求對一個文本文件中的內(nèi)容進行各種常規(guī)操作,如:插入、刪除、查找、替換等功能。經(jīng)過此課題,熟練掌握文本文件的操作及用字符數(shù)組或字符指針實現(xiàn)字符串操作的功能。課題要求:(1)編輯文本;(2)保存、打開指定位置的文本文件;(3)具有輸入輸出界面。3.3.2設(shè)計思想及程序流程框圖設(shè)計思想為:在主菜單可選擇建立文本、編輯文本、讀取文本和退出程序。以只寫方式編輯文本,若文本不存在則提示“不能打開文件”,打開的文件則輸入的內(nèi)容以“#”作為結(jié)束標(biāo)識;讀取文件時,提示需要讀取的目標(biāo)文本路徑,將文本里的內(nèi)容輸出。算法流程框圖為:開始開始輸出功能菜單輸出功能菜單輸入選項chooseN輸入選項chooseNNNNchoose=4choose=3choose=2choose=1Nchoose=4choose=3choose=2choose=1NN輸入路徑輸入路徑輸入路徑輸入路徑輸入路徑輸入路徑文件不存在文件不存在文件不存在文件不存在文件不存在文件不存在YNNYNNYYN建立文本編輯文本YYN建立文本編輯文本輸出文本輸出文本結(jié)束結(jié)束3.3.3邏輯功能程序#include<stdio.h>#include<time.h>#include<stdlib.h>voidmenu1(){printf("\n\n"); printf("*********~O(∩_∩)O~歡迎使用此軟件~O(∩_∩)O~********\n\n"); printf("****文本編輯器****\n\n");printf(">>>>>>>1.建立文件<<<<<<<\n");printf(">>>>>>>2.查看文件<<<<<<<\n");printf(">>>>>>>3.編輯文件<<<<<<<\n");printf(">>>>>>>0.退出<<<<<<<\n\n"); }voidmenu2(){printf("\n\n"); printf("*******編輯文件功能*******\n"); printf("\n"); printf(">>>>>1.查找<<<<<\n");printf(">>>>>2.刪除<<<<<\n");printf(">>>>>3.插入<<<<<\n");printf(">>>>>4.替換<<<<<\n");printf(">>>>>0.返回上級菜單<<<<<\n"); }intoutput(){charfilepath[30];//路徑 FILE*fp; charch;printf("\n請輸入文件路徑(如D:\\name.txt:"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"r"); printf("\n文件內(nèi)容如下:\n"); rewind(fp);//返回文件首,輸出整個文件的內(nèi)容do {ch=fgetc(fp);putchar(ch); }while(ch!=EOF); fclose(fp); return0;}intedit(intn){inti=0,x=0,fc=0,fch=0,fs=0,ft=0,a; char*p;intc=0,j;chartest[500]; charm; charch; charhou; charhuan;charfilepath[30];//路徑chart; FILE*fp;switch(n){case1://查找功能printf("\n請輸入文件路徑:"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"r"); printf("\n文件內(nèi)容如下:\n"); rewind(fp);//返回文件首,輸出整個文件的內(nèi)容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標(biāo)識符 fclose(fp); p=test; do { a=0,x=0; printf("\n請輸入要查找字符:"); scanf("%c",&t); getchar(); while(x<i) { if(t==*(p+x)) { printf("\n您要查找的字為:%c,它是第%d個\n",t,x+1); a=1; } x++; } if(a==0) printf("\n對不起,您要找的字不存在!\n"); printf("\n是否還需要繼續(xù)查找?(任意鍵繼續(xù)/0退出)\n"); scanf("%c",&m); if(m=='0') fc=1; }while(!fc); break; case2://刪除功能 do {inta=0,x=0;printf("\n請輸入文件路徑(如D:\\name.txt:"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"r"); printf("\n文件內(nèi)容如下:\n"); rewind(fp);//返回文件首,輸出整個文件的內(nèi)容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標(biāo)識符 fclose(fp); printf("\n請輸入要刪除字符:"); scanf("%c",&t); getchar();while(x<(i-a)) { if(test[x]==t) { a++; for(c=x;c<(i-a);c++) test[c]=test[c+1]; test[i-a-1]='\0'; x--; } x++; fp=fopen(filepath,"w");for(j=0;j<(i-a);j++){ch=test[j];fputc(ch,fp);} fclose(fp); } if(a==0) printf("\n對不起,此字符不存在,無法刪除!\n");printf("\n文件已保存!\n"); getchar();printf("\n是否還需要繼續(xù)刪除?(任意鍵繼續(xù)/0退出)\n"); scanf("%c",&m); if(m=='0') fs=1; }while(!fs);break;case3://插入功能 do { inta=0; i=0;//i的復(fù)位 printf("\n請輸入文件路徑:"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"r"); printf("\n文件內(nèi)容如下:\n"); rewind(fp);//返回文件首,輸出整個文件的內(nèi)容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標(biāo)識符 fclose(fp); p=test; printf("\n請輸入要插入到哪個字符后面:\n"); scanf("%c",&hou); getchar(); while(x<i+a) { if(hou==*(p+x)) a=1; x++; } if(a==0) { printf("\n此字符不存在,輸入有誤!\n"); getchar(); return0; }printf("\n請輸入要插入的字符:\n"); scanf("%c",&t); getchar(); intx=0,b=0; while(x<i+b) { if(hou==*(p+x)) { for(j=i+b-1;j>x;j--) { test[j+1]=test[j]; }test[x+1]=t; test[i+b+1]='\0'; b++; } x++; } fp=fopen(filepath,"w");for(j=0;j<i+1;j++){ch=test[j];fputc(ch,fp);}fclose(fp);printf("\n文件已保存!\n"); getchar(); printf("\n是否還需要繼續(xù)插入?(任意鍵繼續(xù)/0退出)\n"); scanf("%c",&m); if(m=='0') fch=1; }while(!fch);break;case4://替換功能 do { inta=0;printf("\n請輸入文件路徑(如D:\\name.txt:"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"r"); printf("\n文件內(nèi)容如下:\n"); rewind(fp);//返回文件首,輸出整個文件的內(nèi)容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標(biāo)識符 fclose(fp); p=test;printf("\n請輸入文章中要替換的字符:\n"); scanf("%c",&t);getchar();while(x<i) { if(t==*(p+x)) a=1; x++; }if(a==0) { printf("\n對不起,找不到您要替換的字符!\n"); getchar(); return0; }printf("請輸入您想要替換的字符:\n"); scanf("%c",&huan); getchar(); intx=0; while(x<i) { if(t==*(p+x)) test[x]=huan; x++; } fp=fopen(filepath,"w");for(j=0;j<i+1;j++){ch=test[j];fputc(ch,fp);}fclose(fp);printf("\n文件已保存!\n"); getchar(); printf("\n是否還需要繼續(xù)替換?(任意鍵繼續(xù)/0退出)\n"); scanf("%c",&m); if(m=='0') ft=1; }while(!ft);break;case0:break;default:printf("\n輸入錯誤!");return0; }return0;}voidmain(){system("colorf9");inti=0,quitflag=0,a;//標(biāo)志符intn;charch; charfilepath[30];//路徑 FILE*fp;while(!quitflag)//若為選擇退出則繼續(xù){system("cls");//清屏 menu1();printf("請選擇:"); scanf("%d",&a);//輸入選擇 getchar(); //接收Enter鍵字符 switch(a) { case1://寫入文件 printf("請輸入文件路徑(如D:\\name.txt):"); scanf("%s",filepath);//輸入路徑 getchar();//接收Enter字符 fp=fopen(filepath,"w+"); if(fp==NULL)printf("文件不存在!\n");else { printf("請輸入內(nèi)容(以#結(jié)束)\n"); while((ch=getchar())!='#')//若不為"#"繼續(xù)輸入 {fputc(ch,fp); }fclose(fp);printf("\n文件已保存!\n");break; }case2://查看文件output(); getchar(); break; case3://編輯文件menu2();printf("請選擇:");scanf("%d",&n); edit(n);break;case0:quitflag=1;break;//若輸入0,則退出標(biāo)志符為1default:printf("輸入錯誤!"); }}}3.3.4結(jié)果及完善方向初始界面:建立文本:讀取文本:編輯文本子界面:查找:若輸入多個字符則以第一個為準(zhǔn):若輸入不存在的字符,系統(tǒng)將提示并重新輸入刪除:插入:替換:程序結(jié)果分析:本程序能夠根據(jù)指定文件名進行建立文件、讀取文件、編輯文件等操作。程序完善方向:在編輯文本階段,只是以覆蓋的方式進行編輯,這樣會導(dǎo)致文件以前的內(nèi)容完全丟失。應(yīng)該在編輯函數(shù)中增加“追加編輯”的功能,這樣能夠使使用者靈活的經(jīng)過“覆蓋方式”“追加方式”進行文件編輯。加密軟件(A4)3.4.1設(shè)計題目及要求課題內(nèi)容:設(shè)計一個加密程序。包括明文與密鑰的轉(zhuǎn)換。經(jīng)過此課題,熟練掌握數(shù)組、格式輸出、字符串處理、類型轉(zhuǎn)換等。課題要求:(1)輸入任意一段明文M,以及密鑰K;(2)根據(jù)以下公式將其轉(zhuǎn)換為密文C。Ci=mi+K,其中i=0,1,……n-1,K為密鑰;(3)具有輸入輸出界面。3.4.2設(shè)計思想及程序流程框圖設(shè)計思想為:輸入明文,保存在字符串中,輸入密鑰,以字符數(shù)組形式獲取,若為數(shù)字字符,則取其數(shù)值,若為其它,則取其ASCII碼值,最后轉(zhuǎn)換成十進制數(shù),將每個字符+密鑰后生成密文字符,然后按順序輸出顯示密文。算法流程框圖為:開始開始輸入明文和密鑰輸入明文和密鑰密鑰轉(zhuǎn)換密鑰轉(zhuǎn)換加密加密輸出密文輸出密文Y解密Y解密輸出明文輸出明文NN結(jié)束結(jié)束3.4.3邏輯功能程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>voidmenu();intitn(chars[]);voidJiami(charm[],intk);voidJiemi(charm[],chary[]);intmain(){charm[1000];//輸入的明文chary[1000];//輸入的密鑰chars[10];charm1[1000];charch;intk,choice;inti,n; system("colorfd");do{system("cls");menu(); printf("\n\n\n*****************************************\n");printf("請輸入一段明文:");gets(m);strcpy(m1,m);printf("\n請輸入密鑰(按#號鍵結(jié)束):");for(i=0;;i++)//密鑰輸入不顯示字符,顯示*{ch=getch();if(ch=='#'){y[i]='\0';break;}putchar('*');y[i]=ch;}k=itn(y);Jiami(m,k);printf("是否需要解密?(y/n):");ch=getchar();getchar();if(ch=='y'||ch=='Y')Jiemi(m1,y);printf("\n繼續(xù)請按1,退出請按0:");scanf("%d",&n);getchar();if(!n)printf("\n\n\t\t\t***********謝謝使用!***********\n\n");}while(n);return0;}voidmenu(){printf("\n\n\n\t****************~O(∩_∩)O~歡迎進入此軟件~O(∩_∩)O~******************\n");printf("\t******************************************************************\n");printf("\t>>>>>>>>>>加密系統(tǒng)<<<<<<<<<<\n");printf("\t******************************************************************\n\n");}intitn(chars[]){//輸入字符串轉(zhuǎn)換為數(shù)值inti,k=0,l; l=strlen(s);for(i=0;i<l;i++) { if(isdigit(s[i])) k=k*10+(int)(s[i])-48;//輸入字符為數(shù)字,就轉(zhuǎn)換為數(shù)值 else k=k*10+(int)(s[i]); //輸入為字母,則取其ASCII碼 }if(k>127) k=k%128; returnk;}voidJiami(charm[],intk){//加密inti,l;l=strlen(m); printf("\t\t\t\n\n***********密文如下:**********\n\n");for(i=0;i<l;i++)//其間為可打印字符 { m[i]=m[i]+k; if(m[i]<0) m[i]=m[i]+127; if(m[i]>126) m[i]=m[i]-127; if(m[i]<33) m[i]=m[i]+33;printf("%c",m[i]); }printf("\n\n\n");}voidJiemi(charm[],chary[]){intcount=0,i,f;chars[1000],ch;do{f=0;printf("\n請輸入密鑰(按#號鍵結(jié)束):");for(i=0;;i++)//密鑰輸入不顯示字符,顯示*{ch=getch();if(ch=='#'){s[i]='\0';break;}putchar('*');s[i]=ch;}if(strcmp(s,y)==0){printf("\n\n解密成功,明文為:");puts(m);}else{printf("密鑰錯誤!!\n");f=1;count++;}if(count==3){printf("\n您輸入的3次密鑰均錯誤,解密失敗!!\n");break;}}while(f);}3.4.4結(jié)果及完善方向初始界面:加密過程:解密過程:密匙輸入錯誤時:當(dāng)密匙三次輸入錯誤時,解密失?。篎.退出界面程序結(jié)果分析:此程序基本完成功能,能實現(xiàn)字符串的加密與解密,具有較友好的界面,能實現(xiàn)多次加密與解密。程序完善方向:此程序沒有將加密和解密模塊分開,應(yīng)在程序上加以完善。界面能夠做得更友好。進制轉(zhuǎn)換器(A5)3.5.1設(shè)計題目及要求課題內(nèi)容:設(shè)計一個進制轉(zhuǎn)換器程序。包括二進制、八進制、十進制、十六進制數(shù)互相轉(zhuǎn)換。經(jīng)過此課題,熟練掌握字符串、格式輸出、進制換算的各種操作。課題要求:(1)可輸入二進制、八進制、十進制、十六進制數(shù);(2)將已輸入的數(shù)轉(zhuǎn)換成其余進制的數(shù);(3)具有輸入輸出界面。3.5.2設(shè)計思想及程序流程框圖設(shè)計思想:(1)輸入“輸入進制”base1;(2)輸入一個base1進制的數(shù)n,檢驗n數(shù)字的合法性;(3)輸入“輸出進制”base2;(4)將n轉(zhuǎn)換成十進制數(shù)temp,再將temp轉(zhuǎn)換成base2進制數(shù);(5)為防止數(shù)據(jù)溢出,限制數(shù)據(jù)位數(shù)為6位。算法流程框圖為:開始開始輸出功能菜單輸出功能菜單輸入n輸入nnn12340十六進制八進制二進制十進制0十六進制八進制二進制十進制N十六進制轉(zhuǎn)換二進制、十進制轉(zhuǎn)換二進制、十進制轉(zhuǎn)換二進制是否繼續(xù)?轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)換十進制二進制十進制八進制NNNN十六進制轉(zhuǎn)換二進制、十進制轉(zhuǎn)換二進制、十進制轉(zhuǎn)換二進制是否繼續(xù)?轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)成并輸出其它進制轉(zhuǎn)換十進制二進制十進制八進制結(jié)束YYYY結(jié)束YYYYYYYYYN3.5.3邏輯功能程序#include"stdio.h"#include<iostream>voidbishow(intm);voidmain(){ charx,w; charc[10]; inti=0,err=0,quitflag=0; intnum=0; system("colorfd");do{ system("cls"); printf("\n\n\n"); printf("\t******~O(∩_∩)O~歡迎使用此軟件~O(∩_∩)O~*****\n\n"); printf("\t*********************************************\n"); printf("\t>>>>>>數(shù)制轉(zhuǎn)換系統(tǒng)<<<<<<<\n"); printf("\t*********************************************\n"); printf("\t\n"); printf("\t***************************************************\n"); printf("\t>>>>>>1二進制<<<<<<\n"); printf("\t>>>>>>2八進制<<<<<<\n"); printf("\t>>>>>>3十進制<<<<<<\n"); printf("\t>>>>>>4十六進制<<<<<<\n"); printf("\t>>>>>>0退出<<<<<<\n"); printf("\t***************************************************\n"); printf("\n\t請選擇:"); do{ err=0; scanf("%c",&x);//輸入選項 getchar(); if(x>'4'||x<'0')//若輸入非法,則重新輸入 { err=1; printf("\n輸入錯誤,請重新輸入\n"); } }while(err); switch(x) { case'1': //輸入二進制 do{ err=0;i=0;num=0; printf("\n\t請輸入二進制數(shù):"); scanf("%s",c); getchar(); while(c[i]!='\0')//'\0'字符結(jié)尾 { if(c[i]!='1'&&c[i]!='0')err=1;//若輸入數(shù)字不為1或0則輸入錯誤 i++; } if(err)printf("\n\t輸入數(shù)值錯誤,不是二進制數(shù)!\n"); }while(err);//err為1重復(fù)上面,否則繼續(xù) i=0; while(c[i]!='\0')//二進制轉(zhuǎn)換為十進制 { num=num*2; if(c[i]=='1')num=num+1; i++; } printf("\n\t二進制數(shù)%s轉(zhuǎn)換為其它進制:\n\n",c); printf("\t********************************************\n"); printf("\t八進制:%o\n",num);//輸出八進制 printf("\t十進制:%d\n",num);//輸出十進制 printf("\t十六進制:%x\n",num);//輸出十六進制 printf("\t********************************************\n\n"); printf("\t是否需要繼續(xù)?(任意鍵繼續(xù)N鍵退出)"); scanf("%c",&w); getchar(); if(w=='N'||w=='n')quitflag=1; break; case'2'://輸入八進制 do{ err=0;i=0;num=0; printf("\n\t請輸入八進制數(shù):"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'7'||c[i]<'0')err=1;//若輸入數(shù)據(jù)不在0~7間則輸入錯誤 i++; } if(err)printf("\n輸入數(shù)值錯誤,不是八進制數(shù)!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*8; num=num+c[i]-48; i++; } printf("\n\t八進制數(shù)%s轉(zhuǎn)換為其它進制:\n\n",c); printf("\t********************************************\n"); bishow(num); printf("\t十進制:%d\n",num); printf("\t十六進制:%x\n",num); printf("\t********************************************\n\n"); printf("\t是否繼續(xù)?(任意鍵繼續(xù)N鍵退出)");scanf("%c",&w); getchar(); if(w=='N'||w=='n')quitflag=1; break; case'3'://輸入十進制 do{ err=0;i=0;num=0; printf("\n\t請輸入十進制數(shù):"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'9'||c[i]<'0')err=1;//若輸入數(shù)據(jù)為非數(shù)字符號,則錯誤 i++; } if(err)printf("\n輸入數(shù)值錯誤,不是十進制數(shù)!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*10; num=num+c[i]-48; i++; } printf("\n\t十進制數(shù)%s轉(zhuǎn)換為其它進制:\n\n",c); printf("\t********************************************\n");bishow(num); printf("\t八進制:%o\n",num); printf("\t十六進制:%x\n",num); printf("\t********************************************\n\n"); printf("\t是否需要繼續(xù)?(任意鍵繼續(xù)N鍵退出)"); scanf("%c",&w);getchar(); if(w=='N'||w=='n')quitflag=1; break; case'4'://輸入十六進制 do{ err=0;i=0;num=0; printf("\n\t請輸入十六進制數(shù):"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]<='9'&&c[i]>='0')err=0;//若輸入數(shù)據(jù)為非數(shù)字符號,則錯誤 elseif(c[i]>='a'&&c[i]<='f')err=0; elseif(c[i]>='A'&&c[i]<='F')err=0; elseerr=1; i++; } if(err)printf("\n輸入數(shù)值錯誤,不是十六進制數(shù)!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*16; if('0'<=c[i]&&c[i]<='9')num=num+c[i]-48; if('a'<=c[i]&&c[i]<='f')num=num+c[i]-97+10; if('A'<=c[i]&&c[i]<='F')num=num+c[i]

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論