教師管理系統(tǒng) 線性表的操作_第1頁(yè)
教師管理系統(tǒng) 線性表的操作_第2頁(yè)
教師管理系統(tǒng) 線性表的操作_第3頁(yè)
教師管理系統(tǒng) 線性表的操作_第4頁(yè)
教師管理系統(tǒng) 線性表的操作_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一 線性表的基本操作班級(jí): 通信1411 學(xué)號(hào): 141003410122 姓名: 楊銳 1. 實(shí)驗(yàn)?zāi)康模豪斫饩€性表的概念;掌握線性表的基本操作;掌握線性表的建立、插入、刪除、查找和輸出等基本操作。2. 實(shí)驗(yàn)內(nèi)容:利用線性表實(shí)現(xiàn)教師信息的管理,包括教師信息的錄入、刪除、查詢和線性表輸出,編寫(xiě)并調(diào)試完整的實(shí)現(xiàn)代碼。3. 實(shí)驗(yàn)要求:可選擇不同方法實(shí)現(xiàn)線性表。源程序取名exp1.c存儲(chǔ)上傳。要求獨(dú)立完成設(shè)計(jì)、程序編寫(xiě)、調(diào)試和運(yùn)行。變量名、函數(shù)名與其他同學(xué)雷同或者運(yùn)行結(jié)果與其他同學(xué)雷同將被視同抄襲。主要數(shù)據(jù)結(jié)構(gòu):struct teacher/定義結(jié)構(gòu)體long num;/

2、教師號(hào)char name20;/姓名char sex5;/性別int age;/年齡char edu20;/學(xué)歷char title20;/職稱long wage;/工資char addr100;/地址 char telep15;/電話struct teacher *next;/指向下一個(gè)結(jié)點(diǎn)*head=NULL;4. 主要算法流程(圖):教師信息管理錄入教師信息查詢教師信息刪除教師信息瀏覽教師信息退出系統(tǒng)5. 主要功能函數(shù)說(shuō)明void key()口令檢查的函數(shù)void save()把數(shù)據(jù)存入文件的函數(shù)void read()從文件讀出數(shù)據(jù)的函數(shù)void creat()錄入教師信息的函數(shù)void

3、 print()輸出教師信息的函數(shù)void del()刪除教師信息的函數(shù)void sort2()按月薪排序的函數(shù),算法跟按教師號(hào)排序的一樣void sort3()按年齡排序的函數(shù),算法跟按教師號(hào)排序的一樣void choose1()選擇排序方式的函數(shù)void search1()按教師號(hào)查找的函數(shù)void search2()按姓名查找的函數(shù)void search3()按職稱查找的函數(shù),算法與按姓名查找的一樣void choose2()選擇查找方式的函數(shù)void menu()菜單欄函數(shù)void sort1()按教師號(hào)進(jìn)行排序的函數(shù)6. 主要運(yùn)行結(jié)果(截圖)【登錄系統(tǒng)界面】7. ( 用戶口令為123

4、456,若輸入正確,則進(jìn)入系統(tǒng)界面)【教師信息錄入】(選擇1,進(jìn)行教師信息的錄入,按0結(jié)束輸入2) 【教師信息輸出】【教師信息刪除】【查詢教師信息】(1)按教師號(hào)查詢(2)按姓名查詢(3)按職稱查詢(4)按年齡查詢【教師排序】(1) 按教師號(hào)排序(2)按年齡排序(3)按月薪排序【退出系統(tǒng)并保存數(shù)據(jù)】8. 實(shí)驗(yàn)結(jié)論及說(shuō)明9. 通過(guò)本次教師信息系統(tǒng)的實(shí)驗(yàn)內(nèi)容,讓我明白了自己在c語(yǔ)言這門(mén)課程上還存有很大的問(wèn)題和不足。只能通過(guò)網(wǎng)上借鑒并且查閱相關(guān)書(shū)籍才能完成。在編程過(guò)程中程序有時(shí)還是不能順利執(zhí)行,一些我們表面上看似成立的程序,實(shí)際上卻可能根本無(wú)法運(yùn)行,只有實(shí)際用C語(yǔ)言編譯環(huán)境中運(yùn)行一下才知道程序中存在

5、的問(wèn)題。但通過(guò)不斷努力和嘗試,還是完成了任務(wù)。這次試驗(yàn)鍛煉了我們的思維能力和意志力,面對(duì)自己不會(huì)的東西,如果一味的放著不做,不敢正視自己的問(wèn)題,那永遠(yuǎn)都不會(huì)得到解決,只有不斷嘗試,才有可能成功。雖然這次作業(yè)是通過(guò)借鑒網(wǎng)上的才能完成,但畢竟我們剛開(kāi)始學(xué)編程沒(méi)多久,鐵杵磨成針,相信我們會(huì)越來(lái)越進(jìn)步的!10. 源程序清單#include #include #include #include #define LEN sizeof(struct teacher)/宏定義結(jié)構(gòu)體字節(jié)數(shù)int n=0;struct teacher/定義結(jié)構(gòu)體long num;/教師號(hào)char name20;/姓名char s

6、ex5;/性別int age;/年齡char edu20;/學(xué)歷char title20;/職稱long wage;/工資char addr100;/地址 char telep15;/電話struct teacher *next;/指向下一個(gè)結(jié)點(diǎn)*head=NULL;void key()/口令檢查的函數(shù)int i;long a;for(i=0;inext) if(fwrite(p,sizeof(struct teacher),1,fp)!=1) printf(n此處數(shù)據(jù)有誤n);fclose(fp);exit(0);void read()/從文件讀出數(shù)據(jù)的函數(shù)struct teacher te

7、ach299,temp;int i=0;FILE *fp;char filename20;printf(n請(qǐng)輸入存有教師信息的文件名:);scanf(%s,filename); if(fp=fopen(filename,rb)=NULL)printf(n無(wú)法打開(kāi)文件n);exit(0);fseek(fp,-sizeof(struct teacher),2);/*將位置指針從文件末尾后退一個(gè)結(jié)構(gòu)體的字節(jié)數(shù)*/fread(&temp,sizeof(struct teacher),1,fp);/*從所指向的文件中讀出數(shù)據(jù)存儲(chǔ)到結(jié)構(gòu)體變量temp中*/fseek(fp,0,0);/將位置指針移到文件的

8、開(kāi)頭if(fread(&teachi,sizeof(struct teacher),1,fp)=1)/*判斷文件開(kāi)頭讀入的數(shù)據(jù)是否為空*/printf(n存有的教師信息如下:n);while(teachi.num!=temp.num)/進(jìn)行循環(huán)讀取文件printf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,teachi.num,,teachi.sex,teachi.age,); printf(職稱:%sn 月薪:%ld,住址:%s,電話:%sn,teachi.title,teachi.wage,teachi.addr,teachi

9、.telep); i=i+1; fread(&teachi,sizeof(struct teacher),1,fp);/*從文件中讀入數(shù)據(jù)存儲(chǔ)到結(jié)構(gòu)體變量teach【i】中*/輸出文件中的最后一個(gè)信息 printf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,teachi.num,,teachi.sex,teachi.age,); printf(職稱:%sn 月薪:%ld,住址:%s,電話:%sn,teachi.title,teachi.wage,teachi.addr,teachi.telep); fclose(fp);else

10、printf(該文件中無(wú)教師信息n);/文件為空時(shí)輸出此處void creat()/錄入教師信息的函數(shù)struct teacher *p1,*p2,*p3;p1=p2=(struct teacher *)malloc(LEN);/*申請(qǐng)一個(gè)結(jié)構(gòu)體字節(jié)數(shù)的空間用來(lái)存儲(chǔ)一個(gè)教師的信息*/printf(請(qǐng)輸入一位教師的教師號(hào)(結(jié)束錄入請(qǐng)輸入0):);scanf(%ld,&p1-num);if(p1-num!=0)/判斷用戶是要結(jié)束錄入還是要存儲(chǔ)信息if(head=NULL) head=p1;/*判斷鏈表是否為空,是則將鏈表頭指向p1*/else /鏈表不為空則將鏈表尾指向p1p3=head;/p3用

11、來(lái)記錄鏈表的尾部while(p3-next!=NULL)/*若p3不是鏈表尾則將p3指向 下一個(gè)結(jié)點(diǎn)*/p3=p3-next;p3-next=p1;/將最后一個(gè)結(jié)點(diǎn)指向p1while(p1-num!=0)/判斷用戶是否結(jié)束錄入功能/錄入該教師號(hào)的教師對(duì)應(yīng)的信息printf(姓名: );scanf(%s,p1-name);printf(性別:);scanf(%s,p1-sex);printf(年齡:);scanf(%d,&p1-age);printf(學(xué)歷:);scanf(%s,p1-edu);printf(職稱:);scanf(%s,p1-title);printf(月薪:);scanf(%l

12、d,&p1-wage);printf(住址:);scanf(%s,p1-addr);printf(電話:);scanf(%s,p1-telep);n=n+1;/給統(tǒng)計(jì)錄入的教師數(shù)n加一/*判斷是否為第一個(gè)錄入的信息,是則將鏈表頭指向p1,否則將p2指向p1*/ if(n=1) head=p1; else p2-next=p1;p2=p1;/p2用來(lái)記錄鏈表的最后一個(gè)結(jié)點(diǎn)p1=(struct teacher *)malloc(LEN);/重新申請(qǐng)空間printf(請(qǐng)輸入一位教師的教師號(hào)(結(jié)束錄入請(qǐng)輸入0): );scanf(%ld,&p1-num);p2-next=NULL;/將最后一個(gè)結(jié)點(diǎn)指向

13、空void print()/輸出教師信息的函數(shù)struct teacher *p;int i;p=head;if(head!=NULL)/判斷鏈表是否為空 printf(n這%d位教師的信息為:n,n);doprintf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,職稱:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,電話:%sn,p-wage,p-addr,p-telep);p=p-next;/將下一個(gè)結(jié)點(diǎn)的首地址賦給pwhile(p!=NULL);/到鏈表尾時(shí)結(jié)束循環(huán)else/鏈表為空時(shí)執(zhí)

14、行以下部分printf(n你此次登錄系統(tǒng)還沒(méi)有錄入教師信息,可進(jìn)行以下操作:n);printf( 1:【瀏覽以前保存在文件中的教師信息】 2:【開(kāi)始錄入教師信息】n);printf( 3:【退出系統(tǒng)】 4:【返回菜單】n);printf(請(qǐng)選擇:);scanf(%d,&i);while(i4)printf(選擇無(wú)效,請(qǐng)重新輸入正確選項(xiàng):);scanf(%d,&i);if(i=1) read();/調(diào)用從文件讀取數(shù)據(jù)的函數(shù) if(i=2) creat();/調(diào)用錄入信息的函數(shù)if(i=3) exit(0);/退出系統(tǒng)void del()/刪除教師信息的函數(shù)struct teacher *p1,*

15、p2;long i;if(head=NULL)/判斷鏈表是否為空printf(n還未錄入過(guò)教師信息n);/鏈表為空時(shí)輸出return;printf(請(qǐng)輸入要?jiǎng)h除教師信息的教師號(hào):);scanf(%ld,&i);p1=head;while(i!=p1-num)/直到p1指向的結(jié)點(diǎn)是要?jiǎng)h除的信息位置if(p1-next=NULL) break;/p1的下個(gè)結(jié)點(diǎn)為空則退出循環(huán)p2=p1;/p2用來(lái)記錄p1的前一個(gè)結(jié)點(diǎn)p1=p1-next;/p1指向下一個(gè)結(jié)點(diǎn)if(i=p1-num)/判斷p1是否為要?jiǎng)h除的信息if(p1=head) head=p1-next;/*若p1為頭結(jié)點(diǎn)則將頭指針指向p1的下一

16、個(gè)結(jié)點(diǎn)*/else p2-next=p1-next;/*p1非頭結(jié)點(diǎn)則將p1后面的結(jié)點(diǎn)連接到p1前一個(gè)結(jié)點(diǎn)的后面*/printf(n已刪除教師號(hào)為%ld的教師信息n,i);n=n-1;/記錄教師數(shù)的n要減一/p1不是要?jiǎng)h除的信息則表示要?jiǎng)h除的信息不再鏈表中else printf(n已錄入的教師信息中沒(méi)有教師號(hào)為%ld的n,i);return;void sort1()/按教師號(hào)進(jìn)行排序的函數(shù)struct teacher *p1,*p2,*p3,*p4;int i,j;if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;if(head-next!=NULL) /判斷是否

17、只有一個(gè)信息/用冒泡法排序p1=head;/p1記錄用來(lái)比較的兩個(gè)結(jié)點(diǎn)中的前面一個(gè) p2=head-next;/p2記錄比較的兩個(gè)結(jié)點(diǎn)中的后面?zhèn)€ for(i=1;in;i+)/實(shí)現(xiàn)n-1趟比較的外循環(huán) for(j=0;jnump2-num)/*比較相鄰兩個(gè)結(jié)點(diǎn)中教師號(hào)大小*/當(dāng)p1的教師號(hào)大時(shí)則對(duì)調(diào)兩個(gè)結(jié)點(diǎn)的位置if(p1=head) head=p2;else p3-next=p2;/*p1為頭結(jié)點(diǎn)時(shí)則將頭指針指向p2,否則就將p2連接到用來(lái)記錄p1前一個(gè)結(jié)點(diǎn)的p3的后面*/p4=p2-next;/p4用來(lái)記錄p2后面的結(jié)點(diǎn)p2-next=p1;/p1的結(jié)點(diǎn)換到原來(lái)p2的位置p1-next=p

18、4;/原來(lái)p2后面的結(jié)點(diǎn)連接到p1p3=p2;/p3記錄下p2的位置p2=p4;/p2指向原來(lái)位置的下一個(gè)結(jié)點(diǎn)else/*p1中教師號(hào)沒(méi)有打過(guò)p2中教師號(hào),則將p1,p2都指向它們各自位置的下一個(gè)結(jié)點(diǎn)*/p3=p1;/記錄p1后移一位后它前個(gè)結(jié)點(diǎn)的位置p1=p2;p2=p2-next;p1=head;/p1指向鏈表頭,開(kāi)始下一趟外循環(huán)的準(zhǔn)備p2=p1-next;/p2指向鏈表第二個(gè)結(jié)點(diǎn)printf(n按教師號(hào)排序后的教師信息如下:n);print();/調(diào)用教師信息瀏覽函數(shù)void sort2()/按月薪排序的函數(shù),算法跟按教師號(hào)排序的一樣struct teacher *p1,*p2,*p3,

19、*p4;int i,j;if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;if(head-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) for(j=0;jwagep2-wage)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2=p1-next;printf(n按月薪排序后的教師信息如下:n);print();void sort

20、3()/按年齡排序的函數(shù),算法跟按教師號(hào)排序的一樣struct teacher *p1,*p2,*p3,*p4;int i,j; if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;if(head-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) for(j=0;jagep2-age)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2

21、=p1-next;printf(n按年齡排序后的教師信息如下:n);print();void choose1()/選擇排序方式的函數(shù)int i;printf( 排序方式n);printf( 1:【按教師號(hào)排序】 2:【按年齡排序】n);printf( 3:【按月薪排序】n);printf(請(qǐng)選擇:);scanf(%d,&i); while(i3)printf(選擇無(wú)效,請(qǐng)重新輸入正確選項(xiàng):);scanf(%d,&i);switch(i) case 1:sort1();break; case 2:sort3();break; case 3:sort2();break;void search1()

22、/按教師號(hào)查找的函數(shù)struct teacher *p;long i;/存儲(chǔ)用戶輸入的想要?jiǎng)h除的教師號(hào)if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;printf(請(qǐng)輸入要查找的教師信息的教師號(hào):); scanf(%ld,&i);for(p=head;p!=NULL;p=p-next) /p順序指向結(jié)點(diǎn)與i比較,找出有i的數(shù)據(jù)的結(jié)點(diǎn)并輸出if(p-num=i) printf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,職稱:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住

23、址:%s,電話:%sn,p-wage,p-addr,p-telep);return;printf(已錄入的教師信息中不存在該教師號(hào)n);void search2()/按姓名查找的函數(shù)struct teacher *p;char i20;/記錄用戶輸入的想要?jiǎng)h除的姓名int j=0;/j用來(lái)記錄找到了多少個(gè)信息if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;printf(請(qǐng)輸入要查找的信息的教師姓名:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-name,i)=0)/比較p指向的結(jié)點(diǎn)中的姓名跟i的是否

24、一致,是則輸出 printf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,職稱:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,電話:%sn,p-wage,p-addr,p-telep);j=j+1;/每輸出一個(gè)教師的信息則j加一if(j=0) printf(已錄入的教師信息中不存在該姓名的教師n);void search3()/按職稱查找的函數(shù),算法與按姓名查找的一樣struct teacher *p;char i20;int j=0;if(head=NULL)printf(n還未錄入過(guò)教師

25、信息n);return;printf(請(qǐng)輸入要查找的信息的教師職稱:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-title,i)=0) printf(教師號(hào):%ld,姓名:%s,性別:%s,年齡:%d,學(xué)歷:%s,職稱:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,電話:%sn,p-wage,p-addr,p-telep); j=j+1;if(j=0) printf(已錄入的教師信息中不存在該職稱的教師n);void search4()/按年齡查找的函數(shù),算法與按教師號(hào)查找的一樣struct teacher *p;int i,j=0;if(head=NULL)printf(n還未錄入過(guò)教師信息n);return;printf(請(qǐng)輸入要查找的信息的教師年齡:); scanf(%d,&i);for(p=head;p!=NULL;p=p-n

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論