版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
西安郵電大學(xué)(計算機學(xué)院) 1.通過設(shè)計實現(xiàn)哈夫曼編譯碼,進一步加深對樹的應(yīng)用與操作能力C構(gòu)與算法》課程中所學(xué)習(xí)的基本理論知識,用理論聯(lián)系實際;進一步培養(yǎng)自身綜合分析問CC運4.了解程序設(shè)計的一般方法,結(jié)構(gòu)化程序設(shè)計思想;熟悉常用的程序結(jié)構(gòu)與算法,提升容哈夫曼樹又叫最優(yōu)二叉樹,可以來構(gòu)造最優(yōu)編碼,用于信息傳輸、數(shù)據(jù)壓縮等方面。本任意個字符及其權(quán)值,之后便可以給出各個字符的編碼值的要求。.鏈表等內(nèi)容,設(shè)計一套完整學(xué)生信息管理系統(tǒng),滿足對一個班的或者更多的學(xué)生基本信息進行輸入、輸出、查詢、刪除等管理的要求。本系統(tǒng)設(shè)計,主要運用了鏈表,用鏈表來完成各項功能,并對文件進行寫入于讀取操函數(shù)模塊息。(l)初始化。從終端讀入字符集大小n,以及n個字符和n個權(quán)值,建立哈夫曼樹。存到數(shù)組里去,最后把字符及編碼輸出出來2.學(xué)生信息管理系統(tǒng)功能模塊圖;管理員用戶管理員用戶注冊、登陸學(xué)生信息管理系統(tǒng)從文件導(dǎo)入學(xué)生信息并顯示修改學(xué)生信息查詢學(xué)生信息刪除信息入信息序號名別序號查找學(xué)號查找3.哈夫曼編碼程序各個模塊詳細的功能描述建出哈夫曼樹。4.學(xué)生信息管理系統(tǒng)各個模塊詳細的功能描述登陸模塊:用戶可以選擇注冊、登陸、退出功能。只有注冊,并成功登陸后方可進行學(xué)顯示模塊:可以將已指定的文件中的學(xué)生信息、修改后的學(xué)生信息全部顯示出來。增加模塊:可以在此功能中增加任意多個學(xué)生信息,并保存修改模塊:可以對你輸入要修改的序號的學(xué)生信息,進行修改,并保存到文件中查詢模塊:可以對你根據(jù)序號、或者學(xué)號查詢對應(yīng)同學(xué)的相信信息刪除模塊:可以對你輸入要刪除的序號的學(xué)生信息,進行刪除ffmanTreehtintnintsintsreeHuffmanTreehtintnodelHuffmanTreehtintn其調(diào)用關(guān)系如其調(diào)用關(guān)系如下創(chuàng)建哈夫曼樹主函數(shù)求哈夫曼編碼:學(xué)生信息管理系統(tǒng)主要包含以下函數(shù):它們調(diào)用的關(guān)系如下圖:LModily(LinkListL)用開始請輸入字符及其權(quán)值是入否請輸出各字符及其開開始否注冊是否有該系統(tǒng)密碼是用戶名及密碼是否正確是登陸成功進行信息管理開始否讀文件是否有學(xué)生信息存在新建學(xué)生信息是始請輸入學(xué)生信息是入否開始輸入要刪除的序號不存在該同學(xué)存在輸出該同學(xué)信息確認后進行刪除是除否開始否按序號、學(xué)號查找是否否是開始輸入要修改學(xué)號不存在該同學(xué)存在輸出該同學(xué)信息根據(jù)選擇,進行修改是改否4.哈夫曼編碼的重點設(shè)計及編碼利用已建好的Huffman樹,從葉子結(jié)點開始,沿著結(jié)點的雙親追溯到根節(jié)點,追溯過去,最后把字符及編碼輸出出來。詳細設(shè)計見源程序中CrtHuffmanCodel(HuffmanTreeht,intn)1.運用鏈表操作實現(xiàn)用戶注冊、登陸功能。首先定義一個包含用戶名及密碼的結(jié)構(gòu)體,在內(nèi)存中申請一段空間將用戶的注冊的賬戶名、密碼依次保存到對應(yīng)節(jié)點中去,并保存至文件中去;當用戶登錄時,通過調(diào)取文件中的信息,并依次進行比對,僅有用戶名及密碼。詳細代碼見附錄源程序中函數(shù)zhuce(),denglu()2.學(xué)生信息管理系統(tǒng)正常測試數(shù)據(jù)和運行結(jié)果登陸界面注冊界面顯示已經(jīng)導(dǎo)入的學(xué)生信息增加學(xué)生信息刪除學(xué)生信息修改學(xué)生信息在求哈夫曼編碼中由于輸入的字符無法識別導(dǎo)致運算出錯.調(diào)試情況,設(shè)計技巧及體會案評價:該程序設(shè)計較為良好,能根據(jù)用戶輸入的字符及其權(quán)值,構(gòu)造出對應(yīng)的二叉樹,并求出各個字符對應(yīng)的哈夫曼編碼并打印出來。不足:只是輸出字符的對應(yīng)的哈夫曼編碼,沒有形象地打印出用戶輸入權(quán)值對應(yīng)的最優(yōu)二增加了程序的時間復(fù)雜度。于打印出較為形象直觀的二叉樹形式。2.對學(xué)生管理系統(tǒng)的評價及改進方案學(xué)生信息的使用要求。尤其對登陸界面管理員用戶注冊、密碼功能的設(shè)置,有效的保證了信息的安全性;并且使用鏈表來進行儲存密碼、驗證密碼保證了正確率;從文件中讀入學(xué)簡單,方便不足:頁面不夠美觀,尤其管理界面視覺效果較差;健壯性不夠,當用戶不按照提示或者失誤的操作后容易導(dǎo)致運行錯誤甚至,系統(tǒng)崩潰;可輸入的學(xué)生信息種類不夠多,僅有學(xué)號、姓名等;功能不夠完善,無法為用戶提供排序,分類篩選等功能。改進方案:調(diào)用C語言的圖形設(shè)計中的顏色、圖案設(shè)計程序,讓操作界面美觀,提升用戶體驗;完善程序中的條件判斷種類,以識別錯誤的操作,及時終止程序,防止運行失敗的出現(xiàn),增強程序的健壯性、容錯性、可操作性;增加程序的功能,進一步設(shè)計用學(xué)生序號、學(xué)號等排序操作,以更方便用戶;增大輸入學(xué)生信息的信息種類,完善學(xué)生的信息,如增加家庭住址、聯(lián)系方式等。此次C語言數(shù)據(jù)結(jié)構(gòu)與算法課程實習(xí),是我在老師的指導(dǎo)下第一次完成一個完整系統(tǒng)提高。,慢慢地學(xué)會了如何自我調(diào)試程序,如何尋找錯誤的地方,從而提高了學(xué)習(xí)的效率,學(xué)到了很多通過這次實習(xí),我在一次又一次地對錯誤的更正中,對設(shè)計思路的調(diào)整中,以及與老C計、認識。那一次次為“叮叮”響起的錯誤報告而抓耳撓腮,一次次為一條語句的設(shè)計而爭執(zhí)不下,以及當自己的設(shè)計在屏幕上顯示時的喜悅,這些都是實習(xí)的收獲與進步,更是一段段難忘的記憶。[1]譚浩強著.C語言設(shè)計(第三版).北京:清華大學(xué)出版社,2005[2]王曙燕主編.數(shù)據(jù)結(jié)構(gòu)與算法.北京:人民郵電出版社,2013[3]王曙燕主編.數(shù)據(jù)結(jié)構(gòu)與算法.北京:人民郵電出版社,2013[4]EllisHorowitz,SartajSahni,SusanAnderson-Freed著朱仲濤譯.數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)1.哈夫曼編碼的實現(xiàn)#defineN30#defineM2*N-1#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{ntweightintParent,Lchild,Rchild;charch;}HTNode,HuffmanTree[N+1];voidselect(HuffmanTreeht,intn,int*s1,int*s2){ntintmmm1=m2=32767;for(i=0;i<=n;i++){if(ht[i].weight<m1&&ht[i].Parent==0){m1=ht[i].weight;*s1=i;}}for(i=0;i<=n;i++){if(ht[i].weight>=m1&&ht[i].weight<m2&&ht[i].Parent==0){ifis){m2=ht[i].weight;*s2=i;}}}}voidCrtHuffmanTree(HuffmanTreeht,intn){inti,s1,s2;intm=2*n-1;for(i=1;i<=n;i++){printf("請輸入第%d個字符及其權(quán)值\n",i);scanf("%c,%d",&ht[i].ch,&ht[i].weight);}for(i=1;i<=n;i++){ht[i].Parent=0;ht[i].Lchild=0;ht[i].Rchild=0;}for(i=n+1;i<=m;i++){ht[i].weight=0;ht[i].Parent=0;ht[i].Lchild=0;ht[i].Rchild=0;}for(i=n+1;i<=m;i++){select(ht,i-1,&s1,&s2);ht[i].weight=ht[s1].weight+ht[s2].weight;ht[i].Lchild=s1;ht[i].Rchild=s2;ht[s1].Parent=i;ht[s2].Parent=i;}}voidCrtHuffmanCodel(HuffmanTreeht,intn){intstart,i,c,p;intm=2*n-1;charcd[N];for(i=1;i<=n;i++){start=n-1;p=ht[i].Parent;while(p!=0){--start;if(ht[p].Lchild==c)cd[start]='0';cd[start]='1';p=ht[p].Parent;}printf("字符%c的編碼為\n",ht[i].ch);for(intj=start;j<=n-1;j++)printf("%c",cd[j]);printf("\n");}}voidmain(){HuffmanTreeht;printf("需要輸入的字符個數(shù)為n\n");scanf("%d",&n);CrtHuffmanTree(ht,n);CrtHuffmanCodel(ht,n);}2.小型學(xué)生管理系統(tǒng)源代碼#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#include<conio.h>#defineN20//定義結(jié)構(gòu)體typedefstructLNode{longxuehao;ntxuhaocharname[N];charsex;structLNode*next;}Node,*LinkList;//學(xué)號//班級序號//學(xué)生姓名//性別typedefstructlnodecharyhmNcharmm[N];structlnode*next;}node,*linklist;voidSave(linklistL){linklistp;FILE*fp;fp=fopen("data.txt","wt");iffp==NULL){printf("注冊失敗\n");getchar();}efor(p=L->next;p!=NULL;p=p->next){fprintf(fp,"%s%s",&p->yhm,&p->mm);fputc('\n',fp);}}fclose(fp);}linklistRead(){FILE*fp;linklistL;node*s;fp=fopen("data.txt","rt");L=(linklist)malloc(sizeof(node));L->next=NULL;while(!feof(fp)){s=(linklist)malloc(sizeof(node));fscanf(fp,"%s%s",s->yhm,s->mm);s->next=L->next;L->next=s;}fclose(fp);returnL;}mima();//對登陸頁面密碼函數(shù)的聲明intzhuce()//新用戶注冊函數(shù){chartemp1[N],temp2[N],temp3[N];linklistL,p;node*s;intflag=1;L=Read();p=L->next;while(p->next!=NULL){p=p->next;}fflush(stdin);//清空緩存s=(node*)malloc(sizeof(node));scanf("%s",s->yhm);fflush(stdin);gets(temp1);fflush(stdin);gets(temp2);if(!strcmp(temp1,temp2))strcpy(s->mm,temp1);s->next=p->next;p->next=s;Save(L);printf("\n\n\treturn1;注冊成功,請登陸……\n\n");}{printf("前后密碼不一致,請再次輸入密碼確認\n");gets(temp3);if(!strcmp(temp1,temp3)){strcpy(s->mm,temp1);s->next=L->next;L->next=s;printf("注冊成功\n");Save(L);mima();return1;}printf("注冊失敗\n");return1;}return1;}intzhuhanshu();//管理系統(tǒng)主函數(shù)的聲明intdenglu()//登陸函數(shù){linklistL,p;L=Read();chars1[N],s2[N];fflush(stdin);gets(s1);fflush(stdin);gets(s2);p=L->next;while(p!=NULL){if(strcmp(p->yhm,s1)==0&&strcmp(s2,p->mm)==0)printf("\n\n\t登陸成功,系統(tǒng)正在打開中……\n\n");zhuhanshu();break;}p=p->next;}printf("登陸失敗,用戶名或者密碼錯誤\n");return0;}mima()//登陸頁面函數(shù){system("cls");intiprintf("\n\n\n\t\tprintf("-----------printf("-----------printf("-----------1.新管理員用戶注冊\n\n");2.用戶登陸\n\n");0.退出系統(tǒng)\n");scanf("%d",&i);if(i>=0&&i<3){switch(i){case0:return0;break;case1:zhuce();break;case2:denglu();break;}}printf("\n對不起,沒有你輸入的選項,請重新輸入...\n");}while(i!=0);return1;}//創(chuàng)建學(xué)生信息LinkListCreateFromHead(){LinkListL;Node*s;intflag=1;nticharc;L=(LinkList)malloc(sizeof(Node));L->next=NULL;while(flag){printf("請輸入第%d個同學(xué)信息\n",i);s=(Node*)malloc(sizeof(Node));scanf("%d",&s->xuhao);scanf("%8d",&s->xuehao);scanf("%s",s->name);printf("\n請輸入該同學(xué)的性別:\n");scanf("%s",&s->sex);s->next=L->next;L->next=s;getchar();scanf("%c",&c);flag=0;}printf("共%d個學(xué)生信息錄入已完成\n",i-1);returnL;}//從文件中讀入學(xué)生信息LinkListread(){FILE*fp;LinkListL;Node*s;inti=0;fp=fopen("tonggong.txt","rt");L=(LinkList)malloc(sizeof(Node));L->next=NULL;while(!feof(fp)){s=(LinkList)malloc(sizeof(Node));fscanf(fp,"%3d%8d%s%s",&s->xuhao,&s->xuehao,s->name,&s->sex);s->next=L->next;L->next=s;}fclose(fp);printf("已經(jīng)成功導(dǎo)入%d個同學(xué)信息\n",i);returnL;}//把錄入的信息保存在文件里voidsave(LinkListL){FILE*fp;LinkListp;fp=fopen("tonggong.txt","wt");iffp==NULL){getchar();}efor(p=L->next;p->next!=NULL;p=p->next){fprintf(fp,"%4d%8d%s%s",p->xuhao,p->xuehao,&p->name,&p->sex);fputc('\n',fp);}fprintf(fp,"%4d%8d%s%s",p->xuhao,p->xuehao,&p->name,&p->sex);getchar();}fclose(fp);}//顯示存放的學(xué)生信息voidDispList(LinkListL){FILE*fp;system("cls");if((fp=fopen("tonggong.txt","rt"))==NULL){L=CreateFromHead();}}LinkListp=L->next;printf("已經(jīng)錄入的同學(xué)的信息為:\n");printf("序號\t學(xué)號\t\t姓名\t性別\t\n");while(p!=NULL){printf("%d\t0%7d\t%s\t%s\t\n",p->xuhao,p->xuehao,&p->name,&p->sex);p=p->next;}printf("\n");}//增加學(xué)生信息voidListInsert(LinkListL){system("cls");intflagnticharc;p=L->next;while(p->next!=NULL){p=p->next;}while(flag){printf("請輸入增加的第%d個同學(xué)信息\n",i);s=(Node*)malloc(sizeof(Node));scanf("%d",&s->xuhao);scanf("%8d",&s->xuehao);scanf("%s",s->name);printf("\n請輸入該同學(xué)的性別:\n");scanf("%s",&s->sex);s->next=p->next;p->next=s;getchar();scanf("%c",&c);flag=0;}printf("共%d個學(xué)生信息錄入已完成\n",i-1);saveL;}//刪除學(xué)生信息intListDelete(LinkListL){LinkListp,s;intn=1;//能不能找到學(xué)生的判斷標志intflag;charc,d;while(flag){printf("\n請輸入你想刪除的學(xué)生的序號:\n");getchar();scanf("%d",&m);p=L->next;while(p->next!=NULL){if(p->next->xuhao==m){n=2;printf("序號\t學(xué)號\t\t姓名\t性別\t\n");printf("%d\t0%7d\t%s\t%s\t\n",p->next->xuhao,p->next->xuehao,&p->next->name,&p->next->sex);printf("你確認將此同學(xué)信息刪除?是Y/否N\n");getchar();scanf("%c",&d);{s=p->next;//找到要刪除的學(xué)生p->next=s->next;free(s);saveLbreak;}return0;}p=p->next;}{printf("\n對不起,班內(nèi)沒有要找的同學(xué)...\n");return0;}printf("是否繼續(xù)繼續(xù)刪除?是Y/否N\n");flushall();scanf("%c",&c);flag0;}return1;}//查找學(xué)生信息intGetElem(LinkListL){system("cls");LinkListq,p;printf("\n\n*******\n");printf("printf("printf("printf("scanf("%d",&m);if(m>0&&m<=4)******歡迎使用學(xué)生信息管理系統(tǒng)查詢功能式是?請輸入序號,并按回車鍵1.按班內(nèi)序號查找學(xué)生\n");2.按學(xué)號查找學(xué)生\n");3.退出查找,返回主菜單\n");{p=(Node*)malloc(sizeof(Node));p->xuhao=9999;p->xuehao=999;switch(m){case1:printf("請輸入學(xué)生的班內(nèi)序號\n");scanf("%d",&p->xuhao);break;break;case3:return0;scanf("%d",&p->xuehao);break;}for(q=L->next;q!=NULL;q=q->next){{printf("序號\t學(xué)號\t\t姓名\t性別\t\n");printf("%d\t0%7d\t%s\t%s\t\n",q->xuhao,q->xuehao,&q->name,&q->sex);p->xuhao=q->xuhao;p->xuehao=q->xuehao;}}o{printf("\n對不起,班內(nèi)沒有要找的同學(xué)...\n");return0;}}printf("\n對不起,沒有你輸入的選項,請重新輸入...\n");return0;}//修改學(xué)生信息intModily(LinkListL){system("cls");LinkListp;charm,n;intq=1;//能不能找到學(xué)生的判斷標志intflag;charc;printf("\n\n******歡迎使用學(xué)生信息管理系統(tǒng)修改功能*******\n");while(flag){printf("\n請輸入你想修改的學(xué)生的序號:\n");scanf("%d",&n);p=L->next;while(p!=NULL){if(p->xuhao==n){q=2;//表示找到要修改的同志printf("序號\t學(xué)號\t\t姓名\t性別\t\n");printf("%d\t0%7d\t%s\t%s\t\n",p->xuhao,p->xuehao,&p->name,&p->sex);printf("printf("printf("printf("printf("printf("scanf("%d",&m);if(m>0&&m<=5){switch
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水利工程施工合同示范文本(含安全要求)4篇
- 2022版義務(wù)教育體育與健康課程標準試卷
- 2024配電室設(shè)備安裝及調(diào)試服務(wù)合同2篇
- 2024錨具供貨合同
- 2024年高端人才招聘居間服務(wù)合同書3篇
- 2025年0號柴油油品認證居間服務(wù)協(xié)議3篇
- 2025年度生態(tài)大門研發(fā)與安裝服務(wù)合同范本4篇
- 2025年度特色烹飪技藝傳承廚師雇傭協(xié)議4篇
- 深圳房地產(chǎn)中介培訓(xùn)課件制作專業(yè)
- 2025年度旅游觀光車租賃合同標的轉(zhuǎn)讓協(xié)議3篇
- 《采礦工程英語》課件
- NB-T31045-2013風(fēng)電場運行指標與評價導(dǎo)則
- NB-T+10488-2021水電工程砂石加工系統(tǒng)設(shè)計規(guī)范
- 天津市和平區(qū)2023-2024學(xué)年七年級下學(xué)期6月期末歷史試題
- 《中電聯(lián)團體標準-220kV變電站并聯(lián)直流電源系統(tǒng)技術(shù)規(guī)范》
- 微型消防站消防員培訓(xùn)內(nèi)容
- (完整版)鋼筋加工棚驗算
- 焊接工藝的過程監(jiān)測與質(zhì)量分析
- 年夜飯營養(yǎng)分析報告
- 華電行測題庫及答案2024
- 江西省萍鄉(xiāng)市2023-2024學(xué)年九年級上學(xué)期期末數(shù)學(xué)試題(含答案)
評論
0/150
提交評論