大數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)學生成績管理系統(tǒng)c語言_第1頁
大數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)學生成績管理系統(tǒng)c語言_第2頁
大數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)學生成績管理系統(tǒng)c語言_第3頁
大數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)學生成績管理系統(tǒng)c語言_第4頁
大數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)學生成績管理系統(tǒng)c語言_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實用標準文案大全學號:Xxxxx數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)課程報告題目學生成績管理系統(tǒng)學院XXX專業(yè)XXX班級XXX姓名XXX指導教師XXX2016年 11月27日目錄目錄21.任務(wù)與目的.32.題目描述.33.設(shè)計目的.34.需求分析.35.問題分析及算法設(shè)計45.1問題分析45.2算法設(shè)計46.系統(tǒng)設(shè)計方案.46.1 系統(tǒng)功能46.2程序設(shè)計及運行結(jié)果5(1)主函數(shù)模塊設(shè)計 (2)“屏幕”一顯示函數(shù)模塊設(shè)計56(3) 結(jié)構(gòu)體定義7(5) 信息輸入模塊7(6)顯示模塊及結(jié)果9(7)查找模塊及結(jié)果|10(8)刪除模塊11(9) 插入函數(shù)模塊12(10)排序函數(shù)模塊13(11) 修改模塊7總結(jié)16158參考文

2、獻9附錄代碼161617數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)課程報告成績評定表2291. 任務(wù)與目的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)大作業(yè)要求學生對所選題目進行問題的分析、數(shù)據(jù)結(jié)構(gòu)的比較選取、 數(shù)據(jù)結(jié)構(gòu)的存儲方法以及算法的分析和編程實現(xiàn)。本課程的主要目的是強化和鞏固常用的數(shù) 據(jù)結(jié)構(gòu)使用方法,培養(yǎng)綜合運用所學知識,分析和解決實際問題的能力。通過大作業(yè)的完成, 促使學生將數(shù)據(jù)結(jié)構(gòu)的理論方法與實際應(yīng)用相結(jié)合,讓學生能比較全面而辯證地分析和處理 問題,逐步樹立正確的算法設(shè)計思想,熟練掌握常用數(shù)據(jù)結(jié)構(gòu)的具體實現(xiàn)方法和分析方法, 以及軟件開發(fā)的基本技術(shù)和工作過程,培養(yǎng)嚴謹認真的科學態(tài)度和務(wù)實的工作作風。2. 題目描述學生成績管理:實現(xiàn)功能:輸入、輸

3、出、插入、刪除、查找、顯示、保存、排序、修改、 退出等。用戶使用該系統(tǒng)主要在于實現(xiàn)對學生信息的編寫、修改、保存等操作。3. 設(shè)計目的(1)基本掌握程序設(shè)計的基本思路、方法和技能;(2)達到能掌握數(shù)據(jù)結(jié)構(gòu)的基本知識并加以應(yīng)用;(3)能夠利用所學的基本知識和技能,解決簡單的程序設(shè)計問(4)強化和鞏固常用的數(shù)據(jù)結(jié)構(gòu)使用方法,培養(yǎng)綜合運用所學知識,分析和解決實際問 題的能力4. 需求分析作為基本的程序設(shè)計,顯示界面要具有美觀性,所以在程序設(shè)計時要考慮程序輸出時的 格式,所以我在編寫程序時,從顯示界面到各個部分都經(jīng)過了詳細的規(guī)劃和編排,比如在下 一個程序功能執(zhí)行時,對前面顯示的東西用system(Cls

4、)進行清除操作,這樣操作之后在屏幕上顯示就不會雜亂了。要設(shè)計的學生信息管理系統(tǒng)要完成學生信息的建立、顯示、查找、插入、刪除、保存、 排序、修改、退出等基本功能,程序設(shè)計基礎(chǔ)建立在已學過的數(shù)據(jù)結(jié)構(gòu)、C語言等知識層面上,可自己增加程序的難度。我要設(shè)計的程序主要應(yīng)用到 C編程方法學和數(shù)據(jù)結(jié)構(gòu)2的主要 知識。基本要求需實現(xiàn)程序的編譯、鏈接、調(diào)試、運行。主要解決的問題是程序的編寫,操 作平臺為VC+6.05問題分析及算法設(shè)計5.1問題分析這個程序要設(shè)計的整體思想就是模塊化編程,因為程序集多個功能于一體,然后根據(jù)用 戶輸入的要求執(zhí)行相應(yīng)的子模塊,以此達到功能的實現(xiàn)。所以主函數(shù)就可以用switch結(jié)構(gòu)實 現(xiàn)

5、,然后分別按功能編寫模塊函數(shù)了。5.2算法設(shè)計經(jīng)過問題分析,程序的大體結(jié)構(gòu)已經(jīng)確定,然后就要考慮該使用那些算法了。因為程序 要存儲一連串的學生信息,且包含多個數(shù)據(jù)項,所以可以用數(shù)組、結(jié)構(gòu)體、順序表、單鏈表 等實現(xiàn),但要實現(xiàn)查找、排序、刪除等各種功能,單鏈表就顯得更適宜些,同時也能鍛煉我 們對鏈表的使用技巧,所以經(jīng)過思量,決定用單鏈表來實現(xiàn)編程。6.系統(tǒng)設(shè)計方案6.1系統(tǒng)功能首先要確定學生信息應(yīng)包括:學號,姓名,科目,成績業(yè)等。其次,學生信息管理系統(tǒng)應(yīng)提供的功能包括:(1)系統(tǒng)以菜單方式顯示(2)要有學生信息錄入功能(3)學生信息瀏覽功能(4)學生信息用文件保存(5)按學號查詢、按姓名查詢(6)

6、可以按學號、科目成績等排序?qū)W生信息的刪除修改(8)學生信息的修改(9)退出結(jié)合實際情況及自身能力,確定了以上要編寫并實現(xiàn)的功能6.2程序設(shè)計及運行結(jié)果(1)主函數(shù)模塊設(shè)計之前已確定主函數(shù)可以用switch結(jié)構(gòu)實現(xiàn),只要將系統(tǒng)功能經(jīng)分析排版后寫入主函數(shù)中 的每個case即可,所以主函數(shù)可如下編寫/主函數(shù)int main(v oid) menu();/調(diào)用顯示函數(shù)whileprin tf(tt請選擇相應(yīng)的功能:);sea nf(%d,&a);switch(a)ease 0:/退出系統(tǒng)ease 1:/學生信息輸入ease 2:/信息顯示ease 3:/查找信息ease 4:/刪除學生信息ease 5

7、 :/插入學生信息(尾插法)ease 6:/學生信息排序ease 7 :/修改信息ease 8 :/保存成績至文件default:/輸入其它情況,循環(huán)重新輸入break;system(pause);return 0;如此編寫,可以使主函數(shù)既簡單易懂,又不雜亂,能讓讀者一目了然,有了主函數(shù),之 后就可以往主函數(shù)中加子模塊了。(2) “屏幕”一顯示函數(shù)模塊設(shè)計顯示屏幕,也就是要給用戶提供功能選擇的主界面,需明了,整齊,要達到用戶感覺到 系統(tǒng)操作很其實簡單的效果,所以編譯排版之后的界面效果見下圖I 降 D:ai|Deb u g1234.exe -學生信息管理系統(tǒng)乍區(qū)趣入2 A扁八彳齊息、3. 查找學

8、生信息4、刪除指定學生的信息久插入學生信息6、排序7、修改8、葆存0、退由系統(tǒng)請選擇相應(yīng)的功能;|可以從上圖看出,只要用戶按自己需求進行操作,就可以實現(xiàn)相應(yīng)功能了。程序設(shè)計的該函數(shù)為void menu()。(3) 結(jié)構(gòu)體定義“結(jié)構(gòu)體名”用作結(jié)構(gòu)體類型的標志,它又稱“結(jié)構(gòu)體標記”。聲明一個結(jié)構(gòu)體類型的一 般形式為:Struct 結(jié)構(gòu)體名成員表列;大括弧內(nèi)是該結(jié)構(gòu)體中的各個成員,由它們組成一個結(jié)構(gòu)體。對各成員都應(yīng)進行類型聲 明,即類型名成員名我在結(jié)構(gòu)體中定義了兩個字符數(shù)組及三個整形變量,用于存儲學號、姓名、三個科目的 成績,并在結(jié)構(gòu)體中定義了一個指針,為單鏈表所需,用于指向下一結(jié)點。typedef

9、 struct stude ntchar num20;/建立學生類/學號char n ame20;/姓名int math;/數(shù)分int En glish;/英語int Data;/數(shù)據(jù)結(jié)構(gòu)struct stude nt *n ext;/指針stude nt;stude nt *head=NULL;/頭指針(5) 信息輸入模塊對應(yīng)函數(shù)為void create(),可用鏈表建立學生信息,所以先要建立一個頭結(jié)點p仁(stude nt *)malloc(sizeof(stude nt);建立頭結(jié)點然后讓指針指向下一個結(jié)點,依次根據(jù)用戶輸入的學生個數(shù)循環(huán)建立鏈表(學生信息) 所以主要循環(huán)為whilewh

10、ile( nu mber vnumb)/循環(huán)輸入學生信息建立結(jié)點p2=(stude nt *)malloc(sizeof(stude nt);scan f(%s %s %d %d %d,p2- num,p2- name,&p2-math,&p2-E nglish,&p2-Data);/輸入學生信息if(p2-num=O)prin tf(信息輸入成功!n);break;len gth+;/p1- n ext=p2;p2-n ext=NULL;/p1=p1- n ext;nu mber+;/prin tf(信息輸入成功!n);/鏈表的長度結(jié)點相繼后移記錄已輸入的學生個數(shù)返回成功I, T D:tm!

11、lD?bug1234.exe,t輸入學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu)001 小米 98 87 79003 小明 99 89 3911002 天天 B7 39 S7 信息輸入成功!請按任意犍繼續(xù)-功能的選擇是用戶根據(jù)選擇模塊一屏幕上的提示做出的操作,可以看到,在進行下 操作之前,系統(tǒng)會進行清屏,然后顯示本次的操作結(jié)果。(6) 顯示模塊及結(jié)果void display。,這個模塊并不是每個操作結(jié)果的輸出函數(shù),它會輸出最終的結(jié)果,在 進行了輸入學生信息操作后,進行這個功能,系統(tǒng)就會輸出全部的結(jié)果,見下圖??梢钥闯?, 系統(tǒng)已把上次的操作清屏,然后根據(jù)輸入的2功能進行了顯示操作。輸出是按循環(huán)輸出的,用指針

12、指向鏈表的各項數(shù)據(jù),依次輸出。主要代碼為while(p!=NULL)prin tf(tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p-Data);p=p-n ext; D:miJDebug1234.exe學牛信息管理系統(tǒng)Is信區(qū)璽入3.查找學生信息 冬刪除指定學生的信息5s插入學生信息6.排序人修改保存0.退岀系統(tǒng)請選擇相應(yīng)的功能:2所有的學生信息如下:學號姓名數(shù)分英語數(shù)據(jù)結(jié)構(gòu)I001A988779003明998939002天天878987請按任意鍵繼續(xù).(7)查找模塊及結(jié)果在程序設(shè)計時,并沒有采用單一的按學號或按姓名查找的方

13、式, 而是既可以按學號查找, 亦可按姓名查找,所以編寫了 void search1()和void search2()這兩個查找函數(shù),當輸入的 學號或姓名不在記錄時,系統(tǒng)會顯示“查無此人”,主要代碼如下,鏈表不空時循環(huán)查找,然 后用字符串比較函數(shù)判斷查找是否成功。while(p!=NULL)if(strcmp(p- num,xh)=0) /查找成功,顯示查找信息./顯示查找到的信息if(p=NULL)/鏈表遍歷完成,返回查找信息printf(查無此人 n);蓿選擇相應(yīng)的功能3請選擇是按學號查找還是按姓名查找,若是學號就按1,姓名按21請輸入學號000查無此人請按任意鍵繼續(xù)*請選擇相應(yīng)的功能:3

14、請選擇是按學號查找還杲按姓名查找,若是學號就按1,姓名按22請輸入名字天天W數(shù)據(jù)結(jié)構(gòu) 002天天878987請選擇相應(yīng)的功能:請選擇是按學號査找還是按姓名查找,若是學號就按1,姓名按21請輸入學號001學號 姓名 數(shù)分 英語數(shù)據(jù)結(jié)構(gòu)001小米988779(8 ) 刪除模塊void Delete()為刪除模塊函數(shù),按輸入的學號刪除信息,首先會根據(jù)用戶輸入的學號查找該學號對應(yīng)的信息,如果記錄中沒有,貝療統(tǒng)返回查無此人,如果查找成功,貝U會刪除 該學生的所有信息,代碼同查找一樣,在while循環(huán)中用了字符串比較函數(shù),若查找成功,則刪除,否則返回查無此人請選擇相應(yīng)的功能請輸入要刪除的學生的學號:003

15、0028712001 刪除成功!自3生息信學信生定生生輸信學指學 利%、*、 123456 78 0所有的學生信屛選擇相彌蝕2學號姓名 小明 天天數(shù)分99英語數(shù)據(jù)結(jié)構(gòu)89398987請按任意鍵繼續(xù).(9) 插入函數(shù)模塊void in sert()為插入函數(shù),主要用了尾插法插入學生信息,主要代碼如下void in sert()q=(stude nt *)malloc(sizeof(stude nt); /建立新的結(jié)點 /輸入學生信息 while(p!=NULL)/循環(huán)if(strcmp(p- num,q- num)=0) /判斷鏈表中是否已有該學號printf(該學號已經(jīng)存在,無法插入!n);r

16、eturn;/右鏈表中已有該學號,則返回p=p-n ext;p=head;for(i=0;in ext;q-n ext=p-n ext;p-n ext=q;len gth+;/插入后鏈表長度增加prin tf(插入成功!in);/返回成功1請選擇相應(yīng)的功能5請輸入你要插入的學生的學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu):002 聚源 87 76 87該學號已經(jīng)存在,無法插入! 請按任意鍵繼續(xù)請選S相應(yīng)的功能;5請輸入你要插入的學生的學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu): 004 積分 87 76 87插入舫!請按任意鍵繼續(xù)I請選擇相應(yīng)的功能2所有的學生信息如下:號4_T2 3 4 o o O o o O數(shù)

17、分 英語數(shù)據(jù)結(jié)構(gòu)878987998939877687插入函數(shù)的難點在于新結(jié)點建立、信息輸入、將信息插入鏈表等步驟的鏈接,還有結(jié)點 的移動等核心算法。(10) 排序函數(shù)模塊排序模塊是我遇到的最大難題,難在不僅要對整形數(shù)比大小,還要對學號這個字符串比 大小,在編譯時,老是出錯,也想了好些天,但在同學及老師的幫助下還是把問題解決了, 而關(guān)鍵在于對字符串比較函數(shù)的應(yīng)用if(strcmp(p-num,p-next-num)0),這樣編寫問題就迎刃而解了。排序模塊主要有按學號排序、按各科目成績排序。按學號排序時,用的排序方法為結(jié)點 交換的排序方法,主要代碼為while( head-n ext != tai

18、l )/prep = head;p = head-n ext;while( p-n ext != tail )if(strcmp(p-num,p-next-num)0) / temp = p-n ext; / prep-n ext = p-n ext;p-n ext = p-n ext- n ext; prep-n ext- n ext = p; p = temp;/p = p-n ext;/prep = prep-n ext;tail = p;頭指針不等于尾指針時利用字符串比較函數(shù)對學號比較大小臨時保存p的后繼結(jié)點的值完成交換節(jié)點后移/完成排序而按科目成績排序時,米用的都是插入法排序,按成績

19、遞減序列排序,核心算法如下void paixusf(stude nt *&L) stude nt *p,*pre,*q; p=L- n ext- n ext; L- next- next=NULL; while (p!=NULL) q=p-n ext;pre=L;占八、/將學生單鏈表按數(shù)分成績遞減排序p指向L的第2個數(shù)據(jù)結(jié)點/構(gòu)造只含一個數(shù)據(jù)結(jié)點的有序表q保存*p結(jié)點后繼結(jié)點的指針/從有序表開頭進行比較,pre指向插入*p的前驅(qū)結(jié)while (pre-n ext!=NULL & pre-n ext-mathp-math)pre=pre-n ext; p-n ext=pre-n ext; pre

20、-n ext=p; p=q;/在有序表中找插入*p的前驅(qū)結(jié)點*pre/將*pre之后插入*p/掃描原單鏈表余下的結(jié)點運行結(jié)果為請選擇是按學號排序還是按高數(shù),英語,數(shù)據(jù)結(jié)構(gòu)排序 若是學號就按1,數(shù)分按N英語按3,數(shù)據(jù)結(jié)構(gòu)按41經(jīng)過排序后的信息.書序曲功學號002003004請按任意撻繼續(xù)879987898976873987l冃 也口上工口 冃匕:u請選擇是按學號排序還是按高數(shù),英語,數(shù)據(jù)結(jié)構(gòu)排序 若是學號就按1,數(shù)分按Z英語按生數(shù)據(jù)結(jié)構(gòu)按42經(jīng)過排序后的信息為=學號姓名數(shù)分英語數(shù)據(jù)結(jié)構(gòu)003小明998939004穎分877687002天天878987請按任意鍵繼續(xù)(11) 修改模塊修改的時候,首

21、先是根據(jù)用戶輸入的學號查找該學生,若查找成功,則將用戶輸入的信 息臨時保存,然后替換原先的信息 while(p!=NULL)if(strcmp(p- num,xg)=O) /查找成功,并顯示被修改者的信息n); /顯示要被修給的學生信息printf(請輸入你要修改的學生的學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu): scanf(%s %s %d %d %d,num1,namel,&math1,&Englishl,&Data1);strcpy(p- num, num1);/字符串復制函數(shù)修改學號,名字strcpy(p-n ame, name1);p-math=math1;p-E nglish=E ngli

22、sh1;p-Data=Data1;修改成績n);修改成功,賦值為0指針移動查找失敗,無修改者信息printf(修改成功 n); t=0;/p=p-n ext;/if(t=1)/printf(找不到要修改的學號!請選擇相應(yīng)的功談;7輸入需要修改的學生的學號;003這是你要修改的學生的信息P學號姓名數(shù)分英語 數(shù)據(jù)結(jié)構(gòu)003小明998939請輸入你要修改的學生的學號姓名、數(shù)分、英語,數(shù)據(jù)結(jié)構(gòu);運行結(jié)果比較修改前003 大小明 100 100 100 修改成貢請按任意鍵繼續(xù).*修改后所有的學生信息如韓擇相應(yīng)的功竈2數(shù)據(jù)結(jié)構(gòu)鸞7689盼1008787號學3 4 20 0 0o o O請按任意鍵繼續(xù).7總

23、結(jié)在本次課程設(shè)計期間,我遇到了一些難點,開始的時候,代碼中有許多的錯誤,特別是 有一些調(diào)試方面的錯誤讓我束手無策,隨后的編程中又遇到了一些未知錯誤,只能一句一句 去編譯調(diào)試,遇到一些算法上的難題,就得去翻閱其它資料,書本看了一遍又一遍,算法推 演了一遍又一遍,但付出總有收獲的,經(jīng)過幾天的堅持不懈,程序編寫成功,然后經(jīng)過不斷 地優(yōu)化排版,最終程序完美出爐,也達到了我心目中的目標。通過這段時間的課程設(shè)計,不僅使我對線性表的鏈式儲存有了更深的認識和理解,也使 我更加明白線性表的鏈式儲存在信息技術(shù)中的重要性和地位。許多的錯誤讓我明白了一個道 理-毅力和信心對成功是非常重要的。同時,對于編程者而言,思路

24、清晰是相當重要的。在 適當?shù)臅r候和同學一起交流探討是一個十分好的學習機會。請教老師也很重要,因為畢竟我 們是新手,對于某些問題很難弄清楚。而且,某些錯誤對于我們來說有時候想半天都弄不來, 但老師幾下下就搞好了,這樣就更加有效地節(jié)約了時間。同時,這次課程設(shè)計還讓我學會了 如何系統(tǒng)、正規(guī)的做一份課程設(shè)計報告,明白了做事情只有認真,才能真正做得更好!8參考文獻1 王舜燕/李民主編 C編程方法學一武漢:武漢理工大學出版社,2013.9.2 嚴蔚敏/吳偉民.數(shù)據(jù)結(jié)構(gòu).一北京:清華大學出版社,2007.3 (美)DawnGriffiths 著/程亦超 譯.嗨翻C語言.一北京:人民郵電出版社,2013.94

25、 http:/c.bia nche ng.n et/cpp/html/162.html5 趙端陽/左伍衡編著算法分析與設(shè)計.一北京:清華大學出版社,2012.39附錄代碼#in clude#i nclude#i nclude#i nclude #i ncludevwi ndows.h #defi ne STUDENT 2typedef struct student/建立學生類char num20;/學號char n ame20;/姓名int math;/數(shù)分int En glish;/英語int Data;/數(shù)據(jù)結(jié)構(gòu)struct stude nt *n ext;/指針stude nt;stud

26、e nt *head=NULL;/頭指針int len gth;/鏈表的長度void create()/建立鏈表,學生信息建立函數(shù)stude nt *p1,*p2;len gth=0;int nu mb;/存儲用戶輸入的學生個數(shù)int nu mber=0;/存儲已輸入的學生個數(shù)p仁(stude nt *)malloc(sizeof(stude nt);建立頭結(jié)點p1- num;if(head=NULL)head=p1;/頭結(jié)點地址賦于頭指針printf(tt請先輸入學生的個數(shù):);/保存要輸入的學生個數(shù),用于后面循環(huán)輸入信丿 111、scan f(%d,&n umb);Sleep(666);s

27、ystem(Cls);/清屏prin tf(輸入學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu):n);while( nu mberv nu mb)/循環(huán)輸入學生信息 p2=(stude nt *)malloc(sizeof(stude nt);/建立結(jié)點scan f(%s %s %d %d %d,p2- num,p2- name,&p2-math,&p2-E nglish,&p2-Data);/輸入學生信息if(p2-num=O)printf(信息輸入成功! n);break;len gth+;/p1- n ext=p2;p2- next=NULL;/p1=p1- n ext;nu mber+;/prin

28、tf(信息輸入成功! n);/system(pause);system(Cls); return;void display()/stude nt *p=head-n ext;printf(所有的學生信息如下:n);prin tf(ttprin tf(tt學號 姓名while(p!=NULL)鏈表的長度結(jié)點相繼后移記錄已輸入的學生個數(shù)返回成功顯示函數(shù),顯示用戶輸入的學生信息n); 數(shù)分 英語 數(shù)據(jù)結(jié)構(gòu)n);prin tf(tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p-Dat a);p=p-n ext;prin tf(ttn)

29、;system(pause);system(Cls);return; void search1()/char xh20;/stude nt *p=head-n ext; printf( 請輸入學號); scan f(%s,xh);while(p!=NULL)if(strcmp(p-nu m,xh)=0) / prin tf(ttprin tf(tt按學號查找保存用戶輸入的學號,用于后續(xù)比較查找查找成功,顯示查找信息n);學號 姓名 數(shù)分 英語數(shù)據(jù)結(jié)構(gòu)n)prin tf(tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p-Dat

30、a);prin tf(ttn);return; p=p-n ext;鏈表遍歷完成,返回查找信息if(p=NULL)/printf(查無此人 n);system(pause); system(Cls);void search2()/char mz20;/stude nt *p=head-n ext; printf( 請輸入名字); sca nf(%s,mz);while(p!=NULL)if(strcmp(p-n ame,mz)=0) / prin tf(ttprin tf(tt按學號查找保存用戶輸入的名字,用于后續(xù)比較查找查找成功,顯示查找信息n);學號 姓名 數(shù)分 英語數(shù)據(jù)結(jié)構(gòu)n)24pri

31、n tf(tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p-Dat a);prin tf(ttn);return;p=p-n ext;if(p=NULL)/鏈表遍歷完成,返回查找信息printf(查無此人 n);system(pause); system(Cls);void in sert()/尾插法插入學生信息int i; stude nt *p,*q; p=head;n);prin tf(請輸入你要插入的學生的學號、姓名、數(shù)分、英語、數(shù)據(jù)結(jié)構(gòu): q=(stude nt *)malloc(sizeof(stude nt);

32、/建立新的結(jié)點sea nf(%s %s %d %d %d,q- num,q- name,&q-math,&q-E nglish,&q-Data); while(p!=NULL)if(strcmp(p- num,q- num)=O) /判斷鏈表中是否已有該學號printf(該學號已經(jīng)存在,無法插入!n);system(pause); system(Cls); return; / p=p-n ext; p=head;for(i=0;in ext;q-n ext=p-n ext;p-n ext=q;len gth+;/prin tf(插入成功! n);/system(pause);system(Cl

33、s); return;void Delete()/char b20;/較若鏈表中已有該學號,則返回循環(huán)尾插法插入插入后鏈表長度增加 返回成功按輸入的學號刪除信息用于保存用戶輸入的要刪除學生的學號,用于比stude nt *p,*q;q=head,p=head-n ext;printf(請輸入要刪除的學生的學號while(p!=NULL)if(stremp(p-nu m,b)=0)/n);q-n ext=p-n ext; free(p);/len gth-;prin tf( 刪除成功! return;/p=p-n ext;/q=q-n ext;if(p=NULL)/:n);scan f(%s,b

34、);判斷相同則刪除刪除指定結(jié)點結(jié)點釋放刪除成功后返回指針后移遍歷完成,未找到信息printf(找不到要刪除的學號!n);/return; system(pause); system(Cls);void menu()/顯示函數(shù)-屏幕prin tf(ttn);prin tf(tt|學生信息管理系統(tǒng)|n);prin tf(tt| 1、信息輸入|n);prin tf(tt| 2、顯示信息|n);prin tf(tt| 3、查找學生信息|n);prin tf(tt| 4、刪除指定學生的信息|n);prin tf(tt| 5、插入學生信息|n);prin tf(tt| 6、排序|n);prin tf(tt

35、| 7、修改|n);prin tf(tt| 8、保存|n);prin tf(tt| 0、退出系統(tǒng)|n);printf(tt|n);return; void paixuxh(stude nt *head)/利用結(jié)點交換的方法對學號進行排序stude nt *p,*prep,*temp,*tail; /定義所需結(jié)點tail=NULL;while( head-n ext != tail )prep = head;p = head-n ext;while( p-n ext != tail )if(strcmp(p- nu m,p- next- nu m)0) /利用字符串比較函數(shù)對學號比較大小臨時保存

36、p的后繼結(jié)點的值完成交換節(jié)點后移第一個while temp = p-n ext; / prep-n ext = p-n ext;p-n ext = p-n ext- n ext; prep-n ext- n ext = p; p = temp; /p = p-n ext; prep = prep-n ext;tail = p; /printf(tt 排序成功 n);void paixusf(stude nt *&L) stude nt *p,*pre,*q; p=L-n ext- n ext;/將學生單鏈表按數(shù)分成績遞減排序strcmp(/p指向L的第2個數(shù)據(jù)結(jié)點/構(gòu)造只含一個數(shù)據(jù)結(jié)點的有序表

37、while (p!=NULL) q=p-n ext;pre=L;q保存*p結(jié)點后繼結(jié)點的指針/從有序表開頭進行比較,pre指向插入*p的前驅(qū)結(jié)點while (pre-n ext!=NULL & pre-n ext-mathp-math)pre=pre-n ext; p-n ext=pre-n ext; pre-n ext=p; p=q;/在有序表中找插入*p的前驅(qū)結(jié)點*pre/將*pre之后插入*p/掃描原單鏈表余下的結(jié)點void paixuyy(student *&L)/將學生單鏈表按英語成績遞減排序stude nt *p,*pre,*q;p=L-n ext- n ext;L- next-

38、next=NULL;while (p!=NULL)q=p-n ext;pre=L;while (pre-n ext!=NULL & pre-n ext-E nglishp-E nglish) pre=pre-n ext;p-n ext=pre-n ext;pre-n ext=p;p=q;void paixusj(stude nt *&L) stude nt *p,*pre,*q; p=L-n ext- n ext;L- next- next=NULL; while (p!=NULL) q=p-n ext;pre=L;/將學生單鏈表按數(shù)據(jù)結(jié)構(gòu)成績遞減排序L- next- next=NULL;wh

39、ile (pre-n ext!=NULL & pre- next-Datap-Data) pre=pre-n ext;p-n ext=pre-n ext;pre-n ext=p;p=q;void Prin t(stude nt *head )/prin tf(tt學號 姓名while( head != NULL )輸出函數(shù)數(shù)分 英語 數(shù)據(jù)結(jié)構(gòu)n);26prin tf(tt%-13s%-11s%-9d%-9d%dn,head- num,head- name,head-math,head-E nglis h,head-Data);head = head-n ext;system(pause);sy

40、stem(Cls);void Savea ndfree()/FILE *fp;/stude nt *p=head-n ext;char file name20;/printf(ttt保存數(shù)據(jù) n);/printf(ttt輸入文件名:);sca nf(ttt%s,file name);if(fp=fope n(file name,w)=NULL) / printf(ttt 打開文件失敗 n); system(pause);return;fprin tf(fp,tt學號姓名while(p!=NULL)/將所有記錄寫入文件定義文件指針定義文件名輸入文件名打開文件數(shù)分 英語數(shù)據(jù)結(jié)構(gòu)n);循環(huán)寫入文件f

41、prin tf(fp,tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p- Data);p=p-n ext;fclose(fp);/關(guān)閉文件printf( 成功!n);/返回成功信息system(pause);system(Cls);void xiugei(stude nt *head)/char xg20;/char nu m120;/char name120;/int math1;/int En glish1;/int Data1,t=1;/stude nt *p=head-n ext;prin tf(輸入需要修改的學生的學

42、號:scan f(%s,xg);while(p!=NULL)if(strcmp(p-nu m,xg)=0)/printf( prin tf(tt這是你要修改的學生的信息學號 姓名學生信息修改函數(shù)保存修改者的學號保存修改時輸入的學號保存修改時輸入的名字保存修改時輸入的數(shù)分保存修改時輸入的英語保存修改時輸入的數(shù)據(jù)結(jié)構(gòu),t用于輔助判斷 );查找成功,并顯示被修改者的信息n);數(shù)分 英語數(shù)據(jù)結(jié)構(gòu)n);a);prin tf(tt%-13s%-11s%-9d%-9d%dn,p- num,p- name,p-math,p-E nglish,p-Datprintf(請輸入你要修改的學生的學號、姓名、數(shù)分、英語

43、、數(shù)據(jù)結(jié)構(gòu): scanf(%s %s %d %d %d,num1,name1,&math1,&English1,&Data1); strcpy(p- num, num1); /字符串復制函數(shù)修改學號,名字n);strcpy(p-n ame, name1);p-math=math1;p-E nglish=E nglish1;p-Data=Data1;修改成績printf(修改成功 n); t=0;/p=p-n ext;/if(t=1)/printf(找不到要修改的學號!修改成功,賦值為0指針移動查找失敗,無修改者信息n); system(pause); system(Cls);/主函數(shù)int main(v oid) int a,c;/輔助選擇menu();int choice;while(1)prin tf(tt請選scan f(%d,&a); switch(a)case 0:/調(diào)用顯示函數(shù)先擇相應(yīng)的功能:);return 0;/退出系統(tǒng)case 1:/學生信息輸入create(); menu(); break;/輸入函數(shù)case 2:/信息顯示if(head) display(); menu ();/判斷鏈表是否空/顯示函數(shù)else/空鏈表,提小建表printf(鏈表為空,請先建立

溫馨提示

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

評論

0/150

提交評論