版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
西安郵電大學C語言課程設計報告題目:職工工資管理系統(tǒng)院系名稱:計算機學院專業(yè)名稱:軟件工程班級:學生姓名:學號(8位):指導教師:設計起止時間:2013年06月03日~2013年06月12日PAGEPAGE4一.設計目的1.通過本課程設計,強化上機動手能力,使學生在理論和實踐的基礎上進一步鞏固《c語言程序設計》課程學習的內(nèi)容,掌握工程軟件設計的基本方法.2.學會將知識應用于實際的方法,提高分析和解決問題的能力,增加綜合能力.3.為后續(xù)各門計算機課程的學習打下堅實基礎;為畢業(yè)設計和以后工作打下必要基礎。二.設計內(nèi)容本設計主要包括了用戶登錄和主菜單,其中用戶登錄包括了一下幾個功能1.新用戶的注冊2.用戶登錄3。用戶密碼的修改。而主菜單包括:1.職工信息的錄入2.職工信息的修改3.選擇性排序4.統(tǒng)計人數(shù)和工資5.輸出現(xiàn)有的信息6.自定義查詢信息。三.概要設計1.功能模塊圖;登錄界面登錄界面用戶登錄修改密碼新用戶注冊主菜單主菜單1.職工信息輸入4自定義查詢信息2職工信息修改5統(tǒng)計人數(shù)和工資6輸出現(xiàn)有的信息3選擇性排序退出系統(tǒng)添加員工信息按姓名排序按工資排序刪除員工信息修改員工信息2.各個模塊詳細的功能描述。修改密碼的時候,需要輸入原密碼,并且輸入兩次新的密碼必須相同才能完成密碼的修改。用戶登錄:需要輸入用戶名和密碼,如果用戶名不存在或密碼錯誤會給出相應的提醒,當輸入正確的時候會進入主菜單。新用戶注冊:需要輸入注冊的用戶和密碼,如果用戶明已被注冊過會給出相應的提醒。職工信息的輸入:是從無開始輸入職工的信息,同樣也會給出輸入內(nèi)容的提醒,當輸入最后一次職工的信息為零時結束輸入,同是會將輸入的信息寫入到文件里。修改職工信息其中包括a.添加職工信息和輸入職工信息相同在添加完會提醒是否繼續(xù)添加。b.修改員工信息:此時會出現(xiàn)選擇性修改職工的哪項信息,先進行選擇再進行修改。C.刪除員工信息:需要輸入所要刪除員工的姓名或id進行刪除!如果刪除不成功或者刪除者不存在會給出相應的提醒。統(tǒng)計信息:會自動的統(tǒng)計現(xiàn)有員工的總人數(shù)和現(xiàn)有員工的總工資。輸出現(xiàn)有職工的信息:會顯示現(xiàn)在記錄的職工的各項信息。排序:有用戶選擇是按id還是按照工資進行排序,并且會輸出排序前和排序后職工的信息,已做對比。自定義查詢:讓用戶選擇按照姓名還是id查詢,查出后輸出信息,如果所查信息不存在會給出相應的提醒。四.詳細設計1.功能函數(shù)的調(diào)用關系圖main()main()m_ain()主菜單xgmi()修改密碼zhuche()注冊denglu()登錄read()用戶信息讀函數(shù)write()用戶信息寫函數(shù)zhuche()zhuche()write()read()denglu()read()密碼錯誤Ydenglu()N結束程序xgmi()read()writre()print()輸出函數(shù)xie()職工信息寫入函數(shù)du()職工信息讀函數(shù)m_ain()m_ain()shuru()輸入函數(shù)paixu()排序函數(shù)tongji()統(tǒng)計函數(shù)xiugai()修改函數(shù)chaxun()查找函數(shù)shuchu()輸出函數(shù)shuru()shuru()xie()輸入錯誤返回xiugai()shanchu()刪除xg()修改tianianjia()添加xiugai()退出返回m_ain()shanchu()s輸入錯誤或不存在時返回xiugai()繼續(xù)刪除Yshanchu()xie()print()du()否則返回xiugai()tongji()tongji()du()paixu()輸入錯誤返回paixu()退出返回主函數(shù)m_ain()g_z()函數(shù)i_d()函數(shù)du()print()Y返回排序paixu()否返回主菜單m_ain()2.各功能函數(shù)的數(shù)據(jù)流程圖讀取用戶信息文件中的數(shù)據(jù)讀取用戶信息文件中的數(shù)據(jù)功能2密碼修改用戶注冊功能1功能3用戶登錄將修改的用戶數(shù)據(jù)寫入到文件中功能4功能5功能6將輸入修改后的數(shù)據(jù)寫入文件中保存將職工信息的數(shù)據(jù)從文件中讀出3.重點設計及編碼密碼的修改:五.測試數(shù)據(jù)及運行結果1.正常測試數(shù)據(jù)和運行結果要求提供3組正常測試數(shù)據(jù)和運行結果輸出原有信息:輸出職工信息:**姓名 編號 部門 年齡工資**haipeng003shengchan21 456renhao007weijiao24 358haonan001guanli9 963lixuan005shengchan21 4578nannan006shengchan21 345
增加職工信息:輸出職工信息:**姓名 編號 部門 年齡 工資**haipeng003shengchan21 456renhao007weijiao24 358haonan001guanli9 963lixuan005shengchan21 4578nannan006shengchan21 345xiaoming002guanli21 5674
按照ID排序:輸出職工信息:**姓名 編號 部門 年齡 工資**haonan001guanli9 963xiaoming002guanli21 5674haipeng003shengchan21 456lixuan005shengchan21 4578nannan006shengchan21 345renhao007weijiao24 3582.異常測試數(shù)據(jù)及運行結果要求提供2組異常測試數(shù)據(jù)和運行結果在文件中出現(xiàn)在的錯誤。haipeng011jiaoyu21234haonan008shengchan225345renhao016guanli21456xong010waijiao21343ren009shen21373100在文件結尾曲異常出現(xiàn)00。在排序的時候排序前:輸出職工信息:**姓名 編號 部門 年齡 工資**haipeng003shengchan21 456haonan001guanli9 963lixuan005shengchan21 4578nannan006shengchan21 345renhao007weijiao24 358排序后:輸出職工信息:**姓名 編號 部門 年齡 工資**haipeng003shengchan21 456haonan001guanli9 963lixuan005shengchan21 4578nannan006shengchan21 345renhao007weijiao24 358六.調(diào)試情況,設計技巧及體會1.改進方案缺陷:在輸入時沒有考慮到不合理數(shù)據(jù)輸入時做出相應的處理。添加時沒有按任意位置的添加只是加在最后面。改進:在輸入數(shù)據(jù)時做出相應的判斷。能滿足任意位置的添加。2.體會通過這次課程設計,我深刻的體會到了,當我們在調(diào)試過程中遇到了錯誤時,必須認真的分析,找出錯誤的原因,在自己實在無法解決的時候,學會向老師,向同學請教,解決我們遇到的問題。七.參考文獻《c語言》《c語言程序設計》《linux指令》#include<stdio.h>#include<stdlib.h>#include<string.h>#defineNsizeof(structzhig)//職工結構體字符大小的常量structzhig{charname[20];charid[15];//職工編號chardept[15];/*部門*/intpay;/*工資*/intage;/*年齡*/structzhig*next;};structstr//登錄結構體{charname[20];//用戶charkey[20];//密碼structstr*next;};voidprint(structzhig*p){printf("輸出職工信息:**姓名\t\t編號\t部門\t\t年齡\t工資**\n");p=p->next;while(p->next!=NULL){printf("%-18s%-8s%-15s%d\t%d\n",p->name,p->id,p->dept,p->age,p->pay);p=p->next;}}void*xie(structzhig*head)/*職工信息文件寫函數(shù)*/{structzhig*p;FILE*fp;fp=fopen("xinxi.txt","wt");//以寫方式打開職工文件if(fp==NULL){printf("打開文件失敗,按任意鍵退出!");//判斷文件是否打開成功exit(1);}p=head->next;while(p!=NULL){fprintf(fp,"%s%s%s%d%d\n",p->name,p->id,p->dept,p->age,p->pay);//將職工信息寫入文件p=p->next;}fclose(fp);}structzhig*du()/*職工文件讀函數(shù)*/{structzhig*head,*r,*stu;FILE*fp;if((fp=fopen("xinxi.txt","rt"))==NULL){printf("讀入文件失敗!");}else{head=(structzhig*)malloc(N);//將職工信息讀入到鏈表中head->next=NULL;r=head;while(feof(fp)!=1){stu=(structzhig*)malloc(N);fscanf(fp,"%s%s%s%d%d",stu->name,stu->id,stu->dept,&stu->age,&stu->pay);r->next=stu;r=stu;}r->next=NULL;fclose(fp);return(head);}}structzhig*shuru(void)//輸入職工信息選擇1{inti=0;//i用來記錄輸入的人數(shù)getchar();structzhig*p,*q,*head1;//head1頭節(jié)點,p新增節(jié)點,q未節(jié)點structzhig*head2;//head2用來接受讀文件函數(shù)的返回值head1=q=(structzhig*)malloc(N);//開辟空間p=(structzhig*)malloc(N);printf("輸入以年齡為0結束\n");printf("請輸入姓名:");gets(p->name);printf("\n輸入編號:");gets(p->id);printf("\n輸入所在部門:");gets(p->dept);printf("\n輸入年齡:");scanf("%d",&p->age);printf("\n輸入工資:");scanf("%d",&p->pay);i++;while(p->age!=0){getchar();q->next=p;q=p;p=(structzhig*)malloc(N);printf("請輸入姓名:");gets(p->name);printf("\n輸入編號:");gets(p->id);printf("\n輸入所在部門:");gets(p->dept);printf("\n輸入年齡:");scanf("%d",&p->age);printf("\n輸入工資:");scanf("%d",&p->pay);i++;}q->next=NULL;printf("總共輸入的人數(shù)%d\n",--i);free(p);xie(head1);head2=du();print(head2);return(head1);}voidx_g(structzhig*p,structzhig*head)//選擇性修改函數(shù){voidm_ain();intj;if(p==NULL)printf("查找人員不存在:\n");else{printf("\t————————————————\n");printf("\t1:修改姓名");printf("\n\t2:修改id");printf("\n\t3:修改部門");printf("\n\t4:修改年齡");printf("\n\t5:修改工資\n");printf("\t__________________");printf("\n請你選擇修改內(nèi)容:");scanf("%d",&j);switch(j){case1:printf("\n請輸入修改的姓名:");scanf("%s",p->name);break;case2:printf("\n請輸入修改的id:");scanf("%s",p->id);break;case3:printf("\n請輸入修改的部門:");scanf("%s",p->dept);break;case4:printf("\n請輸入修改的年齡:");scanf("%d",&p->age);break;case5:printf("\n請輸入修改的工資:");scanf("%d",&p->pay);break;}printf("\n修改成功!");printf("\n寫入修改后的文件\n");xie(head);print(head);printf("返回主菜單\n");m_ain();}}voidxg(){chara,b;charname[20];structzhig*head,*q;structzhig*p=NULL;//記錄查到的結點printf("輸出現(xiàn)有職工信息:\n");head=du();print(head);q=head;printf("是否按照姓名查找修改的內(nèi)容Y/N:");scanf("%c",&a);if(a=='Y'){printf("請輸入修改者的姓名:");scanf("%s",name);getchar();while(q->next!=NULL){q=q->next;if(strcmp(q->name,name)==0){p=q;x_g(q,head);}}if(p==NULL){printf("修改者不存在,返回\n");xg();}}elseif(a=='N'){printf("是否按照id查找Y/N:");getchar();scanf("%c",&b);if(b=='Y'){printf("請輸入修改者的ID:");scanf("%s",name);while(q->next!=NULL){q=q->next;if(strcmp(q->id,name)==0){p=q;x_g(q,head);}}if(p==NULL){printf("修改者不存在,返回\n");xg();}}elseif(b=='N')xg();else{printf("輸入錯誤:\n");xg();}}else{printf("輸入錯誤,返回\n");xg();}}voidshanchu(){inti=0;chara,b,c,d;charname[20];voidxiugai();structzhig*head,*q;//q前驅(qū)structzhig*p;//記錄查到的結點head=du();print(head);q=head;p=q->next;printf("是否按照姓名查找刪除的內(nèi)容Y/N:");scanf("%c",&a);if(a=='Y'){getchar();printf("請輸入刪除者的姓名:");scanf("%s",name);while(p->next!=NULL){if(strcmp(p->name,name)==0){printf("%s\n",p->name);q->next=p->next;free(p);i=1;}q=p;p=p->next;}if(i==1){printf("刪除成功,輸出刪除后信息\n");xie(head);head=du();print(head);printf("選擇Y繼續(xù)刪除,否則返回修改菜單\n");getchar();scanf("%c",&d);if(d=='Y')shanchu();elsexiugai();}else{printf("刪除不存在,返回修改主菜單\n");xiugai();}}elseif(a=='N'){printf("是否按照id查找Y/N:");getchar();scanf("%c",&b);if(b=='Y'){printf("請輸入刪除者的ID:");scanf("%s",name);while(p->next!=NULL){if(strcmp(p->id,name)==0){q->next=p->next;free(p);i=1;}q=p;p=p->next;}if(i==1){printf("刪除成功,輸出刪除后的信息\n");xie(head);head=du();print(head);printf("選擇Y繼續(xù)刪除,否則返回修改菜單\n");getchar();scanf("%c",&d);if(d=='Y')shanchu();elsexiugai();}else{printf("刪除不存在,返回修改主菜單\n");xiugai();}}elseif(b=='N'){printf("返回\n");shanchu();}else{printf("\n輸入錯誤,返回:\n");shanchu();}}else{printf("\n輸入錯誤,返回:\n");shanchu();}}voidtianjia(){chara;structzhig*head,*p1,*p2;structzhig*q;//新插入的節(jié)點head=p2=du();p1=p2->next;q=(structzhig*)malloc(N);printf("請輸入添加者的姓名:");scanf("%s",q->name);printf("\n請輸入添加者的id:");scanf("%s",q->id);printf("\n請輸入添加者的單位:");scanf("%s",q->dept);printf("\n請輸入添加者的年齡:");scanf("%d",&q->age);printf("\n請輸入添加者的工資:");scanf("%d",&q->pay);while(p1->next!=NULL){p2=p1;p1=p1->next;}p2->next=q;printf("輸出添加后的信息\n");xie(head);head=du();print(head);printf("添加成功是否再添加,是Y/否則返回修改菜單");getchar();voidxiugai();scanf("%c",&a);if(a=='Y')tianjia();elsexiugai();}voidxiugai(){intk;printf("1:添加員工信息\n");printf("2:修改員工信息\n");printf("3:刪除員工信息\n");printf("0:退出修改,返回主菜單。\n");printf("請你選擇對應的操作:");scanf("%d",&k);voidm_ain();switch(k){case2:xg();break;case1:tianjia();break;case3:shanchu();break;case0:m_ain();break;default:printf("“輸入錯誤,返回修改”\n");xiugai();break;}}voidshuchu(){chara;structzhig*head;head=du();printf("************輸出現(xiàn)有職工信息***************\n\n");print(head);getchar();printf("選擇返回菜單Y,結束N\n");scanf("%c",&a);voidm_ain();if(a=='Y')m_ain();}voidi_d()//id排序{chara;voidpaixu();voidm_ain();structzhig*head,*p,*q;charname[20],id[15],dept[15];intpay,age,i,j;head=du();printf("輸出排序前的信息\n");print(head);printf("輸入排序的總人數(shù):");scanf("%d",&i);for(;i>1;i--){p=head;q=p->next;while(q->next!=NULL){if(strcmp(p->id,q->id)>0){strcpy(name,p->name);//交換strcpy(p->name,q->name);strcpy(q->name,name);strcpy(id,p->id);strcpy(p->id,q->id);strcpy(q->id,id);strcpy(dept,p->dept);strcpy(p->dept,q->dept);strcpy(q->dept,dept);pay=p->pay;p->pay=q->pay;q->pay=pay;age=p->age;p->age=q->age;q->age=age;}p=q;q=q->next;}}printf("輸出排序后的信息\n");print(head);printf("排序成功Y返回排序菜單/否則返回主菜單\n");getchar();scanf("%c",&a);if(a=='Y')paixu();elsem_ain();}voidg_z()//工資排序{chara;voidpaixu();voidm_ain();structzhig*head,*p,*q;charname[20],id[15],dept[15];intpay,age,i,j;head=du();printf("輸出排序前的信息\n");print(head);printf("輸入排序的總人數(shù):");scanf("%d",&i);for(;i>1;i--){p=head;q=p->next;while(q->next!=NULL){if(p->pay>q->pay){strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name);strcpy(id,p->id);strcpy(p->id,q->id);//交換strcpy(q->id,id);strcpy(dept,p->dept);strcpy(p->dept,q->dept);strcpy(q->dept,dept);pay=p->pay;p->pay=q->pay;q->pay=pay;age=p->age;p->age=q->age;q->age=age;}p=q;q=q->next;}}printf("輸出排序后的信息\n");print(head);printf("排序成功Y返回排序菜單/否則返回主菜單\n");getchar();scanf("%c",&a);if(a=='Y')paixu();elsem_ain();}voidpaixu(){inti;voidm_ain();printf("1.按ID排序\n");printf("2.按工資排序\n");printf("0.退出,返回主菜單\n");printf("請你選擇:");scanf("%d",&i);switch(i){case1:i_d();break;case2:g_z();break;case0:m_ain();break;default:printf("輸入錯誤,返回!\n");paixu();break;}}intxmc()//姓名查找函數(shù){inti=0;intj=0;structzhig*head;charname[20];printf("請輸入查找的姓名:");scanf("%s",name);head=du();while(head->next!=NULL){if(strcmp(head->name,name)==0){printf("%s%s%s%d%d\n",head->name,head->id,head->dept,head->age,head->pay);i=1;j++;}head=head->next;}if(i==0)printf("查詢的信息不存在!\n");elseprintf("查到的總人數(shù)%d\n",j);return(j);}intgzc()//工資查找函數(shù){inti=0;intj=0;structzhig*head;intpay;printf("請輸入查找的工資:");scanf("%d",&pay);head=du();while(head->next!=NULL){if(pay==head->pay){printf("%s%s%s%d%d\n",head->name,head->id,head->dept,head->age,head->pay);i=1;j++;}head=head->next;}if(i==0)printf("查詢的信息不存在!\n");elseprintf("查到的總人數(shù)%d\n",j);return(j);}voidchaxun(){voidm_ain();inti,j;printf("1.按姓名查詢\n");printf("2.按工資查詢\n");printf("0.返回主菜單\n");printf("請你選擇:");scanf("%d",&i);switch(i){case1:j=xmc();printf("返回主菜單\n");m_ain();break;case2:j=gzc();printf("返回主菜單\n");m_ain();break;case0:m_ain();break;default:printf("輸入錯誤,返回!\n");chaxun();break;}}voidtongji(){voidm_ain();chara;inti=0;//記錄總數(shù)longk=0;//記錄總工資structzhig*head;head=du();while(head->next!=NULL){i++;k=k+head->pay;head=head->next;}printf("現(xiàn)有員工總人數(shù):%d\n",--i);printf("現(xiàn)有員工的總工資%ld\n",k);printf("選擇Y返回主菜單,否則退出程序\n");getchar();scanf("%c",&a);if(a=='Y')m_ain();}voidm_ain(){inti;structzhig*head;printf("***********************************************\n\n");printf("1:職工信息輸入\n\n");printf("2:職工信息修改\n\n");printf("3:選擇性排序\n\n");printf("4:統(tǒng)計人數(shù)和工資\n\n");printf("5:輸出現(xiàn)有的信息\n\n");printf("6:自定義查詢信息\n\n");printf("0:退出系統(tǒng)\n\n");printf("***********************************************\n");printf("請你選擇:");scanf("%d",&i);switch(i){case1:head=shuru();break;case2:xiugai();break;case3:paixu();break;case4:tongji();break;case5:shuchu();break;case6:chaxun();break;case0:break;default:printf("“輸入錯誤”\n");break;}}structstr*read()//用戶信息的讀入{structstr*head,*r,*stu;FILE*fp;if((fp=fopen("yonghuxinxi.txt","rt"))==NULL){printf("讀入文件失?。?);}else{head=(structstr*)malloc(sizeof(structstr));head->next=NULL;r=head;while(feof(fp)!=1){stu=(structstr*)malloc(N);fscanf(fp,"%s%s",stu->name,stu->key);r->next=stu;r=stu;}r->next=NULL;fclose(fp);return(head);}}voidwrite(structstr*q)//用戶的寫入{structstr*p;FILE*fp;fp=fopen("yonghuxinxi.txt","wt");if(fp==NULL){printf("打開文件失敗,按任意鍵退出!");exit(1);}p=q->next;while(p!=NULL){fprintf(fp,"%s%s\n",p->name,p->key);p=p->next;}fclose(fp);}voidzhuche(){inti=0;charname[20],key[20];structstr*head,*d;structstr*p1,*p2;structstr*q;//新加入的節(jié)點q=(structstr*)malloc(sizeof(structstr));printf("請輸入用戶名:");scanf("%s",q->name);d=head=read();while(d!=NULL){if(strcmp(d->name,q->name)==0)//判斷是否已有用戶用過該名字{i=1;break;}d=d->next;}if(i!=0){printf("該用戶已被注冊過,返回\n");zhuche();}else{printf("密碼不能超過20個字符\n");printf("請輸入密碼:");scanf("%s",q->key);p2=head;p1=p2->next;while(p1->next!=NULL){p2=p1;p1=p1->next;}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物流園區(qū)土地租賃及綠化維護合同3篇
- 2024年有機肥原料采集與供應合同3篇
- 2024年香港借款協(xié)議模板個人與企業(yè)間借款的最佳選擇3篇
- 舞蹈短期集訓課課程設計
- 自動控制的綜合課程設計
- 團委學生會培訓會
- 二零二五年度國際物流運輸合同執(zhí)行細則3篇
- 2025年度攝像機采購與數(shù)據(jù)傳輸安全協(xié)議6篇
- 2024年度文化創(chuàng)意產(chǎn)品贈予、借款與版權租賃協(xié)議3篇
- 2024版裝修合同起訴書
- 中成藥手冊完整版本
- 2023-2024學年成都市金牛區(qū)九年級上英語(一診)期末考試題(含答案)
- 2023年MC主管年終業(yè)務工作總結
- 廣東省物業(yè)管理條例2024:業(yè)主大會與業(yè)主委員會組織規(guī)定
- 喉血管瘤護理查房
- 員工賠償金保密協(xié)議
- 空靈鼓社團教學計劃
- (法律資料)城管執(zhí)法操作實務
- 廣東省珠海市2022-2023六年級上學期數(shù)學期末試卷(含答案)
- 山東省青島市第二中學2023-2024學年化學高二第一學期期末綜合測試試題含解析
- 網(wǎng)上商城 售后服務范本
評論
0/150
提交評論