學生成績管理系統(2)_第1頁
學生成績管理系統(2)_第2頁
學生成績管理系統(2)_第3頁
免費預覽已結束,剩余39頁可下載查看

下載本文檔

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

文檔簡介

1、設計題目:學生成績管理系統院系:電子工程系班級:電嵌Q0941實驗人:趙婷婷學號:091602009實驗指導老師:李俊目錄.課程設計任務Q書3*.內容提要4三.正文51.設計目的-52.總體設計-53.詳細設計64.調試與測試35.源碼和運1行結果13文獻四參考35五課 程 設 計35嵌入式程序課程設計任務書、題目:學生成績管理系統設計、內容與要求學生成績信息包括:學期,學號,班別,姓名,四門課程成績(語文、數學、英語和計算機)等。主要功能:(1)能按學期、按班級完成對學生成績的錄入、修改(2)能按班級統計學生的成績,求學生的總分及平均分(3)能查詢學生成績,不及格科目及學生名單(4)能按班級

2、輸出學生的成績單要求:使用二進制文件方式存儲數據、三、地點:實驗2號樓4層硬件實驗室四、時間安排:第6-18周星期五的12節五、班級與指導老師:六、參考資料電嵌Q0941班;指導教師:李俊(自己補充)內容提要學生成績管理系統可以說是每個教育單位的得力助手,它利用計算機對學生 成績進行統一管理,實現學生成績信息管理工作流程的系統化、 規范化和自動化, 提高了廣大教師的工作效率。該設計報告圍繞學生成績管理系統的源代碼,展開一系列豐富的功能介紹和 操作細節。其功能主要有五大板塊組成:輸入記錄模塊、查詢記錄模塊、更新記 錄模塊、統計記錄模塊和輸出記錄模塊。每一功能模塊中又包含一系列具體功能, 如:從文

3、件讀入或從鍵盤輸入學生的基本信息, 按學號或者姓名查找已存在的記 錄,對存在的記錄進行修改、刪除、插入、排序,統計所有學生信息中的最高分、 不及格人數等,基本上涵蓋了學生成績管理系統所應該具備的基本操作。為了使廣大讀者對該系統有更好的了解,此報告還列舉出了程序代碼中的一 系列具體函數以及它的作用及功能。下面列舉源代碼中的部分函數:1) prin theader()函數原型:void prin theader()該函數用于在以表格形式顯示學生記錄時,打印輸出表頭信息。2) stringinput()函數原型: void stri ngin put(char *t,i nt len s,char

4、*no tice)該函數用于輸入字符串,并進行字符串長度驗證。T用于保存輸入的字符串, 因為是以指針形式傳遞的,所以t相當于該函數的返回值。3) Disp()函數原型:void Disp(li nk l)該函數用于顯示單鏈表l中存儲學生的記錄,內容為student結構中定義的 內容。4) Add()函數原型:void Add(li nk l)該函數用于在單鏈表l中增加學生記錄的節點。整個分析過程可在后面內容中詳細了解, 這里僅列舉幾個提供說明。該報告 同時含有源代碼的運行結果以及調試和出錯分析。 由于時間、經驗及水平的原因, 報告中難免有不足和錯誤之處,敬請批評指正。一. 設計目的本程序旨在訓

5、練讀者的基本編程能力,了解管理信息開發系統的開發流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中設計結構體、單鏈表、文 件等方面的知識。通過本程序的訓練,使讀者能對C語言的文件操作有一個更深 刻的了解,掌握利用單鏈表存儲結構實現對學生成績管理的原理,為進一步開發出高質量的信息管理系統打下堅實的基礎。二. 總體設計此成績管理系統主要利用單鏈表實現,它有如下五大功能模塊組成。其功能 模塊圖如下所示。(1) 輸入記錄模塊。輸入記錄模塊主要完成將數據存入單鏈表的工作中。在 此成績管理系統中,記錄可以從以二進制形式存儲的數據文件中讀入,也可從鍵盤逐個輸入學生記錄。學生記錄由學生的基本信息和成績信息

6、字段組成。當從數 據文件中讀入記錄時,它就是在以記錄為單位存儲的數據文件中,將記錄逐條復 制到單鏈表中。(2) 查詢記錄模塊。查詢記錄模塊主要完成在單鏈表中查找滿足相關條件的 學生記錄。在此成績管理系統中,用戶可以按照學生的學號獲姓名在單鏈表中進 行查找。若找到該學生的記錄,則返回指向該學生的記錄的指針。否則,返回一 個值為NULL的空指針,并打印出未找到該學生記錄的信息。(3) 更新記錄模塊。更新記錄模塊主要完成對學生記錄的維護。在此成績管理系統中,它實現了對學生記錄的修改、刪除、插入和排序操作。一般而言,系 統進行著修操作后,需要將修改的數據存入原數據文件。(4) 統計記錄模塊。統計記錄模

7、塊主要完成對個門功課最高分和不及格人數 的統計。(5) 輸出記錄模塊。輸出記錄模塊主要完成兩個任務。第一,它實現對學生 記錄的存盤操作,即將單鏈表中的各節點中存儲的學生記錄信息寫入數據文件中。第二,它實現將單鏈表中的學生記錄信息以表格的形式在屏幕上打印出來。三. 詳細設計1. 主控main()函數執行流程本成績管理系統執行流程如圖所示。它先以可讀寫的方式打開數據文件, 此文件默認為“ c:student ” ,若干文件不存在,則新建此文件。當打開文件操 作成功后,從文件中一次讀出一條記錄,添加到新建的單鏈表中,然后執行顯示 主菜單和進入主循環操作,進行按鍵判斷。在判斷鍵值時,有效的輸入為0至9

8、之間的任意數值,其他輸入都視為錯 誤按鍵。若輸入為0 (即變量select=0),它會繼續判斷是否在對記錄進行更新 操作之后進行了存盤操作,若未存盤,則全局變量saveflag=1,系統會提示用戶 是否需要進行存盤操作,用戶輸入 丫或y,系統會進行存盤操作。最后,系統執 行推出成績管理系統操作。若選擇1,則調用Add()函數,執行增加學生記錄操作;若選擇 2,則調用Del()函數,執行刪除學生記錄操作;若選擇3,貝碉用Qur()函數,執行查詢學 生記錄操作;若選擇4,則調用Modify(0函數,執行修改學生記錄操作;若選 擇5,則調用Insert()函數,執行插入學生記錄操作;若選擇6,則調用

9、Tongji() 函數,執行統計學生記錄操作;若選擇7,則調用Sort()函數,執行按降序排序 學生記錄的操作;若選擇8,則調用Save()函數,執行將學生記錄存入磁盤中的 數據文件的操作;若選擇9,則調用Disp()函數,執行將學生記錄以表格形式打 印輸出至屏幕的操作;若輸入為 09之外的值,則調用 Wrong()函數,給出按鍵 錯誤的提示。2. 輸入記錄模塊輸入記錄模塊主要實現將數據存入單鏈表中。這部分的操作較為簡單。當從數據文件中讀出記錄時,它調用fread(p,sizeof(Node),1,fp)文件讀取函數,執行一次從文件中讀取一條學生成績記錄信息存入指針變量P所指向節點中的操作,并

10、且這個操作在main()中執行,即當成績管理系統進入顯示菜單界面時, 該操作已經執行了。若該文件中沒有數據,系統會提示單鏈表為空,沒有任何學 生記錄可操作,此時,用戶應選擇 1,調用Add(1)函數,進行學生記錄的輸入, 即完成在單鏈表1中添加節點的操作。3. 查詢記錄模塊查詢記錄模塊主要實現了在單鏈表中按學號或姓名查找滿足相關條件的學 生記錄。在查詢函數Qur中,1為指向保存了學生成績信息的單鏈表的首地址 的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進行的指針定位操 作設計成了一個單獨 的函數 Node* Locate(Link 1,char findmess,char nameo

11、rnum),參數findmess保存到要查找的具體內容,nameornum保存要 查找的字段(值為字符串類型的num或者name ,若找到該記錄,則返回指向該 節點的指針;否則,返回一個空指針。4. 更新記錄模塊此模塊主要實現了對學生記錄的修改、 刪除、插入和排序操作。因為學生記 錄是以單鏈表的結構形式存儲的,所以這些操作都在單鏈表中完成。下面分別介 紹這四個功能模塊。1) 修改記錄修改記錄操作需要對單鏈表中目標節點的數據域中的值進行修改,它分兩步 完成。第一步,輸入要修改的學號,輸入后調用定位函數Locate()在單鏈表 中逐個對節點數據域中學好字段的值進行比較,直到找到該學好的學生記錄;

12、第二步,若找到該學生記錄,修改除學號之外的各字段的值,并將存盤標記 變量saveflag置1,表示已經對記錄進行了修改,但還未執行存盤操作。2)刪除記錄刪除記錄操作完成刪除制定學號或姓名的學生記錄,它也分兩步完成。第一 步,輸入要刪除的學號或姓名,輸入后調用定位函數Locate()在單鏈表中逐 個對節點數據域中的學號或姓名字段的值進行比較,知道找到該學號或姓名 的記錄,返回指向該學生記錄的節點指針;第二步,若找到該學生記錄,將 該學生記錄所在節點的前驅節點的指針域指向目標節點后的后繼節點。3)插入記錄插入學生記錄操作完成在制定學號的隨后位置插入新的學生記錄。首先,它要求用戶輸入某個學生的學號,

13、新的記錄將插入在該學生記錄之后;然后, 提示用戶輸入一條新的學生記錄的信息,這些信息保存在新節點的數據域中; 最后,將該節點插入在指定位置學號之后。它的就具體插入執行過程如圖6.3 所示,圖中q為位置學號所在節點的指針變量,其中,p為q所指節點的后 繼節點的指針變量,q >next=p,指針變量i指向新記錄所在的節點,為插入 節點i,依次執行的操作為:i->next=q->next;q->next=i。4)排序記錄有關排序的算法有很多,如冒泡排序、插入排序等。針對單鏈表結構的特點, 我們用插入排序算法實現按總分的從高到低對學生記錄進行排序,排序完成 之后,即可按順序給名

14、次字段賦值。在單鏈表中,實現插入排序的基本步驟如下。(1) 新建一個單鏈表1,用來保存排序結果,其初始值為待排序單鏈表中 的頭節點。(2) 從待排序鏈表中取出下一個節點,將其總分字段值與單鏈表1中的各節點中總分字段的值進行比較,知道在鏈表 1中找到總分小于它的節 點。若找到如此節點,系統將待排序鏈表中取出的節點插入此節點前, 作為其前驅。否則,將取出的節點放在單鏈表1的尾部。(3) 重復第(2)步,知道從待排序鏈表取出的節點的指針域為NULL即此節點為鏈表的尾部節點,排序完成5. 統計記錄模塊該模塊的實現比較簡單,它主要通過循環讀取指針變量p所指的當前節點的 數據域中各字段的值,并對各個成績字

15、段進行逐個判斷的形式, 完成單科成績最 高分學生的查找和各科不及格人數的統計。6. 輸出記錄模塊當把記錄輸出至文件時,調用fwrite(p,sizeof(Node),1,fp) 函數,將p指 針所指節點中的各字段值,寫入文件指針fp所指的文件。當把記錄輸出值屏幕時,調用void Disp(Link l)函數,將單鏈表1中存儲的學生記錄信息以表格的 形式在屏幕上打印出來。7. 數據結構設計學生成績信息結構體typedef struct stude nt保存學號保存姓名 保存C語言成績 保存數學成績 保存英語成績保存總分 保存平均分 保存名次char num10; /char n ame15; /

16、int cgrade; /int mgrade; /int egrade;int total;float ave;int min gci;單鏈表node結構體typedef struct nodestruct stude nt data;struct node *n ext;Node,*Li nk;這里定義了一個單鏈表的結構,結構標記為node,data為student結構類型 的數據,作為單鏈表結構中的數據域,next為單鏈表中的指針域,用來存儲其 直接后繼節點的地址。Node為node類型的結構變量,*Link為node類型的指針 變量。具體函數功能描述1) printheader()函數

17、原型:void prin theader()prin theader()函數用于在以表格形式顯示學生記錄時,打印輸出表頭信息。2) printdata()函數原型:void prin tdata(Node *pp)printdata()函數用于以表格形式顯示學生記錄時,打印輸出單鏈表pp中的學生 信息。3) stringinput()函數原型: void stri ngin put(char *t,i nt lens, char *no tice)stringinput() 函數用于輸入字符串,并進行字符串長度驗證(長度<lens )。t用于保存輸入的字符串,因為是以指針形式傳遞的,所以

18、t相當于該函數的返回 值。notice用于保存printf()中輸出的提示信息。4) Numberi nput()函數原型:int nu mberi nput(char *no tice)numberinput()函數用于輸入數值型數據,notice用于保存printf() 中輸出的提示信息,該函數返回用戶輸入的整型數據。5) Disp()函數原型:void Disp(Li nk l)Disp()函數用于顯示單鏈表l中存儲的學生記錄,內容為student結構中定義的 內容。6) Locate()函數原型: Node* Locate(Link l,char findmess,char nameo

19、rnum)Locate()函數用于定位鏈表中符合要求的節點,并返回指向該節點的指針。參數 findmess保存要查找的具體內容,nameornum保存按什么字段在單鏈表l中 查找。7) Add()函數原型:void Add(Li nk l)Qur()函數用于在單鏈表l中增加學生記錄的節點。8) Qur()函數原型:void Qur(Li nk l)Qur()函數用于先在單鏈表I中按學號或姓名查找滿足條件的記錄,并顯示出來。9) Del()函數原型:void DeI(L ink I)Del()函數用于先在單鏈表I中找到滿足條件的學生記錄的節點,然后刪除該節 點。10) Modify()函數原型:

20、void Modify(Li nk I)Modify()函數用于在單鏈表I中修改學生記錄。11) 1 nsert()函數原型:void In sert(Li nk I)Insert()函數用于在單鏈表I中插入學生記錄。12) To ngji()函數原型:void Tongji(Link I)Tongji()函數用于在單鏈表I中完成學生記錄的統計工作,統計該班的總分第一 名、單科第一名和各科不及格人數。13) Sort()函數原型:void Sort(Li nk I)Sort()函數用于在單鏈表I中完成利用插入排序算法實現單鏈表的按總分字段 的降序排序。14) Save()函數原型:void S

21、ave(Li nk I)Save()函數用于在單鏈表I中的數據寫入磁盤中的數據文件。15) 主函數main()整個成績管理系統控制部分。四. 調試與測試打開隨書光盤,將光盤中的學生成績管理系統源代碼轉至運行環境中,開始運行測試,運行過程中出現兩個問題,問題描述及解決方法如下:1. 源代碼中出現兩個系統無法調用的函數textcolor() 和gotoxy(),這兩個函數的作用是:在文本模式中選擇新的字符顏色和在文本窗口中設置光標。 因為這兩個功能對系統影響不大,故可以將這兩個函數刪掉,使程序正常運行。2. 進入運行結果界面,按代碼中的輸入順序對某個學生輸入計算機成績98,輸入英語成績86,打印結

22、果卻為:計算機成績 86,英語成績98。導致這種現象 發生,其原因很有可能是源代碼中的輸出模塊中的egrade和cgrade順序反了。回到源代碼,仔細觀察輸出模塊,將會發現Disp()函數中調用了 printdata()函數用于輸出有效數據,而prin tdata()函數中引用了預處理中的 DATA格式,而在宏定義DATA中 egrade和cgrade的順序果然反了,至此檢查出錯誤的根本。 更正后,程序正常運行。五. 源碼和運行結果1. 源代碼#in clude "stdio.h" /*標準輸入輸出函數庫*/#include "stdlib.h" /*標

23、準函數庫*/#include "string.h" /*#in clude "con io.h" /*字符串函數庫*/屏幕操作函數庫*/#defi neHEADER1IISTUDENTn"#define HEADER2 | number | name |Comp|Math|Eng| yuw| sum|ave |mici|n"#defi neHEADER3"|1|-|-T-|-|-|-T-|n "#defi ne FORMAT "|%-10s|%-15s|%4d|%4d|%4d|%4d|%4d|%4.1f|

24、%4d|n"#defi neDATA p->data .nu m,p->data .n ame,p->data.cgrade,p->data.mgrade,p->data.egrade,p->data. yuw,p->data.total,p->data.ave,p->data. min gci#defi neENDn"int saveflag=0; /*是否需要存盤的標志變量*/typedef struct stude nt/*char num10;/*char name15; /*標記為student*/學號*/姓名

25、*/int cgrade;/*Cint mgrade;/*int egrade;/*int yuw;/*int total;/*float ave; /*int mi ngci; /*語言成績*/數學成績*/英語成績*/ 語文成績*/總分*/平均分*/名次*/int clas; /*班級*/stude nt;/*定義每條記錄或結點的數據結構,標記為:node*/typedef struct nodestruct student data; /*數據域 */struct node *next; /*指針域 */Node,*Link; /*Node 為node類型的結構變量,*Link為node類

26、型的指針變量*/void menu() /* 主菜單 */system("cls"); /* 調用 DOS命令,清屏.與 clrscr()功能相同 */cpri ntf(”The Stude nts' Grade Man ageme nt System n ”);cpri ntf(”*Me nu *n")cpri ntf(”*1 in putrecord2 deleterecord*n ”);cpri ntf(”*3 searchrecord4 modifyrecord*n ”);cpri ntf(”*5 in sertrecord6 cou ntreco

27、rd*n ”);cpri ntf(”*7 sortreord8 saverecord*n ”);cpri ntf(”*9 display record0 quitsystem*n ”);cpri ntf(”格式化輸出表頭*/*n") void prin theader() /*prin tf(HEADER1);prin tf(HEADER2);prin tf(HEADER3); void prin tdata(Node *pp)/*格式化輸出表中數據 */Node* p;P=PP;prin tf(FORMAT,DATA);void Wron g() /* 輸出按鍵錯誤信息*/prin

28、 tf("nnnnn *Error:i nputhas wrong! press any key tocontinu e*n");getchar();void Nofi nd() /* 輸出未查找此學生的信息 */prin tf("n=>Not find this stude nt!n");void Disp(Link l) /*顯示單鏈表I中存儲的學生記錄,內容為 student結構中定義的內容*/Node *p;p=l-> next; /*l存儲的是單鏈表中頭結點的指針,該頭結點沒有存儲學生信息,指針域指向的后繼結點才有學生信息*/if(

29、!p) /*p=NULL,NUII 在 stdlib 中定義為 0*/prin tf("n=>Not stude nt record!n");getchar();return;prin tf("nn");printheader(); /* 輸出表格頭部*/while(p) /*逐條輸出鏈表中存儲的學生信息*/prin tdata(p);p=p-> next; /*移動直下一個結點*/prin tf(HEADER3);getchar();/*作用:用于定位鏈表中符合要求的節點,并返回指向該節點的指針參數:findmess保存要查找的具體內容 ;

30、nameornum保存按什么查找;在單鏈表I中查找;*/Node* Locate(Link l,char findmess,char nameornum)Node *r;if(strcmp(nameornum,"num")=0) /*按學號查詢 */r=l->n ext;while(r)if(strcmp(r->data.num,findmess)=0) /*若找至U findmess 值的學號 */return r;r=r->n ext;else if(strcmp(nameornum,"name")=0) /*按姓名查詢 */r=l

31、->n ext;while(r)if(strcmp(r->,findmess)=0) /*若找至U findmess 值的學生姓名*/ return r;r=r->n ext;return 0; /*若未找到,返回一個空指針*/*輸入字符串,并進行長度驗證(長度<lens)*/void stri ngin put(char *t,i nt le ns,char *no tice)char n255;doprintf(notice); /*顯示提示信息 */scanf("%s",n); /*輸入字符串 */if(strle n(n)

32、>le ns) prin tf("n exceed the required len gth! n ”); /*行長度校驗,超過lens值重新輸入*/while(strle n(n )>le ns);strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/*輸入分數,0< =分數<=100)*/int nu mberi nput(char *no tice)int t=0;doprintf(notice); /*顯示提示信息 */scanf("%d",&t); /*輸入分數 */if(t>100 | t<0) p

33、rin tf("n score must in 0,100! n"); /*進行分數校驗*/while(t>100 | t<0);return t;/*增加學生記錄*/void Add(Li nk l)Node *p,*r,*s; /*實現添加操作的臨時的結構體指針變量*/char ch,flag=0,nu m10;r=l;s=l->n ext;system("cls");Disp(l); /*先打印出已有的學生信息*/while(r-> next!=NULL)r=r-> next; /*將指針移至于鏈表最末尾,準備添加記錄

34、 */while(1) /*一次可輸入多條記錄,直至輸入學號為0的記錄結點添加操作*/while(1) /*輸入學號,保證該學號沒有被使用,若輸入學號為0,則退出添加記錄操作*/stri ngin put (nu m,10,"nin put nu mber(press '0'retur n menu):") ;/*格式化輸入學號并檢驗*/flag=0;if(strcmp(num,"0")=0)/*輸入為0,則退出添加操作,返回主界面*/return; s=l->n ext;while(s) /*查詢該學號是否已經存在,若存在則要求重

35、新輸入一個未被占用的學號*/if(strcmp(s->data. nu m, nu m)=0)flag=1;break;s=s->n ext;if(flag=1)/*提示用戶是否重新輸入*/getchar();prin tf("=>The agai n?(y/n):", num);nu mber %s isnot existi ng,try elsescan f("%c",&ch); if(ch='y'|ch='Y') con ti nue;elsereturn;break;p=(Node *)m

36、alloc(sizeof(Node); /*申請內存空間 */if(!p)prin tf("n allocate memory failure "); /*如沒有申請到,打印提示信息*/return ;/*返回主界面*/strcpy(p->data.num,num); /*將字符串 num拷貝至U p->data.num 中*/stri ngin put(p->data .n ame,15,"Name:");p->data.cgrade=nu mberi nput("C Ian guage Score0-100:&quo

37、t;); /*輸入并檢驗分數,分數必須在0100之間*/p->data.mgrade=n umberi nput("Math Score0-100:"); /*分數必須在0 100之間*/p->data.egrade=numberinput("English Score0-100:"); /*分數必須在0 100之間*/輸入并檢驗分數,輸入并檢驗分數,p->data.yuw=nu mberi nput("yuw Score0-100:");/*輸入并檢驗分數,分數必須在0-100之間*/p->data.tota

38、l=p->data.egrade+p->data.cgrade+p->data.mgrade+p->data.yuw;/*計算總分*/p->data.ave=(float)(p->data.total/4); /*計算平均分 */p->data. min gci=0;p-> next=NULL; /* 表明這是鏈表的尾部結點*/r->n ext=p; /*將新建的結點加入鏈表尾部中*/r=p; saveflag=1;return ;void Qur(Li nk I) /*按學號或姓名,查詢學生記錄*/int select; /*1:按學號查

39、,2:按姓名查,其他:返回主界面(菜單) */char search in put20; /*保存用戶輸入的查詢內容*/Node *p;if(!l->next) /*若鏈表為空 */system("cls");printf("n=>No student record!n");getchar();return;system("cls");prin tf("n=>1 Search by nu mber =>2 Search by n amen");prin tf(" please ch

40、oice1,2:");scan f("%d", &select);if(select=1) /*按學號查詢 */stringinput(searchinput,10,"input the existing student number:");p=Locate(l,searchinput,"num");/*在 I 中查找學號為 searchinput值的節點,并返回節點的指針*/if(p) /* 若 p!=NULL*/prin theader();prin tdata(p);prin tf(END);prin tf(&

41、quot;press any key to retur n");getchar();elseNofi nd();getchar();else if(select=2) /* 按姓名查詢 */stri ngin put(search in put,15,"i nput the existi ng stude nt n ame:");p=Locate(l,search in put," name");if(p)prin theader();prin tdata(p);prin tf(END);prin tf("press any key

42、to retur n");getchar();elseNofi nd();getchar();elseWron g();getchar();/*刪除學生記錄:先找到保存該學生記錄的節點,然后刪除該節點*/void Del(Li nk l)int sel;Node *p,*r;char fin dmess20;if(!l-> next)system("cls");printf("n=>No student record!n”);getchar();return;system("cls");Disp(l);prin tf(&q

43、uot;n=>1 Delete by nu mber =>2 Delete by n amen");printf(" please choice1,2:");scan f("%d", &sel);if(sel=1)stringinput(findmess,10,"input the existing student number:"); p=Locate(l,fi ndmess," nu m");if(p) /*p!=NULL*/r=l;while(r- >n ext!=p)r=

44、r->n ext;r->next=p->next;/*將p所指節點從鏈表中去除 */free(p); /* 釋放內存空間*/ prin tf("n=>delete success!n");getchar();saveflag=1;elseNofi nd();getchar();else if(sel=2) /*先按姓名查詢到該記錄所在的節點*/stri ngin put(fi ndmess,15,"i nput the existi ng stude nt n ame");p=Locate(l,fi ndmess," n

45、ame");if(p)r=l;while(r- >n ext!=p)r=r->n ext;r->n ext=p->n ext;free(p);prin tf("n=>delete success!n");getchar();saveflag=1;elseNofi nd();getchar();elseWron g();getchar();/*修改學生記錄。先按輸入的學號查詢到該記錄,然后提示用戶修改學號之外的值,學號 不能修改*/void Modify(Li nk l)Node *p;char fin dmess20;if(!l-&g

46、t; next)system("cls");printf("n=>No student record!n”);getchar();return;system("cls");prin tf("modify stude nt recorder");Disp(l);stringinput(findmess,10,"input the existing student number:"); /*輸入并檢驗該學號*/p=Locate(l,findmess,"num"); /*查詢至U該節點

47、 */if(p) /* 若p!=NULL,表明已經找到該節點 */prin tf("Number:%s,n",p->data .nu m);prin tf("Name:%s,",p->data .n ame);stri ngin put(p->data .n ame,15,"i nput new n ame:");printf("C Ian guage score:%d,",p->data.cgrade);p->data.cgrade=nu mberi nput("C Ian

48、 guage Score0-100:");prin tf("Math score:%d,",p->data.mgrade);p->data.mgrade=nu mberi nput("Math Score0-100:");prin tf("E nglish score:%d,",p->data.egrade);p->data.egrade=nu mberi nput("E nglish Score0-100:");prin tf("yuw score:%d,",

49、p->data.yuw); p->data.yuw=nu mberi nput("yuw Score0-100:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade+p->data.yuw; p->data.ave=(float)(p->data.total/4);p->data. min gci=0;prin tf("n=>modify success!n");Disp(l);saveflag=1;elseNofi n

50、d();getchar();/*插入記錄:按學號查詢到要插入的節點的位置,然后在該學號之后插入一個新節點。*/void In sert(L ink l)Link p,v,newinfo; /*p指向插入位置,newinfo 指新插入記錄 */char ch,num10,s10; /*s保存插入點位置之前的學號,num保存輸入的新記錄的學號*/int flag=0;v=l->n ext;system("cls");Disp(l);while(1)stri ngin put(s,10,"please in put in sert locati on after

51、the Number:"); flag=O;v=l->n ext;while(v)/*查詢該學號是否存在,flag=1表示該學號存在*/if(strcmp(v->data .nu m,s)=O) flag=1;break;v=v- >n ext;if(flag=1)break; /*若學號存在,則進行插入之前的新記錄的輸入操作*/elsegetchar();printf("n=>The number %s is not existing,try again?(y/n):",s);scan f("%c", &ch)

52、;if(ch='y'|ch='Y')con ti nu e;elsereturn;/*以下新記錄的輸入操作與Add()相同*/stringinput(num,10,"input new student Number:");v=l->n ext;while(v)if(strcmp(v->data .num,num)=0)printf("=>Sorry,the new number:'%s' is existing !n",num);prin theader();prin tdata(v);p

53、rin tf("n");getchar();return;v=v- >n ext;n ewi nfo=(Node *)malloc(sizeof(Node);if(! newi nfo)prin tf("n allocate memory failure "); /*如沒有申請到,打印提示信息*/return ;/*返回主界面*/strcpy( newi nfo->data. nu m, nu m);stri ngi nput( newi nfo->data. name,15,"Name:");newin fo-&g

54、t;data.cgrade=nu mberi nput("C Ian guage Score0-100:");newi nfo->data.mgrade=nu mberi nput("Math Score0-100:");newin fo->data.egrade=nu mberi nput("E nglish Score0-100:");newinfo->data.yuw=numberinput("yuw Score0-100:");newin fo->data.total=newin f

55、o->data.egrade+newin fo->data.cgrade+newin fo->dat a.mgrade+newin fo->data.yuw;newin fo->data.ave=(float) (newin fo->data.total/4);newin fo->data. min gci=0; newinfo->n ext=NULL;saveflag=1; /* 在main()有對該全局變量的判斷,若為1,則進行存盤操作*/*將指針賦值給p,因為I中的頭節點的下一個節點才實際保存著學生的記錄*/p=l->n ext;wh

56、ile(1)if(strcmp(p->data. nu m,s)=O)/*在鏈表中插入一個節點 */newinfo->n ext=p->n ext;p->n ext =newinfo;break;p=p->n ext;Disp(l);prin tf("nn");getchar();/*統計該班的總分第一名和單科第一,和各科不及格人數*/ void Ton gji(L ink l)用于指向分數最高的節點*/保存四門成績中不及格的人數*/Node *pm,*pe,*pc,*pt,*pk,*p1,*p2,*p3,*p4; /*Node *r=l->n ext;int coun tc=0,co un tm=0,co un te=0,co un ty=0; /* if(!r)system("cls");prin tf("n=>Not stude nt record!' n"); getchar();return ;system("

溫馨提示

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

評論

0/150

提交評論