版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> ??; </p><p><b> C語言程序設(shè)計</b></p><p> 題目:職工信息管理系統(tǒng) </p><p> 學(xué)號: </p><p> 姓名: </p&g
2、t;<p><b> 班級:</b></p><p> 成績: </p><p><b> 目錄</b></p><p><b> 一、設(shè)計思想2</b></p><p><b> 二、概要設(shè)計2
3、</b></p><p> (一)模塊介紹2</p><p> (二)系統(tǒng)流程;3</p><p><b> 三、詳細(xì)設(shè)計4</b></p><p> (一)函數(shù)介紹4</p><p> (二)參數(shù)介紹10</p><p> (三
4、)返回結(jié)果介紹10</p><p> 四、結(jié)果總結(jié)10</p><p><b> 設(shè)計思想</b></p><p> 主要分為六大功能,分別用六個函數(shù)來實現(xiàn):</p><p> 錄入職工信息并保存:用fwrite將輸入的數(shù)據(jù)保存在文件中,用 fp=fopen("emploee_date
5、1","wb")語句進(jìn)行寫入;</p><p> 添加職工信息并保存:用fp=fopen("emploee_date1","ab")語句追加所輸入的信息,再用fwrite函數(shù)保存到文件中;</p><p> 顯示所有職工信息:用fread函數(shù)對文件進(jìn)行讀??;</p><p> 職工查詢:①職
6、工號方式查詢,輸入職工號,讀取文件,輸出與文件中相對應(yīng)的信息;②職工姓名查詢,用strcmp函數(shù)比較文件中的字符串與輸入的字符串;</p><p> 刪除職工信息:先用 第4個功能查找信息,然后再把文件中的信息用后一項代替前一項,保存的項數(shù)減一;</p><p> 修改職工信息并保存:先用第4個功能查找信息,將數(shù)據(jù)從文件中讀出后再賦值,然后重新全部保存;</p><
7、p><b> 概要設(shè)計</b></p><p><b> 模塊介紹</b></p><p><b> 錄入職工信息并保存</b></p><p> 第一次進(jìn)入需進(jìn)行首次錄入后才能運(yùn)行,錄入后將會保存到文件"emploee_date1"中;</p><
8、;p><b> 添加功能</b></p><p> 在錄入的基礎(chǔ)上對信息進(jìn)行追加,并保存在文件中;</p><p><b> 顯示所有職工信息</b></p><p> 將文件中的信息全部讀出,然后顯示在屏幕上;</p><p><b> 職工查詢</b><
9、;/p><p> 查詢分為職工號查詢和職工姓名查詢。進(jìn)入查找后會提醒是職工號查詢還是職工姓名查詢。查找為輸入要查詢的職工號或姓名,就會顯示出查詢的職工全部信息; </p><p><b> 刪除職工信息</b></p><p> 在刪除界面輸入要刪除職工的職工號或姓名,查詢出職工信息后,選擇刪除后即可刪除; </p><p
10、><b> 修改職工信息并保存</b></p><p> 對于職工信息的修改,在修改界面輸入要修改職工的姓名或職工號,查詢出該職工后選擇修改,輸入要修改的信息即完成修改。</p><p><b> 系統(tǒng)流程;</b></p><p><b> 主函數(shù)流程圖為:</b></p>
11、<p> 進(jìn)入程序后,會有菜單提示操作選項,當(dāng)輸入操作選項后,程序進(jìn)入選擇操作的工作界面。</p><p> 當(dāng)輸入1時,進(jìn)入錄入職工信息并保存界面,選擇錄入個數(shù),然后會將錄入的信息保存在emploee_date1文件中。</p><p> 當(dāng)輸入2時,進(jìn)入添加職工信息并保存界面,選擇添加個數(shù),然后會將添加的信息保存在emploee_date1文件中。</p>
12、;<p> 當(dāng)輸入3時,屏幕上會顯示所有的職工信息。</p><p> 當(dāng)輸入4時,進(jìn)入查詢界面,屏幕上會顯示是按職工號查找還是按姓名查找。選擇相應(yīng)的操作后,屏幕上會出現(xiàn)輸入查詢職工的姓名或職工號,輸入后選擇查詢即可查找到要查的職工信息,若輸入的職工不存在,會提醒不存在。查詢完后會再提示是繼續(xù)查找還是退出查詢,選擇相應(yīng)的操作選項即可實現(xiàn)想要的操作。</p><p> 當(dāng)
13、輸入5時,會提示是按姓名查找刪除還是按職工號查找刪除,選擇相應(yīng)的選項后輸入要刪除的職工的姓名或職工號,屏幕上會顯示要刪除的職工信息,然后會提示確定刪除還是退出刪除,選擇刪除即可刪除。</p><p> 當(dāng)輸入5時,會提示是按姓名查找修改還是按職工號查找修改,選擇相應(yīng)的選項后,輸入要修改的職工的姓名或職工號,然后選擇修改,輸入修改的內(nèi)容,即可完成修改。</p><p><b>
14、 詳細(xì)設(shè)計</b></p><p><b> 代碼介紹</b></p><p><b> 函數(shù)介紹</b></p><p> #include <stdio.h></p><p> #define SIZE 20</p><p> int k
15、,m,y,i,n,d,p=1,z=0;</p><p> struct emploee_type</p><p><b> {</b></p><p><b> int num;</b></p><p> char name[10];</p><p><b>
16、; char sex;</b></p><p> struct date</p><p><b> {</b></p><p><b> int year;</b></p><p> int month;</p><p><b> int d
17、ay;</b></p><p><b> }birth;</b></p><p> char state[10];</p><p><b> int pay;</b></p><p> char phone[11];</p><p> } emp[SIZ
18、E];</p><p><b> 主函數(shù):</b></p><p> void main()</p><p><b> {</b></p><p> system("color 3f"); //換背景顏色語句</p>
19、<p> m=open2(); //從emploee_date2文件中取出m值</p><p> while(1) //功能的重復(fù)運(yùn)行</p><p><b> {</b></p><p> printf("請選擇功能:");
20、</p><p> scanf("%d",&n);</p><p><b> if(n<7)</b></p><p><b> {</b></p><p><b> switch(n)</b></p><p>&
21、lt;b> {</b></p><p><b> case 1:</b></p><p> printf("錄入的職工信息的個數(shù):");</p><p> scanf("%d",&m);</p><p><b> save1();&
22、lt;/b></p><p><b> break;</b></p><p><b> case 2:</b></p><p> while(p==1) //功能的重復(fù)運(yùn)行</p><p><b> {</b></p>
23、<p> printf("添加的職工信息的個數(shù):");</p><p> scanf("%d",&k);</p><p><b> save2();</b></p><p><b> m=m+k;</b></p><p><b&
24、gt; }</b></p><p><b> break;</b></p><p> case 3:output();break;</p><p><b> case 4:</b></p><p> printf("請選擇查找方式:\n");</p&g
25、t;<p> find();break;</p><p><b> case 5:</b></p><p> while(p==1)</p><p><b> {</b></p><p> m=del(m); //將m值返回<
26、;/p><p> printf("繼續(xù)刪除請按1,退出刪除請按2:");</p><p> scanf("%d",&p);</p><p><b> }</b></p><p><b> break;</b></p><p>
27、; case 6:change();break;</p><p><b> }</b></p><p> p=1; //讓程序能夠再次進(jìn)入功能2、3、4、5</p><p> open1(); //保存m值到文件emploee_da
28、te2</p><p> printf("\n(提示請按7,退出程序請按8)\n");</p><p><b> }</b></p><p> else if(n==7)</p><p><b> ……</b></p><p> else if
29、(n==8)</p><p> break; //退出循環(huán)</p><p><b> else</b></p><p> printf("錯誤,請重新輸入\n");</p><p><b> }</b></p>
30、;<p><b> } </b></p><p> 主函數(shù)由一個死循環(huán)構(gòu)成,保證功能的重復(fù)運(yùn)行,用stwich語句展開對六個函數(shù)的引用,各分函數(shù)用循環(huán)語句保證各自功能的重復(fù)運(yùn)行。</p><p> void save1()//錄入職工</p><p><b> {</b></p>
31、<p><b> FILE*fp;</b></p><p> printf("職工號 姓名 性別(F/M) 出生 職務(wù) 工資 電話號碼\n");</p><p> for(i=0;i<m;i++)</p><p> scanf("%d%s%s%d-%d-%d%s%d%s&quo
32、t;,&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.month,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);</p><p> fp=fopen("emploee_date1",&qu
33、ot;wb") //以寫方式打開文件emploee_date1</p><p> for(i=0;i<m;i++)</p><p> if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p> printf("文件寫入錯誤\
34、n");</p><p> fclose(fp); //關(guān)閉文件emploee_date1</p><p><b> }</b></p><p> 用fwrite將職工信息保存在文件emploee_date1中。</p><p&g
35、t; void save2()//添加職工</p><p><b> { </b></p><p><b> FILE *fp;</b></p><p><b> int i;</b></p><p> printf("職工號 姓名 性別(F/M
36、) 出生 職務(wù) 工資 電話號碼\n");</p><p> for(i=0;i<k;i++)</p><p> scanf("%d%s%s%d-%d-%d%s%d%s",&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.m
37、onth,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);</p><p> (fp=fopen("emploee_date1","ab") //以追加方式打開文件emploee_date1</p><p> for(i=0;i<k
38、;i++)</p><p> if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p> printf("文件寫入錯誤\n");</p><p> fclose(fp);</p><p> printf("繼續(xù)添加請按1,退出添
39、加請按2:");</p><p> scanf("%d",&p);</p><p><b> }</b></p><p> 用fwrite追加職工信息并保存在文件emploee_date1中。</p><p> void output()//顯示所有職工功能</p>
40、;<p><b> {</b></p><p><b> FILE*fp;</b></p><p><b> int i;</b></p><p> printf("職工號 姓名 性別 出生 職務(wù) 工資 電話號碼\n")
41、;</p><p> fp=fopen("emploee_date1","rb"); //以讀方式打開emploee_date1文件</p><p> for(i=0;i<m;i++)</p><p><b> {</b></p><
42、p> fread(&emp[i],sizeof(struct emploee_type),1,fp); //讀出文件中的信息</p><p> printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s",emp[i].num,emp[i].name,emp[i].sex,emp[i].birth.year,emp[i].bir
43、th.month,emp[i].birth.day,emp[i].state,emp[i].pay,emp[i].phone);</p><p> printf("\n");</p><p><b> }</b></p><p> fclose(fp);</p><p><b> }
44、</b></p><p> 用fread文件emploee_date1中的信息讀取。</p><p> find()//查找功能</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> int i,n
45、=0,y,x,number; //其中n=0是為了控制是否文件中存在該信息</p><p> char a[10];</p><p> fp=fopen("emploee_date1","rb");</p><p> printf("1--按職工號\n2--按姓名\n&quo
46、t;);</p><p> scanf("%d",&x);</p><p> if(x==1) //選擇查找方式 </p><p><b> {</b></p><p> printf("請輸入職工號:&qu
47、ot;);</p><p> scanf("%d",&number);</p><p> for(i=0;i<m;i++)</p><p><b> {</b></p><p> fread(&emp[i],sizeof(struct emploee_type),1,fp
48、);</p><p> if(emp[i].num==number) //比較輸入的數(shù)據(jù)與文件中職工號相同的信息</p><p><b> {</b></p><p> y=i; //將查找到位置給y</p><p> n=1;
49、 //文件中存在與所輸入的數(shù)據(jù)相同的信息</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(x==2)</b></p><p
50、><b> {</b></p><p> printf("請輸入名字:");</p><p> scanf("%s",&a);</p><p> for(i=0;i<m;i++)</p><p><b> {</b></p&
51、gt;<p> fread(&emp[i],sizeof(struct emploee_type),1,fp);</p><p> if(strcmp(emp[i].name,a)==0) //比較輸入的字符串與文件中姓名相同的信息</p><p><b> {</b></p><p><b> y=
52、i;</b></p><p><b> n=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> i
53、f(n==1)</b></p><p><b> {</b></p><p> printf("職工號 姓名 性別 出生 職務(wù) 工資 電話號碼\n");</p><p> printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s&
54、quot;,emp[y].num,emp[y].name,emp[y].sex,emp[y].birth.year,emp[y].birth.month,emp[y].birth.day,emp[y].state,emp[y].pay,emp[y].phone);</p><p> printf("\n");</p><p><b> }</b>
55、;</p><p><b> if(n==0)</b></p><p> printf("查無此人\n");</p><p> fclose(fp);</p><p> return(y);</p><p><b> }</b></p>
56、;<p> 讀取文件后,用比較輸入的數(shù)據(jù)和字符串與文件中的數(shù)據(jù)是否相同來實行查找功能,使用了strcmp函數(shù)來比較兩個字符串是否相同,其中用n的值來控制文件中存在與所輸入的信息相同的數(shù)據(jù)。</p><p> del(int m)//刪除功能</p><p><b> {</b></p><p><b> FILE
57、 *fp;</b></p><p> printf("請選擇刪除方式:\n");</p><p> y=find(); //利用功能4的函數(shù)首先查找到所需修改的信息,并將查找到的數(shù)據(jù)所對應(yīng)的位置提取出來</p><p> printf("確定刪除嗎 (是按1,否按2
58、):");</p><p> scanf("%d",&p);</p><p> if(p==1) //功能的循環(huán)</p><p><b> {</b></p><p> m=m-1;
59、 //刪除一個值后信息量減少一個</p><p> for(i=y;i<m;i++)</p><p> emp[i]=emp[i+1]; //從所查找到的信息開始,依次將后一項的信息代替前一項</p><p> printf("刪除成功\n");</p><p> if((fp=fopen(&
60、quot;emploee_date1","wb"))==NULL) //將修改的信息重新保存到文件中</p><p><b> {</b></p><p> printf("文件無法打開\n");</p><p><b> return;</b></p>
61、;<p><b> }</b></p><p> for(i=0;i<m;i++)</p><p> if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p> printf("文件寫入錯誤\n");</p>
62、<p> fclose(fp);</p><p> return(m); //將修改后的m值返回</p><p><b> }</b></p><p><b> }</b></p><p> 首先利用查找功能查找到所需修改
63、的信息,再將后一項的信息依次代替前一項,同時信息量m減少一。</p><p> void change()//修改功能</p><p><b> {</b></p><p> while(p==1)</p><p><b> {</b></p><p><b&g
64、t; FILE *fp;</b></p><p> printf("請選擇所需修改的職工:\n");</p><p> y=find(); //查找所需修改的內(nèi)容</p><p> printf("請按格式填寫修改的內(nèi)容:\n");</p
65、><p> printf("職工號 姓名 性別(F/M) 出生 職務(wù) 工資 電話號碼\n");</p><p> scanf("%d%s%s%d-%d-%d%s%d%s",&emp[y].num,emp[y].name,&emp[y].sex,&emp[y].birth.year,&emp[y].birt
66、h.month,&emp[y].birth.day,emp[y].state,&emp[y].pay,emp[y].phone);//重新輸入所查找到的信息,將原來的信息淹沒即可完成修改。</p><p> (fp=fopen("emploee_date1","wb") //重新保存信息</p><p> for(
67、i=0;i<m;i++)</p><p> if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p> printf("文件寫入錯誤\n");</p><p> fclose(fp);</p><p> printf("修
68、改成功\n");</p><p> printf("繼續(xù)修改請按1,退出修改請按2:");</p><p> scanf("%d",&p);</p><p><b> }</b></p><p><b> }</b></p>
69、;<p> 查找到所需修改的內(nèi)容后,新輸入信息將原來的信息覆蓋,重新保存信息即可完成修改功能。</p><p> void open1()//保存m值</p><p><b> {</b></p><p> FILE *fp2;</p><p> if((fp2=fopen("emplo
70、ee_date2","wb"))==NULL)</p><p> { printf("cannot open file\n");</p><p><b> return;</b></p><p><b> }</b></p><p>
71、fprintf(fp2,"%d",m);</p><p> fclose(fp2);</p><p><b> }</b></p><p> 用fprintf函數(shù)將變量m值保存。</p><p> open2()//提取m值</p><p><b> {&l
72、t;/b></p><p> FILE *fp2;</p><p> if((fp2=fopen("emploee_date2","rb"))==NULL)</p><p><b> {</b></p><p> printf("cannot open fi
73、le\n");</p><p><b> return;</b></p><p><b> }</b></p><p> fscanf(fp2,"%d",&m);</p><p> fclose(fp2);</p><p> r
74、eturn(m);</p><p><b> }</b></p><p> 用fscanf函數(shù)將m值讀取。</p><p><b> 參數(shù)介紹</b></p><p> 編寫的程序中,所有的參數(shù)都為m,都表示文件中有效的職工信息個數(shù)。其中變量p﹑n﹑y值,分別用來控制功能的循環(huán),信息的存在與
75、否以及信息位置的控制。</p><p><b> 返回結(jié)果介紹</b></p><p> 編寫的程序中,所有的返回值都為m,都表示文件中有效的職工信息個數(shù)。</p><p><b> 結(jié)果總結(jié)</b></p><p> 在整個編寫的過程中,將功能模塊化,逐個解決各項功能,用文件的方式將信息保
76、存起來,其中注意對文件的打開和關(guān)閉,有字符串的比較。值得關(guān)注的是程序中對有效職工信息數(shù)m的定義和運(yùn)用,在錄入,添加,刪除時,m的值均會發(fā)生變化,其中用到了fscanf和fprintf函數(shù)對m值進(jìn)行提取和保存,以達(dá)到對信息量的控制。修改后以“wb”對職工信息重新保存,刪除時,用到將職工信息前移以覆蓋要刪除信息,達(dá)到刪除目的,修改信息時,將查找的信息直接用新的數(shù)據(jù)覆蓋,然后再保存到文件中,以達(dá)到修改的目的,對于電話號碼,11位數(shù)超過了整型的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職工信息管理系統(tǒng)c語言課程設(shè)計
- c語言課程設(shè)計職工信息管理系統(tǒng)
- c語言課程設(shè)計---職工信息管理系統(tǒng)
- c語言課程設(shè)計——職工信息管理系統(tǒng)
- c語言課程設(shè)計——職工信息管理系統(tǒng)
- c語言課程設(shè)計—職工信息管理系統(tǒng)
- c語言課程設(shè)計--職工信息管理系統(tǒng)
- c語言課程設(shè)計---職工信息管理系統(tǒng)設(shè)計
- c語言課程設(shè)計報告---職工信息管理系統(tǒng)
- c語言課程設(shè)計報告--職工信息管理系統(tǒng)
- c語言課程設(shè)計報告----職工信息管理系統(tǒng)設(shè)計
- c語言程序設(shè)計課程設(shè)計報告--職工信息管理系統(tǒng)
- c++課程設(shè)計--職工信息管理系統(tǒng)
- c-課程設(shè)計--- 職工信息管理系統(tǒng)
- c語言課程設(shè)計--學(xué)生信息管理系統(tǒng)
- c語言課程設(shè)計--- 學(xué)生信息管理系統(tǒng)
- c語言課程設(shè)計--學(xué)生信息管理系統(tǒng)
- c語言課程設(shè)計——學(xué)生信息管理系統(tǒng)
- 教師信息管理系統(tǒng)(c語言課程設(shè)計)
- c語言課程設(shè)計---學(xué)生信息管理系統(tǒng)
評論
0/150
提交評論