c語言職工信息管理系統(tǒng)_第1頁
c語言職工信息管理系統(tǒng)_第2頁
c語言職工信息管理系統(tǒng)_第3頁
c語言職工信息管理系統(tǒng)_第4頁
c語言職工信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目        錄一、課程設(shè)計目的3二、設(shè)計題目分析32.1題目簡介 32.2設(shè)計要求 3三、課程設(shè)計內(nèi)容33.1總體設(shè)計 33.2詳細(xì)設(shè)計 43.3調(diào)試與測試 12四、設(shè)計心得與總結(jié):13五、附錄(完整源程序清單) 14  一、課程設(shè)計目的通過親自設(shè)計程序,可以令我們熟悉c語言操作,更熟練的掌握c語句。初步體會編程的過程,為將來的程序深入學(xué)習(xí)打下基礎(chǔ)和培養(yǎng)興趣。二、設(shè)計題目分析21 題目簡介可以向文件中寫入、刪除、添加職工

2、信息,也可以從文件中導(dǎo)出來瀏覽22 設(shè)計要求職工信息包括職工號、姓名、性別、年齡、學(xué)歷、工資、住址、電話等(職工號不重復(fù))。試設(shè)計職工信息管理系統(tǒng),使之能提供以下功能:系統(tǒng)以菜單方式工作。職工信息錄入功能(職工信息用文件保存)輸入職工信息瀏覽功能 輸出查詢和排序功能:(至少一種查詢方式)  算法      按職工號查詢      按學(xué)歷查詢等職工信息刪除、添加功能三、課程設(shè)計內(nèi)容     

3、;32 詳細(xì)設(shè)計:   、主函數(shù):main()顯示系統(tǒng)工作菜單,羅列該系統(tǒng)所有功能。先聲明所有將會調(diào)用到的函數(shù)名。再運用選擇函數(shù)switch即可根據(jù)使用者所輸入的功能代號進(jìn)入對應(yīng)的功能程序。亮點:定義一個全局指針變量*p和全局變量。其中表示當(dāng)前系統(tǒng)中職工人數(shù),指向的地址,追蹤人數(shù)變化,這樣在添加或者刪除導(dǎo)致人數(shù)變化后,瀏覽函數(shù)display()能夠正確顯示出當(dāng)前人數(shù)的職工信息。宏定義define  N指定首次輸入的職工人數(shù),可根據(jù)不同需要隨時更改。       &#

4、160;   、保存函數(shù):void save(int m)定義文件指針,用"只寫"打開指定在盤的“d:/bbb.txt”文本文件。首先用語句判斷文件是否打開成功,若返回值不為,則可繼續(xù)下面操作。用循環(huán)通過語句將結(jié)構(gòu)數(shù)組中的內(nèi)容寫入保存在盤的文本文件里面。形參m指需要寫入文件的職工人數(shù)。最后關(guān)閉文件。            4、導(dǎo)出函數(shù):void load(int b) 

5、0;  首先判斷fopen"只讀"打開“d:/bbb.txt”是否成功,若其返回值不為零,繼續(xù)下面操作。用for循環(huán)通過fscanf語句將文件中的職工信息取出放到em結(jié)構(gòu)數(shù)組里面。形參b指需要導(dǎo)出的職工人數(shù)。最后關(guān)閉文件。          5、瀏覽函數(shù)void display(int a)   聲明整形變量i和b,其中i記錄輸出的職工序數(shù),b用來接收調(diào)用瀏覽函數(shù)時所傳遞過來的實參,接著將其值傳遞給導(dǎo)出函數(shù)

6、load(b),使得導(dǎo)出的職工人數(shù)與瀏覽的職工人數(shù)保持一致。通過調(diào)用load函數(shù)后(即給em數(shù)組附值),用for循環(huán)輸出每個職工的各種信息。  8、按姓名查詢void search_name()    聲明整形變量i和字符形數(shù)組name20,調(diào)用導(dǎo)出函數(shù)load(*p),用scanf語句輸入要查詢的職工名字(字符串)放在數(shù)組name里面。用for循環(huán),循環(huán)主體是先判斷中是否有輸入的職工姓名,如果有,用printf語句輸出與職工名字相對應(yīng)的該職工所有信息,再跳出循環(huán);如果沒有,輸出“查無此人”,并調(diào)用search

7、()返回查詢菜單。 流程圖同上 9、按學(xué)歷查詢void search_xueli()    聲明整形變量i,k=0,char形數(shù)組xueli20。調(diào)用導(dǎo)出函數(shù)load(*P),用scanf語句輸入要查詢的職工學(xué)歷(字符串)放在數(shù)組xueli里面。考慮到與前兩種查詢方式不一樣的是,可能有多個職工具有相同的學(xué)歷,所以循環(huán)主體較之前稍有變化。即在判斷并執(zhí)行第一次后不用break,而是繼續(xù)循環(huán),直到找出所有該學(xué)歷的職工。為解決輸入錯誤而提示“查無此人”的問題,就需要再寫一段for循環(huán)代碼,通過計量數(shù)k記錄循環(huán)的次數(shù),若直到循環(huán)到最后

8、一次仍無結(jié)果輸出,則表示輸入錯誤,這時用printf輸出“查無此人”,并調(diào)用search()返回查詢菜單。 流程圖同上 10、,刪除函數(shù)void del(int *b)    聲明整形變量i,j,t,m,a和char形數(shù)組name20。其中給a附初始值a=*b,表示當(dāng)前職工人數(shù)。首先調(diào)用瀏覽函數(shù)display(a),顯示所有職工信息,便于使用者審閱需刪除的對象。用printf語句提示“輸入要刪除的職工名字”,接著用scanf語句輸入刪除對象名字。用for循環(huán),循環(huán)主體是先判斷中是否存在所輸入的名字(調(diào)

9、用字符串比較函數(shù)stecmp)。若存在,printf語句提示是否確認(rèn)刪除,用scanf語句輸入確認(rèn)指令,再用for循環(huán)從要刪除的這個職工開始,依次用后一個職工的信息覆蓋前一個的。循環(huán)結(jié)束后當(dāng)前職工人數(shù)a自減1,并保存,跳出大循環(huán);若不存在,輸出“輸入錯誤,無此人”。再將a的新值附給*b,實參p所指的人數(shù)地址中的人數(shù)也隨即改變刪除后的人數(shù)。printf提示下一步操作“繼續(xù)刪除請按1n瀏覽信息請按2n返回主菜單請按3”。switch根據(jù)鍵盤輸入的指令代號選擇下一步連接的函數(shù)。    11、添加函數(shù)void add(int *a) 

10、;   聲明整形變量i,n,m,定義文件指針fp,用追加的方式打開文件"d:/bbb.txt",若打開失敗,退出。若成功,繼續(xù)下面操作。printf提示“輸入要添加的人數(shù)”scanf輸入要添加的人數(shù)存放在n。用for循環(huán)輸入要添加的職工信息,再用另一個for循環(huán)將輸入的新信息追加寫入"d:/bbb.txt"文件保存。關(guān)閉文件。再調(diào)用switch語句選擇下一步操作,并連接到相應(yīng)函數(shù)。 流程圖與刪除函數(shù)類似。  33 調(diào)試與測試:。 遇到最大的問題是所有程序代碼編完放在一起后,雖

11、然能夠成功運行,但使用時如果職工人數(shù)發(fā)生變化,會導(dǎo)致文件后部出現(xiàn)亂碼。若要使每次運行都正常,必須在人數(shù)改變后退出程序,修改宏定義N的值。這樣很不方便,不能夠連續(xù)運行。為解決這一大問題,最后我想到了定義一個全局指針變量,用來追蹤最新的人數(shù)。特別是刪除和添加這兩個會導(dǎo)致人數(shù)變化的函數(shù)中,全局指針變量p起了很大作用。經(jīng)過一邊修改一邊調(diào)試,最終可以成功的用p串聯(lián)整個函數(shù),在連續(xù)運行時,總能根據(jù)最新的人數(shù)調(diào)用各個函數(shù)。另外在串聯(lián)所有函數(shù)時,調(diào)試提示出錯:有幾個函數(shù)“redefinition; different basic types”解決:在函數(shù)名前加void指明類型。&

12、#160;整個程序代碼是分塊書寫的,每個函數(shù)都可以獨立運行。只有輸入函數(shù)查詢菜單函數(shù)寫得很順利,一次性就能夠成功運行,其他函數(shù)在調(diào)試過程中或多或少都出現(xiàn)了問題。 1、保存函數(shù)save()在調(diào)試和鏈接的時候都沒有出現(xiàn)錯誤提示,但在運行的時候出現(xiàn)了問題。寫入指定位置的文件,打開后總會有亂碼。與c語言課本上的例題對照后發(fā)現(xiàn),我寫的fopen("d:/bbb","w")沒有指定文件的存儲類型。解決方法:在文件名bbb后面加上.txt后即可。  2、導(dǎo)出函數(shù)load()遇到兩個問題。1是為圖方便直接將保存函數(shù)復(fù)制過來進(jìn)行修改時,忘了修

13、改文件的打開方式,不能運行。經(jīng)多次檢查后終于發(fā)現(xiàn)了,解決:將只寫"w"改為只讀"r"。2是用fscanf語句時,漏寫地址符。調(diào)試和鏈接都沒問題,但點擊運行后,總出現(xiàn)一個提示出錯的藍(lán)色小窗口。經(jīng)老師提時候發(fā)現(xiàn)了錯誤所在。解決:在等之前加上地址符。  3、瀏覽函數(shù)display()遇到的問題雖然不大,但解決起來很麻煩。理想的運行結(jié)果是美觀整齊。即下面的職工信息分別與第一個printf輸出的中文項目提示對齊。解決方法:不斷修改空格個數(shù),不斷運行察看效果。  4、按學(xué)歷查詢函數(shù)search_xueli(),

14、要考慮輸入一種學(xué)歷,可能對應(yīng)出很多職工,這就不能延用按姓名和職工號查詢中判斷是否輸入錯誤的方法了。為了顯示出所有具有該學(xué)歷的職工,就需要讓for循環(huán)一直運行到最后一個為止。這時計量數(shù)i始終會等于職工人數(shù),不能再用i來判斷是否不存在此人。這就需要再定一個整形變量k,用來計量單獨的一個循環(huán)次數(shù)。  5、刪除函數(shù)del()的難點在于多次刪除。即在刪除掉第一個人以后,現(xiàn)有職工人數(shù)發(fā)生改變,而宏定義中的N卻是不變的。最開始我想到了用static定義一個整形變量a來計量當(dāng)前人數(shù)。這在單獨運行刪除函數(shù)時,可以成功的連續(xù)刪除。最后所有函數(shù)串在一起時,有了更好的解決方法,全局指針。 

15、; 6、添加函數(shù)add()遇到的問題是用printf輸入新職工信息后,保存到文件里面,發(fā)現(xiàn)原有的信息不見了。解決:文件打開方式改用"a"追加寫入。  四、設(shè)計心得與總結(jié):     經(jīng)過一學(xué)期的C語言學(xué)習(xí),我們掌握了C語言的基礎(chǔ)知識,能夠讀懂別人用c語言設(shè)計的程序。平時的程序設(shè)計大多是以填空的形式出現(xiàn),雖然有所接觸,但都不完全。而這兩周的課程設(shè)計,卻讓我們完完全全用自己學(xué)到的知識編寫一個完整的體統(tǒng)程序。這是一個新的挑戰(zhàn),也是一種新的學(xué)習(xí)。    我們組選擇的

16、是備選題目中的第一個職工信息管理系統(tǒng)。這需要我們自己設(shè)計一個系統(tǒng),可以輸入信息,保存到文件里,再從文件里調(diào)出來,使之顯示在屏幕上,進(jìn)行刪除、添加等對信息的修改。初看到這個題目覺得很簡單,但當(dāng)我做到電腦前準(zhǔn)備開始編寫代碼的時候才發(fā)現(xiàn)無從下手。通過去圖書館查找程序設(shè)計相關(guān)的書籍,和上網(wǎng)參考前人編寫的類似程序,我腦中才有了一個大概方向。    終于開始著手寫下了第一段輸入函數(shù)的代碼,因為這是我們平時課堂上用的最多最熟的printf語句,寫了很長一大段,調(diào)式運行竟然成功了,頓時信心倍增。于是我開始迫不及待的開始寫第二段保存函數(shù)。我記得第一天下來,我只寫好了這兩個

17、函數(shù),但還是很開心,因為這是我編的第一個小系統(tǒng)的成功的開始!    接下來幾天都在宿舍整個下午的對著電腦不斷的編譯、調(diào)試、修改,每次編好一個能夠成功運行的程序,都會感到很欣慰,并增加繼續(xù)下去的信心。當(dāng)然其中也有遇到困難的時候。好幾次遇到編好的程序調(diào)試沒有錯誤,卻偏偏不能運行這種情況,自己編的程序自己很難發(fā)現(xiàn)當(dāng)中的錯誤,而電腦又沒有提示,這時候就很受打擊,也會著急。反復(fù)檢查都找不出毛病來的時候就會有想要放棄的念頭。有時候就直接關(guān)機(jī)去做別的事情,等再開始做程序的時候,才發(fā)現(xiàn)先前的錯誤所在。這時候會有一種“柳暗花明又一村”的欣慰感覺??傊?,遇到困難,可以先放一

18、放,讓腦子休息一下,忘掉錯誤的記憶?;蛟S等過段時間再回過頭來,就會很容易的發(fā)現(xiàn)之前的錯誤了。隨著編好的程序越多,累積的經(jīng)驗也越多,查找錯誤就越快了。還有會發(fā)現(xiàn)很多程序有很多相似之處,可以通過復(fù)制修改的發(fā)式來編寫。雖然題目要求只需要一種查詢方式,但當(dāng)我編出規(guī)律之后自然就想多寫兩個,寫完就會有很大的成就感了。    在課程設(shè)計的過程中,還有一件很倒霉的事。7月5號早上我們有一門考試,靠前還需要復(fù)習(xí)的那種。所以我打算4號早上寫會兒程序,從下午開始就復(fù)習(xí)第二天要考的科目,結(jié)果從早上開始寫刪除函數(shù)的代碼,一邊調(diào)試,一邊修改 ,越來越接近成功,越激動越投入

19、,等最后終于完成的時候猛然發(fā)現(xiàn)已經(jīng)下午4點多了。乘著興致高,一口氣把添加函數(shù)也寫出來了。雖然只能把復(fù)習(xí)擠到晚上進(jìn)行,但因為編好了兩個很難的程序代碼,覺得這一天還是很有成就感的,很開心。結(jié)果不幸的是,等我第二天考完試回來打算繼續(xù)編的時候,才發(fā)現(xiàn)之前辛辛苦苦編的兩段代碼沒有保存。沒辦法,只能重新寫。     當(dāng)所有功能函數(shù)都編好后,我用主函數(shù)將他們串起來,這是遇到最大的問題就是經(jīng)過刪除、添加后職工人數(shù)會發(fā)生變化。想了很久,又翻以前的課堂筆記,最后想到了定義全局指針變量來解決這個問題。這個問題的成功解決預(yù)示著我們的職工信息管理系統(tǒng)大功告成! 

20、;     總之,經(jīng)過這一次的課程設(shè)計,我們體會到了痛苦與快樂同存的感覺。當(dāng)最后一次成功串聯(lián)運行所有函數(shù)時,真的很開心。通過這次實踐,我們能夠更熟練掌握C語言,特別是循環(huán)和文件,當(dāng)時在課堂上沒有學(xué)太清楚的,這個程序設(shè)計之后都很明白了。同時增加了我們對程序設(shè)計的興趣,暑假回家我還會嘗試著做一些其他的小系統(tǒng)。        五、附錄(完整源程序清單) #include<stdio.h>#include <string.h>#d

21、efine N 6 struct employeeint number,age,wage;char name20,sex10,address30,xueli20;long int telephone;emN;                         int

22、60;a=N;                       int *p=&a;                      main

23、()    void search();    void search_name();    void search_xueli();    void search_number();    void load();    void display();void del();void

24、60;input();void add();void save();                  int n;    printf("n");    printf("        *職工信息管

25、理*n");    printf("n");printf("                        1.錄入職工信息n");    printf("     &#

26、160;                  2.瀏覽職工信息n");    printf("                      &#

27、160; 3.查詢職工信息n");    printf("                        4.刪除職工信息n");    printf("      &#

28、160;                 5.添加職工信息n");    printf("                       &#

29、160;6.退出n");    printf("n");    scanf("%d",&n);     switch(n)         case 1:printf("           

30、   輸入職工信息n");printf("n");input();main();break;       case 2:printf("              瀏覽職工信息n");printf("n");display(*p);main();break;  

31、;     case 3:printf("              查詢職工信息n");printf("n");search();break;        case 4:printf("      

32、;        刪除職工信息n");printf("n");del(p);break;       case 5:printf("              添加職工信息n");printf("n");add(p);break;

33、       case 6:exit(0);break;       default :break;   void input()       int i;for(i=0;i<N;i+)printf("請輸入職工號: ");    scanf(

34、"%d",&emi.number);    printf("請輸入姓名:  ");    scanf("%s",);    printf("請輸入性別:  ");    scanf("%s",&emi.sex);    prin

35、tf("請輸入年齡:  ");    scanf("%d",&emi.age);    printf("請輸入學(xué)歷:  ");    scanf("%s",emi.xueli);    printf("請輸入工資:  ");    

36、scanf("%d",&emi.wage);    printf("請輸入住址:  ");    scanf("%s",emi.address);    printf("請輸入電話:  ");    scanf("%d",&emi.telephone);  

37、60; printf("n");       printf("n創(chuàng)建完畢!n");    save(N);   void save(int m)          int i;FILE*fp;if(!(fp=fopen("d:/bbb.txt","w

38、")printf("打開失敗");exit(0); for(i=0;i<m;i+)fprintf(fp,"M %8s %5s  %8s  %8s n",emi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone); fclose(fp);  void load(int b)   &

39、#160;        int i;FILE*fp;if(!(fp=fopen("d:/bbb.txt","r")printf("打開失敗");exit(0);elsefor(i=0;i<b;i+)fscanf(fp,"%8s%5s%8s%8sn",&emi.number,&,&emi.sex,&emi.age,&emi.xueli,&emi.wage,&

40、amp;emi.address,&emi.telephone);fclose(fp);void display(int a)               int i,b=a;                load(b);  

41、60;             printf("n職工號t    姓名t性別t年齡t 學(xué)歷t     工資t  住址t  電話n");for(i=0;i<a;i+)printf("%dt%8st%st%dt%8s    %dt%st%dn",e

42、mi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone);printf("n");    void search()             int t;printf("n按職工號查詢按1n按姓名查詢請按2");printf("n按學(xué)歷查詢請按3n返回主菜

43、單請按4n");scanf("%d",&t);    switch(t)case 1:printf("n按職工號查詢n");search_number();             break;case 2:printf("n按姓名查詢n");search_name();     

44、          break;case 3:printf("n按學(xué)歷查詢n");search_xueli();              break;case 4:main();break;          

45、0;        default :printf("輸入錯誤,請重新輸入!n");    search();                         break;  vo

46、id search_number()            int i,number;load(*p);                 printf("n請輸入要查詢的職工號:");scanf("%d",&number);for(i=0;i

47、<*p;i+)if(number=emi.number)printf("n該職工信息如下:n");printf("n職工號t    姓名t性別t年齡t 學(xué)歷t     工資t  住址t  電話n");printf("n%dt%8st%st%dt%8s    %dt%st%dn",emi.number,,emi.sex,emi.age,e

48、mi.xueli,emi.wage,emi.address,emi.telephone);        printf("n");break;if(i=*p)printf("n查無此人n"); search(); void search_name()           int i;char name20;load(*

49、p);                  printf("n請輸入要查詢的姓名:");scanf("%s",name);for(i=0;i<*p;i+)if(!strcmp(,name)            printf("n

50、該職工信息如下:n");printf("n職工號t    姓名t性別t年齡t 學(xué)歷t     工資t  住址t  電話n");printf("n%dt%8st%st%dt%8s    %dt%st%dn",emi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone);

51、        printf("n");break;if(i=*p)printf("n查無此人n");    search();  void search_xueli()              int i,k=0;char xueli20;loa

52、d(*p);                printf("n請輸入要查詢的學(xué)歷:");scanf("%s",xueli);for(i=0;i<*p;i+)if(!strcmp(emi.xueli,xueli)printf("職工號t    姓名t性別t年齡t 學(xué)歷t     工資t

53、  住址t  電話n");printf("%dt%8st%st%dt%8s    %dt%st%dn",emi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone);      for(i=0;i<*p;i+)         &#

54、160;       if(!strcmp(emi.xueli,xueli)break;else k+;if(k=*p)printf("n查無此人n");    search();       void del(int *b)int i,t,j,m;int a=*b;char name20;printf("n所有職工信息:n&q

55、uot;);    display(a);                                  printf("n請輸入要刪除職工的名字:");scanf("%s",

56、name);for(i=0;i<a;i+)if(!strcmp(,name)printf("n確認(rèn)刪除請按1n取消請按2n");scanf("%d",&t);if(t=1)                              

57、;   for(j=i;j<a-1;j+)emj.age=emj+1.age;emj.wage=emj+1.wage;emj.number=emj+1.number;emj.telephone=emj+1.telephone;strcpy(emj.xueli,emj+1.xueli);strcpy(,emj+1.name);strcpy(emj.address,emj+1.address);strcpy(emj.sex,emj+1.sex);        

58、60;            a-;save(j);             break;            if(t=2)break;if(i=a)     printf(&

59、quot;n輸入錯誤,無此人n"); *b=a;printf("n繼續(xù)刪除請按1n瀏覽信息請按2n返回主菜單請按3n");scanf("%d",&m);switch(m)        case 1:del(p);break;                  

60、case 2:display(*b);main();break;      case 3:main();break;        default:break;   void add(int *a)               int i,n,m;FILE*fp;if(!(fp=fopen("d:/bbb.txt","a")printf("打開失敗");exit(0); p

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論