C語言學生信息管理系統(tǒng)報告附有完整代碼_第1頁
C語言學生信息管理系統(tǒng)報告附有完整代碼_第2頁
C語言學生信息管理系統(tǒng)報告附有完整代碼_第3頁
C語言學生信息管理系統(tǒng)報告附有完整代碼_第4頁
C語言學生信息管理系統(tǒng)報告附有完整代碼_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、程序設計報告(2009/2010學年 第 二 學期)題目:簡單學生信息管理專業(yè)軟件工程(NHT)學生姓名*班級學號*指導教師*指導單位軟件學院日期2010-4-23評分項成績評遵守機房規(guī)章制度(5分)上機時的表現(xiàn)(5分)學習態(tài)度(5分)分程序準備情況(5分)程序設計能力(10分)團隊合作精神(5分)細課題功能實現(xiàn)情況(10分)算法設計合理性(10分)用戶界面設計(10分)則報告書寫認真程度(5分)內(nèi)容詳實程度(10分)文字表達熟練程度(10分)回答問題準確度(10分)簡 短 評 語教師簽名:年月日評分等級i評分等級有五種:優(yōu)秀、良好、中等、及格、不及格學生管理系統(tǒng)一、課題內(nèi)容和要求1、系統(tǒng)的基

2、本功能實現(xiàn)學生信息的錄入、查詢和更新。2、要求(1)從鍵盤上錄入學生資料,并保存到文件中。學生資料文件中的數(shù)據(jù)記錄不得少于30 條。相關數(shù)據(jù)要求格式如下:學生資料文件存放了學號、姓名、性別、出生日期、A課程成績、B課程成績、C 課程成績格式如下:J051001 張三女19870201808277B051002 李四女 19870301 80 80 80J051003 王二男19870401858080O O O O O(2)可以隨時補錄學生資料。(3)能夠按照不同的條件查詢學生信息,并顯示在屏幕上。a)按學號排序b)按姓需排序C)按單科總分排序d)按學號查找學生各門課成績和平均分數(shù)e)按姓名查

3、找學生各門課成績和平均分數(shù)f)按學生總分排序g)查詢各門課程的平均分數(shù)二、需求分析需要設計并實現(xiàn)一個綜合的學生信息管理系統(tǒng),要求系統(tǒng)能實現(xiàn)以下功能:錄入、查詢 和更新學生信息,并保存到文件中;學生資料文件中的數(shù)據(jù)記錄不得少于30條:可以隨 時補錄學生資料;可以按學號排序、按姓名排序、按單科總分排序、按學號查找學生各門 課成績和平均分數(shù)、按姓名查找各門課成績和平均分數(shù)、按學生總分排序、實現(xiàn)各門課程 的平均分數(shù)。根據(jù)題目要求的功能,用結(jié)構(gòu)化程序設計的思想,將系統(tǒng)分成5大功能模塊:顯示基本 信息、基本信息管理、學生成績管理、根據(jù)條件排序、根據(jù)條件查詢?!帮@示基本信息” 模塊實現(xiàn)了學生基本信息的顯示;

4、“基本信息管理”模塊實現(xiàn)了 “插入學生記錄”、“刪除 學生記錄”以及“修改學生記錄”功能;“學生成績管理”模塊實現(xiàn)了 “計算學生總分”、 “計算學生名次”、“計算三門課程平均分”以及“計算各門課程的平均分數(shù)”功能;“根 據(jù)條件排序”模塊實現(xiàn)了 “按學號排序”、“按姓名排序”、“按A課程成績排序”、“按B課 程成績排序”、“按C課程成績排序”以及“按學生總分排序”功能;“根據(jù)條件查詢”模 塊實現(xiàn)了 “按學號查找學生各門課成績和平均分數(shù)”和“按姓名查找學生各門課成績和平 均分數(shù)”功能。為此需要設計一個比較綜合的系統(tǒng)來體現(xiàn)“自頂向下、逐步細化、模塊化”的思想。而 為了在學生管理系統(tǒng)中體現(xiàn)結(jié)構(gòu)化的程序

5、設計思想,需要在系統(tǒng)釆用多個文件多個函數(shù)來 實現(xiàn)功能,通過對功能的逐步細化使得最終的每一個函數(shù)都完成一個非常具體乂簡單的功 能。而且每一個函數(shù)在設計時要充分考慮好入口(形參)與出口的設置(函數(shù)返回值), 這是保證每個模塊相對獨立乂能為其他模塊合理使用的前提。系統(tǒng)應通過流程控制組織, 分層調(diào)用各個函數(shù),完成整個系統(tǒng)預期的任務。三、概要設計學生管理系統(tǒng)設計流程圖如下:根據(jù)題目要求,一個學生信息包含:學號、姓名、性別、3門課的成績、總分、各科 成績平均分、所有學生單科平均分以及名次。顯然,將不同類型的成員作為同一個變量的 不同成分來存儲,必須用結(jié)構(gòu)類型來定義。而管理系統(tǒng)顯然要處理一批學生的信息,鑒于

6、書本定義了以Type類型為數(shù)據(jù)域成分的結(jié) 點類型,學生信息在內(nèi)存中以單鏈表形式存放。完整定義如下:struct Studentchar numL10;char name20;char sex10;char birthday10;int score3;int total, rank;double aver, average;typedef struct Student Type;const int sizeStu二sizeof (Type);struct nodeType data;struct node *next;const int size二sizeof(struet node);由以上定

7、義,結(jié)點含有兩個域,即數(shù)據(jù)域data,其所屬類型為Type,指針域next。這里 的Type類型是struct Student類型的別名,是一個結(jié)構(gòu)體類型。這樣定義的好處是對于 各種關于單鏈表的操作此時同樣適用。當數(shù)據(jù)成員的類型發(fā)生變化時,只需要到該文件中 進行相應的修改,使Type成為新的數(shù)據(jù)成員類型的別名,結(jié)點類型struct node類型的 定義都無需修改。對鏈表而言,其結(jié)點永遠只含有兩個成員:Type類型的data成員和 struct node*類型的 next 成員。四、詳細設計學生管理系統(tǒng)釆用了兩級菜單四層函數(shù)實現(xiàn),充分考慮模板的合理劃分,代碼的可重 用性,完整的程序由 5 個文件

8、組成:(1) node, h (2)Prepare, h (3)file, h (4) list, h (5)B09050329.c而文件(5) B09050329. c是系統(tǒng)實現(xiàn)的最主要的文件。所有的菜單都是通過定義函數(shù),并被其他函數(shù)調(diào)用后實現(xiàn)的。根據(jù)操作時顯示的順序, 5個菜單分為兩級。兩級菜單的使用提高了人機交互性,而且同一菜單可多次選擇在結(jié)束, 操作更便捷靈活。系統(tǒng)中各個菜單的具體信息菜單-級菜單二級菜單(1)二級菜單(2)二級菜單(3)三級菜單(4)函數(shù)名menu ();menuBase ();menuScore ();menuSort ();menuSearch ();對應功能模塊

9、學生信息管理系統(tǒng)基本信息管理學生成績管理根據(jù)條件排序根據(jù)條件查詢調(diào)用mainbaseManagescoreManagesortManagesearchManage函數(shù)函數(shù)函數(shù)函數(shù)函數(shù)函數(shù)1、首先執(zhí)行文件打開操作,調(diào)用函數(shù)readFile(),如果原始文件不存在,則調(diào)用函數(shù) createFile()創(chuàng)建文件,輸入初始的學生信息:其中包括學生的姓名、學號和性別以及學生 的三門課程成績等相關信息;其中調(diào)用函數(shù)Insert ()函數(shù)。判斷原始文件不存在的關鍵代碼如下:if(fp=fopen(student. txt, rb)=NULL)printf(can not open file!n);exit(

10、0);如果原始文件存在,則讀出文件中第一條記錄,并在文件未結(jié)束時按學號順序循環(huán)將學生 記錄插入鏈表,在讀出下一條記錄,其關鍵代碼如下:fread (&data, sizeStu, 1, fp);while(!feof(fp)head=Insert (head, data, 1);printf(n);fread (&data, sizeStu, 1, fp);如果原始文件不存在,則調(diào)用函數(shù)createFileO創(chuàng)建文件并循環(huán)將讀入的記錄寫入文件, 部分關鍵代碼如下: readNode(&data);while (!endWith(data)fwrite (&data, sizeStu, 1, f

11、p);readNode(&data);fclose (fp);2、進入一級菜單,調(diào)用dowhile語句可以實現(xiàn)多次進入一級菜單,調(diào)用一級菜單函 數(shù)menu()顯示一級菜單,輸入一級菜單選擇項,如果輸入的數(shù)據(jù)在可能選項內(nèi),調(diào)用 runMainO函數(shù)完成系統(tǒng)功能。runMain()函數(shù)采用switchcase語句根據(jù)選擇執(zhí)彳亍各個模 板功能(顯示基本信息模塊、基本信息管理模塊、學生成績管理模塊、根據(jù)條件排序模塊、 根據(jù)條件查詢模塊),此時要充分考慮好入口(形參)與出口的設置(函數(shù)返回值),保 證其相對獨立乂能為其他模塊合理使用。3、顯示基本信息模塊:先調(diào)用表頭函數(shù)printHeadO輸出表頭,調(diào)用

12、printList (head) 函數(shù)來執(zhí)行鏈表的遍歷,并在其中調(diào)用printNode (p-data);來輸出學生信息,包括總分 和平均分。其關鍵代碼如下:for (p=head;p;p=p-next) /p從頭指針開始,每循環(huán)一次向后移動1節(jié)點的位置printNode (p-data) ;/p非空時執(zhí)行循環(huán)體,調(diào)用printNode函數(shù)輸出節(jié)點的元素值,最后換行printf(n);3基本信息管理模塊:可用baseManage (head)函數(shù)來實現(xiàn),并調(diào)用menuBase ():顯示二 級菜單。d&wh訂e語句和switchcase語句的嵌套使用,使程序逐步細化,且更人性化, 便于終端用戶

13、使用。readNode (&data);和Insert (head, data, 1);的使用執(zhí)行了學生信息 的插入功能。 Delete (head, data);函數(shù) 執(zhí)行了學生信息的刪除, SearchNode (head, data, 1);函數(shù)執(zhí)行了學生信息的修改。此時充分體現(xiàn)了單鏈表的優(yōu)越 性。Insert (head, data, 1);函數(shù)的關鍵代碼如下:struct node*p, *p2;p2二head;p= (struct node*)malloc (size) ;/利用指針p申請結(jié)點動態(tài)空間p-data二data;/數(shù)據(jù)域賦值p-next=NULL;/指針域直接賦值為空,

14、以后根據(jù)插入位置再修改 if (head二二NULL) /原鏈表為空時的插入head二p; /新插入的結(jié)點為頭結(jié)點p2=p;return head;p2-next=p; /p2作為p的后繼結(jié)點,即p插在pl和p2之間return p2;Delete (head, data);函數(shù)的關鍵代碼如下:辻(p)/如果找到要刪除的結(jié)點pif(q)/如果刪除的不是第一個結(jié)點q-next=p-next: /修改q的next域,使p的后繼成為q的后繼 else/如果刪除的不是第一個結(jié)點head二head-next; /修改 head 指針free(p) ;/釋放指針p所指向的結(jié)點空間SearchNode (h

15、ead, data, 1):函 數(shù) 關 鍵 代 碼 如 下while (p&! equal (p-data , data, condition) /equal 用來判斷兩個參數(shù)是否相等/當P非空且當前結(jié)點的數(shù)據(jù)值不等于要搜索的值data時p=p-next ;/指針p順著鏈向后移動一個位置辻(p)return p;/循環(huán)停止時p非空,表示找到了結(jié)點,返回指針P4、學生成績管理模塊:通過調(diào)用scoreManage ()函數(shù)來實現(xiàn),仍然使用doThile語句 和switchcase語句,調(diào)用menuScore ();顯示二級菜單。表頭函數(shù)printHead ():輸出表 頭,執(zhí)行了 “計算學生總分”

16、的關鍵代碼如下:for (p二head;p;p=p-next) (p-data). total=0;for(i=0;idata). total+=(p-data). scorei;printNode(p-data );“計算學生名次”調(diào)用了 rankCalculate(head);函數(shù)的關鍵代碼如下:for (p=head;p:p=p-next, count+) /head鏈是按學號排序的,逐個讀出學生記錄 head2=Insert0rder (head2, p-data, 2) ; /依次將學生記錄依總分由低到高 建鏈表head2rankprintHead () ;/輸出表頭for (p=h

17、ead2; p; p=p-next)/再依次訪問 head2 鏈中的結(jié)點current卄;/每掃描到一個結(jié)點計算器current加1q=SearchNode (head, p-data, 1) ;/對head2中當前結(jié)點依學號在head鏈中找到(q-data). rank=countcurrent+l; /對 head 鏈中名次進彳亍修改return head;“計算三門課程平均分”調(diào)用averMark(head);函數(shù),其關鍵代碼如下:for (p二head;p;p=p-next)double m=0;for(i=0;idata). scorei;(p-data). aver=m/3. 0;

18、averprintNode (p-data) ;/輸出記錄printf(n);“計算各門課程的平均分數(shù)”調(diào)用average (head, aver);函數(shù),其關鍵代碼如下:int i,count=0;for (p二head;p;p=p-next)count+;/count用來統(tǒng)計總?cè)藬?shù)for(i=0;idata) . score i ;/averi中存放的是某門課的和for(i=0;inext, count+) /head鏈是按學號排序的,逐個讀出學生記錄 head2=Insert0rder (head2, p-data, 2) ; /依次將學生記錄依總分由低到高建鏈表head2 rankpr

19、intHead();for (p=head2;p;p=p-next) 再依次訪問head2鏈中的結(jié)點current+; /每掃描到一個結(jié)點計算器current加1q=SearchNode (head, p-data, 1) ;/對head2中當前結(jié)點依學號在head鏈中找到(q-data) . rank=countcurrent+l: /對 head 鏈中名次進行修改 rankprintNode (p-data) ;/輸出記錄printf (nn);InsertOrder (head2, p-data, 2);的部分關鍵代碼如下:struct node*p, *pl, *p2;p2二head;

20、p= (struct node*)malloc (size) :/利用指針p申請結(jié)點動態(tài)空間p-data=data;/數(shù)據(jù)域賦值p-next=NULL; 指針域直接賦值為空,以后根據(jù)插入位置再修改 辻(head二二NULL)/原鏈表為空時的插入head二p; /新插入的結(jié)點為頭結(jié)點return head;while (p2&larger (p-data, p2-data, condition) /第一參數(shù)大 J-第二參數(shù),返回真pl二p2;/pl是p2的前趨結(jié)點,二者同時后移p2二p2-next;if (head二二p2) 前插入,修改head指針head二p;else /否則p插在pl的后面

21、pl-next二p;p-next二p2;在函數(shù) InsertOrder(head2, p-data, 2); 中又調(diào)用了調(diào)用了函數(shù) larger (p-data, p2-data, condition),這是通過比較確定參數(shù)的函數(shù),關鍵代碼如下: if (condition二二1)if (strcmp (datal. num, data2. num) =0)/比較學號return 1;else return 0;if (condition二二2)if (strcmp (datal. name, data2. name) =0)/比較姓名return 1;else return 0;else i

22、f(condition二二3)return datal. scoreldata2 scoreEl;else if(condition二二4)return datal. score2data2 score2;else if(condition二二5)return datal. score3data2 score3;else if(condition二二6)return datal. totaldata2total;return 1;6、根據(jù)條件查詢模塊:通過函數(shù)searchManage ():分級調(diào)用函數(shù),函數(shù)menuSearch (): 顯示二級菜單,通過輸入項選擇調(diào)用函數(shù)來完成根據(jù)姓名查詢與

23、根據(jù)學號查詢。關鍵代碼: if (choice二1&choicedata) ;/輸出記錄printf rnn);elseprintf (,znit is not in the listnn) ; /如果沒有找到,輸出提示信息 函數(shù)sort_printHead():執(zhí)行輸出表頭的功能,函數(shù)sort_printNode ();實現(xiàn)了輸出記錄 的功能。而最主要的是函數(shù)SearchNode ();其關鍵代碼:辻(head二二NULL)/如果鏈表原來就為空,輸出提示信息并返回空指針printf(nNo Recordsn);return 0;while(p&!equal(p-data ,data, con

24、dition)/equal 函數(shù)用來判斷兩個參數(shù)是否相等當P非空且當前結(jié)點的數(shù)據(jù)值不等于要搜索的值data時p=p-next ;/指針p順著鏈向后移動一個位置if (p)return p;/循環(huán)停止時p非空,表示找到了結(jié)點,返回指針P其代碼簡單,主要比較是否找到匹配項,如果找到就輸出。判斷是否找到匹配項用了函數(shù) equal (p-data , data, condition),其關鍵代碼如下:if (condition二二1)辻(strcmp (datal. num, data2. num) =0) /女口果 condition 的值為 1,比較學號return 1;else return 0

25、;else if (condition=2)/如果參數(shù)condition的值為2,比較姓名if (strcmp (data 1. name, data2 name)二二0)return 1;else return 0;else return 1;分級調(diào)用函數(shù),每個函數(shù)功能簡單,自頂向下,便于理解。7、保存文件,釆用函數(shù)saveFileO;關鍵代碼如下:if(head=NULL)printf(nNo Recordsn);return;while(p)fwrite(&p-data,sizeStu,1 ,fp);p=p-ext;fclose(fp);五、測試數(shù)據(jù)及其結(jié)果分析進入界面數(shù)據(jù)顯示如下:次迎

26、進入學生成績管理系統(tǒng)息理理本息貴4:#: 基信成豢 棗生顯基學兼退input your choice:顯示學生基本信息數(shù)據(jù)如下:Please input your choice:1學號姓名性別岀生日期A諜程成績B課程成績C課程成績總分名次B09050301gengyoushengmale199006228989902682B09050302yangwenlimale199002058989892671插入學生信息數(shù)據(jù)如下:生生生層 入除改回 插刪修返/ / / / / / / / / / / / / /choose one operation you want to do:1Input one

27、 studentJ s information nun:B09050302name:yangwenlisex: fenalebirthday=19900205Input three courses of the student:898887計算學生總分和名次數(shù)據(jù)顯示如下:eeeeeeee eeeeeeee 分次SKW 總名課盪木 生生oz層 拿三各上 回4t-T.TT.u邀母分平均分數(shù)eeeeeeee eeeeeeee學號姓名性別 總分B09050301gengvoushengnale268B09050302yangv/en lifenale234名次21peeeeeeei.eeeeeeee3

28、.0 返 回上eeeeeeee 坷分 eeeeeeee 平均分數(shù)eeeeeeee eeeeeeee求三門課程平均分數(shù)數(shù)據(jù)顯示如下:學號姓名B09050301gengyousheng09050302/angwenli性別三門課程平均分數(shù)male89.33fenale78.00求每科平均分數(shù)數(shù)據(jù)顯示如下:the average score of each course:89.0083.5078.50按學號查詢數(shù)據(jù)顯示如下:111 choose one operation you want to do:lInput a students num will be searched:B09050301學

29、號姓名性別 嗨成績B慄稈成績濟稈成綺平均分male89899089.33B09050301 Qengvoustiengz z aa nu nus.&S8&aaaaas&choose one operation you want to do:2按姓名查詢數(shù)據(jù)顯示如下:六、調(diào)試過程中的問】Input a students name will be searched:ffengyonsheng學號姓名性別Ai果程成績就果程成績C課程腿平均分809050301 gengyoushenymale8989908今33& & &專恣i蕊器鞠礫雕H攵&0 返回上層菜魚問題一、系統(tǒng)報錯:undeclareed

30、identifier (i是沒有聲明的變量)解決辦法及步驟:查看定義的變量,增加變量i的定義,再使用該變量。問題二、系統(tǒng)報錯:missing ;f before Type解決辦法及步驟:將變量集中在語句快處開始處定義,變量定義不能放在可執(zhí)行語句中間 問題三、系統(tǒng)報錯: missing before a解決辦法及步驟:找到出錯位置,添加分號。問題四、程序不能執(zhí)行解決辦法及步驟:關閉可執(zhí)行文件。問題五、函數(shù)功能無法實現(xiàn)解決辦法及步驟:分析函數(shù)代碼,改變部分代碼,使之執(zhí)行函數(shù)功能。問題六、輸出信息為一段亂碼解決辦法及步驟:一個個檢查格式轉(zhuǎn)換說明符,最后發(fā)現(xiàn)格式轉(zhuǎn)換說明符錯誤,以及部分 變量類型錯誤。

31、問題七、學生信息未分行顯示解決辦法及步驟:在輸出函數(shù)中增加代碼:printfCW);問題八、學生平均分數(shù)明顯偏大解決辦法及步驟:查看變量,發(fā)現(xiàn)本應該定義為局部變量的m定義為全局變量,改變變量 m的定義位置。問題九、運行后發(fā)現(xiàn)死循環(huán)解決辦法及步驟:逐步查看代碼,確定發(fā)生錯誤的函數(shù),結(jié)果發(fā)現(xiàn)格式轉(zhuǎn)換說明符錯誤,改變錯誤的格式轉(zhuǎn)換說明符。問題十、文件無法打開解決辦法及步驟:查看數(shù)據(jù)文件,發(fā)現(xiàn)數(shù)據(jù)文件丟失。七、課程設計總結(jié)我的C語言程序設計課程的考試題目是學生信息管理系統(tǒng)。通過這次課程設計我對C語言的神奇功能更加佩服(只是一個程序運行卻可以完成學 生管理系統(tǒng)功能),我默默在心里發(fā)誓一定要把C語言學好,

32、而且現(xiàn)在正在學習C#語言, 熟練的掌握編程的方法。本次課程設計,我設計的是學生管理系統(tǒng),本程序若完全靠現(xiàn)有 的知識,是很難編寫出來的,幸虧有我的指導老師閔麗娟老師的耐心指導以及同學們的無 私幫助,我才能順利完成。經(jīng)過兩周的課程設計,覺得學到挺多的東西,開始時都不知道怎么開始,覺得好擔心, 什么都不會,做不出來怎么辦?看了書,書中有例題,而且有這方面功能的函數(shù),可以參 考,就一個小函數(shù)一個小函數(shù)試試,雖然是按書中的,有時還是有很多錯誤,有時改來改 去都運行不了很著急,最后可以運行時很開心,不懂得問問同學,學到不少知識。這兩周 的課程設計讓我們鞏固以前的知識并在此基礎上有所突破。經(jīng)過這兩周的學習覺

33、得C語言挺有趣的,也好難!我們了解到要設計一個完整的程序, 其中最難的可能就屬設計整個程序的框架,其中可能會需要經(jīng)過很多次的修改與調(diào)試,所 以必須要有耐心,直至最后設計出自己想要的程序。感謝這次的課程設計,它使我更加深刻地體會到c語言程序編寫過程的嚴謹與細致,還 有就是無論做任何事都要有耐心。當然團隊合作也是非常重要的一個環(huán)節(jié),這會使你在學 習過程中倍感輕松。只要肯動手,我們就一定能行的,這是我這次作業(yè)中的最大體會。附:各模塊的代碼(不屬于報告內(nèi)容)/文件node, h的完整代碼:#ifndef _NODESdefine _NODEstruct Studentchar numL10;char

34、name20;char sex10;char birthday10;int score3;int total, rank;double aver, average:;typedef struct Student Type;const int sizeStu二sizeof (Type);struct nodeType data;struct node *next;const int size二sizeof(struet node); #endif/文件Prepare, h的完整代碼:ttifndef _PREPttdefine _PREP ttincludenode. h#includevoid

35、 printNode(Type data)int i;printf(%9s , data num);printf(“15s 、data name);printf(%8s 、data, sex);printf (”10s ”, data, birthday); for(i=0;i3;i+)printf(“8d 、data score i);printf(%8d , data, total);printf (”%6d “, data, rank);void sortprintNode(Type data) printf (,z%9s 、data, num); printf(“15s 、data n

36、ame); printf(%8s , data sex);printf (“ %8d 、data rank); void sort_printNode(Type data)printf(%9s 、data num);printf(“15s 、data name);printf(%8s 、data sex);for(i=0;iname);printf(sex: ”);scanfpdata-sex);strcpy(pdata-birthday , “);printf(birthday:);scanfpdata-birthday);pdata-average二0;pdata-aver二0;pdata

37、-totai二0;printf(Input three courses of the student:n);for(i=0;irank=0;int endWith(Type data)if (strcmp (data, num, NUT) =0)return 1;else return 0;int equal(Type datal, Type data2, int condition)if (condition二二1)if (strcmp (datal. num, data2. num) =0) /如果參數(shù) condition 的值為 1,比較 學號return 1;else return 0

38、;else辻(condition=2)/如果參數(shù)condition的值為2,比較姓名if (strcmp (data 1. name, data2 name)二二0)return 1;else return 0;else return 1;int larger (Type datal, Type data2,int condition)if (condition二二1)if (strcmp (datal. num, data2. num) =0)/比較學號return 1;else return 0;if (condition二二2)if (strcmp (datal. name, data2

39、. name) =0)/比較姓名return 1;else return 0;else if(condition二二3)return datal. score1data2 score1;else if(condition二二4)return datal. score2data2 score2;else if(condition二二5)return datal. score3data2 score3;else if(condition二二6)return datal. totaldata2total;return 1;ttendif文件file.h的完整代碼:ncludencludestdlib

40、. hncludelist. hvoid createFile()Type data;FILE *fp;if(fp=fopen(student. txt, wb)二二NULL)printf(can not open file studenttxt!n);exit (0);printf(z,input students informatiomended with num二NUTn);readNode(&data);while(!endWith(data)fwrite(&data, sizeStu, 1, fp);readNode(&data);fclose(fp);struct node *re

41、adFile (struet node *head)Type data;FILE *fp;head=NULL;if (fp=fopen (student. txt, :rb)二二NULL) printf (can not open f ile! n,z);exit (0);fread(&data, sizeStu, 1, fp);while(!feof(fp)head=Insert(head, data, 1);printf(n);fread(&data, sizeStu, 1, fp);fclose(fp);return head;void saveFile(struct node *hea

42、d)struct node *p=head;FILE *fp;if(fp=fopen(student. txt, wb)二二NULL) printf (can not open file! n,z);exit (0);辻(head二二NULL)printf(nNo Recordsn);return;while(p)fwrite(&p-data, sizeStu, 1, fp);p二p-next;fclose (fp);文件list.h的完整代碼:#ifndef _LISTSdefine _LISTncludeprepare hstruct node*CreateBackward();struc

43、t node*CreateForward();struct node*CreateInsert();struct node*printList (struet node*head);struct node*SearchNode(struct node*head,Type data, int condition);struct nodeInsertAfter(struct nodehead, Type data);struct nodeInsertOrder(struct nodehead,Type data, int condition);struct node*Delete (struct

44、node*head, Type data):struct node*Reverse(struct node*head);struct node*printList (struet node*head) /鏈表的遍歷struct node*p;if (head二二NULL) /如果鏈表原來為空printf (,znNo Recordsnn,/) ;/輸出提示信息,返回return NULL:for (p=head;p;p=p-next) /p從頭指針開始,每循環(huán)一次向后移動1節(jié)點的位置printNode (p-data) ;/p非空時執(zhí)行循環(huán)體,調(diào)用printNode函數(shù)輸出節(jié)點的元素值,最后換

45、行printf(n);return head; /返回頭指針struct node*SearchNode (struct node*head, Type data, int condition) /單鏈表的查 找struct node *p=head;/p 從 head 開女臺if (head二二NULL)/如果鏈表原來就為空,輸出提示信息并返回空指針printf (nNo Recordsn,/);return 0:while(p&! equal (pdata , data, condition) /equal 函數(shù)用來判斷兩個參數(shù)是否 相等/當p非空且當前結(jié)點的數(shù)據(jù)值不等于要搜索的值data

46、時p二p-next ;/指針P順著鏈向后移動一個位置if(p)return p;return 0;/循環(huán)停止時P非空,表示找到了結(jié)點,返回指針P/此時隱含條件為P等于空,未找到,返回空指針struct node*1usertOrder(struct node*head, Type data, int condition) struct node*p,*pl, *p2;p2二head;p= (struct node*)malloc (size) : /利用指針p申請結(jié)點動態(tài)空間p-data二data;/數(shù)據(jù)域賦值p-next二NULL; if (head二二NULL):/指針域直接賦值為空,以后

47、根據(jù)插入位置再修改/ 原鏈表 為空時 的插入head二p;/新插入的結(jié)點為頭結(jié)點return head;/原鏈表不為空時的插入larger是一個通用函數(shù)while(p2&larger (p-data, p2data, condition) /第一參數(shù)大于第二參數(shù),返回真P1二p2;/pl是p2的前趨結(jié)點,二者同時后移p2二p2-next;/前插入,修改head指針if (head二二p2)head二p;else/否則P插在pl的后面pl-next=p;p-next二p2;return head; /返回頭指針struct node*1nsert(struet node*head, Type data,int condition)struct node*p,*p2;p2二head;p= (struct node*)malloc (size) ; /利用指針p申請結(jié)點動態(tài)空間 p-data=data;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論