C語言程序設(shè)計-學(xué)生信息管理系統(tǒng)_第1頁
C語言程序設(shè)計-學(xué)生信息管理系統(tǒng)_第2頁
C語言程序設(shè)計-學(xué)生信息管理系統(tǒng)_第3頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言課程設(shè)計姓名:徐宗博學(xué)號:************班級:061092指導(dǎo)教師:曹老師2011年6月25日目錄第一章:實習(xí)內(nèi)容TOC\o"1-5"\h\z實習(xí)內(nèi)容簡介(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)附錄:參考文獻(19)源代碼(19)第一章:實習(xí)內(nèi)容1.1實習(xí)內(nèi)容簡介題目:學(xué)生通訊錄管理系統(tǒng)要求:1.可實現(xiàn)信息的添加、刪除,可按學(xué)號、姓名查詢;學(xué)生信息必須包含學(xué)號、姓名、學(xué)院、專業(yè)、籍貫。地址、電話號碼;必須有注釋。日期: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)體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以二進制格式儲存數(shù)據(jù)txtsave以文本格式儲存數(shù)據(jù)crete從二進制文件中讀取信息,建立鏈表deletinput將刪除信息導(dǎo)入恢復(fù)區(qū)鏈表system管理系統(tǒng)主要程序recover恢復(fù)區(qū)系統(tǒng)主要程序此外,局部變量的含義比較固定:head鏈表頭指針,右與rhead一同出現(xiàn)則代表管理系統(tǒng)鏈表頭指針select、input為選擇的值程序流程圖:本次實習(xí)我的思路就是,先從二進制文件中讀取信息,形成鏈表,對鏈表進行基本操作,如輸出、添加、刪除、查找。程序結(jié)束時將鏈表保存在二進制文件和文本文件中。管理系統(tǒng)流程圖:運行管理系統(tǒng)部分時,先從文件"information.xls”中讀取數(shù)據(jù)(若無該文件則創(chuàng)建文件),構(gòu)建鏈表;后續(xù)操作都是對于鏈表進行操作,如添加、查找、刪除、輸出等;離開該部分時則保存鏈表里的信息到已存在的ainformation.xls”,并以ASCII形式存儲至“學(xué)生信息庫.txt”,方便檢查?;謴?fù)區(qū)系統(tǒng)流程圖:恢復(fù)區(qū)系統(tǒng)思路與管理系統(tǒng)思路類似,連函數(shù)調(diào)用都是一樣的,二進制文件名為“dinformation.xls”,文本文件名為“刪除信息庫.txt”。具體函數(shù)模塊功能將在第三章中具體介紹。第三章:函數(shù)模塊介紹程序分為管理系統(tǒng)和恢復(fù)區(qū)系統(tǒng)兩部分和讀取文件、存儲文件四部分,以下分別介紹。3.1讀取文件、存儲文件讀取文件該函數(shù)模塊(程序名為creat)于管理系統(tǒng)或恢復(fù)區(qū)系統(tǒng)運行前運行,目的是讀取二進制文件信息,構(gòu)建鏈表;若無目標(biāo)文件,則創(chuàng)建文件。返回值為頭指針。函數(shù)主體為: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ù)模塊分為兩部分,以二進制形式存儲鏈表信息(程序名為save)和以文本形式存儲(程序名為txtsave)。二進制形式文件是為了讀取文件,優(yōu)點是快速;文本文件是為了方便檢查,優(yōu)點是明確可見。無返回值。二進制形式存儲程序為:voidsave(structstu*head,charfilename[20])//存儲鏈表信息(FILE*fp;structstu*p;p=head;fp=fopen(filename,"wb");//以二進制方式打開文件while((p!=NULL)&&fwrite(&(p->inf),LEN,1,fp))//寫入文件(p=p->next;}fclose(fp);}//其中head為鏈表頭指針,filename為存儲文件名,在主函數(shù)中已有定義。存儲在文本文件程序為:voidtxtsave(structstu*head,charfilename[20])//以文本形式將鏈表輸入文件(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,"%20s\n",(p->inf).phone);p=p->next;}}3.2管理系統(tǒng)模塊

管理系統(tǒng)(名為system)主要有四個函數(shù)功能部分,分別為添加、刪除、查找、輸出,以下依次介紹:添加該模塊函數(shù)名為表中從鍵盤上輸入信息structstu*p1,*p2;//管理系統(tǒng)(名為system)主要有四個函數(shù)功能部分,分別為添加、刪除、查找、輸出,以下依次介紹:添加該模塊函數(shù)名為表中從鍵盤上輸入信息structstu*p1,*p2;//p2=head;p1=(structstu*)malloc(LENS);//輸入信息printf("\n學(xué)號(輸入數(shù)值請小于32756):");scanf("%d",&((p1->inf).num));printf("\nprintf("\nprintf("\nprintf("\nprintf("\nprintf("\nadd,無返回值,參數(shù)為鏈表頭指針,功能為向已建立的鏈函數(shù)主體為:建立結(jié)構(gòu)體指針姓名:學(xué)院:專業(yè):省份:地址:IIIIIIII電話號碼:while((p2->next)!=NULL)//{p2=p2->next;}p2->next=p1;//移動指針p2=p1;);scanf("%s",(p1->inf).name););scanf("%s",(p1->inf).academy););scanf("%s",(p1->inf).majoy););scanf("%s",(p1->inf).province);");scanf("%s",(p1->inf).address);");scanf("%s",(p1->inf).phone);移動指針到鏈表尾函數(shù)名為delet,返回值為指向結(jié)構(gòu)體的鏈表頭指針,參數(shù)為鏈表頭指針,可按姓名和學(xué)號刪除。若按姓名刪除時,為防止同名情況,則查詢到一個目標(biāo),就顯示出信息,并提示是否刪除。按學(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)//找至U目標(biāo){print1(p1);deletinput(p1);//print1()為輸出相應(yīng)指針指向的節(jié)點信息deletinput()為向恢復(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);按姓名查找(包含同名情況):intselect=0,count=0;//selet選擇刪除與否,count代表刪除次數(shù)charsname[20];//定義要搜的名字structstu*p1,*p2;p1=head,p2=head;printf("請輸入學(xué)生姓名:\n");scanf("%s”,sname);//輸入學(xué)號while(p1!=NULL)//歷遍鏈表{if(strcmp(sname,p1->)==0)//與目標(biāo)名字是否一致,相同為0{print1(p1);//若符合姓名條件,顯示信息printf("刪除該生信息?\n刪除選1\n按其它鍵不刪除\n");//保證達到目標(biāo)姓名時顯示學(xué)生信息,可選擇不刪除scanf("%d",&select);if(select!=1){p2=p1;p1=p1->next;continue;}//不刪除就再次循環(huán)else{n--;deletinput(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);查找函數(shù)名為search,參數(shù)為鏈表頭指針,無返回值。其中查找可按姓名與學(xué)號進行查找,若找到目標(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(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ù)主體如下:charsname[20];//定義要查詢姓名的變量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=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(printf(printf(printf(printf(printf(printf(printf(printf(printf(printf(printf(printf("\n姓名%s”,(p->inf).name);"\n學(xué)院%s”,(p->inf).academy);"\n專業(yè)%s”,(p->inf).majoy);"\n省份%s”,(p->inf).province);"\n地址%s",(p->inf).address);"\n電話號碼%s\n”,(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ù)為: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->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é)號刪除:按姓名查詢,可面對重名情況:輸出:voidprint(structstu*head)恢復(fù)區(qū)系統(tǒng)菜單:voidrecover()文本形式保存:voidsave(structstu*head,charfilename[20])刪除信息導(dǎo)入恢復(fù)區(qū)鏈表:voiddeletinput(structstu*p)第四章:實習(xí)總結(jié)本次實習(xí),我制作了兩個版本的程序,一個是簡版,一個是升級版。其實,簡版就是管理系統(tǒng),升級版在簡版的基礎(chǔ)上還包含了恢復(fù)區(qū)系統(tǒng)。這也算是實現(xiàn)了程序的升級吧,安全性方面算是達標(biāo)了。本次實習(xí)的不足主要有:實用性不足。程序中學(xué)生信息定義的是長整型,故范圍有限,不能大于32756,否則就會溢出;如果定義為無符號的長整,也不過翻一番而已,并未增添多少位,我校學(xué)號可是有11位。但這樣方便比較給變量賦值,并且在查找中已有查找姓名字符串的應(yīng)用了,用長整型豐富了查找類型;其實完全可以定義學(xué)號為字符型數(shù)組,雖說浪費空間,但是方便輸入較長數(shù)值,且比較也很方便,可以直接調(diào)用查找姓名字符串的函數(shù)。程序中函數(shù)模塊利用率不高,除了讀取、存儲、查找、輸出這四個模塊被兩個系統(tǒng)調(diào)用外,其他刪除、添加只有管理系統(tǒng)用到;倒是printl這么一個輸出單一節(jié)點信息的程序被調(diào)用多次;函數(shù)模塊十分龐大,很多程序語句充斥在其中,沒有很好的分成幾部分子函數(shù),方便調(diào)用,這也導(dǎo)致了函數(shù)調(diào)用率不高;因為思路原因,程序中有三個全局變量,不利于程序的移植,可移植性不高;程序中查找模塊與刪除模塊沒有結(jié)合好,導(dǎo)致在刪除中又查找了一遍;說到底還是目標(biāo)不一樣,查找函數(shù)只要求目標(biāo)節(jié)點的指針,而刪除函數(shù)要前一個節(jié)點和目標(biāo)節(jié)點的指針,而且鏈表是單向的,知道后一個節(jié)點但不能知道前一個節(jié)點。若用雙向鏈表,那樣就可以將刪除與查找較好的結(jié)合在一起了。恢復(fù)區(qū)只有查找、輸出功能,沒有恢復(fù)與刪除功能,如此只能添加不能刪除,恢復(fù)區(qū)文件會越來越大;因為時間問題沒有建立恢復(fù)函數(shù),其實建立也不難,只是會與恢復(fù)區(qū)導(dǎo)入函數(shù)類似,再增加一全局變量而已;使用鏈表所以未排序。如果要給鏈表排序,可以在插入信息時就按順序插入,但是這勢必增加程序運行負擔(dān),而且效率不高,因為鏈表是單向的。可以用二叉樹,如果那樣的話效率就高多了,但是二叉樹我還不會。程序視圖就是C語言的黑框,沒有美觀可言。C+梯視圖好一些,我也想過用C+端譯一個窗口,然后在程序中調(diào)用。但是C+砸沒學(xué)會,而且在調(diào)試程序的過程中遇到一些困難讓我遺忘了這個想法,曾看程序看到凌晨兩點,所以想法沒有實踐。在軟件技術(shù)普及的今天,做個數(shù)據(jù)庫已是小菜一碟,很到軟件可以使用,如MicrosoftOfficeAccess,并且功能極其強大,比我花了幾天時間做出來的高級不知多少倍。與那些專業(yè)程序相比,我的這程序不值一提,也就是練習(xí)練習(xí)C語言而已。第五章:實習(xí)感受此次實習(xí)在一個涼爽的夏日開始,這在武漢極反常。因為我們考試基本考完了,只剩下一門英語了,所以實習(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語句查詢、刪除,讓我大開眼界,文件還能這么用!在寫報告時看到一篇用指針數(shù)組做的程序,相當(dāng)有意思。

發(fā)現(xiàn)水平還是不夠,同學(xué)可以用C語言編出一個比較漂亮的界面,還可以隨意調(diào)用文件操作,實在讓人贊嘆不已。此次實習(xí)加強了我對鏈表的理解,很多以前迷糊的概念得到了明確,亦讓我感到C語言強大之處,直接操作內(nèi)存,實在很暴力。一句詩概括此次實習(xí),“山重水復(fù)疑無路,柳暗花明又一村”;如今C語言實習(xí)已然結(jié)束,但是對于計算機語言的學(xué)習(xí)決不能放松,“雄關(guān)漫道真如鐵,而今邁步從頭越”?,F(xiàn)在的世界是信息化的,我們現(xiàn)在對于Matlab的要求也很大,C語言也是其基礎(chǔ)。路漫漫其修遠兮,吾將上下而求索。感謝曹老師抽出時間將C語言實習(xí)提前和這八天來的指導(dǎo),同時亦感謝大家這些天來的支持與幫助,此外額外感謝武漢夏天罕見的涼爽天氣,感謝生活。附錄參考書目譚浩強著〈〈C語言程序設(shè)計》2005年7月第3版298-299、300、302-303、338頁吳煌堅學(xué)長的實習(xí)報告源代碼#include<stdio.h>#include<malloc.h>#include<string.h>#defineNULL0#defineLENsizeof(structstudent)#defineLENSsizeof(structstu)structstudent//學(xué)生信息結(jié)構(gòu)體{longnum;//學(xué)生學(xué)號charname[20];//學(xué)生姓名characademy[20];//學(xué)院charmajoy[10];//專業(yè)charprovince[10];//省份charaddress[20];//地址charphone[11];//電話號碼};structstu//帶學(xué)生信息結(jié)構(gòu)體的鏈表單位{后續(xù)鏈表地址structstudentinf;structstu*next;//后續(xù)鏈表地址};intn;//記錄節(jié)點個數(shù)intsearchnum;//structstu*rhead;//structstu*creat(char頭指針{structstu*head;//structstu*p1,*p2;//搜索個數(shù),保證未搜索到時可顯示沒搜到方便全局調(diào)用恢復(fù)區(qū)鏈表創(chuàng)建鏈表,從文件中讀取數(shù)據(jù),返回filename1[20])//鏈表頭指針指針變量p1=p2=(structstu*)malloc(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;//elsep2->next=p1;//p2=p1;p1=(structstu*)malloc(LENS);}fclose(fp);p2->next=NULL;//尾結(jié)點處指針置0return(head);給頭結(jié)點賦值加新的結(jié)構(gòu)體}}voidsave(structstu*head,charfilename[20])//{存儲鏈表信息FILE*fp;structstu*p;p=head;fp=fopen(filename,"wb");//以二進制方式打開文件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é)點位置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);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=NULL;}voidtxtsave(structstu*head,charfilename[20])//以文本形式將鏈表輸入文件{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,"%20s\n”,(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\n",(p->inf).phone);}structstu*search_name(structstu*p,charsname[20])//按姓名搜索(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;return(p);}//若查找至U目標(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ù)值請小");scanf("%d",&((head->inf).num));printf("\nprintf("\nprintf("\nprintf("\nprintf("\nprintf("\n于32756));scanf("%s",(head->inf).name););scanf("%s”,(head->inf).academy););scanf("%s”,(head->inf).majoy);");scanf("%s",(head->inf).province);");scanf("%s",(head->inf).address);II姓名:學(xué)院:專業(yè):省份:地址:電話號碼:");scanf("%s",(head->inf).phone);增加節(jié)點,節(jié)點數(shù)n加IIIIIIn++;p2->next=NULL;continue;//環(huán),進入下一次}p1=(structstu*)malloc(LENS);//printf("\n學(xué)號(輸");scanf("%d",&((p1->inf).num)););scanf("%s",(p1->inf).name););scanf("%s",(p1->inf).academy););scanf("%s",(p1->inf).majoy););scanf("%s",(p1->inf).province);");scanf("%s",(p1->inf).address);");scanf("%s",(p1->inf).phone);移動指針到鏈表尾輸入信息入數(shù)值請小1,同時跳出此次循于32756)printf("\nprintf("\nprintf("\nprintf("\nprintf("\nprintf("\n姓名:學(xué)院:專業(yè):省份:地址:IIIIIIII電話號碼:while((p2->next)!=NULL)//{p2=p2->next;}p2->next=p1;//移動指針p2=p1;p2->next=NULL;n++;//節(jié)點數(shù)加1}}voidsearch(structstu*head)//搜索信息(searchnum=0;if(n==0){printf(”此時無數(shù)據(jù)");return;}//節(jié)點數(shù)為0狀態(tài)structstu*p;p=head;printf("請輸入擬搜索信息:\n");printf("按姓名查找請按1\n按學(xué)號查找請按2\n");//分類查找intinput=0;scanf("%d”,&input);//導(dǎo)入分類if(input==1)//按姓名查找{charsname[20];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)print1(p);//若查找到目標(biāo),輸出elsebreak;p=p->next;//傳遞指針}}else{printf("輸入錯誤”);return;}}structstu*delet(structstu*head)//刪除信息{if(n==0){printf("無學(xué)生信息”);return(head);}intinput=0;//選擇變量:學(xué)號、姓名printf("按姓名刪除請按1\n按學(xué)號刪除請按2\n");//分類刪除scanf("%d",&input);if(input==2)//按學(xué)號刪除(學(xué)號默認唯一){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)//找至U目標(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,count=0;//charsname[20];選擇刪除與否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刪除選1\n按其它鍵不刪除\n");//保證達到目標(biāo)姓名時顯示學(xué)生信息,可選擇不刪除scanf("%d”,&select);if(select!=1){p2=p1;p1=p1->next;continue;}//不刪除就再次循環(huán)else{n--;deletinput(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);}else{printf("輸入錯誤");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);printf("\n電話號碼%s\n",(p->inf).phone);p=p->next;}}voidsystem()(命名系統(tǒng)數(shù)據(jù)庫命名恢復(fù)區(qū)文件數(shù)據(jù)庫命名系統(tǒng)文本文件命名恢復(fù)區(qū)文本文件struct命名系統(tǒng)數(shù)據(jù)庫命名恢復(fù)區(qū)文件數(shù)據(jù)庫命名系統(tǒng)文本文件命名恢復(fù)區(qū)文本文件charfilename1[20]="information.xls”;//charfilename2[20]="dinformation.xls”;//charfilename3[20]="學(xué)生信息庫.txt”;//ch

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論