




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。C語言程序設(shè)計學(xué)生信息管理系統(tǒng)-C語言課程設(shè)計姓名:徐宗博學(xué)號:*班級:061092指導(dǎo)教師:曹老師2011年6月25日目錄第一章:實習(xí)內(nèi)容1.1實習(xí)內(nèi)容簡介(2)1.2程序代號說明(3)第二章:程序流程圖第三章:函數(shù)模塊介紹3.1讀取文件、存儲文件(6)3.2管理系統(tǒng)模塊(8)3.3恢復(fù)區(qū)系統(tǒng)模塊(12)3.4功能展示(12)第四章:實習(xí)總結(jié)(16)第五章:實習(xí)體會(17)附錄:參考文獻(xiàn)(19)源代碼(19)第一章:實習(xí)內(nèi)容1.1實習(xí)內(nèi)容簡介題目:學(xué)生通訊錄管理系統(tǒng)要求:1.可實現(xiàn)信息的添加、刪除,可
2、按學(xué)號、姓名查詢;2.學(xué)生信息必須包含學(xué)號、姓名、學(xué)院、專業(yè)、籍貫。地址、電話號碼;3.必須有注釋。日期:2011年6月20日至27日,共8個半天。地點:信息樓301指導(dǎo)老師:曹雪蓮?fù)瓿汕闆r:程序可完成信息的添加,可按學(xué)號、姓名分別查詢;程序可按姓名、學(xué)號分別刪除,并在刪除前顯示刪除學(xué)生的全部信息;按姓名刪除,若出現(xiàn)同名情況,會依次出現(xiàn)系統(tǒng)提示是否刪除,可選擇刪除或跳過;在程序文件夾中有一“學(xué)生信息庫”的txt文件,可查看學(xué)生系統(tǒng)里全部學(xué)生信息;設(shè)置有一個恢復(fù)區(qū)系統(tǒng),可輸出、查詢刪除的信息,并在可同文件夾中“刪除信息庫”的txt文件中查看刪除信息;總體結(jié)構(gòu)如下:1.2程序代號說明代號說明結(jié)構(gòu)體
3、student結(jié)構(gòu)體stu全局變量num學(xué)號inf學(xué)生信息,包含左結(jié)構(gòu)體student全部信息n鏈表節(jié)點數(shù)量name姓名next本類型結(jié)構(gòu)體指針rhead恢復(fù)區(qū)鏈表頭指針academy學(xué)院searchnum目標(biāo)個數(shù)major專業(yè)province省份address地址phone電話號碼函數(shù)add增加delet刪除(按姓名或?qū)W號)search查找search_num搜索學(xué)號search_name搜索姓名print輸出鏈表上信息print1輸出鏈表上單個節(jié)點的信息save以二進(jìn)制格式儲存數(shù)據(jù)txtsave以文本格式儲存數(shù)據(jù)crete從二進(jìn)制文件中讀取信息,建立鏈表deletinput將刪除信息導(dǎo)入恢
4、復(fù)區(qū)鏈表system管理系統(tǒng)主要程序recover恢復(fù)區(qū)系統(tǒng)主要程序此外,局部變量的含義比較固定:head鏈表頭指針,若與rhead一同出現(xiàn)則代表管理系統(tǒng)鏈表頭指針select、input為選擇的值filename文件名第二章:程序流程圖程序流程圖:本次實習(xí)我的思路就是,先從二進(jìn)制文件中讀取信息,形成鏈表,對鏈表進(jìn)行基本操作,如輸出、添加、刪除、查找。程序結(jié)束時將鏈表保存在二進(jìn)制文件和文本文件中。管理系統(tǒng)流程圖:運行管理系統(tǒng)部分時,先從文件“information.xls”中讀取數(shù)據(jù)(若無該文件則創(chuàng)建文件),構(gòu)建鏈表;后續(xù)操作都是對于鏈表進(jìn)行操作,如添加、查找、刪除、輸出等;離開該部分時則保存
5、鏈表里的信息到已存在的“information.xls”,并以ASCII形式存儲至“學(xué)生信息庫.txt”,方便檢查。恢復(fù)區(qū)系統(tǒng)流程圖:恢復(fù)區(qū)系統(tǒng)思路與管理系統(tǒng)思路類似,連函數(shù)調(diào)用都是一樣的,二進(jìn)制文件名為“dinformation.xls”,文本文件名為“刪除信息庫.txt”。具體函數(shù)模塊功能將在第三章中具體介紹。第三章:函數(shù)模塊介紹程序分為管理系統(tǒng)和恢復(fù)區(qū)系統(tǒng)兩部分和讀取文件、存儲文件四部分,以下分別介紹。3.1讀取文件、存儲文件讀取文件該函數(shù)模塊(程序名為creat)于管理系統(tǒng)或恢復(fù)區(qū)系統(tǒng)運行前運行,目的是讀取二進(jìn)制文件信息,構(gòu)建鏈表;若無目標(biāo)文件,則創(chuàng)建文件。返回值為頭指針。函數(shù)主體為:
6、structstu*p1,*p2;structstu*head;while(fread(&(p1-inf),LEN,1,fp)/讀取數(shù)據(jù)n=n+1;/若讀取數(shù)據(jù)成功節(jié)點數(shù)加一if(n=1)head=p1;/給頭結(jié)點賦值elsep2-next=p1;/加新的結(jié)構(gòu)體p2=p1;p1=(structstu*)malloc(LENS);fclose(fp);p2-next=NULL;/尾結(jié)點處指針置0return(head);存儲文件該函數(shù)模塊分為兩部分,以二進(jìn)制形式存儲鏈表信息(程序名為save)和以文本形式存儲(程序名為txtsave)。二進(jìn)制形式文件是為了讀取文件,優(yōu)點是快速;文本文件是為了方便
7、檢查,優(yōu)點是明確可見。無返回值。二進(jìn)制形式存儲程序為:voidsave(structstu*head,charfilename20)/存儲鏈表信息FILE*fp;structstu*p;p=head;fp=fopen(filename,wb);/以二進(jìn)制方式打開文件while(p!=NULL)&fwrite(&(p-inf),LEN,1,fp)/寫入文件p=p-next;fclose(fp);/其中head為鏈表頭指針,filename為存儲文件名,在主函數(shù)中已有定義。存儲在文本文件程序為:voidtxtsave(structstu*head,charfilename20)/以文本形式將鏈表輸
8、入文件FILE*fp;structstu*p;p=head;fp=fopen(filename,w);/以文本形式打開while(p!=NULL)/鏈表不到盡頭不停止fprintf(fp,%ld,(p-inf).num);/向文本文件中寫入數(shù)據(jù)fprintf(fp,%10s,(p-inf).name);fprintf(fp,%10s,(p-inf).academy);fprintf(fp,%10s,(p-inf).majoy);fprintf(fp,%10s,(p-inf).province);fprintf(fp,%10s,(p-inf).address);fprintf(fp,%20sn,
9、(p-inf).phone);p=p-next;3.2管理系統(tǒng)模塊管理系統(tǒng)(名為system)主要有四個函數(shù)功能部分,分別為添加、刪除、查找、輸出,以下依次介紹:添加該模塊函數(shù)名為add,無返回值,參數(shù)為鏈表頭指針,功能為向已建立的鏈表中從鍵盤上輸入信息。函數(shù)主體為:structstu*p1,*p2;/建立結(jié)構(gòu)體指針p2=head;p1=(structstu*)malloc(LENS);/輸入信息printf(n學(xué)號(輸入數(shù)值請小于32756):);scanf(%d,&(p1-inf).num);printf(n姓名:);scanf(%s,(p1-inf).name);printf(n學(xué)院:)
10、;scanf(%s,(p1-inf).academy);printf(n專業(yè):);scanf(%s,(p1-inf).majoy);printf(n省份:);scanf(%s,(p1-inf).province);printf(n地址:);scanf(%s,(p1-inf).address);printf(n電話號碼:);scanf(%s,(p1-inf).phone);while(p2-next)!=NULL)/移動指針到鏈表尾p2=p2-next;p2-next=p1;/移動指針p2=p1;p2-next=NULL;刪除函數(shù)名為delet,返回值為指向結(jié)構(gòu)體的鏈表頭指針,參數(shù)為鏈表頭指針,
11、可按姓名和學(xué)號刪除。若按姓名刪除時,為防止同名情況,則查詢到一個目標(biāo),就顯示出信息,并提示是否刪除。1.按學(xué)號查找的函數(shù)主體為:printf(請輸入擬刪除學(xué)生學(xué)號:n);longsnum=0;scanf(%ld,&snum);structstu*p1,*p2;p1=head;while(snum!=p1-inf.num&p1-next!=NULL)/p1指向的學(xué)號不是要找的節(jié)點,并且后面還有節(jié)點p2=p1;p1=p1-next;/p1后移if(snum=p1-inf.num)/找到目標(biāo)print1(p1);deletinput(p1);/print1()為輸出相應(yīng)指針指向的節(jié)點信息deleti
12、nput()為向恢復(fù)區(qū)系統(tǒng)鏈表輸入信息的函數(shù),在后續(xù)3.3中會提及if(p1=head)head=p1-next;/若p1指向頭節(jié)點,將第二個節(jié)點位置賦予headelsep2-next=p1-next;/否則將下一結(jié)點位置賦給前一節(jié)點位置n-;elseprintf(該學(xué)生不存在);return(head);2.按姓名查找(包含同名情況):intselect=0,count=0;/selet選擇刪除與否,count代表刪除次數(shù)charsname20;/定義要搜的名字structstu*p1,*p2;p1=head,p2=head;printf(請輸入學(xué)生姓名:n);scanf(%s,sname)
13、;/輸入學(xué)號while(p1!=NULL)/歷遍鏈表if(strcmp(sname,p1-)=0)/與目標(biāo)名字是否一致,相同為0print1(p1);/若符合姓名條件,顯示信息printf(刪除該生信息?n刪除選1n按其它鍵不刪除n);/保證達(dá)到目標(biāo)姓名時顯示學(xué)生信息,可選擇不刪除scanf(%d,&select);if(select!=1)p2=p1;p1=p1-next;continue;/不刪除就再次循環(huán)elsen-;deletinput(p1);count+;/刪除數(shù)加一if(p1=head)head=p1-next;/刪除信息elsep2-next=p1-next;/更改指針,繞過目
14、標(biāo)p2=p1;p1=p1-next;if(count=0)printf(該生信息不存在);/若未刪除則視為未發(fā)現(xiàn)目標(biāo)學(xué)生return(head);查找函數(shù)名為search,參數(shù)為鏈表頭指針,無返回值。其中查找可按姓名與學(xué)號進(jìn)行查找,若找到目標(biāo)即出現(xiàn)在屏幕;若出現(xiàn)同名情況,則依次顯示。查找與刪除函數(shù)語句類似,但是刪除要求目標(biāo)的前一個節(jié)點的指針與目標(biāo)節(jié)點的指針都能知道;而查找要求則低多了。因為這個原因,在加上我是先寫的查找,所以刪除中未調(diào)用查找函數(shù)。按學(xué)號查找函數(shù)主體如下:longsnum;/定義要查詢學(xué)號變量printf(請輸入學(xué)號:n);scanf(%ld,&snum);/輸入學(xué)號while(
15、p!=NULL)/歷遍鏈表p=search_num(p,snum);/此為調(diào)用函數(shù),效果是查找到與目標(biāo)相同的信息然后返回相應(yīng)指針if(p!=NULL)print1(p);/若查找到目標(biāo),輸出elsebreak;p=p-next;/傳遞指針,繼續(xù)按姓名查找函數(shù)主體如下:charsname20;/定義要查詢姓名的變量printf(請輸入姓名:n);scanf(%s,sname);/輸入姓名while(p!=NULL)p=search_name(p,sname);/與上文中search_num類似,返回同名目標(biāo)的指針if(p!=NULL)print1(p);/若查找到目標(biāo),輸出elsebreak;p
16、=p-next;/傳遞指針輸出函數(shù)名為print,參數(shù)為鏈表頭指針head,無返回值。函數(shù)作用就是沿鏈表依次輸出學(xué)生信息。函數(shù)主體為:printf(全體學(xué)生數(shù)據(jù)如下:n);if(n=0)printf(無學(xué)生信息);return;/若節(jié)點為0則返回structstu*p;p=head;while(p!=NULL)/循環(huán)輸出printf(n學(xué)號%d,(p-inf).num);printf(n姓名%s,(p-inf).name);printf(n學(xué)院%s,(p-inf).academy);printf(n專業(yè)%s,(p-inf).majoy);printf(n省份%s,(p-inf).provinc
17、e);printf(n地址%s,(p-inf).address);printf(n電話號碼%sn,(p-inf).phone);p=p-next;3.3恢復(fù)區(qū)系統(tǒng)模塊恢復(fù)區(qū)系統(tǒng)(其名為recover)是為了顯示被刪除信息而建立的,在函數(shù)運行之初便建立了恢復(fù)區(qū)鏈表,頭指針設(shè)為rhead,與管理系統(tǒng)頭指針head相區(qū)別。并且,rhead被設(shè)為全局變量,方便被函數(shù)調(diào)用。恢復(fù)區(qū)系統(tǒng)主要有查找、輸出功能,其功能模塊基本調(diào)用管理系統(tǒng)的函數(shù),所以不再贅述。而恢復(fù)區(qū)的輸入函數(shù),即管理區(qū)刪除信息時將信息輸入恢復(fù)區(qū)鏈表的函數(shù),上文已提及,即deletinput,此為連接恢復(fù)區(qū)與管理系統(tǒng)的橋梁,只不過是單行的。函數(shù)
18、為:voiddeletinput(structstu*p)/將刪除信息導(dǎo)入恢復(fù)區(qū)鏈表,p為要刪除信息的指針structstu*p1,*p2;p1=rhead;/恢復(fù)區(qū)鏈表頭節(jié)點位置while(p1-next!=NULL)/指針置于鏈表尾端p1=p1-next;p2=p1;p1=(structstu*)malloc(LENS);/復(fù)制結(jié)構(gòu)體信息p1-inf.num=p-inf.num;strcpy(p1-,p-);strcpy(p1-inf.academy,p-inf.academy);/復(fù)制字符數(shù)組,以下類似strcpy(p1-inf.majoy,p-inf.majoy);strcpy(p1-
19、vince,p-vince);strcpy(p1-inf.address,p-inf.address);strcpy(p1-inf.phone,p-inf.phone);p2-next=p1;p1-next=NULL;/鏈表尾設(shè)為NULL以上程序函數(shù)模塊基本介紹完畢,由于篇幅有限,很多函數(shù)模塊只摘錄了主體,若仍有疑惑處,可參考附錄中的源代碼。3.4功能展示主界面:管理系統(tǒng):voidsystem()添加:voidadd(structstu*head)可連續(xù)添加查找:voidsearch(structstu*head)刪除:structstu*delet(structstu*head)按學(xué)號刪除:
20、按姓名查詢,可面對重名情況:輸出:voidprint(structstu*head)恢復(fù)區(qū)系統(tǒng)菜單:voidrecover()文本形式保存:voidsave(structstu*head,charfilename20)刪除信息導(dǎo)入恢復(fù)區(qū)鏈表:voiddeletinput(structstu*p)第四章:實習(xí)總結(jié)本次實習(xí),我制作了兩個版本的程序,一個是簡版,一個是升級版。其實,簡版就是管理系統(tǒng),升級版在簡版的基礎(chǔ)上還包含了恢復(fù)區(qū)系統(tǒng)。這也算是實現(xiàn)了程序的升級吧,安全性方面算是達(dá)標(biāo)了。本次實習(xí)的不足主要有:1實用性不足。程序中學(xué)生信息定義的是長整型,故范圍有限,不能大于32756,否則就會溢出;如
21、果定義為無符號的長整,也不過翻一番而已,并未增添多少位,我校學(xué)號可是有11位。但這樣方便比較給變量賦值,并且在查找中已有查找姓名字符串的應(yīng)用了,用長整型豐富了查找類型;其實完全可以定義學(xué)號為字符型數(shù)組,雖說浪費空間,但是方便輸入較長數(shù)值,且比較也很方便,可以直接調(diào)用查找姓名字符串的函數(shù)。2程序中函數(shù)模塊利用率不高,除了讀取、存儲、查找、輸出這四個模塊被兩個系統(tǒng)調(diào)用外,其他刪除、添加只有管理系統(tǒng)用到;倒是print1這么一個輸出單一節(jié)點信息的程序被調(diào)用多次;3函數(shù)模塊十分龐大,很多程序語句充斥在其中,沒有很好的分成幾部分子函數(shù),方便調(diào)用,這也導(dǎo)致了函數(shù)調(diào)用率不高;4因為思路原因,程序中有三個全局
22、變量,不利于程序的移植,可移植性不高;5程序中查找模塊與刪除模塊沒有結(jié)合好,導(dǎo)致在刪除中又查找了一遍;說到底還是目標(biāo)不一樣,查找函數(shù)只要求目標(biāo)節(jié)點的指針,而刪除函數(shù)要前一個節(jié)點和目標(biāo)節(jié)點的指針,而且鏈表是單向的,知道后一個節(jié)點但不能知道前一個節(jié)點。若用雙向鏈表,那樣就可以將刪除與查找較好的結(jié)合在一起了。6恢復(fù)區(qū)只有查找、輸出功能,沒有恢復(fù)與刪除功能,如此只能添加不能刪除,恢復(fù)區(qū)文件會越來越大;因為時間問題沒有建立恢復(fù)函數(shù),其實建立也不難,只是會與恢復(fù)區(qū)導(dǎo)入函數(shù)類似,再增加一全局變量而已;7使用鏈表所以未排序。如果要給鏈表排序,可以在插入信息時就按順序插入,但是這勢必增加程序運行負(fù)擔(dān),而且效率不
23、高,因為鏈表是單向的??梢杂枚鏄洌绻菢拥脑捫示透叨嗔?,但是二叉樹我還不會。8.程序視圖就是C語言的黑框,沒有美觀可言。C+的視圖好一些,我也想過用C+編譯一個窗口,然后在程序中調(diào)用。但是C+還沒學(xué)會,而且在調(diào)試程序的過程中遇到一些困難讓我遺忘了這個想法,曾看程序看到凌晨兩點,所以想法沒有實踐。9.在軟件技術(shù)普及的今天,做個數(shù)據(jù)庫已是小菜一碟,很到軟件可以使用,如MicrosoftOfficeAccess,并且功能極其強大,比我花了幾天時間做出來的高級不知多少倍。與那些專業(yè)程序相比,我的這程序不值一提,也就是練習(xí)練習(xí)C語言而已。第五章:實習(xí)感受此次實習(xí)在一個涼爽的夏日開始,這在武漢極反常
24、。因為我們考試基本考完了,只剩下一門英語了,所以實習(xí)時間比較充裕。實習(xí)的題目也不算太難,思路很清晰,總共三步走:1.讀取文件;2.處理鏈表;3.保存文件。操作的主體是鏈表,原以為會很輕松,但還是遇到很多問題,以前上課時從未想到過。經(jīng)歷過基本一天都在看程序的時間,我發(fā)現(xiàn)我懂的太少,要學(xué)的太多。對文件的操作我一直都沒注意,現(xiàn)在才發(fā)現(xiàn)其樂無窮;以前覺得鏈表很難,現(xiàn)在輕松寫出程序。學(xué)習(xí)與實踐果然是不可分割的。實習(xí)中,大家八仙過海各顯神通,用鏈表是比較傳統(tǒng)的,而且節(jié)省內(nèi)存,有的用數(shù)組,這也可以理解,方便使用,排序便利;有的直接用文件C語句查詢、刪除,讓我大開眼界,文件還能這么用!在寫報告時看到一篇用指針
25、數(shù)組做的程序,相當(dāng)有意思。發(fā)現(xiàn)水平還是不夠,同學(xué)可以用C語言編出一個比較漂亮的界面,還可以隨意調(diào)用文件操作,實在讓人贊嘆不已。此次實習(xí)加強了我對鏈表的理解,很多以前迷糊的概念得到了明確,亦讓我感到C語言強大之處,直接操作內(nèi)存,實在很暴力。一句詩概括此次實習(xí),“山重水復(fù)疑無路,柳暗花明又一村”;如今C語言實習(xí)已然結(jié)束,但是對于計算機語言的學(xué)習(xí)決不能放松,“雄關(guān)漫道真如鐵,而今邁步從頭越”。現(xiàn)在的世界是信息化的,我們現(xiàn)在對于Matlab的要求也很大,C語言也是其基礎(chǔ)。路漫漫其修遠(yuǎn)兮,吾將上下而求索。感謝曹老師抽出時間將C語言實習(xí)提前和這八天來的指導(dǎo),同時亦感謝大家這些天來的支持與幫助,此外額外感謝
26、武漢夏天罕見的涼爽天氣,感謝生活。附錄參考書目1.譚浩強著C語言程序設(shè)計2005年7月第3版298-299、300、302-303、338頁2./view/4be08c81e53a580216fcfefb.html吳煌堅學(xué)長的實習(xí)報告源代碼#include#include#include#defineNULL0#defineLENsizeof(structstudent)#defineLENSsizeof(structstu)structstudent/學(xué)生信息結(jié)構(gòu)體longnum;/學(xué)生學(xué)號charname20;/學(xué)生姓名characademy20;/學(xué)院charmajoy10;/專業(yè)cha
27、rprovince10;/省份charaddress20;/地址charphone11;/電話號碼;structstu/帶學(xué)生信息結(jié)構(gòu)體的鏈表單位structstudentinf;structstu*next;/后續(xù)鏈表地址;intn;/記錄節(jié)點個數(shù)intsearchnum;/搜索個數(shù),保證未搜索到時可顯示沒搜到structstu*rhead;/方便全局調(diào)用恢復(fù)區(qū)鏈表structstu*creat(charfilename120)/創(chuàng)建鏈表,從文件中讀取數(shù)據(jù),返回頭指針structstu*head;/鏈表頭指針structstu*p1,*p2;/指針變量p1=p2=(structstu*)ma
28、lloc(LENS);FILE*fp;/打開文件讀取數(shù)據(jù)if(fp=fopen(filename1,rb)=NULL)/若文件不存在則建立文件printf(暫無任何學(xué)生信息n);fp=fopen(filename1,wb+);/建立文件fclose(fp);p1-next=NULL;return(p1);else/讀取文件信息,建立鏈表n=0;/此時無結(jié)點head=p1;while(fread(&(p1-inf),LEN,1,fp)n=n+1;if(n=1)head=p1;/給頭結(jié)點賦值elsep2-next=p1;/加新的結(jié)構(gòu)體p2=p1;p1=(structstu*)malloc(LENS
29、);fclose(fp);p2-next=NULL;/尾結(jié)點處指針置0return(head);voidsave(structstu*head,charfilename20)/存儲鏈表信息FILE*fp;structstu*p;p=head;fp=fopen(filename,wb);/以二進(jìn)制方式打開文件while(p!=NULL)&fwrite(&(p-inf),LEN,1,fp)/寫入文件p=p-next;fclose(fp);voiddeletinput(structstu*p)/將刪除信息導(dǎo)入恢復(fù)區(qū)鏈表structstu*p1,*p2;p1=rhead;/恢復(fù)區(qū)鏈表頭節(jié)點位置whil
30、e(p1-next!=NULL)/指針置于鏈表尾端p1=p1-next;p2=p1;p1=(structstu*)malloc(LENS);/復(fù)制結(jié)構(gòu)體信息p1-inf.num=p-inf.num;strcpy(p1-,p-);strcpy(p1-inf.academy,p-inf.academy);strcpy(p1-inf.majoy,p-inf.majoy);strcpy(p1-vince,p-vince);strcpy(p1-inf.address,p-inf.address);strcpy(p1-inf.phone,p-inf.phone);p2-next=p1;p1-next=NU
31、LL;voidtxtsave(structstu*head,charfilename20)/以文本形式將鏈表輸入文件FILE*fp;structstu*p;p=head;fp=fopen(filename,w);/以文本形式打開while(p!=NULL)/鏈表不到盡頭不停止fprintf(fp,%ld,(p-inf).num);/向文本文件中寫入數(shù)據(jù)fprintf(fp,%10s,(p-inf).name);fprintf(fp,%10s,(p-inf).academy);fprintf(fp,%10s,(p-inf).majoy);fprintf(fp,%10s,(p-inf).provi
32、nce);fprintf(fp,%10s,(p-inf).address);fprintf(fp,%20sn,(p-inf).phone);p=p-next;voidprint1(structstu*p)/輸出單個學(xué)生結(jié)構(gòu)體信息printf(n學(xué)號%d,(p-inf).num);printf(n姓名%s,(p-inf).name);printf(n學(xué)院%s,(p-inf).academy);printf(n專業(yè)%s,(p-inf).majoy);printf(n省份%s,(p-inf).province);printf(n地址%s,(p-inf).address);printf(n電話號碼%s
33、n,(p-inf).phone);structstu*search_name(structstu*p,charsname20)/按姓名搜索while(p!=NULL)if(strcmp(sname,p-)=0)+searchnum;return(p);/若查找到目標(biāo),返回指針p=p-next;if(searchnum=0)printf(沒有該學(xué)生信息);return(NULL);/返回NULL以保證返回值structstu*search_num(structstu*p,longsnum)/按學(xué)號搜索while(p!=NULL)if(snum=(p-inf.num)+searchnum;retu
34、rn(p);/若查找到目標(biāo),返回指針p=p-next;if(searchnum=0)printf(沒有該學(xué)生信息);return(NULL);/返回NULL以保證返回值voidadd(structstu*head)/添加信息intinput=1;/給輸入按鈕賦初值structstu*p1,*p2;/建立結(jié)構(gòu)體指針p2=head;while(input!=0)printf(請選擇:n輸入0返回主菜單n輸入1繼續(xù)n);scanf(%d,&input);/輸入按鈕賦值if(input=0)break;/判斷是否返回主菜單if(n=0)/鏈表無節(jié)點,給*head填充數(shù)據(jù)printf(n學(xué)號(輸入數(shù)值請
35、小于32756):);scanf(%d,&(head-inf).num);printf(n姓名:);scanf(%s,(head-inf).name);printf(n學(xué)院:);scanf(%s,(head-inf).academy);printf(n專業(yè):);scanf(%s,(head-inf).majoy);printf(n省份:);scanf(%s,(head-inf).province);printf(n地址:);scanf(%s,(head-inf).address);printf(n電話號碼:);scanf(%s,(head-inf).phone);n+;p2-next=NULL
36、;continue;/增加節(jié)點,節(jié)點數(shù)n加1,同時跳出此次循環(huán),進(jìn)入下一次p1=(structstu*)malloc(LENS);/輸入信息printf(n學(xué)號(輸入數(shù)值請小于32756):);scanf(%d,&(p1-inf).num);printf(n姓名:);scanf(%s,(p1-inf).name);printf(n學(xué)院:);scanf(%s,(p1-inf).academy);printf(n專業(yè):);scanf(%s,(p1-inf).majoy);printf(n省份:);scanf(%s,(p1-inf).province);printf(n地址:);scanf(%s,(
37、p1-inf).address);printf(n電話號碼:);scanf(%s,(p1-inf).phone);while(p2-next)!=NULL)/移動指針到鏈表尾p2=p2-next;p2-next=p1;/移動指針p2=p1;p2-next=NULL;n+;/節(jié)點數(shù)加1voidsearch(structstu*head)/搜索信息searchnum=0;if(n=0)printf(此時無數(shù)據(jù));return;/節(jié)點數(shù)為0狀態(tài)structstu*p;p=head;printf(請輸入擬搜索信息:n);printf(按姓名查找請按1n按學(xué)號查找請按2n);/分類查找intinput=
38、0;scanf(%d,&input);/導(dǎo)入分類if(input=1)/按姓名查找charsname20;printf(請輸入姓名:n);scanf(%s,sname);/輸入姓名while(p!=NULL)p=search_name(p,sname);if(p!=NULL)print1(p);/若查找到目標(biāo),輸出elsebreak;p=p-next;/傳遞指針elseif(input=2)/按學(xué)號查找longsnum;printf(請輸入學(xué)號:n);scanf(%ld,&snum);/輸入學(xué)號while(p!=NULL)p=search_num(p,snum);if(p!=NULL)prin
39、t1(p);/若查找到目標(biāo),輸出elsebreak;p=p-next;/傳遞指針elseprintf(輸入錯誤);return;structstu*delet(structstu*head)/刪除信息if(n=0)printf(無學(xué)生信息);return(head);intinput=0;/選擇變量:學(xué)號、姓名printf(按姓名刪除請按1n按學(xué)號刪除請按2n);/分類刪除scanf(%d,&input);if(input=2)/按學(xué)號刪除(學(xué)號默認(rèn)唯一)printf(請輸入擬刪除學(xué)生學(xué)號:n);longsnum=0;scanf(%ld,&snum);structstu*p1,*p2;p1=h
40、ead;while(snum!=p1-inf.num&p1-next!=NULL)/p1指向的學(xué)號不是要找的節(jié)點,并且后面還有節(jié)點p2=p1;p1=p1-next;/p1后移if(snum=p1-inf.num)/找到目標(biāo)print1(p1);deletinput(p1);if(p1=head)head=p1-next;/若p1指向頭節(jié)點,將第二個節(jié)點位置賦予headelsep2-next=p1-next;/否則將下一結(jié)點位置賦給前一節(jié)點位置n-;elseprintf(該學(xué)生不存在);return(head);elseif(input=1)/按姓名刪除(姓名可以重復(fù))intselect=0,c
41、ount=0;/選擇刪除與否charsname20;structstu*p1,*p2;p1=head,p2=head;printf(請輸入學(xué)生姓名:n);scanf(%s,sname);/輸入學(xué)號while(p1!=NULL)/歷遍鏈表if(strcmp(sname,p1-)=0)print1(p1);/若符合姓名條件,顯示信息printf(刪除該生信息?n刪除選1n按其它鍵不刪除n);/保證達(dá)到目標(biāo)姓名時顯示學(xué)生信息,可選擇不刪除scanf(%d,&select);if(select!=1)p2=p1;p1=p1-next;continue;/不刪除就再次循環(huán)elsen-;deletinpu
42、t(p1);count+;/刪除數(shù)加一if(p1=head)head=p1-next;/刪除信息elsep2-next=p1-next;/更改指針,繞過目標(biāo)p2=p1;p1=p1-next;if(count=0)printf(該生信息不存在);/若未刪除則視為未發(fā)現(xiàn)目標(biāo)學(xué)生return(head);elseprintf(輸入錯誤);return(head);voidprint(structstu*head)/輸出全部數(shù)據(jù)數(shù)據(jù)printf(全體學(xué)生數(shù)據(jù)如下:n);if(n=0)printf(無學(xué)生信息);return;/若節(jié)點為0則返回structstu*p;p=head;while(p!=NULL)/循環(huán)輸出printf(n學(xué)號%d,(p-inf).num);printf(n姓名%s,(p-inf).name);printf(n學(xué)院%s,(p-inf).academy);printf(n專業(yè)%s,(p-inf).majoy);printf(n省份%s,(p-inf).province);printf(n地址%s,(p-inf).address
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寫字樓保安培訓(xùn)
- 七下英語rj期末試卷及答案
- 七年級音體美試卷及答案
- 口底癌護(hù)理查房
- 2025年儲藏室買賣合同7篇
- 耳鼻喉科護(hù)理實習(xí)生
- 2024年秋新冀教版一年級上冊數(shù)學(xué) 1.2.3 5以內(nèi)的減法 教學(xué)課件
- 胃造瘺管護(hù)理常規(guī)
- 吊車籃筐施工方案
- 2025版高考英語一輪復(fù)習(xí)Module5GreatPeopleandGreatInventionsofAncientChina練習(xí)含解析外研版必修3
- 無違法犯罪記錄證明申請表(個人)
- 愛情片《百萬英鎊》臺詞-中英文對照
- 迷你中長導(dǎo)管-
- 當(dāng)前宏觀經(jīng)濟形勢分析課件
- 工作描述及工作負(fù)荷分析表
- 中國銀行貸款合同中國銀行貸款合同
- 陜09J02 屋面標(biāo)準(zhǔn)圖集
- 例談非遺與勞動教育融合的教學(xué)思考 論文
- 消化道大出血
- 掛職鍛煉第一季度工作小結(jié)范文
- 博物館展示設(shè)計復(fù)習(xí)資料
評論
0/150
提交評論