




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
學 院班 級學 號姓 名目錄1 摘要31.1 設計題目31.2 設計內容31.3 開發(fā)工具31.4 應用平臺32 詳細設計32.1 程序結構32.2 主要功能32.3 函數(shù)實現(xiàn)32.4 開發(fā)日志43 程序調試及運行43.1 程序運行結果43.2 程序使用說明43.3 程序開發(fā)總結44 附件(源程序)4/*在后面的文檔編寫中,請你不要修改各個標題的內容,從而確保報告內容和風格一致。完成全部內容后,你只需要在上面的目錄上右鍵“更新域”,選擇“只更新頁碼”就可以更新正確的目錄頁碼。注意:目錄的左邊距為6.5厘米。*/1 摘要1.1 設計題目學成績管理程序1.2 設計內容為了便于對學生星系進行管理,這里設計了學生信息管理程序。該程序主要通過對鏈表的相關操作運用菜單的形式實現(xiàn)對學生基本信息的管理。首先用戶要輸入三個學生的基本信息,程序即據(jù)此建立了一個有三個學生的鏈表,每個結點包括學號、姓名、3門課的成績(英語、數(shù)學、計算機,其中成績精確到小數(shù)點后兩位)。菜單為: 1顯示。(即顯示所建立的鏈表及當前鏈表內容) 2排序。(即將用戶所輸入的學生信息按學號大小對原有鏈表內容進行排序,并將經排序所產生的新鏈表展示給用戶) 3插入。(用戶根據(jù)需要可增加原鏈表中學生的數(shù)量,輸入一個學生的基本信息,即將其插入原鏈表中,且新鏈表按學號有序排列并展現(xiàn)給用戶) 4查找。(輸入一個學號,輸出各種成績) 5刪除。(輸入一個學號,從鏈表中刪除該學生,并展示新鏈表) 6統(tǒng)計。(若按1,則輸入該學生的學號統(tǒng)計該學生的總分及平均分;若按2,則輸入課程(1.英語 2.數(shù)學 3.計算機)求該門課程的總分及平均分) 7存盤。(將建立起來的鏈表以文件的形式存儲) 8讀入。(將原來已將存盤的文件讀入內存,進行管理)1.3 開發(fā)工具Visual C+ 6.0和Win32。1.4 應用平臺Windows XP/Vista 32位2 詳細設計2.1 程序結構程序的流程:該程序首先定義了一個記錄學生基本信息的結構體,和全局變量鏈表的頭指針“*head”,自定義了13個函數(shù),然后是主函數(shù)通過調用以上自定義函數(shù)來實現(xiàn)程序的功能。這樣做的好處是,在調用自定義函數(shù)時不必再對其申明。主函數(shù)第一行首先在程序運行界面中央輸出“歡迎進入學生管理”,接著是輸出“按回車鍵進入”(在界面中央),以提醒用戶進一步操作程序。按回車鍵后程序執(zhí)行創(chuàng)建鏈表函數(shù)(create(),這時出現(xiàn)界面需要用戶輸入三個學生的基本信息,按回車鍵后創(chuàng)建成功,同時進入while循環(huán)體。該循環(huán)提以“system(cls)”開始,作用是在每次循環(huán)結束進入下一次循環(huán)時對上一次循環(huán)的運行結果進行清除,以保證本次循環(huán)的結果能清晰展示。該循環(huán)第二行執(zhí)行函數(shù)“printfmenu()”,輸出當前鏈表內容。接著進入菜單選擇界面,此時需輸入數(shù)字(08)進行菜單選擇。若輸入8,該循環(huán)結束;否則繼續(xù)。然后執(zhí)行菜單選擇函數(shù),用戶通過菜單上執(zhí)行不同的操作調用不同的函數(shù)。執(zhí)行完菜單函數(shù)后,按回車鍵本次循環(huán)結束,并進入下一次循環(huán)。循環(huán)結束后,又一次執(zhí)行清屏程序,最后輸出“謝謝使用,愿你開心度過每一天”字樣,至此整個程序結束。自定義函數(shù):一、顯示菜單函數(shù):void printfmenu()。用輸出管理菜單:. 顯示. 排序. 插入. 查找. 刪除. 統(tǒng)計. 存盤. 讀入. 結束二、鏈表輸出函數(shù):void printfform()。用來將已經創(chuàng)建鏈表或當前所建鏈表進行輸出顯示。三、鏈表創(chuàng)建函數(shù):void create()。該函數(shù)用來創(chuàng)建一個動態(tài)鏈表,期間需要用戶輸入學生基本信息。四、排序函數(shù):void arrange()。該函數(shù)用來對所創(chuàng)建的鏈表或當前存在的鏈表中的結構體按學號遞增排序。排序結束調用“鏈表輸出函數(shù)”,將新產生的鏈表進行輸出。五、插入函數(shù):void insert()調用該函數(shù)時,由用戶輸入一個學生的信息,將產生一個新的結構體,并將其按學號插入當前鏈表中。調用鏈表輸出函數(shù),將新鏈表輸出。六、查找函數(shù):void find()。輸入一個學號,將鏈表中該學生的信息輸出。若鏈表中無該學號,則輸出“未找到”。七、刪除函數(shù):void delet()。輸入一個學號,將鏈表中該學號學生信息刪除,并調用鏈表輸出函數(shù)將刪除后的鏈表輸出。若輸入學號不存在,輸出“未找到”。八、按學生統(tǒng)計函數(shù):void studentcount()。輸入一個學號,計算該學號學生的總分和平均分并輸出。若學號不存在,輸出“未找到”。九、按科目統(tǒng)計函數(shù):void subjectcount()。輸入一個科目序號(.英語.數(shù)學.計算機),計算該科目的總分和平均并輸出。十、統(tǒng)計函數(shù):void count()。當輸入,調用“按學生統(tǒng)計函數(shù)”;當輸入,調用“按科目統(tǒng)計函數(shù)”。分別進行統(tǒng)計操作。十一、存盤函數(shù):void save()。將鏈表中的內容以文件的形式存放在磁盤中。十二、讀入函數(shù):void read()。將已經存盤的文件讀入內存,進行管理。十三、選擇菜單函數(shù):void menu(char t)。主函數(shù)輸入實參變量t,該函數(shù)通過選擇判斷調用以上函數(shù)來實現(xiàn)該程序的管理功能。參數(shù)傳遞:該程序包括主函數(shù)總共有14個函數(shù),只有選擇菜單函數(shù)是有參函數(shù),其他均是無參函數(shù)。選擇菜單函數(shù)運用switch選擇結構,形參的傳遞用來選擇執(zhí)行調用相應的菜單功能函數(shù)。如從主函數(shù)輸入1,主函數(shù)調用該函數(shù),并把1傳遞給該函數(shù),該函數(shù)則調用“排序函數(shù)”執(zhí)行菜單中的排序操作。2.2 主要功能程序功能:1、該程序主要用來對數(shù)量較少的學生基本信息進行管理(初始學生數(shù)為三)。 2、顯示輸入的學生基本信息。 3、對學生按學號進行排序、,并將信息以鏈表的形式進行保存。 4、可通過插入操作增加所要處理的學生信息數(shù)量。 5、顯示所要查找的學生的基本信息。 6、刪除不必要的信息。 7、統(tǒng)計學生成績的相關數(shù)據(jù),總分和平均分。 8、將經過處理的信息存盤管理。 9、以文件的形式將以存盤信息讀入內存進行管理。原理和方法:1、該程序的要通過對鏈表進行操作來實現(xiàn)管理。 2、用循環(huán)結構和指針對已存在鏈表輸出顯示,調用輸出函數(shù)“printf”。 3、排序時先把鏈表中的學好數(shù)據(jù)存放在一位數(shù)組中,再用選擇排序法對數(shù)組中的元素排序,最后用while循環(huán)結構把數(shù)組中的元素與結構體逐一配對,從而實現(xiàn)對鏈表的排序。 4、先用while找到插入位置,然后是鏈表的插入操作。 5、while循環(huán)執(zhí)行查找操作。 6、while循環(huán)找到刪除對象,鏈表的刪除操作。 7、while循環(huán)找到操作對象,在執(zhí)行相應操作。 8、文件的存儲。 9、文件的讀取。2.3 函數(shù)實現(xiàn)函數(shù)主要運用了while、do。while、for循環(huán)結構,還有選擇排序法。函數(shù)大多為無參類型,自函數(shù)之間有少量調用。如排序、插入、刪除、統(tǒng)計等函數(shù)都是較為簡單的函數(shù),只需根據(jù)醫(yī)學知識稍加修改即可。數(shù)據(jù)結構方面,主要事項是函數(shù)調用,主函數(shù)調用菜單函數(shù),菜單函數(shù)又調用其它類型函數(shù),其他自定義函數(shù)之間也有調用。2.4 開發(fā)日志關于該程序的設計,首先根據(jù)題目的要求考慮實現(xiàn)該函數(shù)所需的函數(shù)??紤]把自定義函數(shù)放在整個程序的前面,這樣在主函數(shù)調用時就不必再對其進行申明。比如必須的一些基本函數(shù)鏈表輸出函數(shù)、鏈表創(chuàng)建函數(shù)、鏈表排序函數(shù)、查詢函數(shù)、鏈表刪除函數(shù)、統(tǒng)計函數(shù)等,先把這些基本函數(shù)建立起來之后,程序的整體結構??紤]到程序的整體結構通過函數(shù)調用來實現(xiàn)較為方便,由此增加設計了一些函數(shù),如鏈表輸出函數(shù)、顯示菜單函數(shù)、存盤函數(shù)、讀入函數(shù)等。函數(shù)的的創(chuàng)建過程實在是一個繁瑣的工作,編譯時常要去翻看課本去查找已經遺忘的C語言的相關語法知識,特別是一些細節(jié)上的設計,更不敢輕易放過。如轉義字符“t”的使用回事程序界面更加美觀整潔好看,期間也對結構體鏈表的知識作了較好的復習掌握。在做到排序函數(shù)時突然忘了選擇排序法的算法,于是通過查資料對其進行了重新的掌握,其中插入函數(shù)的算法較為復雜,通過分析發(fā)現(xiàn),須先查找然后再插入,查找的算法編號之后,后面的統(tǒng)計、刪除函數(shù)也就迎刃而解了。調試的過程是最令人糾結的,覺得完好的程序卻總是調不出來,經過復雜的心理腦力斗爭最終發(fā)現(xiàn)卻總是一些不該有的失誤,而不是算法上問題。調試的過程是用時最長的,同時也磨練了我的耐性,讓我對頻頻出現(xiàn)的錯誤更加理智、更加淡定、更加耐心。而且在調試的過程中也積累了一些常見的錯誤經驗,對部分調試的錯誤能大體上感知其錯誤的原因及位置。影響最深的是對排序函數(shù)的調試,指針數(shù)組的地址代碼寫錯導致程序運行時不能讀入,還有創(chuàng)建鏈表函數(shù)出現(xiàn)的問題,輸入函數(shù)多打了幾個“%lf”導致鏈表創(chuàng)建時出現(xiàn)亂碼。程序的整體結構設計參考了“C語言課程設計”一書,再次申明??傊?,程序的運行過程看是簡單,作用也非常單一,但對于像我這樣的智商不是很高的初學者而言,編程、調試過程是相當?shù)钠D辛與繁瑣,其間個中滋味,汗水、辛酸只能把它埋在心底。3 程序調試及運行3.1 程序運行結果程序開始運行界面程序運行過程界面如下:程序結束界面:3.2 程序使用說明該程序較為簡單,根據(jù)程序運行時的提示即可完成操作。在第一次進行顯示操作時,需按兩次0才能顯示所建鏈表。在完成一次菜單操作后,應按回車鍵返回主菜單。3.3 程序開發(fā)總結大作業(yè)的編寫,是一個對所學知識綜合應用的過程,也是對所學知識掌握情況的檢驗過程,更是對所學知識系統(tǒng)復習的過程。其間涉及除程序設計外多方面技能應用,能夠很好訓練一個人的整體思維能力,體現(xiàn)其綜合素質。同時在完成作業(yè)的過程中,也讓我體驗了當一個程序員的神奇感受。當然我編的程序很簡單,用途也很有限,其實就當前的程序來看根本沒什么實際用途。但是設計工作的過程還是讓我體會到了其艱辛其難度,編完之后油然而生的小小成就感是相當美妙的。在編程設計過程中遇到過很多問題和困難,也讓我深刻認識到自己知識的欠缺,感受到自己離一個真正的程序設計人員的差距還是相當之遠,自己還有很多只是要學習和掌握。更重要的是過程激發(fā)了我對計算機編程的興趣,雖然這門課程即將結束,當我想我對其的學習與熱愛絕不會停止。限于本人智商和時間的原因,該程序存在一定的缺陷和一些需要完善提高的地方,現(xiàn)在此處指出如下:1、在鏈表的創(chuàng)建上,包含的信息量較少,僅有三個學生,其實據(jù)此方法可適當增加學生數(shù)量,以增強程序的實用性。2、再刪除操作上,僅有對單個學生的刪除功能,缺乏相應的全部刪除功能,限于時間的原因未能增加。3、在對學生信息處理上,功能較少,缺乏最高分最低分的統(tǒng)計以及對于程序的排序。4、在統(tǒng)計功能的程序設計上,在選擇完成一種統(tǒng)計操作后,程序即回到主菜單而不能回到統(tǒng)計界面繼續(xù)進行統(tǒng)計操作,此不足之處未能改善。 當然通過對大作業(yè)的撰寫,打字水平也有了較大的提高??傊?,完成大作業(yè),無論是思想上、能力上還是知識上都有了較大的飛躍,各方面都受益匪淺。4 附件(源程序)#include #include #include struct studentlong num;char name80; double score3;struct student *next;struct student *head; /定義全局變量head,各個函數(shù)中均可用#define LEN sizeof(struct student)struct student *stu;void printfmenu() /將菜單列出函數(shù)printf(tttt0.顯示n);printf(tttt1.排序n);printf(tttt2.插入n);printf(tttt3.查找n);printf(tttt4.刪除n);printf(tttt5.統(tǒng)計n);printf(tttt6.存盤n);printf(tttt7.讀入n);printf(tttt8.結束n);void printfform() /用于每次將鏈表列出struct student *p;printf(t學號t姓名t數(shù)學成績t英語成績t計算機成績n);p=head;if(head!=NULL)doprintf(t%ldt%s t%.2f t%.2f t%.2fn,p-num,p-name,p-score0,p-score1,p-score2);p=p-next;while(p!=NULL);else return;void create() /創(chuàng)建三人構成的初始表int i=0,j,k;struct student *p1,*p2;char name1380;long num13;double score133;head=p1=p2=(struct student *)malloc(LEN);printf(請輸入3個所要處理的學生信息,包括學號、姓名,英語、數(shù)學、計算機的成績n); /賦予三個學生的信息for(k=0;k3;k+)scanf(%ld%s,&num1k,name1k);for(j=0;j3;j+)scanf(%lf,&score1kj); while(inext=p1;p1-num=num1i;strcpy(p1-name,name1i);for(j=0;jscorej=score1ij;p2=p1;if(i=2)p1-next=NULL; /鏈表結束else p1=(struct student *)malloc(LEN); /開辟一個新的單元i+;void arrange() /排序函數(shù)void printfform();struct student *p1,*p2,*p3;long s3;p2=p1=head;int i,j,t,k;for(i=0;inum;p1=p1-next;for(i=0;i3;i+)k=i;for(j=i+1;jsj)k=j;if(k!=i)t=sk;sk=si;si=t;for(i=0;inum!=si&p2!=NULL)p2=p2-next;pi=p2;p2=head;head=p0;p0-next=p1;p1-next=p2;p2-next=NULL;printfform(); void insert() /插入函數(shù)struct student *p0,*p1,*p2;char t;printf(溫馨提示:需要進行排序后才可進行插入,輸入9返回主菜單,按回車鍵繼續(xù)n);t=getchar();if(t=9) return;printf(請輸入要插入的學號,姓名,數(shù)學成績,英語成績,計算機成績n);stu=(struct student *)malloc(LEN); scanf(%ld%s%lf%lf%lf,&stu-num,stu-name,&stu-score0,&stu-score1,&stu-score2); p0=stu; /p0指向要插入的節(jié)點p1=head; /p1指向首節(jié)點while(p0-nump1-num)&(p1-next!=NULL) /找插入位置p2=p1;p1=p1-next;if(p0-numnum)if(head=p1) /插入到第一個節(jié)點前head=p0;elsep2-next=p0;p0-next=p1;else /插入到最后一個節(jié)點后p1-next=p0;p0-next=NULL;printfform(); /顯示鏈表void find() /查找函數(shù)struct student *p1;long num1;p1=head;printf(請輸入要查找的學號);scanf(%ld,&num1);while(p1!=NULL)if(p1-num=num1)printf(t學號t姓名t數(shù)學成績t英語成績t計算機成績n);printf(t%ldt%s t%.2f t%.2f t%.2fn,p1-num,p1-name,p1-score0,p1-score1,p1-score2);break;p1=p1-next;if(p1=NULL)printf(未找到);void delet() /刪除指定學號的函數(shù)long num;struct student *p1,*p2;p1=head;printf(請輸入要刪的學生的學號); scanf(%d,&num);while(num!=p1-num&p1-next!=NULL) /p1指向的不是所要的節(jié)點,并且后面還有節(jié)點p2=p1;p1=p1-next;if(num=p1-num) /找到了if(p1=head) /對首節(jié)點特殊處理head=p1-next;else p2-next=p1-next;printfform();elseprintf(學號為%ld的同學未找到n,num);void studentcount() /按學生統(tǒng)計函數(shù)double aver,zong;struct student *p1; long num;printf(請輸入學號);scanf(%ld,&num);p1=head;while(p1!=NULL)if(p1-num=num) zong=p1-score0+p1-score1+p1-score2;aver=zong/3;printf(學號為%ld的總分=%.2f,平均分=%.2f,p1-num,zong,aver);break;p1=p1-next;if(p1=NULL)printf(未找到);void subjectcount() /按科目統(tǒng)計函數(shù)double aver,zong=0;struct student *p1;int i,n=0;printf(t請選擇科目(13);printf(t1.數(shù)學);printf(t2.英語);printf(t3.計算機);scanf(%d,&i);p1=head;while(p1!=NULL)zong=zong+p1-scorei-1;n+;p1=p1-next;aver=zong/n;printf(該科目的總分=%.2f,平均分=%.2f,zong,aver);void count() /統(tǒng)計函數(shù)int t;printf(tt1.求學生總分平均分ntt2.求科目總分平均分n);printf(請輸入); scanf(%d,&t);switch(t) case 1:studentcount();break; case 2:subjectcount();break;void save() /存盤函數(shù)FILE *fp;struct student *p1;p1=head;if(fp=fopen(score.dat,wb)=NULL) /不能打開時 printf(Cannot open file); exit(1); while(p1!=NULL)fwrite(p1,LEN,1,fp);p1=p1-next;fclose(fp);printf(已存到c:/score.dat);void read() /讀入函數(shù)FILE *fp;struct student *p1,*p2;char filename80; p1=p2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 派送花束活動方案
- 醫(yī)院質量管理目標體系構建與實施路徑
- 2025屆邢臺市柏鄉(xiāng)縣三上數(shù)學期末考試模擬試題含解析
- 行政管理經濟法概論試題及答案集錦
- 2025年中級經濟師復習重點試題及答案
- 掌握公共關系學的思維方式試題及答案
- 2025年市政工程項目實踐試題及答案
- 防范惡劣天氣安全教育
- 林業(yè)有害生物防治協(xié)議
- 心理學社會現(xiàn)象分析試題集
- 【課件】第13課宗教的象征-歐洲中世紀美術課件-高中美術人教版(2019)美術鑒賞
- 田家炳先生課件
- 紅金大氣商務風領導歡迎會PPT通用模板
- 最新高考前20天勵志主題班會課件
- 《現(xiàn)代管理學》全套課件
- 地下水環(huán)境影響評價工作分級與技術要求
- DB64-T 1686-2020 風電場專業(yè)氣象服務規(guī)程-(高清可復制)
- 動物生物技術(課件)
- 個人有關事項報告表(全)
- 廣東省中山市2021-2022學年八年級下學期期末水平測試道德與法治試卷
評論
0/150
提交評論