版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
軟件設計報告姓名:琳學號:B120604212023年5月16日~2023年6月16日目錄第一章軟件設計介紹 1第二章軟件開發(fā)平臺簡介 2第三章 軟件設計的內容 33.1 分數記錄軟件(A1) 33.1.1設計題目及規(guī)定 33.1.2設計思想及程序流程框圖 33.1.3邏輯功能程序 33.1.4結果及完善方向 33.2 打字軟件(A2) 33.2.1設計題目及規(guī)定 33.2.2設計思想及程序流程框圖 33.2.3邏輯功能程序 33.2.4結果及完善方向 33.3 文本編輯器(A3) 33.3.1設計題目及規(guī)定 33.3.2設計思想及程序流程框圖 43.3.3邏輯功能程序 43.3.4結果及完善方向 43.4 加密軟件(A4) 43.4.1設計題目及規(guī)定 43.4.2設計思想及程序流程框圖 43.4.3邏輯功能程序 43.4.4結果及完善方向 43.5 進制轉換器(A5) 43.5.1設計題目及規(guī)定 43.5.2設計思想及程序流程框圖 43.5.3邏輯功能程序 43.5.4結果及完善方向 53.6 學生成績核算系統(tǒng)的設計與實現(xiàn)(B1) 53.6.1設計題目及規(guī)定 53.6.2設計思想及程序流程框圖 53.6.3邏輯功能程序 53.6.4結果及完善方向 53.7 模擬電信計費系統(tǒng)的設計與實現(xiàn)(B2) 53.7.1設計題目及規(guī)定 53.7.2設計思想及程序流程框圖 53.7.3邏輯功能程序 53.7.4結果及完善方向 5第四章心得體會 6第一章軟件設計介紹一、所涉及的課程及知識點《高級語言程序設計》:常量、變量、表達式的基本知識;函數的定義與調用;文獻讀寫;數組、指針、結構體等自定義類型的使用;排序等知識。二、目的與任務目的:通過集中時間上機實驗,對學生的程序設計能力進行一次綜合訓練,使學生充足發(fā)揮已有的編程能力,熟悉編譯環(huán)境。選擇若干課題,進行審題、分析、設計和調試,在程序準備、程序實現(xiàn)、完畢文檔、答辯驗收過程中,將全面鞏固已學過的編程知識,全面提高編程技能,在編程風格、調試器的使用、測試技術等方面得到全面訓練。學生在程序設計過程中,學生需要查找各種資料獲取有用信息解決實際問題,自學相關知識,提高文檔書寫能力,加強團隊合作意識,提高口頭表達能力。任務:《軟件設計》課題共分A、B兩檔。A檔共5題,題目較簡樸,第一周完畢;B檔共2題,題目是綜合性的,較復雜,第二周完畢。三、重要儀器設備硬件:微型計算機軟件:C、C++、VisualC++等四、參考書【1】朱立華,王立柱.C語言程序設計.北京:人民郵電出版社,2023【2】朱立華,朱建,俞瓊.面向對象程序設計及C++.北京:人民郵電出版社,2023【3】張引等.C程序設計基礎課程設計.浙江:浙江大學出版社,2023
第二章軟件開發(fā)平臺簡介軟件開發(fā)平臺是一種軟件開發(fā)工具,是以通用技術架構(例如MVC)為基礎,集成常用建模工具、二次開發(fā)包、基礎解決方案等而成??梢源蠓s減編碼率,使開發(fā)者有更多的時間關注客戶的需求,在項目的需求、設計、開發(fā)、測試、部署、維護等各個階段均可提供強大的支持。軟件開發(fā)平臺有兩種平臺模式,一種是傳統(tǒng)的c/s架構模式,一種是現(xiàn)在比較流行的b/s架構模式。軟甲件開發(fā)平臺的分類,一般有三種:一種是SUN公司的SUNONE框架平臺,一種是LAMP,它是Linux、Apache、Mysql、PHP四項技術的縮寫,尚有一種是.NETFramework(一般簡稱為NET框架平臺)。LAMP是一組常用來搭建動態(tài)網站或者服務器的開源軟件,自身都是各自獨立的程序,但是由于常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個Web應用程序平臺。隨著開源潮流的蓬勃發(fā)展,開放了源代碼的LAMP已經與J2EE和.NET平臺形成了三足鼎立之勢,并且該軟件開發(fā)的項目在軟件方面的投資成本較低,因此手袋整個IT界的關注。從網站的流量上來說,70%以上的訪問流量都是LAMP來提供的,LAMP是最強大的網站解決方案。LAMP是基于Linux、Apache、MySQL和PHP的開放資源網絡開發(fā)平臺,這個術語來自歐洲,在那里這些程序常用來作為一種標準開發(fā)環(huán)境。名字來源于每個程序的第一個字母。每個程序在所有權里都符合開發(fā)源代碼標準:Linux是開放系統(tǒng),Apache是最通用的網絡服務器,MySQL是帶有基于網絡管理附加工具的關系數據庫,PHP是流行的對象腳本語言,他包含了多數其他語言的優(yōu)秀特性來使得它的網絡開發(fā)更加有效。雖然這些開放源代碼程序自身并不是專門設計成同此外幾個程序一起工作的,但由于他們都是影響較大的開源軟件,擁有許多共同特性,這就導致了這些組件經常在一起使用。在過去的幾年里,這些軟件的兼容性不斷完善,在一起的應用情形變得更加普遍。越來越多的供應商、用戶和公司投資者日益結識到,通過LAMP單個組件的開源軟件組成的平臺用來構建以及運營各種商業(yè)應用和協(xié)作構建各種網絡應用程序變?yōu)橐环N也許和實踐,變得更加具有競爭力,更加吸引客戶。LAMP無論是性能、質量還是價格都將成為公司、政府信息化所必須考慮的平臺。JAVA平臺是一種新型的軟件平臺,可用來在網絡計算機系統(tǒng)開發(fā)和運營高交互性、動態(tài)的、安全的Java小程序和應用程序。Java平臺有三種三種版本,這使軟件開發(fā)人員、服務提供商和設備生產商可以針對特定的市場進行開發(fā)。.NET開發(fā)平臺是一種用于建立Web服務器應用程序和Windows桌面應用程序的軟件組件,用該平臺創(chuàng)建的應用程序在CommonLanguageRuntime(通用語言運營環(huán)境)的控制下進行。CLR是一個軟件引擎,用來加載應用程序,確認他們可以沒有錯誤的執(zhí)行,進行相應的安全許可驗證,執(zhí)行應用程序,然后在運營結束后將他們刪除。類庫集提供了使應用程序可以讀寫XML數據、在Internet上通信、訪問數據庫等的代碼。所有的類庫都建立在一個基礎的類庫之上,他提供管理使用最為頻繁的數據類型(例如數值或文本字符串)的功能,以及諸如文獻輸入/輸出等底層功能。VisualStudio是微軟公司推出的開發(fā)環(huán)境,VisualStudio可以用來創(chuàng)建Windows平臺下的Windows應用程序和網絡應用程序,也可以用來創(chuàng)建網絡服務、智能設備應用程序和Office插件。VisualStudio是目前最流行的Windows平臺應用程序開發(fā)環(huán)境。VisualStudio2023涉及各種增強功能,例如可視化設計器(使用.NETFramework3.5加速開發(fā))、對Web開發(fā)工具的大量改善,以及可以加速開發(fā)和解決所有類型數據的語言增強功能。VisualStudio2023為開發(fā)人員提供了所有相關的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持AJAX的Web應用程序。開發(fā)人員可以運用這些豐富的客戶端和服務器端框架輕松構建以客戶為中心的Web應用程序,這些應用程序可以集成任何后端數據提供程序、在任何當前瀏覽器內運營并完全訪問ASPNET應用程序服務和Microsoft平臺。.NET支持多種程序設計語言如:C++.NET、VB.NET、ASP.NET、C等,實現(xiàn)了語言互用性。而Java只能用Java語言。隨著開源潮流的蓬勃發(fā)展,開放源代碼的LAMP已經與J2EE和.NET商業(yè)軟件形成三足鼎立之勢。
軟件設計的內容分數記錄軟件(A1)3.1.1設計題目及規(guī)定課題內容:設計一個分數記錄程序。涉及學生信息的輸入輸出以及排序。通過該課題全面熟悉數組、字符串、文獻的使用,掌握程序設計的基本方法及和諧界面的設計。課題規(guī)定:(1)輸入某班級學生的姓名、分數;(2)對(1)的分數進行降冪排列并輸出;(3)具有輸入輸出界面。3.1.2設計思想及程序流程框圖設計思想為:建立學生結構體數組,結構體成員涉及存儲姓名的字符型數組以及存儲分數的整型,使用for循環(huán)語句從輸入處獲取n個學生的姓名和成績,成績輸入的信息存入結構體數組。再選擇按成績降冪排名,將結構體數組從頭進行輸出。算法流程框圖為:開始開始輸入學生人數輸入學生人數清屏清屏N輸入是否對的?N輸入是否對的?輸入學生姓名name和分數grade輸入學生姓名name和分數grade自動降冪排序自動降冪排序輸出排序后的成績單輸出排序后的成績單結束結束3.1.3邏輯功能程序#include<stdio.h>#include<string.h>#include<stdlib.h>structstudent//存放學生信息的結構體{ charname[20];//字符型數組存放姓名 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("請輸入學生個數\n\n"); do{printf("\t\t學生個數:"); err=0;i=0; scanf("%s",x);//輸入選項 getchar(); while(x[i]!='\0')//依次檢查輸入的字符串是否為數字 { if(x[i]>'9'||x[i]<'0')err=1; i++; } if(err)printf("\n\t\t請輸入數字!\n"); }while(err);n=atoi(x);//將字符型數組x轉換成整型nfor(i=0;i<n;i++)//循環(huán)N次輸入學生信息 { printf("\n\t\t請輸入第%d個人的信息\n\t\t姓名:",i+1);scanf("%s",std[i].name); getchar();printf("\t\t分數:");scanf("%d",&std[i].grade); if(std[i].grade<0||std[i].grade>100) {printf("您的輸入錯誤,請重新輸入:\n"); printf("\t\t分數:"); 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您所輸入的學生名次如下:\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結構循環(huán) printf("\t"); return0;}3.1.4結果及完善方向實驗結果:初始界面:輸入學生信息之后直接排序,界面如圖所示:若所輸入的學生成績在有效范圍(0~100)之外系統(tǒng)將會提醒輸入錯誤,界面如下圖:程序分析:此程序功能上滿足基本的題目規(guī)定,可以做到輸入學生的姓名和成績,可以按成績降冪排列并輸出。完善方向:基本功能已實現(xiàn),對于實際的系統(tǒng),接下來完善的功能的是可以選擇不同的科目進行輸入,可以選擇進行降冪或者升冪排序,同時能添加或刪除學生信息,對于成績相同的學生進行并列排名。打字軟件(A2)3.2.1設計題目及規(guī)定課題內容:設計一個打字程序。涉及隨機產生字符串,以及字符串比較和記錄。通過此課題,純熟掌握數組、格式輸出、字符串解決等。課題規(guī)定:(1)隨機產生一字符串,每次產生的字符串內容、長度都不同;(2)根據(1)的結果,輸入字符串,判斷輸入是否對的,輸出對的率;(3)具有輸入輸出界面。3.2.2設計思想及程序流程框圖設計思想為:運用函數庫里提供的產生隨機函數rand()產生隨機的字符串長度,默認將長度定位在1至10個字符。再產生一串由大小寫字母以及數字組成的隨機字符串,每產生一個字符串就按字保存至數組里。顯示產生的字符串,開始打字后,將輸入字符串保存至數組,打字完畢。再與產生字符進行逐個比較,若相同,則對的個數加1,最終得出對的率,輸出顯示。算法流程框圖為:開始開始隨機產生字符串隨機產生字符串輸入字符串輸入字符串依次比較,計算對的率依次比較,計算對的率 輸出對的率輸出對的率YY是否繼續(xù)是否繼續(xù)NN結束結束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];//產生隨機數組 charstr1[100];//輸入隨機數組 charc; floatp; system("colorF9"); while(over)//選擇是否繼續(xù) { num=0;//產生字符長度num初始化為0 m=0;//記錄對的個數變量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產生隨機數 num=1+rand()%10;//產生長度不大于10的字符串 for(k=0;k<num;k++) {flag=rand()%3;//隨機產生小于3的數if(flag==0)str[k]='A'+rand()%26;//產生大寫字母elseif(flag==1)str[k]='a'+rand()%26;//產生小寫字母 elsestr[k]='0'+rand()%9;//產生數字 } str[k]='\0'; printf("\n\n\t\t*************************************\n"); printf("隨機字符串個數:\t\t%d\n",num); printf("隨機產生的字符串:\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為對的字符個數}p=(float)m/num; printf("\n\n\n*************************************\n\n"); printf("對的率為:%.1f%%\n",p*100); printf("對的個數為:%d\n",m); printf("\n*************************************\n\n\n"); printf("\n"); printf("是否還需繼續(xù)練習?(任意鍵繼續(xù)/N鍵退出)\n"); scanf("%c",&c);//輸入選項 getchar(); if(c=='N'||c=='n')over=0; }}\3.2.4結果及完善方向初始界面:即隨機產生的字符串為輸出頁面當輸入的字符串與隨機產生的字符串一致時,對的率為100%,如圖:當輸入的字符串與隨機產生的字符串不一致時,程序將計算對的率并給出輸入對的的個數,如圖:程序結果分析:此程序能保證每次產生的字符串不同樣,且能對的地輸出準確率,基本完畢了打字訓練的任務??紤]到程序的實用性,可認為程序添加計時功能、記錄保存功能等,可以使使用者更加靈活地運用打字軟件。程序完善方向:對于這個程序,局限性的就是可以添加計時功能,在打字前,可以詢問用戶是否進行計時,還可以添加功能,由用戶自己選擇可從從其他文獻導入一段字符串。文本編輯器(A3)3.3.1設計題目及規(guī)定課題內容:設計一個簡樸的文本編輯器,該系統(tǒng)規(guī)定對一個文本文獻中的內容進行各種常規(guī)操作,如:插入、刪除、查找、替換等功能。通過此課題,純熟掌握文本文獻的操作及用字符數組或字符指針實現(xiàn)字符串操作的功能。課題規(guī)定:(1)編輯文本;(2)保存、打開指定位置的文本文獻;(3)具有輸入輸出界面。3.3.2設計思想及程序流程框圖設計思想為:在主菜單可選擇建立文本、編輯文本、讀取文本和退出程序。以只寫方式編輯文本,若文本不存在則提醒“不能打開文獻”,打開的文獻則輸入的內容以“#”作為結束標記;讀取文獻時,提醒需要讀取的目的文本途徑,將文本里的內容輸出。算法流程框圖為:開始開始輸出功能菜單輸出功能菜單輸入選項chooseN輸入選項chooseNNNNchoose=4choose=3choose=2choose=1Nchoose=4choose=3choose=2choose=1NN輸入途徑輸入途徑輸入途徑輸入途徑輸入途徑輸入途徑文獻不存在文獻不存在文獻不存在文獻不存在文獻不存在文獻不存在YNNYNNYYN建立文本編輯文本YYN建立文本編輯文本輸出文本輸出文本結束結束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"); rewind(fp);//返回文獻首,輸出整個文獻的內容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"); rewind(fp);//返回文獻首,輸出整個文獻的內容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標記符 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"); rewind(fp);//返回文獻首,輸出整個文獻的內容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標記符 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的復位 printf("\n請輸入文獻途徑:"); scanf("%s",filepath);//輸入途徑 getchar();//接受Enter字符 fp=fopen(filepath,"r"); printf("\n文獻內容如下:\n"); rewind(fp);//返回文獻首,輸出整個文獻的內容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標記符 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"); rewind(fp);//返回文獻首,輸出整個文獻的內容do {ch=fgetc(fp);putchar(ch);test[i]=ch;i++; }while(ch!=EOF); test[i]='\0';//串尾標記符 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;//標志符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"); 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,則退出標志符為1default:printf("輸入錯誤!"); }}}3.3.4結果及完善方向初始界面:建立文本:讀取文本:編輯文本子界面:查找:若輸入多個字符則以第一個為準:若輸入不存在的字符,系統(tǒng)將提醒并重新輸入刪除:插入:替換:程序結果分析:本程序可以根據指定文獻名進行建立文獻、讀取文獻、編輯文獻等操作。程序完善方向:在編輯文本階段,只是以覆蓋的方式進行編輯,這樣會導致文獻以前的內容完全丟失。應當在編輯函數中增長“追加編輯”的功能,這樣可以使使用者靈活的通過“覆蓋方式”“追加方式”進行文獻編輯。加密軟件(A4)3.4.1設計題目及規(guī)定課題內容:設計一個加密程序。涉及明文與密鑰的轉換。通過此課題,純熟掌握數組、格式輸出、字符串解決、類型轉換等。課題規(guī)定:(1)輸入任意一段明文M,以及密鑰K;(2)根據以下公式將其轉換為密文C。Ci=mi+K,其中i=0,1,……n-1,K為密鑰;(3)具有輸入輸出界面。3.4.2設計思想及程序流程框圖設計思想為:輸入明文,保存在字符串中,輸入密鑰,以字符數組形式獲取,若為數字字符,則取其數值,若為其他,則取其ASCII碼值,最后轉換成十進制數,將每個字符+密鑰后生成密文字符,然后按順序輸出顯示密文。算法流程框圖為:開始開始輸入明文和密鑰輸入明文和密鑰密鑰轉換密鑰轉換加密加密輸出密文輸出密文Y解密Y解密輸出明文輸出明文NN結束結束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請輸入密鑰(按#號鍵結束):");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[]){//輸入字符串轉換為數值inti,k=0,l; l=strlen(s);for(i=0;i<l;i++) { if(isdigit(s[i])) k=k*10+(int)(s[i])-48;//輸入字符為數字,就轉換為數值 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請輸入密鑰(按#號鍵結束):");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結果及完善方向初始界面:加密過程:解密過程:密匙輸入錯誤時:當密匙三次輸入錯誤時,解密失?。篎.退出界面程序結果分析:此程序基本完畢功能,能實現(xiàn)字符串的加密與解密,具有較和諧的界面,能實現(xiàn)多次加密與解密。程序完善方向:此程序沒有將加密和解密模塊分開,應在程序上加以完善。界面可以做得更和諧。進制轉換器(A5)3.5.1設計題目及規(guī)定課題內容:設計一個進制轉換器程序。涉及二進制、八進制、十進制、十六進制數互相轉換。通過此課題,純熟掌握字符串、格式輸出、進制換算的各種操作。課題規(guī)定:(1)可輸入二進制、八進制、十進制、十六進制數;(2)將已輸入的數轉換成其余進制的數;(3)具有輸入輸出界面。3.5.2設計思想及程序流程框圖設計思想:(1)輸入“輸入進制”base1;(2)輸入一個base1進制的數n,檢查n數字的合法性;(3)輸入“輸出進制”base2;(4)將n轉換成十進制數temp,再將temp轉換成base2進制數;(5)為防止數據溢出,限制數據位數為6位。算法流程框圖為:開始開始輸出功能菜單輸出功能菜單輸入n輸入nnn12340十六進制八進制二進制十進制0十六進制八進制二進制十進制N十六進制轉換二進制、十進制轉換二進制、十進制轉換二進制是否繼續(xù)?轉成并輸出其他進制轉成并輸出其他進制轉成并輸出其他進制轉成并輸出其他進制轉換十進制二進制十進制八進制NNNN十六進制轉換二進制、十進制轉換二進制、十進制轉換二進制是否繼續(xù)?轉成并輸出其他進制轉成并輸出其他進制轉成并輸出其他進制轉成并輸出其他進制轉換十進制二進制十進制八進制結束YYYY結束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>>>>>>數制轉換系統(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請輸入二進制數:"); scanf("%s",c); getchar(); while(c[i]!='\0')//'\0'字符結尾 { if(c[i]!='1'&&c[i]!='0')err=1;//若輸入數字不為1或0則輸入錯誤 i++; } if(err)printf("\n\t輸入數值錯誤,不是二進制數!\n"); }while(err);//err為1反復上面,否則繼續(xù) i=0; while(c[i]!='\0')//二進制轉換為十進制 { num=num*2; if(c[i]=='1')num=num+1; i++; } printf("\n\t二進制數%s轉換為其他進制:\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請輸入八進制數:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'7'||c[i]<'0')err=1;//若輸入數據不在0~7間則輸入錯誤 i++; } if(err)printf("\n輸入數值錯誤,不是八進制數!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*8; num=num+c[i]-48; i++; } printf("\n\t八進制數%s轉換為其他進制:\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請輸入十進制數:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'9'||c[i]<'0')err=1;//若輸入數據為非數字符號,則錯誤 i++; } if(err)printf("\n輸入數值錯誤,不是十進制數!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*10; num=num+c[i]-48; i++; } printf("\n\t十進制數%s轉換為其他進制:\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請輸入十六進制數:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]<='9'&&c[i]>='0')err=0;//若輸入數據為非數字符號,則錯誤 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輸入數值錯誤,不是十六進制數!\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]-65+10; i++; } printf("\n\t十六進制數%s轉換為其他進制:\n\n",c); printf("\t********************************************\n");bishow(num); printf("\t八進制:%o\n",num); printf("\t十進制:%d\n",num); printf("\t********************************************\n\n"); printf("\t是否需要繼續(xù)?(任意鍵繼續(xù)N鍵退出)"); scanf("%c",&w);getchar(); if(w=='N'||w=='n')quitflag=1; break; case'0': quitflag=1; break; } }while(!quitflag); }voidbishow(intm)//轉換成二進制數{ intb[20]; inti=0;while(m){ b[i]=m%2; m=m/2; i++;}i--; printf("\t二進制:"); if(m==0)printf("%d",0);while(i>=0){ printf("%d",b[i--]);//輸出二進制數} printf("\n");}3.5.4結果及完善方向初始界面:當輸入為二進制時:當輸入為八進制時:當輸入為十進制時:當輸入為十六進制時:輸入錯誤時,程序將提醒輸入錯誤并回到輸入界面,如圖所示:程序結果分析:本程序基本實現(xiàn)功能,且能實現(xiàn)16以下的任意進制間的互相轉換,在輸入非法進制數時能報錯提醒,并可以多次轉換。程序完善方向:本程序只能實現(xiàn)整數進制之間的轉換,應對代碼進行進一步優(yōu)化,以實現(xiàn)小數進制間的互相轉換;數字的大小受到一定的限制,可以嘗試用數組解決大數間進制轉換問題;題輸出界面可以進一步美化。學生成績核算系統(tǒng)的設計與實現(xiàn)(B1)3.6.1設計題目及規(guī)定課題內容:設計一個學生成績核算系統(tǒng)。能實現(xiàn)從文獻中讀取學生成績資料,并提供成績查詢記錄服務。通過此課題,純熟掌握文獻、數組、結構體的各種操作以及和諧界面的設計。課題規(guī)定:(1)按班級按課程從文獻中讀入相應的平時成績、期中考試成績和期末考試成績。(2)三個成績對總評成績的比例被定義為常數,各占總成績的30%、30%和40%。(3)計算每位學生的總評成績。(4)計算該班級本課程的總平均成績。(5)計算處在優(yōu)、良、中、及格、不及格的學生人數以及占總人數的比例。其中100-90為優(yōu),89-80為良,79-70為中,69-60為及格,60分以下為不及格。(6)按規(guī)定輸出成績在優(yōu)、良、中、及格、不及格各區(qū)間的學生學號、成績。3.6.2設計思想及程序流程框圖設計思想:先顯示一個功能菜單供用戶選擇所需功能。菜單功能分別為:1、顯示學生成績;2、顯示學生的總評成績及該班級本課程的總平均成績;3、顯示學生的成績等級及占總人數的比例;4、顯示成績在各等級區(qū)間的學生學號、成績;5、退出程序。程序先判斷讀取的文獻是否存在,不存在則顯示打開文本錯誤;存在則讀取文獻中的學生的信息,然后設計程序將每位學生的總評成績以及該班級本課程的總平均成績
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五年度人工智能研發(fā)聘用合同詳盡版2篇
- 2025年度交通樞紐門衛(wèi)安全責任書3篇
- 2024年高端裝備制造業(yè)基地施工分包合同
- 2025年未實繳出資股份交易合同范本及風險提示3篇
- 二零二四年度2024權合作合同范本:信息安全服務合作協(xié)議3篇
- 2025年度綠色屋頂綠化設計與植物養(yǎng)護服務合同4篇
- 2025年度智能工廠安防監(jiān)控系統(tǒng)集成合同范本2篇
- 二零二五版環(huán)保管家技術服務合同樣本:環(huán)保設施投資合作3篇
- 2025年涂裝勞務分包合同范本大全:涂裝工藝創(chuàng)新3篇
- 個人勞務合同書電子版
- 名表買賣合同協(xié)議書
- COCA20000詞匯音標版表格
- 滬教版七年級數學上冊專題06圖形的運動(原卷版+解析)
- JTG-T-F20-2015公路路面基層施工技術細則
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數據標準
- 建筑垃圾減排及資源化處置措施
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫附答案
- 中西方校服文化差異研究
- 2024年一級建造師考試思維導圖-市政
- 高壓架空輸電線路反事故措施培訓課件
- 隱私計算技術與數據安全保護
評論
0/150
提交評論