哈夫曼、課程設(shè)計ok_第1頁
哈夫曼、課程設(shè)計ok_第2頁
哈夫曼、課程設(shè)計ok_第3頁
哈夫曼、課程設(shè)計ok_第4頁
哈夫曼、課程設(shè)計ok_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計 報 告課程名稱 數(shù)據(jù)結(jié)構(gòu) 課題名稱 1.huffman編碼 2.班級成績管理系統(tǒng) 專 業(yè) 網(wǎng)絡(luò)工程 班 級 學(xué) 號 姓 名 指導(dǎo)教師 劉鐵武 郭芳 鄧作杰 2021年 6月15 日 湖南工程學(xué)院課 程 設(shè) 計 任 務(wù) 書課程設(shè)計旨在到達(dá)以下目標(biāo):強化學(xué)生編碼、調(diào)試錯誤的能力。了解和掌握軟件開發(fā)流程和工程管理控制。了解當(dāng)前IT行業(yè)及職業(yè)人應(yīng)具備的素質(zhì)。完全模擬真實軟件開發(fā)流程和管理,增強團隊意識和團隊合作精神一 設(shè)計內(nèi)容:問題2:huffman編碼對于確定的字符集的電文字符串編碼,實現(xiàn)最高的通信效率。編程實現(xiàn)對于給定的輸入串及各字符的頻度,輸出其編碼方式各字符的二進(jìn)制編碼及對應(yīng)的

2、輸出流。測試數(shù)據(jù): 字符ABCDEFGHIJKLM頻度18664132232103211547571232字符NOPQRSTUVWXYZ頻度20576315148518023818116問題3:成績管理編制一應(yīng)用軟件實現(xiàn)對班級成績管理。根本功能有學(xué)生信息的增刪轉(zhuǎn)入或退學(xué)、查找從當(dāng)前點向前或向后雙向的、錄入、統(tǒng)計如總分,及格率等。建議用雙鏈表實現(xiàn)。二 設(shè)計要求:a) 界面友好用戶的一些操作前后做出一些必要的提示或確認(rèn)。所有完成的功能都需要友好,例如:增加失敗提示;刪除失敗和成功提示、刪除前確實認(rèn);修改失敗和成功提示、修改前/后確實認(rèn);查找失敗提示、查找成功確實認(rèn);退出系統(tǒng)時,如果有修改要提示是否

3、保存;其它方面的界面問題;b) 結(jié)構(gòu)清晰: 模塊化:對界面顯示、菜單管理、邏輯管理、文件操作等等代碼要獨立,必須多個.c文件,用makefile; 封裝:一個函數(shù)只做一件事,函數(shù)功能要單一;一個函數(shù)不能超過50行;防止重復(fù)、冗余代碼; 代碼塊清晰。c)變量命名標(biāo)準(zhǔn),變量名應(yīng)該具有自明性: 常量,枚舉和宏定義命名常量名,宏和枚舉值由全大寫字母組成,單詞間通過下劃線來界定; 函數(shù)的命名:使用"動詞"或者"動詞名詞"動賓詞組的形式,由一個或多個單詞組成且以小寫字母開頭,以后每個單詞之間用下劃線隔開 變量的命名與定義應(yīng)當(dāng)使用"名詞"或者&qu

4、ot;形容詞名詞",由一個或多個單詞組成且以小寫字母開頭,以后每個單詞之間用下劃線隔開。d) 注釋充分:變量、函數(shù)包括參數(shù)、返回值、代碼功能塊、一些復(fù)雜算法等都需要清晰明了地說明;三其它要求:1選題:每位學(xué)生需完成兩個課題,其中一個必選,另一個自選,必選題次為,學(xué)號/7+1。2課程設(shè)計報告內(nèi)容說明1)需求分析 程序的功能;輸入輸出的要求。2)概要設(shè)計 程序的模塊構(gòu)成以及模塊之間的層次結(jié)構(gòu)、各模塊的調(diào)用關(guān)系;每個模塊的功能;課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu);即要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。3)詳細(xì)設(shè)計 采用C語言定義相關(guān)的數(shù)據(jù)類型;寫出各模塊的類C碼算法;

5、畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。4)調(diào)試分析以及設(shè)計體會 測試數(shù)據(jù):準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯誤的輸入及輸出結(jié)果;程序調(diào)試中遇到的問題以及解決問題的方法;課程設(shè)計過程經(jīng)驗教訓(xùn)、心得體會。5)使用說明 用戶使用手冊:說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。6)書寫格式 見附帶說明。7)附錄 參考書目; 源程序清單帶注釋3成績評定:指導(dǎo)老師負(fù)責(zé)驗收程序的運行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實際動手能力、創(chuàng)新精神和設(shè)計報告等進(jìn)行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個等級給出每位同學(xué)的課程設(shè)計成績。具體考核標(biāo)準(zhǔn)包含以下幾個局部: 平時出勤

6、 占10% 系統(tǒng)需求分析、功能設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計及程序總體結(jié)構(gòu)合理與否占10% 程序能否完整、準(zhǔn)確地運行,個人能否獨立、熟練地調(diào)試程序占40% 設(shè)計報告占30%注意:不得抄襲他人的報告或給他人抄襲,一旦發(fā)現(xiàn),成績?yōu)榱惴帧?獨立完成情況占10%。三進(jìn)度安排第 17周星期一星期二星期三星期四星期五上午8:0012:00下午14:0017:00第 周星期一星期二星期三星期四星期五上午8:0012:00下午14:0017:00附:課程設(shè)計報告裝訂順序:封面、任務(wù)書、目錄、正文、評分、附件A4大小的圖紙及程序清單。 正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。正

7、文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分要求畫出模塊圖;三、主要功能的實現(xiàn)至少要有一個主要模塊的流程圖;四、程序調(diào)試;五、總結(jié);六、附件所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨尅U目傋謹(jǐn)?shù)要求在5000字以上不含程序原代碼。目錄1課題名稱 1-1問題描述71-2概要設(shè)計71-3詳細(xì)設(shè)計81-4調(diào)試分析91-5心得體會111-6附錄122課題名稱2-1問題描述182-2概要設(shè)計182-3詳細(xì)設(shè)計192-4調(diào)試分析242-5心得體會272-6附錄283參考文獻(xiàn)1.1問題描述 huffman編碼對于確定的字符集的電文字符串編碼,實現(xiàn)最高的通信效率。編程實現(xiàn)對于給定的輸入串及各字符的頻

8、度,輸出其編碼方式各字符的二進(jìn)制編碼及對應(yīng)的輸出流。測試數(shù)據(jù): 字符ABCDEFGHIJKLM頻度18664132232103211547571232字符NOPQRSTUVWXYZ頻度205763151485180238181161-2概要設(shè)計 1-2.1 程序模塊及其關(guān)系主函數(shù)模塊編碼模塊譯碼模塊輸入字符串生成哈夫曼編碼輸入代碼串譯碼并輸出程序由主函數(shù)模塊,編碼模塊,譯碼模塊組成,主函數(shù)模塊可調(diào)用編碼模塊,譯碼模塊,編碼模塊可對字符串進(jìn)行編碼,譯碼模塊可對輸入的代碼串進(jìn)行譯碼并輸出。各模塊之間的關(guān)系示意圖如下:1-3詳細(xì)設(shè)計各模塊的C算法1. 編碼模塊:首先通過鍵盤輸入需要鍵盤的字符串,調(diào)用

9、void huffmantree()函數(shù)儲存字符頻度,再調(diào)用函數(shù):void huffmantree() /構(gòu)造哈弗曼樹int i,j,k,lnode,rnode;double min1,min2; /分別存放lnode和rnode的兩個結(jié)點位置 使所有結(jié)點的相關(guān)域置-1for(i=0;i<60;i+) listi.parent=listi.lchild=listi.rchild=-1; for(i=0;i<26;i+) listi.weight=fnumi; for(i=0;i<26;i+) x1=x2=0; m1=m2=maxvalue; for(j=0;j<26+i

10、;j+) if(listj.weight<m1&&listj.parent=-1) x2=x1; m2=m1; x1=j; m1=listj.weight; else if(listj.weight<m2&&listj.parent=-1) x2=j; m2=listj.weight; list26+i.lchild=x1; list26+i.rchild=x2; listx1.parent=listx2.parent=26+i; list26+i.weight=listx1.weight+listx2.weight; 2.譯碼模塊先通過鍵盤輸入哈夫

11、曼編碼代碼串, for(i=0;i<len;i+) / 譯碼 for(j=0;j<26;j+) flag=1; / 判斷輸入是否合法 for(k1=i,k2=0;k1<=i+letterj.len-1&&strk1!='0'k1+,k2+) 如果找到對應(yīng)編碼 if(strk1!=letterj.sk2) flag=0; break; if(flag) printf("%c",letterj.c); i+=(letterj.len-1); break; 3.界面設(shè)計 int i,j; int ch,len; char str1

12、000; int k1,k2,flag; printf("-huffman 編碼譯碼器-n"); printf("n 測試數(shù)據(jù)頻度如下所示 :nA-186tB-64tC-13tD-22tE-32tF-103tG-21tH-15tI-47tJ-57nK-1tL-2tM-32tN-20tO-57tP-63tQ-15tR-1tS-48nT-51tU-80tV-23tW-8tX-18tY-1tZ-16nn"); printf("-nn"); init(); huffmantree(); printf("n 輸入1時執(zhí)行編碼tt&qu

13、ot;); printf(" 輸入2時執(zhí)行譯碼nn"); printf(" 請選擇 : ");1-4調(diào)試分析 a數(shù)據(jù)測試:b輸入字符串編譯的結(jié)果如下所示:c輸入01代碼譯碼結(jié)果如下所示:d程序調(diào)試過程中遇到的問題;編寫完譯碼函數(shù)后進(jìn)行調(diào)試,程序會在譯碼過程中進(jìn)入死循環(huán),且無法譯出正確字符串。經(jīng)過仔細(xì)觀察,發(fā)現(xiàn)程序中有一個循環(huán)的終止條件本應(yīng)為stri!=0,卻將其誤寫成了stri!=n,因而無法正常終止循環(huán)并譯碼,改正后實現(xiàn)了譯碼功能。1-5設(shè)計體會 當(dāng)時拿到這個題目,完全懵了,感覺難度好大。哈夫曼樹是怎么一回事,功能是什么我該從何下手。剛開始就花了很多時

14、間通過看課本,上網(wǎng)查詢資料去好好理解了下哈夫曼樹的含義。此次課程設(shè)計,我編寫程序的時候遇到了不少問題,在解決這些問題,最終實現(xiàn)課題任務(wù)的過程中,我學(xué)到了很多東西:首先,在拿到課題之前,要理解課程設(shè)計的要求,有哪些要求我們應(yīng)該要做到的。我在此次課程設(shè)計剛開始就沒看懂課題的要求,我應(yīng)該完成怎樣的功能。通過查找資料,參考網(wǎng)上的設(shè)計流程,這個問題在網(wǎng)上找到了答案。寫完剛運行的時候出現(xiàn)了很多問題,尤其內(nèi)存無法read,通過跟同學(xué)的交流請教,逐漸明白過來,然后經(jīng)過很屢次的修改才順利運行。 就一般情況而言,課程設(shè)計要比教學(xué)實驗復(fù)雜一些,設(shè)計的知識側(cè)面更深,更廣,而且更加實用。通過這次課程設(shè)計,培養(yǎng)了我們分析

15、,解決實際問題和編程等動手能力,最終也通過這個方式幫助我們掌握數(shù)據(jù)結(jié)構(gòu)這門課程。我更加深入了理解了哈夫曼編碼的過程,以及利用哈夫曼編碼對數(shù)據(jù)進(jìn)行壓縮的優(yōu)越性,并且使我能夠更熟練地運用樹形的數(shù)據(jù)結(jié)構(gòu)。我也明白了理論與實際結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力和思維方式,培養(yǎng)了根本的,良好的程序設(shè)計技能以及合作能力。通過對各個流程的控制,逐漸讓我產(chǎn)生了興趣,在實際編寫過程中,和同學(xué)們互相討論讓我學(xué)到的不僅僅是一些解決問題的方法,我想更是解決問題的思想。課程設(shè)計本身也是一種互相學(xué)習(xí)的過程。從中體會到了在學(xué)習(xí)中,要嚴(yán)格要求自己,不能因為一點點的成功就驕傲自滿,停止不前。我們在實踐過程中

16、,遇到問題的時候,我們要能靜下來,好好的思考。1-6附錄 源代碼#include<stdio.h> #include<string.h> #include<stdlib.h> #define maxvalue 10000 struct cam1 / 哈夫曼編碼結(jié)構(gòu) char c; char s50; / 存儲哈夫曼編碼 int len; letter30; struct cam2 / huffman 樹結(jié)構(gòu) int weight; /存儲權(quán)值 int parent,lchild,rchild; /雙親結(jié)點位置,左右孩子結(jié)點位置list60; void ini

17、t() int i; for(i=0;i<26;i+) letteri.c='A'+i; void huffmantree() int i,j; int x1,x2; int m1,m2; /分別存放lnode和rnode的兩個結(jié)點位置 int fnum26=186,64,13,22,32,103,21,15,47,57,1,2,32,20,57,63,15,1,48,51,80,23,8,18,1,16; /26個字母的頻度 for(i=0;i<60;i+) listi.parent=listi.lchild=listi.rchild=-1; / 使所有結(jié)點的相關(guān)

18、域置-1 for(i=0;i<26;i+) listi.weight=fnumi; for(i=0;i<26;i+) x1=x2=0; m1=m2=maxvalue; /定義最大權(quán)值 for(j=0;j<26+i;j+) if(listj.weight<m1&&listj.parent=-1) x2=x1; m2=m1; x1=j; m1=listj.weight; else if(listj.weight<m2&&listj.parent=-1) x2=j; m2=listj.weight; list26+i.lchild=x1;

19、 list26+i.rchild=x2; listx1.parent=listx2.parent=26+i; list26+i.weight=listx1.weight+listx2.weight; void huffmanbianma() / huffman 編碼函數(shù) int i,j,start; /字符數(shù)組中哈夫曼編碼的起始位置 char s100; int p,c,k; int m=1; for(i=0;i<26;i+) memset(s,0,sizeof(s); /數(shù)組s的初始化為0 start=40; c=i; p=listc.parent; while(p!=-1) if(l

20、istp.lchild=c) /如果左子樹等于父親結(jié)點那么置為0 sstart='0' else sstart='1' start-; c=p; p=listc.parent; for(k=0,j=start+1;j<=40;k+,j+) letteri.sk=sj; letteri.sk='0' letteri.len=k; printf(" 26個字母的哈夫曼編碼如下:n"); for(i=0;i<26;i+,m+) if(m%2!=0) printf(" %c-> %stt",

21、9;A'+i,letteri.s); else printf(" %c-> %sn",'A'+i,letteri.s); printf("n"); int main() int i,j; int ch,len; char str1000; int k1,k2,flag; printf("-huffman 編碼譯碼器-n"); printf("n 測試數(shù)據(jù)頻度如下所示 :nA-186tB-64tC-13tD-22tE-32tF-103tG-21tH-15tI-47tJ-57nK-1tL-2tM-3

22、2tN-20tO-57tP-63tQ-15tR-1tS-48nT-51tU-80tV-23tW-8tX-18tY-1tZ-16nn"); printf("-nn"); init(); huffmantree(); printf("n 輸入1時執(zhí)行編碼tt"); printf(" 輸入2時執(zhí)行譯碼nn"); printf(" 請選擇 : "); scanf("%d",&ch); switch(ch) case 1: huffmanbianma(); printf(" 請

23、輸入一段將要編譯的字符串(大寫)n"); scanf(" %s",str); len=strlen(str); for(i=0;i<len;i+) printf(" %s",letterstri-'A'.s); printf("n"); printf(" 編碼結(jié)束n"); case 2: printf(" 請輸入一段01代碼n"); scanf(" %s",str); /計算字符串str長度 len=strlen(str); for(i=0;i

24、<len;i+) / 譯碼 for(j=0;j<26;j+) flag=1; for(k1=i,k2=0;k1<=i+letterj.len-1&&strk1!='0'k1+,k2+) / 尋找對應(yīng)編碼 if(strk1!=letterj.sk2) flag=0; break; if(flag) /flag為1那么哈弗曼編碼輸入合法 printf("%c",letterj.c); i+=(letterj.len-1); break; printf("n"); printf(" 譯碼結(jié)束n&quo

25、t;); return 0; 2-1問題描述成績管理編制一應(yīng)用軟件實現(xiàn)對班級成績管理。根本功能有學(xué)生信息的增刪轉(zhuǎn)入或退學(xué)、查找從當(dāng)前點向前或向后雙向的、錄入、統(tǒng)計如總分,及格率等。建議用雙鏈表實現(xiàn)。2-2概要設(shè)計2-2.1程序的模塊組成。 主函數(shù) main 錄入函數(shù) Insert 顯示函數(shù) Display 保存函數(shù) Save 刪除函數(shù) Delete 查詢函數(shù) Search 統(tǒng)計函數(shù) Count2-2.2各個函數(shù)的主要功能:錄入函數(shù):隨時輸入數(shù)據(jù)學(xué)生的各項信息。顯示函數(shù):顯示所有學(xué)生的信息。刪除函數(shù):刪除某學(xué)生的信息。查找函數(shù):按學(xué)號進(jìn)行查找信息。保存函數(shù):對學(xué)生信息進(jìn)行保存。統(tǒng)計函數(shù):對學(xué)生總

26、成績的統(tǒng)計菜單函數(shù):顯示菜單欄以便進(jìn)行功能選擇。2-2.3模塊的流程圖 2-3詳細(xì)設(shè)計 2-3.1各模塊算法及函數(shù) 學(xué)生信息錄入 void Insert() voidSave();printf("請輸入要錄入學(xué)生成績的個數(shù):n");scanf(" %d",&s); fflush(stdin);for(i=0;i<s;i+)printf("請輸入第%d個學(xué)生的姓名:n",i+1);scanf(" %s",);printf("請輸入該學(xué)生的學(xué)號(1-100):n",

27、i); scanf(" %d",&strui.num);printf("請輸入學(xué)生語文成績:n ");scanf(" %d",&strui.score1);printf("請輸入學(xué)生數(shù)學(xué)成績:n ");scanf(" %d",&strui.score2);printf("請輸入學(xué)生英語成績:n ");scanf(" %d",&strui.score3);fflush(stdin);printf("學(xué)生根本信息錄入完

28、畢:n");printf("n");wait("按ENTER返回!");Save(); 學(xué)生信息顯示 void Display()printf("n");printf("*學(xué)生根本信息*n");printf("姓名t學(xué)號t語文成績t數(shù)學(xué)成績t英語成績n");for (i=0;i<s;i+)printf("%st",);printf("%dt",strui.num);printf("%dtt",stru

29、i.score1);printf("%dtt",strui.score2);printf("%dttn",strui.score3);printf("n");printf("*n");printf("n");printf("學(xué)生信息顯示完畢!");printf("n");wait("按ENTER返回!"); 學(xué)生信息刪除void Delete()int i,k;int j=0;printf("請輸入要刪除的學(xué)生學(xué)號:n&quo

30、t;);scanf("%d",&j);for(i=0;i<s;i+)if(j=strui.num)k=i;break;if(j=0)printf("按任意鍵繼續(xù):n"); if(k<100)for(i=k;i<s;i+) /* 用后一個同學(xué)的信息覆蓋前一個同學(xué)的信息 */strcpy( ,strui+1.name);strui.age=strui+1.age;strui.num=strui+1.num;strui.score1=strui+1.score1;strui.score2=strui+1.score

31、2;strui.score3=strui+1.score3;if(s=0)printf(" 沒有學(xué)生信息:n");break;s-; printf("刪除成功!");wait("按任意鍵繼續(xù)!");elseprintf("沒有找到相關(guān)信息:n"); 學(xué)生信息保存void Save()FILE *fp;int i;fp=fopen("student.txt","w"); for(i=0;i<s;i+) fwrite(&strui,sizeof(struct stu

32、dent),1,fp); /向文件中寫入數(shù)據(jù)/system("cls");fclose(fp);printf("n");printf("保存成功!n");printf("n");wait("按ENTER返回主菜單 "); 學(xué)生信息查詢void Search() FILE *fp;int ch,i,num; system("cls"); if(fp=fopen("student.txt","r")=NULL) printf("c

33、annot open filen"); exit(0); for(i=0;i<s;i+) fread(&strui,sizeof(struct student),1,fp);printf(" 請輸入學(xué)號n");scanf("%d",&num);for(i=0;i<s;i+) if(strui.num=num)break; if(i<s)printf("查找結(jié)果如下:n");printf("n");printf("學(xué)號t姓名t語文成績t數(shù)學(xué)成績t英語成績n&quo

34、t;); printf("%dt%st%dtt%dtt%dn",strui.num,,strui.score1,strui.score2,strui.score3); elseprintf("您輸入的學(xué)號不存在!");wait("查詢成功!");學(xué)生成績統(tǒng)計void Count()FILE *fp; if(fp=fopen("student.txt","r")=NULL) printf("cannot open filen"); exit(0); whil

35、e(!feof(fp) fread(&strui,sizeof(struct student),1,fp);printf("學(xué)號t姓名t語文成績t數(shù)學(xué)成績t英語成績t總分n");for(i=0;i<s;i+)strui.sum=strui.score1+strui.score2+strui.score3; printf("%dtt%stt%dtt%dtt%dtt%dn",strui.num,,strui.score1,strui.score2,strui.score3,strui.sum);wait("&quo

36、t;); void wait(char message10)printf("n%s",message);fflush(stdin);getchar();2-4調(diào)試分析2-4.1登錄系統(tǒng)界面2-4.2學(xué)生信息錄入界面2-4.3學(xué)生成績統(tǒng)計界面2-4.4學(xué)生信息顯示界面2-4.5數(shù)據(jù)保存界面2-4.6刪除信息界面2-4.7學(xué)生信息查找界面2-5心得體會這次課設(shè)的模式是一個按學(xué)號必做一個,然后自選一個。然而自選的我就選了一個相對容易點的題目,這個在以前也學(xué)過。做起來就快些。這個課設(shè)就完成的快些。  有人認(rèn)為這種課程設(shè)計很是枯燥無味,但我認(rèn)為,在編程的過程中會體驗到平時體

37、驗不到的快樂,還能更加穩(wěn)固平常我們學(xué)到的知識,在學(xué)習(xí)的過程中還能體驗到快樂,何樂不為呢?對數(shù)據(jù)結(jié)構(gòu)這門課程我覺得是對C語言的更進(jìn)一步的學(xué)習(xí),我覺得在這兩周我學(xué)到了很多。數(shù)據(jù)結(jié)構(gòu)對我說學(xué)起來還是有點難度。先是上網(wǎng)查找有關(guān)的資料,分析題目所需的數(shù)據(jù),要用到哪些函數(shù)等等。將工作分配到每塊是我完成這個設(shè)計的主要方法,然而將每塊都完成看起來比擬輕松,但實際操作起來卻是比擬麻煩的,一不注意就有了錯誤,有時還找不到。由于平時對程序方面的知識的積累較為匱乏,所以操作起來真是寸步難行,沒方法,只有拿出課本找到相應(yīng)的知識點,臨陣磨槍。 課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能

38、力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體練習(xí)和考察過程。隨著科學(xué)技術(shù)開展的日新日異,當(dāng)今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說把握計算機開發(fā)技術(shù)是十分重要的。 回憶起此次課程設(shè)計,至今我仍感慨頗多,確實,從拿到題目到完成整個編程,從理論到實踐,在這兩個星期的日子里,學(xué)到了很多很多的東西,同時不僅穩(wěn)固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會效勞,從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過

39、程中碰到問題,可以說得是困難重重,這究竟第一次做的,難免會碰到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的缺乏之處,對以前所學(xué)過的知識理解得不夠深刻,把握得不夠牢固,比方說結(jié)構(gòu)體通過這次課程設(shè)計,更加堅決了以后要好好學(xué)習(xí)這門課程的信念。培養(yǎng)了獨立思考問題的能力,提高了自身的動手能力。在程序的編寫過程中,我充分體會了編程工作者的辛苦,因為沒一個細(xì)微的細(xì)節(jié)都必須十分的注意。如果稍有不慎,就會全盤皆“輸。而且往往很多時候,程序我自己覺得非常正確,但是就是便以通不過,在查找錯誤的過程中,面臨著否認(rèn)自己的過程,非常的難受。同時由于自己的經(jīng)驗及各方面的能力的缺乏,所以進(jìn)展的速度非常的緩慢,往往一天下來

40、什么都沒做成功。這個過程曾給我沉重打擊,不過當(dāng)看到程序沒錯誤能執(zhí)行出來時,心中的喜悅難以用言語來表達(dá)。在開始編寫程序的時候,我看到別人的程序功能非常的詳細(xì),而且界面非常的漂亮,總希望自己的程序也多一些功能更加的完善。但是漸漸的我發(fā)現(xiàn)編寫一個優(yōu)秀的程序決不是一蹴而就的事情,需要長時間的積累和經(jīng)驗,而這個方面又是我的弱項。因此在同學(xué)的幫助下,我認(rèn)識到自己的缺乏和劣勢,不要貪圖大而全,只要盡我所能,編制一個實用簡單的程序也是一件很不容易的事情。在同學(xué)的幫助和自己的努力之下,我終于做出了一個簡單的程序。雖然程序的功能簡單,而且我想在實際的運用中,肯定會有所缺乏。因為學(xué)生信息管理系統(tǒng)工作的內(nèi)容非常的豐富

41、,我涉及到的僅僅是學(xué)生信息管理的一局部簡單內(nèi)容,離實際的客戶需求肯定還有一定的差距。但是它畢竟代表著我對這段時間所學(xué)的知識的掌握。由于我的知識淺薄,經(jīng)驗缺乏及閱歷破淺,因此在該程序的設(shè)計方面還有很多缺乏,比方功能過少,只是簡單的實現(xiàn)了數(shù)據(jù)的添加,對數(shù)據(jù)的刪除和查詢等操作均為實現(xiàn),因此需要今后更加深入的學(xué)習(xí)和努力2-6附錄:源代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>|#include<conio.h>struct student /定義結(jié)構(gòu)類型,類型名為studentchar

42、name10; int age,num,score1,score2,score3,sum;stru100;int s=0;int i;void wait(char message10);/*學(xué)生根本信息錄入*/void Insert() voidSave();printf("請輸入要錄入學(xué)生成績的個數(shù):n");scanf(" %d",&s); fflush(stdin);for(i=0;i<s;i+)printf("請輸入第%d個學(xué)生的姓名:n",i+1);scanf(" %s",

43、);printf("請輸入該學(xué)生的學(xué)號(1-100):n",i); scanf(" %d",&strui.num);printf("請輸入學(xué)生語文成績:n ");scanf(" %d",&strui.score1);printf("請輸入學(xué)生數(shù)學(xué)成績:n ");scanf(" %d",&strui.score2);printf("請輸入學(xué)生英語成績:n ");scanf(" %d",&strui.scor

44、e3);fflush(stdin);printf("學(xué)生根本信息錄入完畢:n");printf("n");wait("按ENTER返回!");Save();/*學(xué)生根本信息顯示*/void Display()printf("n");printf("*學(xué)生根本信息*n");printf("姓名t學(xué)號t語文成績t數(shù)學(xué)成績t英語成績n");for (i=0;i<s;i+)printf("%st",);printf("%dt&q

45、uot;,strui.num);printf("%dtt",strui.score1);printf("%dtt",strui.score2);printf("%dttn",strui.score3);printf("n");printf("*n");printf("n");printf("學(xué)生信息顯示完畢!");printf("n");wait("按ENTER返回!");/*學(xué)生根本信息保存*/void Save(

46、)FILE *fp;int i;fp=fopen("student.txt","w"); for(i=0;i<s;i+) fwrite(&strui,sizeof(struct student),1,fp); /向文件中寫入數(shù)據(jù)/system("cls");fclose(fp);printf("n");printf("保存成功!n");printf("n");wait("按ENTER返回主菜單 ");/*學(xué)生根本信息刪除*/void Delete()int i,k;int j=0;printf("請輸入要刪除的學(xué)生學(xué)號:n");scanf("%d",&j);for(i=0;i<s;i+)if(j=strui.num)k=i;break;if(j=0)printf("按任意鍵繼續(xù):n"); if(k<100)for(i=k;i<s;i+) /* 用后一個同學(xué)的信息覆蓋前一個同學(xué)的信息 */strcpy(strui

溫馨提示

  • 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

提交評論