




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、沈 陽 航 空 工 業 學 院 課程設計 學 號班 級6402101 姓 名 金海峰指導教師 王曉巖2007年9 月 20日沈陽航空工業學院課程設計任務書電子工程系 電子信息工程專業 6402101班 學號一、課程設計題目:健身跑學分管理系統二、課程設計工作自2007年9月10日起至2007年9月14日止三、課程設計內容:用C語言編寫軟件完成以下任務: 學生的記錄信息要保存在磁盤文件中(記錄結構至少應該包括以下四項:學號、姓名、累計次數、學分)。學分計算方法:在本學期內累計次數打倒20次,可得到0.5學分,否則沒有學分,新學期開始累計次數從0開始累計。在大學期間,最多可得到2學分。該系統具有如
2、下功能:(1) 學生記錄輸入。(2) 跑步簽到(每簽到一次,累計次數加1)。(3) 查詢(可按學號、學分等進行查詢)。(4) 插入新的學生記錄。 四、課程設計要求:程序質量:l 貫徹結構化程序設計思想。l 用戶界面友好,功能明確,操作方便;可以加以其它功能或修飾。l 用戶界面中的菜單至少應包括“學生記錄輸入”、“跑步簽到”、“按學號進行排序”、“查詢”、“退出”5項。l 代碼應適當縮進,并給出必要的注釋,以增強程序的可讀性。課程設計說明書:課程結束后,上交課程設計說明書(打印稿和電子稿),其內容如下:l 封面l 課程設計任務書l 目錄l 需求分析(分析題目的要求)l 程序流程圖(總體流程圖和主
3、要功能模塊流程圖)l 核心技術的實現說明及相應程序段l 個人總結l 參考資料l 源程序及適當的注釋指導教師:_ 學生簽名:_目錄一、需求分析16二、程序流程圖16三、核心技術的實現說明及相應程序段16四、個人總結16五、參考文獻16六、源程序16一、需求分析經過對程序設計題目的分析可知,整個程序的設計實現大致分為六個模塊,其中每一個模塊對應一個函數,他們的功能分別是:學生記錄輸入函數(change),跑步簽到函數(number),按學號進行排序函數(sort),學號查詢函數(num_query),學分查詢函數(score_query)以及記錄插入函數(enter)。1、學生記錄輸入函數 主要實
4、現程序最初運行時學生數據的錄入以及其后的運行中學生數據的追加功能;2、跑步簽到函數 實現的功能是按照學號對學生的數據記錄進行添加;3、按學號進行排序函數 按照題目的具體要求實現的是學號的遞增排序以及顯示出相應的數據;4、學號查詢函數 允許按照學號對學生的數據查詢;5、學分查詢函數 允許按照學分對學生的數據查詢;6、記錄插入函數 實現的是插入新的學生數據.除上面介紹的功能之外,程序還具有退出功能,可以在程序的一次運行當中循環執行所有的功能,并根據需要終止程序的執行。每一個學生記錄都包含學號、姓名,以及簽到次數、學分.記錄類型定義為結構體類型,添加以及追加的學生信息直接寫入D的student.tx
5、t中,其他函數每次對學生記錄的訪問,其數據來源都是student.txt,這樣做不但可以保證學生數據的一致性,而且可以對學生數據進行永久保存,保證每次運行程序都可以采用原來的數據。二、程序流程圖1、程序總體結構圖當(1) 真n=1? 假學生記錄輸入函數change()真 n=2? 假跑步簽到函數number()真n=3?假學號排序sort()真n=4?假學號查詢 num_query n=5?真假學分查詢score_query n=6?真假插入記錄enter()退出2、具體功能框圖(1)學生記錄輸入 change()真 讀寫方式打開D盤文Student.txt文件不成功? 假輸出文件打開失敗a&
6、lt;=(N-b)i=b;i<(a+c);i+輸入學生數量 a輸入學生學號 num輸入學生姓名 name 輸入簽到次數 count輸入學生學分 score b+關閉文件(2) 跑步簽到 number() 輸入學生學號,按回車鍵確認 num真 讀寫方式打開D盤Student.txt文件不成功? 假returni=0;i<N;i+stui.count+;真 stui.count =20? 假stui.score+=0.5,stui.count=0;數據不變輸出數據關閉文件(3) 按學號排序 sort()調用函數真 讀寫方式打 開D盤Student.txt文件不成功? 假return真
7、stuk.num<Stuk+1.num 假數據調換數據不變i+輸出數據(4)學號、學分查詢 num_query()/score_query()輸入所查詢學生的學號或學分真 讀寫方式打開D盤Student.txt文件不成功? 假returni=0;i<N;i+輸出相應的數據(5) 記錄插入 enter()與學生信息輸入 change()基本相同.三、核心技術的實現說明及相應程序段本程序主要由六個自定義函數和一個主函數組成,其中主函數以菜單的形式調用其他函數來實現要求的所有功能。在這些函數當中,學生記錄輸入函數、跑步簽到函數、按學號進行排序函數是程序中較為核心的部分,下面分別進行說明。
8、1、學生記錄輸入函數 學生記錄輸入是在學生文件(student.txt)不存在的情況下,首先由程序創建一個新文件,并將錄入的學生信息寫入該文件當中。具體的程序段如下:void change()/*學生信息輸入*/ FILE *fp; int a,i,c; static b=0; if(fp=fopen("d:student.txt","w+")=NULL) printf("文件打開失??!n"); return; for(i=0;i<N;i+) stui.num=0; stui.count=0; stui.score=0; pri
9、ntf("n請輸入要記錄的學生數量,按回車鍵確認:"); scanf("%d",&a); c=b; if(a<=(N-b) for(i=b;i<(a+c);i+) printf("n輸入學生信息:"); printf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&stui.num); printf("n輸入學生姓名,按回車鍵確認:"); scanf("%s",); printf("n
10、輸入簽到次數,按回車鍵確認:"); scanf("%d",&stui.count); printf("n輸入學分,按回車鍵確認:"); scanf("%f",&stui.score); b+; for(i=0;i<b;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf("文件書寫錯誤 n"); fclose(fp); 2、跑步簽到函數其二是在學生文件(student.txt)已經存在的情況下,此時文件要以讀寫方式
11、或追加的方式打開,這樣才可以保證以前已經存在的數據不丟失.該函數的核心內容是簽到次數的增加和歸零以及學分的添加最終對源文件的更新。該函數執行時,首先由用戶輸入簽到學生的學號,而后按照該學號進行查找,如果文件中存在該學生的數據,則簽到次數加1,若滿20次,則簽到次數歸零,同時學分加0.5。對學生信息的改變是在結構體數組中實現的,當學生的信息被找到后,位于數組中該學生后面的學生記錄依次加1,若滿20次,則學分加0.5,次數歸零。這些操作完成后,要簽到的學生信息則改變,也就實現了簽到。在數組中更改學生信息后,還要將更改后的信息重新寫回文件當中,以保證數據的一致性。具體程序段如下:void numbe
12、r()/*跑步簽到*/ FILE *fp; int i,num; printf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&num); if(fp=fopen("d:student.txt","r+")=NULL) printf("文件打開失?。?n"); return; for(i=0;i<N;i+) fread(&stui,sizeof(struct student),1,fp); if(num=stui.num) stui.count+; if(s
13、tui.count=20) stui.score+=0.5,stui.count=0; if(stui.num!=0)for(i=0;i<N;i+)printf("n%dt%st%dt%5.1f",stui.num,,stui.count,stui.score); if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(" n文件書寫錯誤 "); fclose(fp); 3、按學分進行排序函數對于按學分進行的排序采用的排序算法是冒泡法排序,其中總分的求得是在排序的過程
14、中實現的,整個排序過程在結構體數組stu中實現,。排序函數使學生數據的排列順序發生了變化,因此也需要隊員文件進行更新,對于學生排序后名次的確定,將名次信息寫入源文件。具體的程序段如下:void sort()/*按學號排序*/ FILE *fp; int i,k,t,p; char q50; float pp; void change(); if(fp=fopen("d:student.txt","r+")=NULL) printf("文件打開失??! n"); return; for(t=0;t<N;t+) fread(&
15、stut,sizeof(struct student),1,fp); for(t=0;t<N-1;t+) for(k=0;k<N-1-t;k+) if(stuk.num>stuk+1.num) p=stuk.num; stuk.num=stuk+1.num; stuk+1.num=p; strcpy(q,); strcpy(,stuk+1.name); strcpy(stuk+1.name,q); p=stuk.count; stuk.count=stuk+1.count; stuk+1.count=p; pp=stuk.score; st
16、uk.score=stuk+1.score; stuk+1.score=pp; if(fp=fopen("d:student.txt","w+")=NULL) printf("文件打開失??!n"); return; for(i=0;i<N;i+) fwrite(&stui,sizeof(struct student),1,fp); for(i=0;i<N;i+) if(stui.num!=0) printf("n%dt%st%dt%5.1f",stui.num,,stui.co
17、unt,stui.score);四、個人總結C語言是一門既有趣又非常有用的課程,說難也不難,但是也不簡單,只要會很好的應用,便會覺得編程過程也并不感覺枯燥,當程序編完且運行成功之后,便覺得非常有成就感,雖然有時也會被一時解決不了的問題弄的焦頭爛額,但在解決的過程中逐漸的、更深的掌握這門課程的知識,所以,這一周的C語言課程設計實習的收獲是非常的大的,甚至還有一點覺得實習的時間有點短。在編程過程中,一些程序并不算是完美,甚至會出現一些錯誤.有的地方出現了一些不應該有的重復且無用的步驟,并且一些變量在一個函數中用的過于頻繁,造成不必要的煩瑣,例如跑步簽到函數number()中的變量i;至于此程序中關
18、于在答辯的時候,變量count滿20次后并未歸零的問題,我在之后在機房上機的時候程序又運行了一遍,變量count滿20次后卻又歸零了,我想可能是在答辯的時候,count=0是后加上的,但執行的程序并沒有將這句加上,還是按照原來編寫的程序執行的。五、參考文獻1 譚浩強C程序設計北京:清華大學出版社,20052 劉成等C語言程序設計實驗指導與習題集北京:中國鐵道出版社,2006六、源程序#include<time.h>#include<conio.h>#include<string.h>#include<stdio.h>#include<std
19、lib.h>#define N 20struct student int num; char name10; int count; float score; stuN;void change()/*學生信息輸入*/ FILE *fp; int a,i,c; static b=0; if(fp=fopen("d:student.txt","w+")=NULL) printf("文件打開失敗!n"); return; for(i=0;i<N;i+) stui.num=0; stui.count=0; stui.score=0;
20、 printf("n請輸入要記錄的學生數量,按回車鍵確認:"); scanf("%d",&a); c=b; if(a<=(N-b) for(i=b;i<(a+c);i+) printf("n輸入學生信息:"); printf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&stui.num); printf("n輸入學生姓名,按回車鍵確認:"); scanf("%s",); printf(&qu
21、ot;n輸入簽到次數,按回車鍵確認:"); scanf("%d",&stui.count); printf("n輸入學分,按回車鍵確認:"); scanf("%f",&stui.score); b+; for(i=0;i<b;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf("文件書寫錯誤 n"); fclose(fp); void number()/*跑步簽到*/ FILE *fp; int i,num; p
22、rintf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&num); if(fp=fopen("d:student.txt","r+")=NULL) printf("文件打開失??! n"); return; for(i=0;i<N;i+) fread(&stui,sizeof(struct student),1,fp); if(num=stui.num) stui.count+; if(stui.count=20) stui.score+=0.5,stui
23、.count=0; if(stui.num!=0)for(i=0;i<N;i+)printf("n%dt%st%dt%5.1f",stui.num,,stui.count,stui.score); if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(" n文件書寫錯誤 "); fclose(fp); void sort()/*按學號排序*/ FILE *fp; int i,k,t,p; char q50; float pp; void change(); if(f
24、p=fopen("d:student.txt","r+")=NULL) printf("文件打開失敗! n"); return; for(t=0;t<N;t+) fread(&stut,sizeof(struct student),1,fp); for(t=0;t<N-1;t+) for(k=0;k<N-1-t;k+) if(stuk.num>stuk+1.num) p=stuk.num; stuk.num=stuk+1.num; stuk+1.num=p; strcpy(q,); s
25、trcpy(,stuk+1.name); strcpy(stuk+1.name,q); p=stuk.count; stuk.count=stuk+1.count; stuk+1.count=p; pp=stuk.score; stuk.score=stuk+1.score; stuk+1.score=pp; if(fp=fopen("d:student.txt","w+")=NULL) printf("文件打開失?。"); return; for(i=0;i<N;i+) fwrite(&stui,s
26、izeof(struct student),1,fp); for(i=0;i<N;i+) if(stui.num!=0) printf("n%dt%st%dt%5.1f",stui.num,,stui.count,stui.score);void num_query()/*學號查詢*/ FILE *fp; int i,num; printf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&num); if(fp=fopen("d:student.txt","
27、r+")=NULL) printf("文件打開失敗!n"); return; for(i=0;i<N;i+) fread(&stui,sizeof(struct student),1,fp); if(num=stui.num) printf("n%dt%st%dt%5.1f",stui.num,,stui.count,stui.score); void score_query()/*學分查詢*/ FILE *fp; int i; float score; printf("n輸入學生學分,按回車鍵確認:&
28、quot;); scanf("%f",&score); if(fp=fopen("d:student.txt","r+")=NULL) printf("文件打開失??!n"); return; for(i=0;i<N;i+) fread(&stui,sizeof(struct student),1,fp); if(score=stui.score) printf("n%dt%st%dt%5.1f",stui.num,,stui.count,stui.scor
29、e); void enter()/*記錄插入*/ FILE *fp; int a,i,c; static b=0; if(fp=fopen("d:student.txt","w+")=NULL) printf("文件打開失敗!n"); return; printf("n請輸入要記錄的學生數量,按回車鍵確認:"); scanf("%d",&a); c=b; if(a<=(N-b) for(i=b;i<(a+c);i+) printf("n輸入學生信息:"); printf("n輸入學生學號,按回車鍵確認:"); scanf("%d",&stui.num); printf("n輸入學
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國可重復使用防護面罩行業市場全景分析及前景機遇研判報告
- 四川省廣安市2025年中考英語真題附答案
- 看誰算得巧(教學設計)-2024-2025學年四年級下冊數學滬教版
- 2025年中國可降解PLA吸管行業市場全景分析及前景機遇研判報告
- 中國防護文胸行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 展柜設計培訓課件
- 2025年中國鉤螺栓行業市場發展前景及發展趨勢與投資戰略研究報告
- 中國深紅硫銻銀礦行業調查建議報告
- 2025年 浙江省考行測考試試題附答案
- 中國數模轉換器行業市場全景監測及投資前景展望報告
- 律師事務所業務操作規程
- Q∕SY 05267-2016 鋼質管道內檢測開挖驗證規范
- (完整版)道路交通事故現場圖繪制課件
- 英語四級閱讀練習及答案
- 水系沉積物地球化學測量1
- 成敗歸因理論PPT課件
- 湘魯版六年級下冊期末英語試卷
- 汽車標準件手冊
- (完整版)綠色施工管理體系與管理制度
- 報銷明細匯總表
- 塊狀物品推送機機械原理課程設計
評論
0/150
提交評論