版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 說 明 書</p><p> 課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p> 設(shè)計課題 員工管理系統(tǒng) </p><p> 專 業(yè) 計算機(jī)科學(xué)與技術(shù) </p><p>
2、; 課 程 設(shè) 計 任 務(wù) 書</p><p> 設(shè)計題目: 員工管理系統(tǒng) _________________________________________________________設(shè)計內(nèi)容與要求:設(shè)計一員工管理系統(tǒng),可儲存若干名員工的基本信息,并能對員工的信息進(jìn)行一些
3、基本的操作,其中應(yīng)具有基本功能:創(chuàng)建:創(chuàng)建員工信息庫。(2) 輸出:可以輸出所有已輸入的員工的所有信息。(2) 排序:按不同關(guān)鍵字,對所有員工的信息進(jìn)行排序。(3) 查詢:按特定條件查找員工。(4) 更新:按編號對某個員工的某項(xiàng)信息進(jìn)行修改。(5) 插入:加入新員工的信息。(6) 刪除:按編號刪除已離職的員工的信息。(8) 退出:進(jìn)行完所有需要的操作后可以退出該系統(tǒng),完成操作。指導(dǎo)教師:張 紅 霞年 月 日</p>
4、<p> 課 程 設(shè) 計 評 語</p><p> 成績:指導(dǎo)教師:張 紅 霞年 月 日</p><p><b> 【問題描述】</b></p><p> 該員工管理系統(tǒng)應(yīng)能實(shí)現(xiàn)一些簡單的操作,其中每個員工的信息應(yīng)包括:編號、姓名、性別、出生年月、學(xué)歷、職務(wù)、電話、住址等。系統(tǒng)能夠完成員工信息的查詢、更新、插入、刪除、排
5、序等功能。</p><p><b> 【基本要求】</b></p><p> ?。?) 排序:按不同關(guān)鍵字,對所有員工的信息進(jìn)行排序。</p><p> ?。?) 查詢:按特定條件查找員工。</p><p> ?。?) 更新:按編號對某個員工的某項(xiàng)信息進(jìn)行修改。</p><p> ?。?) 插入
6、:加入新員工的信息。</p><p> ?。?) 刪除:按編號刪除已離職的員工的信息。</p><p><b> 【測試數(shù)據(jù)】</b></p><p> 1.創(chuàng)建員工信息數(shù)據(jù):</p><p> b11050516 李滿意 男 1996.3.2 本科 學(xué)生 18238816299 p3.240</p>
7、;<p> b11050517 鐘金言 男 1995.2.4 本科 學(xué)生 18238816303 p3.240</p><p> b11050518 魏良雷 男 1998.5.6 本科 學(xué)生 18238818310 p3.240</p><p> 2. 輸出員工信息數(shù)據(jù):2,2</p><p> 3.對員工排序數(shù)據(jù):3,2</p&
8、gt;<p> 4. 查詢員工信息數(shù)據(jù):4,1,b11050516</p><p> 5. 更新員工信息數(shù)據(jù):5,2,鐘金言</p><p> 6. 插入新員工信息數(shù)據(jù):</p><p><b> 6,</b></p><p> b11050520 鄭亞振 男 1998.5.7 本科 學(xué)生 182
9、38816307 p3.240</p><p> 7. 刪除離職員工信息數(shù)據(jù):7,b11050518</p><p><b> 【算法思想】</b></p><p> 1、輸出函數(shù):輸出部分為查看方便共用三種輸出方式,分別將員工的編號、姓名、電話號碼放在第一個位置輸出,算法很簡單,就是用一個for語句將所有員工信息輸出。</p&g
10、t;<p> 2、排序函數(shù)(排序部分按三種關(guān)鍵字使用了三種排序方法):</p><p> ?。?)按編號快速排序:從待排序員工記錄中選取第一個員工為樞軸,其編號設(shè)為K1,然后將其余員工編號小于K1的記錄移到K1的記錄的前面,而將編號大于K1的記錄移到后面,結(jié)果將待排序員工記錄序列分成兩個子表,最后將編號為K1的記錄插到其分界線的位置處。這個過程稱為一趟快速排序。通過一次劃分后,就以編號為K1的記錄
11、為界,將待排序序列分成了兩個子表,且前面子表中所有記錄的編號均不大于K1,而后面子表中的所有記錄的編號均不小于K1。對分割后的子表繼續(xù)按上述原則進(jìn)行分割,直到所有子表的表長不超過1為止,此時待排序記錄序列就變成了一個有序表。</p><p> ?。?)按姓名折半排序:從記錄的第二個姓名開始折半插入,令low=1,high=i-1(i為未排序時的第i個記錄,也是當(dāng)前需要折半插入排序的記錄),并令mid=(low+h
12、igh)/2,然后比較第i個記錄的姓名與第mid個記錄的姓名,如果第i個記錄的姓名小于第mid個記錄的姓名則high=mid-1,否則low=mid+1,繼續(xù)進(jìn)行第i個記錄的姓名與第mid個記錄的姓名的比較直到low>high,如此便找到插入第i個記錄的插入位置。如此逐個插入所有待排序的記錄。</p><p> (3)按電話號碼堆排序:先建一個“大頂堆”,即先選得一個關(guān)鍵字為最大的記錄,然后與序列中最后一
13、個記錄 交換,之后繼續(xù)對序列中前 n-1 記錄進(jìn)行“篩選”,重新將它調(diào)整為一個“大頂堆”再 將堆頂記錄和第 n-1 個記錄交換,如此反復(fù)直至排序結(jié)束。所謂“篩選”指的是對一棵 左/右子樹均為堆的完全二叉樹,“調(diào)整”根結(jié)點(diǎn)使整個二叉樹為堆。</p><p> 3、查詢函數(shù):此員工管理系統(tǒng)的查詢可按照編號和姓名進(jìn)行折半查詢,在進(jìn)行折半查詢前,已進(jìn)行按照所選關(guān)鍵字進(jìn)行排序,首先將記錄序列中間位置的記錄的關(guān)鍵字與查找關(guān)
14、鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將待排序序列分成前后兩個子表,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進(jìn)一步查找前一子表,否則進(jìn)一步查找后一子表。重復(fù)以上過程,直到找到滿足條件的記錄,使查找成功,并輸出該記錄,或直到子表不存在為止,此時查找不成功,輸出非法查詢。</p><p> 4、更新函數(shù):更新函數(shù)與查詢函數(shù)類似,可以根據(jù)需更新員工信息的原編號或者原姓名進(jìn)行折半查詢到需更新的記錄,
15、在查詢前已按照相應(yīng)關(guān)鍵字進(jìn)行排序,查找到該記錄后即可對其更改,并輸出“更新成功”,若查找失敗則輸出“更新失敗”。</p><p> 5、插入函數(shù):此函數(shù)就是簡單的在所有記錄的最后插入新員工的信息。</p><p> 6、刪除函數(shù):刪除函數(shù)首先對該系統(tǒng)中是有員工記錄進(jìn)行判斷,若有則按照編號進(jìn)行快速排序,然后根據(jù)需刪除員工的編號進(jìn)行折半查找,查找到后則刪除,輸出“刪除成功”,若系統(tǒng)中并沒有
16、該員工的記錄,則會查找失敗,輸出“刪除失敗”。</p><p><b> 【模塊劃分】</b></p><p><b> 1.主菜單模塊</b></p><p><b> (1)菜單內(nèi)容</b></p><p> 程序運(yùn)行后,給出8個菜單項(xiàng)的內(nèi)容和輸入提示。</p
17、><p> [1]創(chuàng)建員工信息 [2]輸出員工信息</p><p> [3]對員工排序 [4]查詢員工信息</p><p> [5]更新員工信息 [6]插入新員工信息</p><p> [7]刪除離職員工信息 [8]退出</p><p> ?。?)實(shí)現(xiàn)循環(huán)和功能選擇<
18、;/p><p> 輸入選擇用變量choice存儲,它提供給switch語句選項(xiàng),使用while循環(huán)實(shí)現(xiàn)重復(fù)選擇,并在主函數(shù)main()中實(shí)現(xiàn)。算法實(shí)現(xiàn):</p><p> void main()</p><p><b> {</b></p><p> int flag=1,choice;</p><
19、;p> while(flag)</p><p><b> {</b></p><p><b> caidan();</b></p><p> printf("請輸入需要進(jìn)行的操作選項(xiàng)序號====>:");</p><p> scanf("%d&qu
20、ot;,&choice);</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:Creatlist();</p><p><b> break;</b></p><p> case 2:shu
21、chufangshi();</p><p><b> break;</b></p><p> case 3:paixufangshi();</p><p><b> break;</b></p><p> case 4:chaxunfangshi();</p><p>
22、;<b> break;</b></p><p> case 5:gengxinfangshi();</p><p><b> break;</b></p><p> case 6:insert();</p><p><b> break;</b></p>
23、<p> case 7:Del_num();</p><p><b> break;</b></p><p> case 8:flag=0;</p><p><b> break;</b></p><p><b> }</b></p>&l
24、t;p><b> getch();</b></p><p> system("cls");</p><p><b> }</b></p><p><b> }</b></p><p><b> 2.功能模塊</b><
25、;/p><p> ?。?)創(chuàng)建系統(tǒng)模塊:剛開始先建立系統(tǒng),輸入一些員工的信息記錄存儲起來。</p><p> ?。?)輸出模塊:可以輸出所有系統(tǒng)中存儲的員工記錄。</p><p> ?。?)排序模塊:可以按不同關(guān)鍵字對員工記錄進(jìn)行排序。</p><p> ?。?)查詢模塊:可以按照不同關(guān)鍵字查詢出某員工的所有信息。</p><
26、p> ?。?)更新模塊:按照不同關(guān)鍵字查詢出該員工并更改其信息。</p><p> (6)插入模塊:可以將新員工信息插入到系統(tǒng)中存儲。</p><p> ?。?)刪除模塊:根據(jù)編號查詢出該員工并將其刪除。</p><p><b> 【數(shù)據(jù)結(jié)構(gòu)】</b></p><p> 本系統(tǒng)使用順序存儲結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)信息的存
27、儲,使用一結(jié)構(gòu)體的全局變量staf存儲員工的編號、姓名、性別等一些基本信息。</p><p><b> 【測試情況】</b></p><p><b> 1.創(chuàng)建員工信息:</b></p><p><b> 2.輸出員工信息:</b></p><p><b>
28、3.對員工排序:</b></p><p><b> 4.查詢員工信息:</b></p><p><b> 5.更新員工信息:</b></p><p> 6.插入新員工信息:</p><p> 7.刪除離職員工信息:</p><p><b> 8
29、.退出:</b></p><p><b> 【心得】</b></p><p> 最近一周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計結(jié)束了,課程設(shè)計還是有效果的,收獲良多啊。</p><p> 課程設(shè)計是計算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生的集中實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)與算法”理論和實(shí)驗(yàn)課程后進(jìn)行的一次全面的綜合練習(xí)。其目的是要達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,使
30、學(xué)生能夠根據(jù)問題要求和數(shù)據(jù)對象的特性,學(xué)會數(shù)據(jù)組織的方法,把現(xiàn)實(shí)世界中的實(shí)際問題在計算機(jī)內(nèi)部表示出來并用軟件解決問題,培養(yǎng)良好的程序設(shè)計技能。</p><p> 在這次課程設(shè)計當(dāng)中,我認(rèn)識到我的不足,如算法的不完善、不細(xì)心和耐心不是很好等等諸多情況。我在寫程序前構(gòu)思好了程序的框架但在寫程序時還是丟三落四,比如在使用折半查詢時應(yīng)該先按照關(guān)鍵字進(jìn)行排序,結(jié)果我忘記調(diào)用排序函數(shù)直接使用折半查詢,低級錯誤啊,以后應(yīng)該多
31、加注意,一定要細(xì)心啊;對這些錯誤,我不得不花一定的時間去更正,并且還要檢查是否出現(xiàn)相似的錯誤而導(dǎo)致程序正常運(yùn)行。但是通過這次課程設(shè)計,我的這些缺點(diǎn)有些改善。我在寫新的程序時,首先要考慮的深入一點(diǎn)、仔細(xì)一點(diǎn),這樣要修改程序的時間就會少很多。并且也不會因?yàn)樽约翰患?xì)心而導(dǎo)致的浪費(fèi)時間的情況出現(xiàn)。</p><p> 通過課程設(shè)計提高了我的互動能力和動手能力,以及考慮問題的周密和全面?;仡欉@次課程設(shè)計,可以說學(xué)到了很多很
32、多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過課程設(shè)計對以前所學(xué)過的知識重新溫故。另外,自己的能力畢竟
33、是有限的,在這次課程設(shè)計中我還向同學(xué)學(xué)到了一些知識,比如,學(xué)會了使用清屏函數(shù)system("cls"),所以以后還是要多多向同學(xué)學(xué)習(xí)啊。</p><p> 總之,對于這次課設(shè)過程中同學(xué)們給予的指導(dǎo)表示感謝,在這次課程設(shè)計過程中也學(xué)到了很多知識,以后要多多上機(jī),多做些類似的軟件,以增強(qiáng)自己的實(shí)際編程能力。</p><p><b> 【源程序】</b&g
34、t;</p><p> #include<stdio.h></p><p> #include<conio.h></p><p> #include<stdlib.h></p><p> #include<string.h></p><p> struct st
35、aff</p><p><b> {</b></p><p> char num[20];</p><p> char name[20];</p><p> char sex[10];</p><p> char birthdate[20];</p><p>
36、char xueli[20];</p><p> char zhiwu[20];</p><p> char phone[15];</p><p> char addr[15];</p><p><b> };</b></p><p> struct staff staf[20];<
37、;/p><p><b> int a;</b></p><p> #define TRUE 1</p><p> #define FALSE 0</p><p> typedef int KeyType;</p><p> typedef int OtherType;</p>
38、<p> //按電話號碼進(jìn)行堆排序</p><p> void sift(struct staff staf[], int k, int m)</p><p><b> {</b></p><p> struct staff t;</p><p><b> int i,j;</b
39、></p><p> char x[15];</p><p> int finished;</p><p> t= staf[k]; </p><p> x[15]=staf[k].phone;</p><p><b> i=k;</b></p>&
40、lt;p><b> j=2*i;</b></p><p> finished=FALSE;</p><p> while( j<=m && !finished ) </p><p><b> { </b></p><p> if (j<m &a
41、mp;& staf[j].phone< staf[j+1].phone ) </p><p><b> j=j+1; </b></p><p> if ( x>= staf[j].phone)</p><p> finished=TRUE; </p><p><b>
42、 else </b></p><p><b> {</b></p><p> staf[i] = staf[j];</p><p><b> i=j;</b></p><p><b> j=2*i;</b></p><p><
43、b> } </b></p><p><b> }</b></p><p> staf[i] =t; </p><p><b> } </b></p><p> void crt_heap(struct staff staf[],int a)&l
44、t;/p><p><b> {</b></p><p><b> int i,n;</b></p><p><b> n= a;</b></p><p> for ( i=n/2; i >= 1; --i) </p><p>
45、 sift(staf,i,n);</p><p><b> }</b></p><p> void HeapSort(struct staff staf[],int a)</p><p><b> {</b></p><p><b> int i,n;</b><
46、/p><p> struct staff b;</p><p> crt_heap(staf, a);</p><p><b> n= a;</b></p><p> for ( i=n ; i>= 2; --i) </p><p><b> {</b><
47、;/p><p> b=staf[1]; </p><p> staf[1]= staf[i];</p><p> staf[i]=b; </p><p> sift(staf,1,i-1); </p><p><b> }</b></p><p&
48、gt;<b> } </b></p><p> //創(chuàng)建員工信息函數(shù)</p><p> void Creatlist()</p><p><b> {</b></p><p><b> int i=1;</b></p><p> char f
49、lag='y';</p><p> printf("請輸入職工信息編號、姓名、性別、出生年月、學(xué)歷、職務(wù)、電話、住址:\n");</p><p> while(flag=='y')</p><p><b> {</b></p><p> scanf("
50、%s%s%s%s%s%s%s%s",staf[i].num,staf[i].name,staf[i].sex,staf[i].birthdate,</p><p> staf[i].xueli,staf[i].zhiwu,staf[i].phone,staf[i].addr);</p><p><b> a=i;</b></p><p
51、> printf("是否繼續(xù)輸入?(y/n):");</p><p> getchar();</p><p> scanf("%c",&flag);</p><p><b> i++;</b></p><p><b> }</b><
52、;/p><p> printf("創(chuàng)建成功!\n");</p><p><b> }</b></p><p> //按編號輸出函數(shù)(輸出部分將編號放在最前面)</p><p> void shuchu()</p><p><b> {</b><
53、/p><p><b> int i;</b></p><p> printf(" 編號 姓名 性別 出生年月 學(xué)歷 職務(wù) 電話 住址 \n"); </p><p> for(i=1;i<=a;i++)</p><p><b> {<
54、/b></p><p> printf("%11s%8s%5s%10s%6s%6s%13s%8s\n",staf[i].num,staf[i].name,staf[i].sex,staf[i].birthdate,</p><p> staf[i].xueli,staf[i].zhiwu,staf[i].phone,staf[i].addr);</p&g
55、t;<p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> //按姓名輸出函數(shù)(輸出部分將姓名放在最前面)</p><p> void shuchu_name()</p>
56、;<p><b> {</b></p><p><b> int i;</b></p><p> printf(" 姓名 編號 性別 出生年月 學(xué)歷 職務(wù) 電話 住址 \n"); </p><p> for(i=1;i<=a;i++
57、)</p><p><b> {</b></p><p> printf("%8s%11s%5s%10s%6s%6s%13s%8s\n",staf[i].name,staf[i].num,staf[i].sex,staf[i].birthdate,</p><p> staf[i].xueli,staf[i].zhiw
58、u,staf[i].phone,staf[i].addr);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> //按電話號碼輸出函數(shù)(輸出部分將電話號碼放在最前面)</p&g
59、t;<p> void shuchu_phone()</p><p><b> {</b></p><p><b> int i;</b></p><p> printf(" 電話 姓名 編號 性別 出生年月 學(xué)歷 職務(wù) 住址 \n")
60、; </p><p> for(i=1;i<=a;i++)</p><p><b> {</b></p><p> printf("%13s%8s%11s%5s%10s%6s%6s%8s\n",staf[i].phone,staf[i].name,staf[i].num,staf[i].sex,staf[i].b
61、irthdate,</p><p> staf[i].xueli,staf[i].zhiwu,staf[i].addr);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p>&l
62、t;p> //按姓名進(jìn)行折半排序函數(shù)</p><p> void binsortname(struct staff staf[])</p><p><b> {</b></p><p> struct staff x;</p><p> int low,high,mid,i,j;</p>&
63、lt;p> for(i=2;i<=a;++i)</p><p><b> {</b></p><p> x=staf[i];</p><p><b> low=1;</b></p><p><b> high=i-1;</b></p><
64、;p> while(low<=high)</p><p><b> {</b></p><p> mid=(low+high)/2;</p><p> if(strcmp(x.name,staf[mid].name)<0)high=mid-1;</p><p> else low=mid+1;
65、</p><p><b> }</b></p><p> for(j=i-1;j>=low;--j)staf[j+1]=staf[j];</p><p> staf[low]=x;</p><p><b> }</b></p><p><b> }&
66、lt;/b></p><p> //按姓名進(jìn)行折半查找</p><p> void binsrchname(struct staff staf[])</p><p><b> {</b></p><p> int low,high,mid;</p><p> char k[20];
67、</p><p><b> low=1; </b></p><p><b> high=a;</b></p><p> printf("請輸入需要查找的姓名:");</p><p> scanf("%s",k);</p><p&g
68、t; while( low <= high)</p><p><b> {</b></p><p> mid=(low+high) / 2;</p><p> if(strcmp(k,staf[mid].name)==0) </p><p> {printf("%11s%8s%5s%10s%6
69、s%6s%13s%8s\n",staf[mid].num,staf[mid].name,staf[mid].sex,staf[mid].birthdate,</p><p> staf[mid].xueli,staf[mid].zhiwu,staf[mid].phone,staf[mid].addr);break;}</p><p><b> else </
70、b></p><p> if(strcmp(k,staf[mid].name)<0)</p><p> high=mid-1;</p><p><b> else </b></p><p> low=mid+1;</p><p><b> }</b>&
71、lt;/p><p> if(low>high)printf("非法查詢!\n");</p><p><b> }</b></p><p> //按編號進(jìn)行快速排序</p><p> void QKSortnum(struct staff staf[],int low, int high )&
72、lt;/p><p><b> {</b></p><p> int pos,QKPassnum();</p><p> if(low<high)</p><p><b> {</b></p><p> pos=QKPassnum(staf, low, high);
73、 </p><p> QKSortnum(staf, low, pos-1); </p><p> QKSortnum(staf, pos+1, high);</p><p><b> }</b></p><p><b> }</b></p><p> int
74、 QKPassnum(struct staff staf[],int left,int right)</p><p><b> { </b></p><p> struct staff x;</p><p> int low,high;</p><p> x= staf[left]; <
75、;/p><p> low=left; </p><p> high=right;</p><p> while ( low<high )</p><p><b> {</b></p><p> while (low< high && strcmp(staf[hi
76、gh].num,x.num)>=0) </p><p><b> high--;</b></p><p> if ( low <high ) </p><p><b> { </b></p><p> staf[low]= staf[high];</p><p
77、><b> low++;</b></p><p><b> } </b></p><p> while (low<high &&strcmp(staf[low].num,x.num)<0) </p><p><b> low++; </b></p
78、><p> if ( low<high )</p><p><b> { </b></p><p> staf[high]= staf[low];</p><p><b> high--; </b></p><p><b> }</b>&
79、lt;/p><p><b> }</b></p><p> staf[low]=x; </p><p> return low; </p><p><b> } </b></p><p>
80、 //按編號進(jìn)行折半查找(在菜單中調(diào)用按編號排序后調(diào)用此函數(shù))</p><p> void binsrchnum(struct staff staf[])</p><p><b> {</b></p><p> int low,high,mid;</p><p> char k[20];</p>&
81、lt;p><b> low=1; </b></p><p><b> high=a;</b></p><p> printf("請輸入需要查找的編號:");</p><p> scanf("%s",k);</p><p> while( lo
82、w <= high)</p><p><b> {</b></p><p> mid=(low+high) / 2;</p><p> if(strcmp(k,staf[mid].num)==0) </p><p> {printf("%11s%8s%5s%11s%8s%8s%13s%8s\n&
83、quot;,staf[mid].num,staf[mid].name,staf[mid].sex,staf[mid].birthdate,</p><p> staf[mid].xueli,staf[mid].zhiwu,staf[mid].phone,staf[mid].addr);break;}</p><p><b> else </b></p>
84、;<p> if(strcmp(k,staf[mid].num)<0)</p><p> high=mid-1;</p><p><b> else </b></p><p> low=mid+1;</p><p><b> }</b></p><
85、p> if(low>high)printf("非法查詢!\n");</p><p><b> }</b></p><p> //更新員工信息。(已知員工原編號,對員工按編號排序后,按原編號折半查詢,</p><p> //并修改其所有信息。)</p><p> void gx_n
86、um()</p><p><b> {</b></p><p> char k[20];</p><p> int low,high,mid;</p><p><b> int i;</b></p><p><b> low=1; </b>&
87、lt;/p><p><b> high=a;</b></p><p> QKSortnum(staf,0,a);</p><p> printf("請輸入需要更新信息員工的編號:");</p><p> scanf("%s",k);</p><p>
88、while( low <= high)</p><p><b> {</b></p><p> mid=(low+high) / 2;</p><p> if(strcmp(k,staf[mid].num)==0) </p><p><b> {</b></p><
89、p> printf("請輸入該員工正確的信息:\n");</p><p><b> i=mid;</b></p><p> scanf("%s%s%s%s%s%s%s%s",staf[i].num,staf[i].name,staf[i].sex,staf[i].birthdate,</p><p
90、> staf[i].xueli,staf[i].zhiwu,staf[i].phone,staf[i].addr);</p><p> printf("更新成功!\n");break;</p><p><b> }</b></p><p><b> else </b></p>
91、<p> if(strcmp(k,staf[mid].num)<0)</p><p> high=mid-1;</p><p><b> else </b></p><p> low=mid+1;</p><p><b> }</b></p><p
92、> if(low>high)printf("更新失敗!\n");</p><p><b> }</b></p><p> //更新員工信息。(已知員工原姓名,對員工按姓名排序后,按原姓名折半查詢,</p><p> //并修改其所有信息。)</p><p> void gx_na
93、me()</p><p><b> {</b></p><p> char k[20];</p><p> int low,high,mid;</p><p><b> int i;</b></p><p><b> low=1; </b>&
94、lt;/p><p><b> high=a;</b></p><p> binsortname(staf);</p><p> printf("請輸入需要更新信息員工的姓名:");</p><p> scanf("%s",k);</p><p> wh
95、ile( low <= high)</p><p><b> {</b></p><p> mid=(low+high) / 2;</p><p> if(strcmp(k,staf[mid].name)==0) </p><p><b> {</b></p><p
96、> printf("請輸入該員工正確的信息:\n");</p><p><b> i=mid;</b></p><p> scanf("%s%s%s%s%s%s%s%s",staf[i].num,staf[i].name,staf[i].sex,staf[i].birthdate,</p><p&
97、gt; staf[i].xueli,staf[i].zhiwu,staf[i].phone,staf[i].addr);</p><p> printf("更新成功!\n");break;</p><p><b> }</b></p><p><b> else </b></p>
98、<p> if(strcmp(k,staf[mid].name)<0)</p><p> high=mid-1;</p><p><b> else </b></p><p> low=mid+1;</p><p><b> }</b></p><p
99、> if(low>high)printf("更新失敗!\n");</p><p><b> }</b></p><p><b> //插入新員工信息</b></p><p> void insert()</p><p><b> {</b&g
100、t;</p><p> char q='y';</p><p> printf("請輸入需插入員工的信息,編號、姓名、性別、出生年月、學(xué)歷、職務(wù)、電話、住址:\n");</p><p> while(q=='y')</p><p><b> {</b></
101、p><p><b> a=a+1;</b></p><p> scanf("%s%s%s%s%s%s%s%s",staf[a].num,staf[a].name,staf[a].sex,staf[a].birthdate,</p><p> staf[a].xueli,staf[a].zhiwu,staf[a].phone
102、,staf[a].addr);</p><p> printf("是否繼續(xù)插入(y/n):");</p><p> getchar();</p><p> scanf("%c",&q);</p><p><b> }</b></p><p>
103、 printf("插入成功!\n");</p><p><b> }</b></p><p> //刪除員工信息(對員工按編號排序后,進(jìn)行折半查找,并刪除該員工信息。)</p><p> void Del_num()</p><p><b> {</b></p&g
104、t;<p> int low,high,mid,i;</p><p> char k[20];</p><p> char q='y';</p><p> QKSortnum(staf,0,a);</p><p> while(q=='y')</p><p>
105、{ if(a==0)</p><p> {printf("已經(jīng)沒有員工!\n");break;}</p><p> printf("請輸入需要刪除的員工編號:");</p><p> scanf("%s",&k);</p><p><b> low=1;
106、 </b></p><p><b> high=a;</b></p><p> while( low <= high)</p><p><b> {</b></p><p> mid=(low+high) / 2;</p><p> if(str
107、cmp(k,staf[mid].num)==0) </p><p><b> { i=mid;</b></p><p> for(;i<a;i++)</p><p><b> {</b></p><p> staf[i]=staf[i+1];</p><p>
108、;<b> }</b></p><p><b> a--;</b></p><p> printf("刪除成功!\n");</p><p><b> break;</b></p><p><b> }</b></p>
109、;<p><b> else </b></p><p> if(strcmp(k,staf[mid].num)<0)</p><p> high=mid-1;</p><p><b> else </b></p><p> low=mid+1;</p>
110、<p><b> }</b></p><p> if(low>high)printf("刪除失敗!\n");</p><p> printf("是否繼續(xù)刪除(y/n):");</p><p> scanf("%s",&q);</p>&l
111、t;p><b> }</b></p><p><b> }</b></p><p> //輸出方式選擇菜單</p><p> void shuchufangshi()</p><p><b> {</b></p><p> int ch
112、oice;</p><p> printf(" ------------------------\n");</p><p> printf(" [1]按編號排序、輸出\n");</p><p> printf(" [2]按姓名排序、輸出\n");</p&
113、gt;<p> printf(" [3]按電話排序、輸出\n");</p><p> printf(" ------------------------\n");</p><p> printf("請選擇輸出方式:");</p><p> scanf(&quo
114、t;%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:QKSortnum(staf,0,a);</p><p><b> shuchu();</b></p><
115、;p><b> break;</b></p><p> case 2:binsortname(staf);</p><p> shuchu_name();</p><p><b> break;</b></p><p> case 3:HeapSort(staf,a);</p&
116、gt;<p> shuchu_phone();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //排序方式選擇菜單</p><p>
117、 void paixufangshi()</p><p><b> {</b></p><p> int choice;</p><p> printf(" ------------------------\n");</p><p> printf(" [1
118、]按編號排序\n");</p><p> printf(" [2]按姓名排序\n");</p><p> printf(" [3]按電話排序\n");</p><p> printf(" ------------------------\n");&l
119、t;/p><p> printf("請選擇排序方式:");</p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:QKS
120、ortnum(staf,0,a);</p><p> printf("排序完成!\n");</p><p><b> break;</b></p><p> case 2:binsortname(staf);</p><p> printf("排序完成!\n");</
121、p><p><b> break;</b></p><p> case 3:HeapSort(staf,a);</p><p> printf("排序完成!\n");</p><p><b> break;</b></p><p><b>
122、 }</b></p><p><b> }</b></p><p> //查詢方式選擇菜單</p><p> void chaxunfangshi()</p><p><b> {</b></p><p> int choice;</p>
123、<p> printf(" ------------------------\n");</p><p> printf(" [1]按編號查詢\n");</p><p> printf(" [2]按姓名查詢\n");</p><p> printf(
124、" ------------------------\n");</p><p> printf("請選擇查詢方式:");</p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b&g
125、t; {</b></p><p> case 1:QKSortnum(staf,0,a);</p><p> binsrchnum(staf);</p><p><b> break;</b></p><p> case 2:binsortname(staf);</p><p&g
126、t; binsrchname(staf);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //更新方式選擇菜單</p><p> void gen
127、gxinfangshi()</p><p><b> {</b></p><p> int choice;</p><p> printf(" ------------------------\n");</p><p> printf(" [1]根據(jù)員工原編
128、號更新\n");</p><p> printf(" [2]根據(jù)員工原姓名更新\n");</p><p> printf(" ------------------------\n");</p><p> printf("請選擇更新方式:");</p>
129、<p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:gx_num();</p><p><b> break;</b></p&g
130、t;<p> case 2:gx_name();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //員工管理系統(tǒng)總菜單</p><p>
131、; void caidan()</p><p><b> {</b></p><p> printf(" 《歡迎進(jìn)入員工管理系統(tǒng)》\n");</p><p> printf("*************************************************\n"
132、;);</p><p> printf("* 請選擇所需要的操作: *\n");</p><p> printf("* [1]創(chuàng)建員工信息 [2]輸出員工信息 *\n");</p><p> printf("* [3]對員工排序
133、 [4]查詢員工信息 *\n");</p><p> printf("* [5]更新員工信息 [6]插入新員工信息 *\n");</p><p> printf("* [7]刪除離職員工信息 [8]退出 *\n");</p><p&
134、gt; printf("*************************************************\n");</p><p><b> }</b></p><p><b> //主函數(shù)</b></p><p> void main()</p><p&g
135、t;<b> {</b></p><p> int flag=1,choice;</p><p> while(flag)</p><p><b> {</b></p><p><b> caidan();</b></p><p> prin
136、tf("請輸入需要進(jìn)行的操作選項(xiàng)序號====>:");</p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:Creatlist();&
137、lt;/p><p><b> break;</b></p><p> case 2:shuchufangshi();</p><p><b> break;</b></p><p> case 3:paixufangshi();</p><p><b> br
138、eak;</b></p><p> case 4:chaxunfangshi();</p><p><b> break;</b></p><p> case 5:gengxinfangshi();</p><p><b> break;</b></p><p
139、> case 6:insert();</p><p><b> break;</b></p><p> case 7:Del_num();</p><p><b> break;</b></p><p> case 8:flag=0;</p><p><
140、b> break;</b></p><p><b> }</b></p><p><b> getch();</b></p><p> system("cls");</p><p><b> }</b></p>&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計報告(員工培訓(xùn)管理系統(tǒng))
- cs系統(tǒng)課程設(shè)計報告--員工管理系統(tǒng)
- java課程設(shè)計--員工信息管理系統(tǒng)報告
- vb課程設(shè)計---員工管理系統(tǒng)
- pb課程設(shè)計—員工培訓(xùn)管理系統(tǒng)
- 公司員工管理系統(tǒng)課程設(shè)計
- 員工信息管理系統(tǒng)課程設(shè)計
- 課程設(shè)計----員工信息管理系統(tǒng)
- 員工信息管理系統(tǒng)課程設(shè)計
- 員工績效課程設(shè)計報告
- 倉庫管理系統(tǒng)--課程設(shè)計報告報告
- 宿舍管理系統(tǒng)課程設(shè)計報告
- 倉儲管理系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告--倉庫管理系統(tǒng)
- 學(xué)籍管理系統(tǒng)課程設(shè)計報告
- 房屋管理系統(tǒng)課程設(shè)計報告
- 教務(wù)管理系統(tǒng)課程設(shè)計報告
- 賓館管理系統(tǒng)課程設(shè)計報告
- 《學(xué)生管理系統(tǒng)》課程設(shè)計報告
- 教務(wù)管理系統(tǒng)課程設(shè)計報告
評論
0/150
提交評論