版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、.C語言課程設計報告 設計題目:職工信息管理系統(tǒng)程序設計班級:031094-11姓名:舒平學號:20091001905指導老師:邵玉祥課程設計評語2目 錄31課程論文題目42程序設計思路43功能模塊圖54數(shù)據(jù)結(jié)構(gòu)設計55算法設計66程序代碼137程序運行結(jié)果228編程中遇到的困難及解決方法259總結(jié)心得及良好建議2610致謝26 1 課程論文題目職工信息管理系統(tǒng)程序設計一、 題目要求 職工信息包括職工號、姓名、性別、年齡、學歷、工資、住址、電話等(職工號不重復)。試設計一職工信息管理系統(tǒng),使之能提供以下功能:(1) 系統(tǒng)以菜單的方式工作。(2) 職工信息錄入功能 (職工信息用文件保存)。(3)
2、 職工瀏覽功能。(4) 職工信息查詢功能,查詢方式可按學歷查詢或者工號查詢。(5) 職工信息的刪除、修改功能(可選項)。2程序設計思路1、設計思路(1)根據(jù)題目要求,應該把職工工資信息用結(jié)構(gòu)體形式輸入,在定義一個全局變量和文件指針進行整個程序的運行,然后把職工工資信息送到文件中,所以應該提供一個結(jié)構(gòu)體和文件的輸入輸出等操作;(2)在程序中需實現(xiàn)職工工資瀏覽、查詢、統(tǒng)計等功能的操作,所以需要建立相應的功能模塊來實現(xiàn);(3)另外還需要提供鍵盤式選擇菜單實現(xiàn)功能,在運行時達到所要的目的。 3功能模塊圖職工信息管理系統(tǒng)信息修改信息查詢信息瀏覽信息錄入按學歷查詢按工號查詢5算法設計1主函數(shù)提供輸入、處理
3、和輸出部分的函數(shù)調(diào)用,各功能模塊采用菜單方式選擇。開 始顯示一系列的功能選擇輸入n,判斷n是否是0到6NY根據(jù)n值調(diào)用各功能模塊2瀏覽模塊【分析】該模塊的功能是瀏覽職工的全部信息顯示職工記錄(10個一屏)按任意鍵顯示下一屏按任意鍵返回主菜單3排序模塊 開 始輸入n判斷n是否是0到2NY12瀏覽職工信息按實發(fā)工資排序按工資卡號排序返回?輸出12主菜單4查詢模塊【分析】 該模塊的功能是根據(jù)輸入的職工按照工號和學歷查找對應的記錄,找到以后,可進行繼續(xù)查找或修改信息的操作。流程圖如下:開 始選擇按工號還是學歷查詢輸入職工工號或者學歷是否找到職工記錄?顯示沒有找到顯示找到的記錄詢問用戶是否繼續(xù)查找?選擇
4、:1)查找另一個 2)修改 3)返回菜單結(jié)束5修改模塊 【分析】該模塊的功能是顯示所有職工的信息,考慮到記錄較多,建議采用分屏顯示。顯示完所有記錄后,輸入要修改的職工的工號,根據(jù)工號查到職工的記錄,并提示用戶修改該記錄的哪部分信息,根據(jù)用戶做的選擇修改相應信息。流程圖如下:開 始顯示所有記錄,讓用戶選擇需修改的職工輸入需修改的工號i!=0? Y顯示找到的記錄,調(diào)用修改記錄詢問用戶是否繼續(xù)修改 返回主菜單結(jié)束6程序代碼#include<stdio.h>#define N 50struct workerchar id50;char name20;char sex10;char age1
5、0;char edu20;char salary10;char address20;char tel20;workerN;void save(int n) /保存函數(shù),保存n個記錄 FILE *fp; int i; if(fp=fopen("worker.txt","wb")=NULL) /以只寫方式為輸出打開一個二進制文件 printf("nCannot open filen"); for(i=0;i<n;i+) if(fwrite(&workeri,sizeof(struct worker),1,fp)!=1) pr
6、intf("file write errorn"); fclose(fp);int load() /加載函數(shù) FILE *fp; int i; if(fp=fopen("worker.txt","rb")=NULL) printf("nCannot open filen"); return NULL; for(i=0;!feof(fp);i+) fread(&workeri,sizeof(struct worker),1,fp); fclose(fp); return(i-1);void no_input(
7、int i,int n) /工號輸入函數(shù),i表示第i個職工的信息,n表示比較到第n個職工 int j,k,w1; do w1=0; printf("工號:"); scanf("%s",workeri.id); for(j=0;workeri.idj!='0'j+) if(workeri.idj<'0'|workeri.idj>'9') /判斷工號是否為數(shù)字 puts("請重新輸入!n"); w1=1;break; if(w1!=1) for(k=0;k<n;k+) /比
8、較到第N個職工 if(k!=i&&strcmp(workerk.id,workeri.id)=0) /判斷職工號是否有雷同puts("請重新輸入!n"); w1=1;break; while(w1=1);void input(int i) /輸入一個記錄的函數(shù) no_input(i,i); printf("姓名:");scanf("%s",); printf("性別:");scanf(" %s",&workeri.sex); printf(&quo
9、t;年齡:");scanf("%s",&workeri.age); printf("工資:");scanf("%s",workeri.salary); printf("學歷:");scanf("%s",&); printf("住址:");scanf("%s",workeri.address); printf("電話:");scanf("%s",workeri.tel);
10、void printf_one(int i) /顯示一個記錄的函數(shù) printf("%10s %10s %5s %5s %8s %6s %10s %10sn", workeri.id,,workeri.sex,workeri.age, workeri.salary,,workeri.address,workeri.tel);void printf_back() /一個任務結(jié)束后選擇是好似瀏覽還是返回 int k,w; printf("nntSuccessful-.nn"); printf("接下來做
11、什么?nnt1).瀏覽全部t2).返回: bb"); scanf("%d",&w); if(w=1)browse(); else menu();modify_data(int i,int n) /修改函數(shù) int c,w1; do puts("nmodify by=>nn 1).工號 2).姓名 3).性別 4).年齡 5).工資 6).學歷 7).地址 8).電話 9).取消"); printf("請選擇?: bb"); scanf("%d",&c); if(c>9|c<
12、;1)puts("nChoice error!please again!");getchar(); while(c>9|c<1); do switch(c) case 1:no_input(i,n);break; case 2:printf("name:");scanf("%s",);break;case 3:printf("sex:");scanf("%s",workeri.sex);break;case 4:printf("age:")
13、;scanf("%s",workeri.age);break;case 5:printf("salary:");scanf("%s",workeri.salary);break;case 6:printf("edu:");scanf("%s",);break;case 7:printf("address:");scanf("%s",workeri.address);break;case 8:printf("tel:"
14、;);scanf("%s",workeri.tel);break; case 9:menu();break; puts("nNow:n"); printf_face(); printf_one(i); printf("n確定?nnt1).是 2).否,重新修改 3).不保存退出 bb"); scanf("%d",&w1); if(w1=1)save(n); while(w1=2); return(w1);printf_face() /顯示數(shù)據(jù)結(jié)構(gòu)項目 printf("nt工號 姓名 性別 年齡 工
15、資 學歷 地址 電話號碼n"); void enter() /輸入模塊 int i,n; printf("輸入多少個職工信息(0-%d):",N-1); scanf("%d",&n); printf("n 請輸入職工信息nn"); for(i=0;i<n;i+) input(i); if(i!=0) save(n); printf_back();browse() /瀏覽模塊 int i,j,n; n=load(); printf_face(); for(i=0;i<n;i+) if(i!=0)&&
16、amp;(i%10=0) printf("nn按任意鍵顯示下一頁."); getch(); puts("nn"); printf_one(i); printf("t這里有 %d 條記錄.n",n); printf("n按任意鍵返回."); getch(); menu();modify() /修改模塊struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;printf_face();for(i=0;i<n;i+)if(i!=0)&&
17、amp;(i%10=0) /目的是分屏顯示printf("nn記住要修改的工號.按任意鍵顯示下一頁");getch();puts("nn");printf_one(i); /調(diào)用顯示一個記錄的函數(shù)doprintf("nn輸入要修改的職工工號! 工號:");scanf("%s",s.id); /輸入要修改的IDfor(i=0;i<n;i+) /查找要修改的數(shù)據(jù)if(strcmp(s.id,workeri.id)=0)k=i; /找到要修改的記錄s=workeri; /把workeri備份,以便恢復if(k=-1
18、)printf("nn未找到 請重輸");while(k=-1); /當k=-1表示沒有找到printf_face(); /調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目的函數(shù)printf_one(k); /調(diào)用顯示一個記錄的函數(shù)w1=modify_data(k,n); /修改記錄并返回保存控制值w1,w1=1表示用戶已確認修改if(w1=1)printf("Successful_.nn修改另一個?nnt1).是 2).否,保存退出t bb"); scanf("%d",&w0); w2=1; /用來控制保存,使w2=1是標記已有過修改elsew0=0;
19、if(w2=1)workerk=s;if(w0!=1&&w2=1)save(n);while(w0=1);menu();search() /查詢模塊 int c,w1; do puts("nsearch by=>nn1).工號 2.學歷 3).取消并返回"); printf("Which you needed?: bb"); scanf("%d",&c); if(c>3|c<1) puts("nchoice error!please again!"); getchar();
20、 while(c>3|c<1); switch(c) case 1:search1();break; case 2:search2();break; case 3:menu();break; search1() /按工號查詢模塊int i,n,k,w1=1,w2,w3,w4; struct worker s; n=load(); do do k=-1; printf("nn輸入要查詢的工號! id:"); scanf("%s",s.id); printf_face(); for(i=0;i<n;i+) if(strcmp(s.id,wo
21、rkeri.id)=0)k=i; printf_one(k);break; if(k=-1) printf("nnNo exit!please"); printf("nn繼續(xù)查找?nt1).是 2).否,返回 bb"); scanf("%d",&w1); if(w1=2) menu(); while(k=-1&&w1=1); w4=0;w3=0; if(k!=-1)printf("nn接下來干什么?nt1).查找另一個 2).修改 3).返回菜單 bb"); scanf("%d&q
22、uot;,&w2); switch(w2) case 1:search1();break; case 2:w3=modify_data(k,n);break; case 3:menu();break; while(w2=1); menu();search2() /按學歷查詢模塊int i,n,k,w1=1,w2,w3,w4; struct worker s; n=load(); do do k=-1; printf("nn請輸入你要查詢的學歷:n"); scanf("%s",); printf_face(); for(i=0;i<
23、n;i+) if(strcmp(,)=0)k=i; printf_one(k); if(k=-1) printf("nnNo exit!please"); printf("nn繼續(xù)查找?nt1).是 2).否,返回 bb"); scanf("%d",&w1); if(w1=2) menu(); while(k=-1&&w1=1); w4=0;w3=0; if(k!=-1)printf("nn接下來干什么?nt1).查找另一個 2).修改 3).返回菜單 bb"
24、); scanf("%d",&w2); switch(w2) case 1:search2();break; case 2:w3=modify_data(k,n);break; case 3:menu(); break; while(w2=1); menu(); menu() int n,w1; do puts("tt*菜單*nn");puts("tttt1.錄入職工信息");puts("tttt2.瀏覽職工信息");puts("tttt3.查詢職工信息"); puts("tt
25、tt4.修改職工信息");puts("tttt5.退出");puts("tt*nn");printf("請選擇(15): bb");scanf("%d",&n); if(n<1|n>5) /對選擇的數(shù)字作判斷 w1=1;getchar(); else w1=0; while(w1=1); switch(n)case 1:enter();break; /錄入 case 2:browse();break; /瀏覽 case 3:search();break; /查詢 case 4:modi
26、fy();break; /修改 case 5:exit(0); /退出main() menu();7程序運行結(jié)果 下面是各個模塊的的界面截圖(1)、主菜單(2)、輸入模塊(3)、瀏覽模塊(3)、查找模塊(4)、修改模塊8.編程中遇到的困難及解決方法 溫故而知新,可以為師矣。通過這次實習我深刻的認識了這點。這學期學習了C語言,了解了一些計算機語言方面的知識。借這次上機實習之際我又把課程重新復習了一遍,收獲頗豐,以前沒能弄懂的一些問題現(xiàn)在已有了一些認識,以前不太明白的問題現(xiàn)在也基本清楚了,雖然實習的題目對我來說還有些難,最終能在自己的努力下完成這次實習實感欣慰。以前遇到大的程序,心中總是有種恐懼感
27、,不相信是自己的能力所能完成的,也沒有膽量去嘗試,這次正好也幫我克服了這種恐懼感,使我相信無論什么事只要自己真的下決心去做,都是可以做到的,即使不能一次成功,也不能放棄,失敗的盡頭一定有成功在等著我們的,失敗乃成功之母。 實踐總是檢驗真理的唯一方法,學了再多的知識不會運用,就如同鳥兒長了翅膀卻不會飛翔。學習C語言就是為了運用它幫助我們解決一些日常生活中遇到的問題,而此次的課程設計就為我們提供了檢驗自己能力的一次機會,也給了我們一次彌補以前缺陷的機會??偠灾?,這次課程設計使我獲益匪淺啊。 我對VC使用操作的心得可以歸結(jié)為以下幾點:(1)在設計一些較復雜的程序時,要盡量采用程序模塊,采用函數(shù)的相
28、互調(diào)用,將一些調(diào)用次數(shù)較多的函數(shù)作為公共函數(shù),放在整個程序的開頭處,這樣就免去了在調(diào)用時的聲明,可以減少錯誤的出現(xiàn)。(2)盡可能將主函數(shù)設計得簡潔一些,以便在調(diào)試程序時較容易找出錯誤。(3)采用菜單方式能夠以最簡潔的方式將程序內(nèi)容呈現(xiàn)在用戶眼前,并且,要盡可能地給出較詳細較全面的使用提示,在每一次執(zhí)行下一步驟是都要給出使用者具體的提示,以增加程序的實用性,而不只是讓編程者看得懂。(4)一個程序的算法和數(shù)據(jù)結(jié)構(gòu)雖然是最重要的,但是,作為一個實用性的軟件或程序,要考慮到使用者的方便性,所以,要注意程序運行界面的美化工作,即:注意換行的位置,注意行距,數(shù)據(jù)在屏幕中的位置,菜單的顯示方式,選項的排列方
29、式等,還有,要在每次執(zhí)行完一項指令后,要使函數(shù)運行界面返回到菜單,等等,這些問題也是編寫一個好的程序必不可少的工作。 9總結(jié)心得及良好建議 經(jīng)過一學期的C語言學習,我們掌握了C語言的基礎知識,能夠讀懂別人用c語言設計的程序。平時的程序設計大多是以填空的形式出現(xiàn),雖然有所接觸,但都不完全。而這一周的課程設計,卻讓我們完完全全用自己學到的知識編寫一個完整的體統(tǒng)程序。這是一個新的挑戰(zhàn),也是一種新的學習。 我們組選擇的題目是第一個職工工資信息管理系統(tǒng)。初看到這個題目覺得很簡單,但當我做到電腦前準備開始編寫代碼的時候才發(fā)現(xiàn)無從下手。通過去圖書館查找程序設計相關(guān)的書籍,和上網(wǎng)參考前人編寫的類似程序,我腦中才有了一個大概方向。 終于開始著手寫了。第一天下來,我只寫好了兩個函數(shù),但還是很開心,因為這是我編的第一個小系統(tǒng)的成功的開始! 接下來幾天都在宿舍整個下午的對著電腦不斷的編譯、調(diào)試、修改,每次編好一個能夠成功運行的程序,都會感到很欣慰,但自己編的程序自己很難發(fā)現(xiàn)當中的錯誤,而電腦又沒有提示的時候就很受打擊,也會著急。但可以先放一放,讓腦子休息一下,忘掉錯誤的記憶。或許等過段時間再回過頭來,就會很容易的發(fā)現(xiàn)之前的錯誤了。隨著編好的程序越多,累積的經(jīng)驗也越多,查找
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025 小學四年級科學下冊校園風向日變化規(guī)律總結(jié)課件
- 2026年營養(yǎng)師職業(yè)資格考試題庫及答案要點
- 2026年人工智能與機器學習應用實踐試題
- 2026年中級會計職稱考試模擬題及答案
- 2026年播音主持專業(yè)職稱評審語音表達與節(jié)目主持能力測試題
- 2026年法學專業(yè)研究生入學考試專業(yè)綜合測試題集
- 2026年園林機械設備操作與維護知識考試題
- 家居色彩搭配設計方案
- 水電站設備選型與配置方案
- 城市排水規(guī)劃優(yōu)化方案
- 2025-2026年蘇教版初一歷史上冊期末熱點題庫及完整答案
- 規(guī)范園區(qū)環(huán)保工作制度
- 2026年上半年眉山天府新區(qū)公開選調(diào)事業(yè)單位工作人員的參考題庫附答案
- 藥理學試題中國藥科大學
- 卓越項目交付之道
- (人教版)八年級物理下冊第八章《運動和力》單元測試卷(原卷版)
- 2026屆新高考語文熱點沖刺復習 賞析小說語言-理解重要語句含意
- 2026屆杭州學軍中學數(shù)學高三上期末綜合測試模擬試題含解析
- 創(chuàng)世紀3C數(shù)控機床龍頭、高端智能裝備與產(chǎn)業(yè)復蘇雙輪驅(qū)動
- (新版?。笆逦濉鄙鷳B(tài)環(huán)境保護規(guī)劃
- 教培行業(yè)年終述職
評論
0/150
提交評論