




已閱讀5頁,還剩38頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC語言程序設計課程設計報告課設題目: 職工信息管理系統 專 業: 自動化(電動車輛工程) 班 級: T1123-7班 姓 名: 劉宇京 成 績: 完成日期: 2012年6月18日2012年6月22日 指導教師: 胡寧亞 目 錄1.課程設計目的22.需求分析22.1要求22.2任務描述22.3運行環境32.4開發工具33.總體設計33.1系統流設計33.2系統模塊設計44.詳細設計54.1數據結構設計54.2模塊接口設計64.3 以下是幾個主要模塊的流程圖:75.運行結果105.1主菜單界面:105.2信息錄入界面:105.3信息瀏覽界面:115.4 信息查詢界面:115.5信息修改界面:126.程序調試與測試126.1程序調試126.2程序測試127.問題與不足128.建議129.編程體會1210.程序源代碼:1211.參考文獻1312.用戶使用手冊131.課程設計目的1) 通過課程設計,加深對結構化程序設計思想的理解,能對系統功能進行分析,并設計合理的模塊化結構。2) 通過課程設計,進一步掌握C語言中重要的數據結構。掌握并熟練運用指針、鏈表、結構體、文件等數據結構。3) 通過課程設計,提高程序開發能力,能運用合理的控制流編寫清晰高效的程序。4) 通過課程設計,培養C語言知識運用和自學能力,真正的把課堂上獲得的知識運用起來,培養自己對程序編寫的興趣,并能獨立設計和實現一個小型系統。5) 通過課程設計,加強了自己的程序分析能力。2.需求分析2.1要求1) 遵循軟件開發過程的基本規范;能靈活應用,初步具備運用C程序解決實際問題的能力。2) 運用結構化程序設計方法,按照課程設計題目要求,完成包括需求分析、數據結構設計、概要設計、詳細設計、編寫代碼、調試和測試C程序等過程。3) 學會利用數組、結構體、鏈表進行相關信息表示。4) 功能模塊劃分清晰,系統結構圖符合功能操作要求,且有詳盡的功能描述5) 各主要功能模塊有詳盡的流程圖及描述,用函數的形式實現,且調用入口、功能、出口等關系正確。6) 所設計的C程序較好的可讀性和可靠性;程序書寫風格規范,注釋清晰。7) 界面友好(良好的人機互交),凡需要輸入信息時,都有較詳盡的提示信息,并對輸入信息有較完善的值域分析。8) 程序經上機調試通過,不應出現語法型、功能型錯誤,并獲得滿意的結果。9) 學會通過各功能性測試用例測試程序的能力,盡可能避免原則性錯誤的出現。10) 掌握編寫、調試和測試C語言程序的基本技巧,充分理解結構化程序設計的基本方法。11) C語言課程設計報告的內容反應實際設計過程,且符合格式要求,無抄襲現象。2.2任務描述此系統以普通公司職工為背景,提供對職工信息的了新建、查詢、統計等各項功能。具體功能實現如下:1) 能從鍵盤輸入職工的信息,并能在輸入時檢查輸入日期是否合法及職工號是否已經存在。2) 能從指定的文件中讀入職工的信息。3) 能按職工號查詢職工的信息。4) 能按學歷統計職工數。5) 能查詢到指定年份需要退休的職工的信息(男:60歲,女55歲)。6) 能刪除指定職工號的職工信息。7) 能將職工信息保存在指定的文件中。8) 能顯示所有職工信息。9) 能顯示題目信息。10) 系統以菜單方式工作,界面清晰,易于操作。2.3運行環境1) WindowsXP/7系統2) VC+6.0編譯環境2.4開發工具C語言3.總體設計3.1系統流設計 本系統的功能模塊如圖1所示,主要有以下模塊:主菜單界面職工信息新建 職工信息顯示職工信息導入職工信息保存 職工人數統計退出系統按職工號查詢按指定年份查詢該退休的職工信息顯示所有職工信息顯示題目信息 職工信息查詢刪除職工信息圖1系統功能模塊圖 3.2系統模塊設計1) 主菜單界面:構造函數int menu_select(),實現系統主菜單的顯示。2) 職工信息的新建:構造函數void createRec(),實現職工信息的錄入。其中構造了一個用于判斷輸入日期是否合法的函數judgedate(char date)。3) 職工信息的保存:構造函數void writeInfo(),實現將輸入的職工信息保存到指定的文件中。4) 職工信息的讀入:構造函數loadRec(),實現將保存到文件中的信息讀出來。5) 職工信息的查詢:分別構造函數void searchRec()及void findRec()實現按職工號查詢并顯示職工信息和按指定年份查詢需要退休的職工信息并顯示。6) 職工人數的統計:構造函數void countRec(),實現根據職工學歷統計職工人數。7) 職工信息的刪除:構造函數void deleteRec(),實現根據指定的職工號刪除 相應的職工記錄。4.詳細設計4.1數據結構設計根據系統要求,系統中需要保存的數據信息,其結構如下:數據項名稱數據項系統表示數據類型數據長度備注職工號num字符數組20=6姓名name字符數組20date,4),可是實現不了,胡老師交我用printf(“atoi(fun)”); printf(“atoi(year)”);year為我定義的從鍵盤接受的字符數組用atoi(year)與atoi(fun)比較,那樣一下就知道錯在哪了。10.程序源代碼:/*所使用的有頭文件*/#include#include#include#include#include#define LEN sizeof(struct worker)/*結構體定義*/struct workerchar num20;char name20;char sex5;char date20; char edu20;double wage;char add20;char tel12;struct worker *next;/*函數聲明*/int judgedate(char date); /*判斷日期是否合理*/void createRec(); /*新建職工信息*/void loadRec(); /*從指定文件中讀入職工信息*/void listRec(); /*顯示所有職工信息*/void exam(); /*顯示題目*/void searchRec(); /*按職工號查詢職工信息*/void countRec(); /*按學歷統計職工人數*/void findRec(); /*查詢到指定年份需要退休的職工信息*/void deleteRec(); /*刪除指定職工號的職工信息*/void writeInfo(); /*將職工信息保存在指定的文件中*/void exit0(); /*退出*/int menu_select();/*主菜單*/*鏈表操作所用結構體指針*/struct worker *head=NULL,*p1,*p2,*p3;/*定義結構體指針head 為頭指針p1 為輸入數據緩存空間指針p2 為尾指針*/*職工記錄保存標志全局變量*/intwriteinfo_flag=0;/*主函數*/int main() loadRec();for(;)switch(menu_select() case 1: system(cls); createRec();break;case 2: system(cls); searchRec();break;case 3: system(cls); countRec(); break; case 4: system(cls); findRec(); break;case 5: system(cls); deleteRec();break;case 6: system(cls); writeInfo();break;case 7: system(cls); listRec(); break;case 8: system(cls); exam(); break;case 0: system(cls); exit0(); return 0;default : getchar();printf(n 選擇錯誤請正確輸入你的選擇(0-8);printf(n 按回車鍵返回.n);getch();system(cls); /*清屏*/ return 0;/*主菜單*/int menu_select()int c;printf(tt=菜單=n);printf(ttt1.新建職工信息n);printf(ttt2.按職工號查詢職工信息n);printf(ttt3.按學歷統計職工人數n);printf(ttt4.查詢到指定年份需要退休的職工信息n);printf(ttt5.刪除指定職工號的職工信息n);printf(ttt6.將職工信息保存在指定的文件中n);printf(ttt7.顯示所有職工信息n);printf(ttt8.顯示題目信息n);printf(ttt0.退出(任何情況下按Ctrl+C 退出程序)n);printf(tt=n);printf(nnntt 輸入你的選擇(0-8):);scanf(%d,&c);return c;/*從磁盤文件導入職工信息到內存*/void loadRec()FILE *fp;int n=0;if(fp=fopen(d:file.txt,r)=NULL) /*打開文件*/printf(文件不存在或無法打開!n);return;head=p1=(struct worker *)malloc(LEN);/*開辟一個新單元*/p1-next =NULL;while(!feof(fp)n+;fscanf(fp,%s%s%s%s%s%lf%s%s, p1-num,p1-name,p1-sex,p1-date,p1-edu,&p1-wage,p1-add,p1-tel);if(p1-num0num09) n-;break; p2=(struct worker *)malloc(LEN); /*開辟一個新單元*/p1-next =p2;p3=p1;p1=p2;p1-next =NULL;free(p2);p3-next=NULL;printf(n %d項信息輸入完畢,按回車鍵返回.n,n);getchar();system(cls); /*清屏*/writeinfo_flag=0; /*設置保存記錄標志*/if( fclose(fp) ) /* 關閉文件 */ printf( Can not close the file!n ); exit(0); /*判斷日期輸入是否正確*/int judgedate(char date) int year,month,day,i,isrunnian; for(i=0,year=0;i4;i+) year=year*10+(datei-0); /*把表示年份的字符串轉換成整形*/ for(i=5,month=0;i7;i+) month=month*10+(datei-0); /*把表示月份字符串轉換成整形*/ for(i=8,day=0;i10;i+) day=day*10+(datei-0); /*把表示日字符串轉換成整形*/ if(date4!=-|date7!=-) return 0; else if(month12) return 0; else isrunnian=(year%4=0&year%100!=0|year%400=0); /*判斷閏年*/ if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) if(day31) return 0; else return 1; else if(month=4|month=6|month=9|month=11) if(day30) return 0; else return 1; else if(isrunnian=1&month=2) if(day29) return 0; else return 1; else if(day28) return 0; else return 1; /*新建職工記錄*/void createRec()int n,i;if(head!=0) p3=head;while( p3-next!=NULL)p3=p3-next;getchar();printf(n 職工信息數據庫已存在,新建職工信息將接續在信息庫的后面,按回車鍵繼續.:n); getchar();system(cls); /*清屏*/p3-next=p1=(struct worker *)malloc(LEN);/*開辟一個新單元*/ else head=p1=(struct worker *)malloc(LEN); /*開辟一個新單元*/ p1-next =NULL; printf(nn 請輸入希望建立的職工基本信息條數n(n1&n10):n); doscanf(%d,&n); if(n10) printf(nn輸入范圍有誤,請重新輸入希望建立的職工基本信息條數n(n1&n10):n);while(n10); /*開始建立n條職工基本信息記錄*/ printf(nn 請每行按職工號 職工姓名 性別 出生日期 學歷 工資 住址 電話的形式輸入%d條職工記錄:n,n); printf(備注:n); printf(1 (num=6位) n); printf(2 (name=10漢字) n); printf(3 性別用nan和nv分別代表男性和女性 n); printf(4 出生日期長度為10位,形如:年-月-日(YYYY-YY-YY) n); printf(5 學歷:zhongzhuan,dazhuan,benke,shuoshi,boshi n); printf(6 工資用數字 n); printf(7 住址輸入到地區即可 n); printf(8 電話為手機號碼十一位 n); printf(系統功能尚待完善,請用戶嚴格按照備注說明輸入信息以防造成系統不能運行。謝謝合作!n); printf(請記住你創建的職工號以便以后查詢!n);for(i=0;inum);scanf(%s, p1-name);scanf(%s, p1-sex);scanf(%s, p1-date);scanf(%s, p1-edu);scanf(%lf,&p1-wage);scanf(%s, p1-add);scanf(%s, p1-tel);if(atoi(p1-num)=999999)doprintf(nn職工號輸入有誤,超出范圍);printf(nn職工號最大六位,請重新輸入:);scanf(%s,p1-num);while(atoi(p1-num)=999999); if(judgedate(p1-date)=0)do printf(nn職工出身日期輸入有誤!); printf(nn請重新輸入職工出生日期:); scanf(%s,p1-date);while(judgedate(p1-date)=0); if(strlen(p1-tel)!=11)do printf(nn手機號輸入位數有誤!n); printf(請重新輸入手機號(tel=11位):); scanf(%s,p1-tel);while(strlen(p1-tel)11); p2=(struct worker *)malloc(LEN); /*開辟一個新單元*/p1-next =p2;p3=p1;p1=p2;p1-next =NULL;free(p2);p3-next=NULL;printf(n %d項信息輸入完畢,按回車鍵返回.n,n);getch();system(cls); /*清屏*/writeinfo_flag=1; /*清除保存記錄標志*/*顯示所有職工信息*/void listRec()if(head=NULL)printf(n文件中沒有職工信息,按回車鍵返回.n);getch();system(cls);return ;printf(n所有職工信息顯示如下:n);printf(n職工號t職工姓名t性別t出生日期t學歷t工資tt住址tt電話 n); p1=head;while(p1!=NULL)printf(%st%stt%st%st%st%lft%st%sn, p1-num,p1-name,p1-sex,p1-date,p1-edu,p1-wage,p1-add,p1-tel); p1=p1-next; system(pause);getchar();system(cls); /*清屏*/return ;/*查詢職工信息*/ void searchRec()char num20;p1=head;if(p1=NULL) printf(nn職工信息數據庫為空! n);printf(n 按回車鍵返回主菜單建立職工信息.n);getch();system(cls); /*清屏*/return ;printf(nn 請輸入職工號以便查證:n);scanf(%s,num);while(p1!=NULL)if(strcmp(p1-num,num )=0) printf(t該職工信息如下:nt 職工號:);printf(%sn,p1-num );printf(t 職工姓名:);printf(%sn,p1-name );printf(t 職工性別:);printf(%sn,p1-sex ); printf(t 職工出生日期:);printf(%sn,p1-date ); printf(t 職工學歷:);printf(%sn,p1-edu); printf(t 職工工資:);printf(%lfn,p1-wage); printf(t 職工住址:);printf(%sn,p1-add ); printf(t 職工電話:);printf(%sn,p1-tel ); break;else p1=p1-next ;if(p1=NULL) printf(nn找不到該職工信息!n); printf(n 按回車鍵返回.n); getch(); system(cls); /*清屏*/*按學歷統計職工人數*/void countRec() char edu20;int n=0;p1=head;if(head=NULL)getchar();printf(n 職工信息數據庫為空! n);printf(n按回車鍵返回.n);getch();system(cls);/*清屏*/return ;printf(nn請輸入你要統計的學歷名稱以便查詢:n);printf(nn備注:學歷包含zhongzhuan,dazhuan,benke,shuoshi,boshin);scanf(%s,edu);while(p1!=NULL)if(strcmp(p1-edu,edu)=0)n+;p1=p1-next;if(n=0) printf(nn沒有該學歷的職工!n); printf(nn按回車鍵返回.n); getch(); system(cls); /*清屏*/ return; elseprintf(人數為%d,n);printf(n 按回車鍵返回.);getch();system(cls); /*清屏*/*查詢到指定年份需要退休的職工信息*/void findRec() int n=0;char year10,fun10 ; char sex10;p1=head;if(p1=NULL) printf(nn職工信息數據庫為空! n); printf(nn按回車鍵返回.);getch();system(cls); /*清屏*/return ;printf(nn請輸入指定的年份及性別以便查詢:n);printf(nn說明:年份為四位,例如1991;性別分別用nan和nv代表男女。n); printf(nn請嚴格按照說明輸入,否則實現不了查詢任務。 );scanf(%s%s,year,sex);while(p1!=NULL) strncpy(fun,p1-date,4);fun4=0;if(strcmp(p1-sex,sex)=0) if(atoi(year)-atoi(fun)=59) printf(年齡為%dn,(atoi(year)-atoi(fun)+1); printf(t該職工信息如下:nt 職工號:); printf(%sn,p1-num ); printf(t 職工姓名:); printf(%sn,p1-name ); printf(t 職工性別:); printf(%sn,p1-sex ); printf(t 職工出生日期:); printf(%sn,p1-date ); printf(t 職工學歷:); printf(%sn,p1-edu); printf(t 職工工資:); printf(%lfn,p1-wage); printf(t 職工住址:); printf(%sn,p1-add ); printf(t 職工電話:); printf(%sn,p1-tel ); n+; p1=p1-next;if(n=0) printf(nn沒有要退休的職工!n); printf(n 按回車鍵返回.n); getch(); system(cls); /*清屏*/*刪除指定職工號的職工信息*/void deleteRec()char num20;if(head=NULL) getchar();printf(n 職工信息數據庫為空,不能刪除,按回車鍵將返回:n);getchar();system(cls);/*清屏*/return;p1=head;printf(nn請輸入要刪除的職工號:n);scanf(%s,num);while(strcmp(num,p1-num )!=0&p1-next!=NULL)p2=p1;p1=p1-next ;if(strcmp(num,p1-num )=0)if(head-next=NULL)free(head);head=NULL;else if(head=p1) head=p1-next;free(p1);else p2-next=p1-next;free(p1);printf(n已經刪除完畢;);else printf(nn找不到該職工號信息!); getchar(); printf(按回車鍵返回:n); getchar(); system(cls);/*清屏*/ writeinfo_flag=1;/*清除保存記錄標志*/ retu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 輕質高強泡沫塑料的研究與發展考核試卷
- 航天器空間碎片監測與預警系統考核試卷
- 通風電器具物聯網技術應用考核試卷
- 蔬菜加工企業品牌國際化戰略考核試卷
- 管道工程法律法規政策學習、運用與實施考核試卷
- 玻璃保溫容器耐壓性能研究考核試卷
- 甲狀腺患者的護理
- 智能停車項目投資建設與回報協議
- 塑料制品檢測認證補充協議
- 網絡文學作品版權代理與移動閱讀平臺合作合同
- 常見病媒生物識別與監測教學課件
- 北京故宮的詳細資料資料講解
- GB/T 38472-2023再生鑄造鋁合金原料
- 莫高窟經典簡介
- 2023年貴州黔南州人民檢察院招考聘用派遣制檢察輔助人員筆試題庫含答案解析
- 機械制造技術基礎課程設計講課用
- CMOS反相器的與設計
- 核醫學科儀器管理操作保養維修制度
- 《祝福》配套劇本 課件
- 電源板QC工程圖
- 小學數學小升初小升初專題復習小升初專題復習
評論
0/150
提交評論