版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、. . . . 程序設(shè)計綜合訓(xùn)練設(shè)計報告專 業(yè): 數(shù)字媒體技術(shù)班 級: 11媒體Z學(xué) 號: 11145107姓名: 朱毅指導(dǎo)教師:湘軍 明霞成績: 計算機工程學(xué)院 2012年10月第一部分題目:1.編寫函數(shù) int hamming(int x,int y,char a,char b)實現(xiàn)以下功能:先將形參x和y分別轉(zhuǎn)換為2個合法代碼并按從低位到高位的順序為別保存2個合法代碼的碼距,函數(shù)返回該碼距。2.編寫函數(shù)main()函數(shù)實現(xiàn)以下功能:聲明字符數(shù)組a、b和變量m、n輸入兩個整數(shù)冰保存到m和n中,若m、n的值在032767圍則用m、n和數(shù)組a、b做實參調(diào)用haming函數(shù),計算由m和n生成的兩
2、個合法代碼的碼距輸出的到屏幕與文件myf2.out中。最后將考生本人的號輸出到文件myf2.out中。來自:2009年(秋)上機試卷(03)的編程題。解題的基本思路:子函數(shù)就是將形參X,Y分別轉(zhuǎn)換為2個合法的代碼并按從低位到高位的順序分別保存2個合法代碼到a和b指向的數(shù)組中,在計算a數(shù)組和b數(shù)組中的兩個合法代碼的碼距,函數(shù)返回碼距。主函數(shù)就是調(diào)用子函數(shù),并輸出結(jié)果。設(shè)計方案:主函數(shù)main()(1) 功能模塊框圖:調(diào)用子函數(shù):hamming()子函數(shù)調(diào)用函數(shù):bin()主函數(shù)(2)程序流程圖:入 口讀文件創(chuàng)建文件,輸入m,n調(diào)用函數(shù)hamming() 返回count;出 口用hamming()
3、調(diào)用函數(shù)bin()Hamming函數(shù)循環(huán)體Bin函數(shù)循環(huán)體循環(huán)體算法設(shè)計:(1)算法描述:由于hamming函數(shù)需要分別將兩個整數(shù)轉(zhuǎn)換為合法代碼,因此編寫函數(shù)“void bin(int n,char str)”。Bin函數(shù)的功能是將形參n轉(zhuǎn)換為合法代碼并保存到b指向的一維數(shù)組中。Hamming函數(shù)先兩次調(diào)用bin函數(shù),分別將形參X和Y轉(zhuǎn)換為合法代碼并分別保存到a和b指向的一維數(shù)組中,在用循環(huán)語句從前向后遍歷a和b指向的數(shù)組各元素,函數(shù)最后返回統(tǒng)計結(jié)果。(2)實現(xiàn)方法:用VC6.0軟件進(jìn)行調(diào)試,分析,輸入m,n兩個值,進(jìn)行分析,調(diào)用函數(shù)hanmming(),在從hanmming()函數(shù)中調(diào)用函數(shù)
4、bin(),返回count的值,輸出,a,b數(shù)組中的值和返回值count的值。源代碼:#include<stdio.h>void bin(int n,char str)int i=15,j;while(n!=0)stri-=n%2+'0'n/=2;for(j=0;j<=i;j+)strj='0'str16='0'int hamming(int x,int y,char a,char b)int count=0,i;bin(x,a);bin(y,b);for(i=0;i<16;i+)if(ai!=bi)count+;retu
5、rn count;void main()char a17,b17;int m,n,x;FILE *fp;fp=fopen("myf2.out","w");if(fp=NULL)printf("error");doscanf("%d,%d",&m,&n);while(m>32767&&m<0&&n>32767&&n<0);x=hamming(m,n,a,b);printf("n%sn%sndistance of %d a
6、nd %d is %d n",a,b,m,n,x);fprintf(fp,"n%sn%sndistance of %d and %d is %d n",a,b,m,n,x);fprintf(fp,"11145107");fclose(fp);程序調(diào)試:就是輸入的時候,n和m的值圍問題,當(dāng)輸入圍不正確時候跳不出來解決方法:用一個dowhile;循環(huán)條件為大于32767和小于0的時候退出。測試:第二部分職工信息管理系統(tǒng)(1)題目名稱:職工信息管理系統(tǒng)容:職工信息包括職工號、性別、出生年月、學(xué)歷、職務(wù)、工資、住址、等(職工號不重復(fù))。試設(shè)計一職工信息
7、管理系統(tǒng),使之能提供以下功能:1、職工信息錄入功能(職工信息用文件保存,也可不用) 2、職工信息瀏覽功能 3、排序:按工資排序4、查詢或排序功能:(至少一種查詢方式:順序、折半查找)按工資圍查詢5、職工信息刪除、修改功能(任選一項)(2)解題的基本思路程序采用模塊化,每一個模塊對應(yīng)一種功能,調(diào)用函數(shù)予以實現(xiàn),分別為7個模塊,分別是創(chuàng)建與添加模塊、顯示模塊、查找模塊、修改模塊、刪除模塊、存檔模塊、文件統(tǒng)計模塊、退出模塊,把復(fù)雜的問題分成每一個獨立功能的小問題來解決。(3)設(shè)計方案1、功能模塊圖菜單開始根據(jù)菜單輸入序號值選擇程序結(jié)束是否繼續(xù)進(jìn)行 NY2修改職工信息3瀏覽職工信息4分類查找職工信息5
8、刪除職工信息6從文件讀取信息0退出1錄入職工信息按職工號查找按XX查找(4) 算法設(shè)計該程序主要分為7個模塊,分別是創(chuàng)建與添加模塊、顯示模塊、查找模塊、修改模塊、刪除模塊、存檔模塊、文件統(tǒng)計模塊、退出模塊創(chuàng)建與添加模塊:該模塊的功能是輸入職工信息。函數(shù)為void Add(Node *woker)原理:采用尾插法,先建立鏈表與頭結(jié)點,新增一個結(jié)點,鍵盤輸入職工號、職工、職工性別、職工出生年月、職工學(xué)歷、職工職位、職工工資,將這些信息存儲到新增結(jié)點中,將新增加的節(jié)點連到鏈表的尾端,如此以往,將尾結(jié)點的指針域置空,這樣就得到了一條存儲職工信息的鏈表,這樣就完成了職工信息的創(chuàng)建與增加。顯示模塊:該模塊
9、功能是顯示職工信息。函數(shù)為void Disp(Node *woker)原理:先新建一個指針P指向頭結(jié)點,判斷它的指針域是否為空,若為空,則輸出“沒有記錄可以顯示”;若不為空,則輸出它的指針域所指向節(jié)點所儲存的職工信息,并將該指針向后移一個結(jié)點,直到P指向空,即輸出了所有職工的信息,這樣就完成了所有職工信息的顯示。查找模塊:該模塊功能是查找職工信息。函數(shù)為void Tongji(Node *woker)原理:該模塊分為兩種查找方法,分別是按職工號查找和按職工查找,因為這兩種查找方法雷同,所以這里將只解釋按職工號查找的原理。先鍵盤輸入一個要查找的職工號并新建一個指針P指向頭結(jié)點,判斷它的指針域是否
10、為空,若為空,則輸出“沒有資料可以統(tǒng)計分類”,若不為空,則判斷它的指針域所指向節(jié)點所儲存的職工信息中的職工號,若相等,則輸出這個職工的其他所有信息,并將P指向下一個結(jié)點,再次進(jìn)行判斷,直到P指向空,即輸出了所有查找到的信息。若不相等,則P指向下一個結(jié)點,再次進(jìn)行判斷,直到P指向空,即輸出了所有查找到的信息,這樣就完成了職工信息的查找。修改模塊 :該模塊功能是修改職工信息。函數(shù)為void change(Node *woker)原理:根據(jù)查找原理,查找到要修改信息的職工,刪除這一節(jié)點,并新建一個節(jié)點,鍵盤輸入想要修改的容,并儲存到新的結(jié)點中,將新的節(jié)點連接到鏈表中原先刪除結(jié)點的位子,這樣就完成了職
11、工信息的修改。刪除模塊:該模塊功能是刪除管理職工信息。函數(shù)為void dismiss(Node *woker)根據(jù)查找的原理,查找到要修改信息的職工,刪除這一節(jié)點,并將其前驅(qū)結(jié)點的指針域指向其后繼結(jié)點,這樣就完成了職工信息的刪除。存檔模塊:將存中的信息存儲到文件中。函數(shù)為void save(Node *woker)原理:打開文件,新建一個指針P指向頭結(jié)點,判斷它的指針域是否為空,若為空,則輸出“無記錄”,若不為空,則將這個職工的所有信息輸入到文件中,并將P指向下一個結(jié)點,直到P指向空,即輸入了的信息,文件統(tǒng)計模塊:打開文件,統(tǒng)計職工數(shù)目,并輸出。函數(shù)為void load(Node *woker
12、)退出模塊:該模塊功能是退出管理檔案。(5)程序調(diào)試與測試:歡迎界面:主界面:創(chuàng)建與增加模塊:輸入職工信息為:職工號職工職工性別職工出生年月職工學(xué)歷職工職位職工工資1Af11bena10002Bm22benb20003Cf33benc30004Dm44bend4000輸入第一次時:輸入第二次時:輸入第三次時:輸入第四次時:顯示模塊:輸入四次后顯示的結(jié)果為:查找模塊:輸入查找職工號為3的職工信息:輸入查找職工為c的職工信息:修改模塊:修改職工號為3的職工信息為:職工號職工職工性別職工出生年月職工學(xué)歷職工職位職工工資5Ef55eee5000職工信息變成:刪除模塊:刪除職工號為5的職工信息:刪除后的
13、結(jié)果為:退出模塊:(6)總結(jié)此次實踐課編寫的是一個應(yīng)用程序,相對于以前我們見到的程序,它要大得多,運行的結(jié)果也沒有預(yù)想中的好,數(shù)據(jù)的輸出格式不太規(guī),而且各模塊也出現(xiàn)了一些小問題,我很有耐心的一次又一次的進(jìn)行修改,最后運行的結(jié)果基本上達(dá)到了預(yù)期的目的。本次C 語言的實習(xí)課讓我對C 語言的學(xué)習(xí)又有了更深入的了解,也讓我更深刻地領(lǐng)悟到了“實踐出真理”這個道理,在上機實踐過程中學(xué)到的知識遠(yuǎn)遠(yuǎn)超過了在課堂上學(xué)到的,這次程序設(shè)計課讓我增添了許多程序設(shè)計經(jīng)驗,為我們將來走上工作崗位其了不小的鋪墊作用。本次實習(xí)中遇到了很多以前沒有遇到過的問題,也曾想過要放棄,但看到那些同學(xué)都在那認(rèn)真的寫程序,給了我繼續(xù)的信心
14、。在同學(xué)和老師的幫助下,我順利的結(jié)束了本次實習(xí),讓我知道原來憑借自己努力取得的成功會讓自己這么欣慰。(7)附錄:源代碼#include <stdio.h>#include <stdlib.h#include <string.h>struct wokers/定義一個woker的結(jié)構(gòu)體char num10;/職工號char name15;/職工char sex15;/職工性別char birthday15; /職工出生年月char degree10; /職工學(xué)歷char position10; /職工職位char salary10; /職工工資;typedef str
15、uct nodestruct wokers data;struct node *next;/建立一個鏈表。Node;void Add(Node *woker)/添加記錄Node *p,*r,*s; char n10; /先用于輸入職工號,也用于判斷是否跳出循環(huán)r=woker;s=woker->next; /使s為第一個有用的結(jié)點while(r->next!=NULL) /這個循環(huán)的作用是使r為最后一個有用的結(jié)點r=r->next; /將指針置于最末尾while(1) printf(">>>>>>>>>>提示
16、:輸入0則返回主菜單!n"); printf("n請你輸入職工號:"); scanf("%s",n); if(strcmp(n,"0")=0) break; p=(Node *)malloc(sizeof(Node); /申請空間 strcpy(p->data.num,n); printf("n請輸入:"); scanf("%s",p->); printf("n請輸入性別:"); scanf("%s",p->d
17、ata.sex); printf("n請輸入出生年月:"); scanf("%s",&p->data.birthday); printf("n請輸入學(xué)歷:"); scanf("%s",&p->data.degree); printf("n請輸入職位:"); scanf("%s",&p->data.position); printf("n請輸入工資:"); scanf("%s",&p-&g
18、t;data.salary); printf(">>>>>>>>>>提示:已經(jīng)完成一條記錄的添加。n"); p->next=NULL; r->next=p; /這一步是必需的,將p與先前的鏈表連起來構(gòu)成一條新鏈表 r=p; /也是必需的.將r 又重設(shè)為新鏈的最后一個有用結(jié)點 void change(Node *woker)/修改職工信息函數(shù)Node *p;char find20;if(!woker->next) printf("n>>>>>>>&
19、gt;>>提示:沒有資料可以修改!n"); return;printf("請輸入要修改的職工號:"); scanf("%s",find); p=woker->next; while(p!=NULL) if(strcmp(p->data.num,find)=0) /如果找到的話返回的是符合要求 break; p=p->next; if(p) int x; while(1) printf("完成修改請輸入0否則輸入任意數(shù)再進(jìn)行修改:"); scanf("%d",&x);
20、if(x=0) break; printf("請輸入新職工號(原來是 %s ):",p->data.num); scanf("%s",p->data.num); printf("請輸入新職工(原來是 %s ):",p->); scanf("%s",p->); printf("請輸入新職工性別(原來是 %s ):",p->data.sex); scanf("%s",p->data.sex); printf(
21、"請輸入新出生年月(原來是 %s ):",p->data.birthday); scanf("%s",p->data.birthday); printf("請輸入新職工學(xué)歷(原來是 %s ):",p->data.degree); scanf("%s",p->data.degree); printf("請輸入新職工職位(原來是 %s ):",p->data.position); scanf("%s",p->data.position); pr
22、intf("請輸入新職工工資(原來是 %s ):",p->data.salary); scanf("%s",p->data.salary); printf("n>>>>>>>>>>提示:該項記錄資料已經(jīng)成功修改!n"); else printf("n>>>>>>>>>>提示:你要修改的信息不存在!n"); void Disp(Node *woker)/輸出職工信息Node *p;p=w
23、oker->next;if(!p) printf("n>>>>>>>>>>提示:沒有記錄可以顯示!n"); return; printf("tttt顯示結(jié)果n"); printf("職工號 職工 職工性別 職工生日 職工學(xué)歷 職工職位 職工工資n"); while(p) printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,
24、p->data.birthday,p->data.degree,p->data.position,p->data.salary); p=p->next;void Tongji(Node *woker)/查找統(tǒng)計函數(shù)Node *p;int sel;int flag2=0,ha=0;char find20; p=woker->next;if(!woker->next)/若鏈表為空 printf("n>>>>>>>>>>提示:沒有資料可以統(tǒng)計分類!n"); return;prin
25、tf(">>>>>>>>>>提示:n=>0退出n=>1按職工號統(tǒng)計n=>2按職工名稱統(tǒng)計n");scanf("%d",&sel);if(sel=1) printf("n輸入你要統(tǒng)計分類的職工號:");scanf("%s",find); while(p) if(strcmp(p->data.num,find)=0) flag2+; if(flag2=1&&ha!=flag2) printf("職工號
26、職工 職工性別 職工生日 職工學(xué)歷 職工職位 職工工資n"); printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary); ha=flag2; else if(flag2>ha)printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn"
27、,p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2; p=p->next; if(flag2) printf("n*按設(shè)備號%s統(tǒng)計分類的有%d條記錄:*nn",find,flag2); else printf("n按職工號%s統(tǒng)計的結(jié)果為0個nn",find);else if(sel=2) printf("n輸入你要統(tǒng)計分類的
28、職工:"); scanf("%s",find); while(p) if(strcmp(p->,find)=0) flag2+; if(flag2=1&&ha!=flag2) printf("職工號 職工 職工性別 職工生日 職工學(xué)歷 職工職位 職工工資n"); printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p->data.birthday,p-
29、>data.degree,p->data.position,p->data.salary); ha=flag2; else if(flag2>ha)printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2; p=p->next; if(flag2) pr
30、intf("nnn共查找到%d條記錄:nn",flag2); else printf("n按職工%s統(tǒng)計分類的結(jié)果為0個nn",find);else if(sel=0) return;void load(Node *woker)Node *p,*q;FILE *fp;/指向文件的指針int recordNum;/ 統(tǒng)計記錄數(shù)if(fp = fopen("職工管理系統(tǒng).txt", "rb") = NULL)/打開文件printf("can not open filen");/不能打開p=woker
31、;recordNum = 0;while(!feof(fp)q=(Node*)malloc(sizeof(Node); fscanf(fp, "%s %s %s %s %s %s %s",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);/*從文件讀入記錄*/p->next=q;q->next=NULL;p=q;recordNum+;fclose(fp);printf(
32、"文件里共有%d條記錄:n",recordNum);void save(Node *woker)/將職工信息保存到文件int n;Node *p;FILE *fp; /指向文件的指針printf("需要保存到文件嗎?(1保存,0不保存)");scanf("%d",&n);if(n=1)if(woker->next=NULL)printf("無記錄");else p=woker->next;if(fp = fopen("職工管理系統(tǒng).txt", "wb")
33、= NULL) /打開文件,并判斷打開是否正常printf("can not open filen");/ 打開文件出錯while(p!=NULL)fprintf(fp,"%s %s %s %s %s %s %s",&p->data.num,&p->,&p->data.sex,&p->data.birthday,&p->data.degree,&p->data.position,&p->data.salary);p=p->next;f
34、close(fp);/關(guān)閉文件void dismiss(Node *woker)/刪除職工信息函數(shù)Node *p,*r,*s;char find10;if(!woker->next) printf("n>>>>>>>>>>提示:沒有資料可以顯示!n"); return; printf("n>>>>>>>>>>提示:請輸入您要刪除的職工號!n");scanf("%s",find);p=woker->next;while(p!=NULL) if(strcmp(p->data.num,find)=0)/如果找到的話返回的是符合要求 break; p=p->next; if(!p)printf(&
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場防火設(shè)施配置要求
- 合作社股權(quán)轉(zhuǎn)讓協(xié)議注意事項
- 2024標(biāo)準(zhǔn)律師聘用合同
- 工程銷售合同范例
- 供應(yīng)合同樣式模板
- 年度公園綠化養(yǎng)護(hù)合同樣本
- 標(biāo)準(zhǔn)小企業(yè)勞動合同
- 小企業(yè)銀行借款合同
- 培訓(xùn)資助協(xié)議樣本
- 舞臺租賃標(biāo)準(zhǔn)合同
- 廣東省廣州市2023-2024學(xué)年七年級上學(xué)期11月期中道德與法治試題
- 人民醫(yī)院能源托管服務(wù)項目可研技術(shù)方案書
- 財務(wù)共享服務(wù)中心-整體設(shè)計-V1.0
- 環(huán)刀法測壓實度自動計算表格(2020.4.10)
- 2022年長江產(chǎn)業(yè)投資集團(tuán)限公司招聘【150人】上岸筆試歷年難、易錯點考題附帶參考答案與詳解
- 預(yù)防事故和職業(yè)危害的措施及應(yīng)注意的安全事項課件
- 基于Android的個性化天氣預(yù)報系統(tǒng)的設(shè)計與軟件實現(xiàn)
- 《神經(jīng)生物學(xué)》-膠質(zhì)細(xì)胞課件
- 魯科版四年級上冊英語每單元重點
- 小學(xué)英語學(xué)習(xí)分組背誦表格
- 2023年03月南寧市公開考試招聘縣(市區(qū))開發(fā)區(qū)中小學(xué)教師筆試題庫含答案解析
評論
0/150
提交評論