C語言鏈表實現(xiàn)工資管理系統(tǒng)_第1頁
C語言鏈表實現(xiàn)工資管理系統(tǒng)_第2頁
C語言鏈表實現(xiàn)工資管理系統(tǒng)_第3頁
C語言鏈表實現(xiàn)工資管理系統(tǒng)_第4頁
C語言鏈表實現(xiàn)工資管理系統(tǒng)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C語言鏈表實現(xiàn)工資管理系統(tǒng)本文實例為大家分享了C語言鏈表實現(xiàn)工資管理系統(tǒng)的具體代碼,供大家參考,具體內容如下

自己的作業(yè),分享一下,自己為了調試方便,又多加入了一些功能

題目:建立工資管理系統(tǒng),對職工工資的相關信息進行管理。職工工資相關信息包括職工工號,職工姓名,月份,每月工資和年度總工資等,具體要求如下:

1、建立該系統(tǒng)的存儲結構

2、錄入職工某個月的工資

3、查找某個職工某個月的工資

4、修改某個職工某個月的工資

5、刪除每個職工的工資相關信息

6、統(tǒng)計某個職工年度總工資

7、對職工的月工資或年度總工資進行排名

#includestdio.h

#includestdlib.h

#includestring.h

typedefstructworker

charno[12];

//職工工號

charname[40];

//姓名

intmonth[12];

//月份

floatgz[12];

//月工資

floattotal;

//年度總工資

structworker*next;//指向下一節(jié)點的指針

}Worker;

//相關的函數(shù)聲明

Worker*CreateList(Worker*L,intn);

//根據輸入的職工人數(shù),批量創(chuàng)建節(jié)點

voidDeleteList(Worker*L,charn[]);

//刪除節(jié)點

voidLIstSearch(Worker*L,charn[]);

//查找職工工資信息

voidInsertInfo(Worker*L);

//插入職工工資信息

voidSearchMonthSalary(Worker*L,charn[],intm);//查找某個職工的某個月的工資

voidInput(Worker*p,inti);

//為節(jié)點的數(shù)據域賦值

voidPrint(Worker*L);

//輸出整個鏈表的數(shù)據

voidModify(Worker*L,charn[],intm,floats);

//修改某個職工的工資

voidmenu();

//工資管理系統(tǒng)的菜單

voidSave(Worker*L);

//將職工的工資信息保存至文件

voidBubble_sort(Worker*L);

//冒泡排序實現(xiàn)對鏈表節(jié)點的排序

voidStatiTotal(Worker*L,charn[]);

//統(tǒng)計某個職工年度總工資

//根據輸入的職工人數(shù),批量創(chuàng)建節(jié)點

Worker*CreateList(Worker*L,intn)//n為輸入的職工人數(shù)

inti;

for(i=0;ii++)

{

Worker*p;

//將新生成的節(jié)點插入到鏈表中

p=NULL;

p=(Worker*)malloc(sizeof(Worker));

Input(p,i);

//為節(jié)點的數(shù)據域賦值

p-next=L-next;

L-next=p;

}

returnL;

voidDeleteList(Worker*L,charn[])//按姓名刪除職工信息

inti;

Worker*p=L-next,*pre=L;//定義p指針指向頭節(jié)點的指向,定義pre指向頭節(jié)點,pre始終指向p的前驅節(jié)點

if(p==NULL)

printf("數(shù)據為空,無法刪除!");

else

{

while(strcmp(p-name,n)!=0)

{

pre=p;

p=pre-next;

if(p==NULL)

{

printf("沒有找到相關信息,無法刪除\n");

return;

}

}

pre-next=p-next;

free(p);

printf("刪除成功");

}

//向鏈表中插入職工工資信息

voidInsertInfo(Worker*L)

intj,k;

Worker*p=NULL;

p=(Worker*)malloc(sizeof(Worker));//生成一個新節(jié)點p

p-total=0;

printf("請輸入要插入的職工的職工工號:");

scanf("%s",p-

printf("請輸入要插入的職工的姓名:");

scanf("%s",p-name);

for(k=0,j=1;j=12,kj++,k++)

p-month[k]=j;

printf("請輸入要插入的職工的月工資(用空格隔開):");

for(j=0;jj++)

{

scanf("%f",p-gz[j]);//輸入每個月的工資

p-total+=p-gz[j];

//計算總工資

}

p-next=L-next;

L-next=p;

printf("插入成功!");

voidLIstSearch(Worker*L,charn[])

inti;

Worker*p=L-next;

while(p!=NULL)

{

if(strcmp(p-name,n)==0)

{

printf("\n該職工的工資的信息如下:\n");

printf("職工編號:");

printf("%s\t\n",p-

printf("姓名:");

printf("%s\n",p-name);

printf("該職工12個月的月工資如下:");

for(i=0;ii++)

printf("%.2f",p-gz[i]);

printf("\n該職工的年度總工資為:");

printf("%.2f",p-total);

printf("\n\n");

printf("\n");

p=p-next;

}

else

p=p-next;

}

voidSearchMonthSalary(Worker*L,charn[],intm)

inti;

Worker*p=L-next;

while(p!=NULL)

{

if(strcmp(p-name,n)==0)

{

switch(m)

{

case1:

printf("該職工%d月的工資為%.2f",p-month[0],p-gz[0]);

break;

case2:

printf("該職工%d月的工資為%.2f",p-month[1],p-gz[1]);

break;

case3:

printf("該職工%d月的工資為%.2f",p-month[2],p-gz[2]);

break;

case4:

printf("該職工%d月的工資為%.2f",p-month[3],p-gz[3]);

break;

case5:

printf("該職工%d月的工資為%.2f",p-month[4],p-gz[4]);

break;

case6:

printf("該職工%d月的工資為%.2f",p-month[5],p-gz[5]);

break;

case7:

printf("該職工%d月的工資為%.2f",p-month[6],p-gz[6]);

break;

case8:

printf("該職工%d月的工資為%.2f",p-month[7],p-gz[7]);

break;

case9:

printf("該職工%d月的工資為%.2f",p-month[8],p-gz[8]);

break;

case10:

printf("該職工%d月的工資為%.2f",p-month[9],p-gz[9]);

break;

case11:

printf("該職工%d月的工資為%.2f",p-month[10],p-gz[10]);

break;

case12:

printf("該職工%d月的工資為%.2f",p-month[11],p-gz[11]);

break;

default:

break;

}

p=p-next;

}

else

p=p-next;

}

voidBubble_sort(Worker*L)//冒泡排序實現(xiàn)對鏈表節(jié)點的排序

Worker*p,*q,*tail,*l;

tail=NULL;

while((L-next-next)!=tail)

{

p=L;

q=L-next;

while(q-next!=tail)

{

if((q-total)(q-next-total))

{

p-next=q-next;

q-next=q-next-next;

p-next-next=q;

q=p-next;

}

q=q-next;

p=p-next;

}

tail=q;

}

printf("排序完成!年度總工資從小到大結果如下:\n");

l=L-next;

while(l!=NULL)

{

if(l-next!=NULL)

{

printf("%s-",l-name);

l=l-next;

}

else

{

printf("%s",l-name);

l=l-next;

}

}

voidStatiTotal(Worker*L,charn[])

//統(tǒng)計某個職工年度總工資

inti;

Worker*p=L-next;

while(p!=NULL)

{

p-total=0;

if(strcmp(p-name,n)==0)

{

for(i=0;ii++)

p-total+=p-gz[i];

printf("%s的年度總工資為%.2f",n,p-total);

break;

}

else

p=p-next;

}

voidModify(Worker*L,charn[],intm,floats)

inti,j;

Worker*p=L-next;

while(p!=NULL)

{

if(strcmp(p-name,n)==0)

{

switch(m)

{

case1:

p-gz[0]=s;

break;

case2:

p-gz[1]=s;

break;

case3:

p-gz[2]=s;

break;

case4:

p-gz[3]=s;

break;

case5:

p-gz[4]=s;

break;

case6:

p-gz[5]=s;

break;

case7:

p-gz[6]=s;

break;

case8:

p-gz[7]=s;

break;

case9:

p-gz[8]=s;

break;

case10:

p-gz[9]=s;

break;

case11:

p-gz[10]=s;

break;

case12:

p-gz[11]=s;

break;

default:

break;

}

p-total=0;

for(j=0;jj++)

p-total+=p-gz[j];

p=p-next;

}

else

p=p-next;

}

printf("修改成功!");

voidInput(Worker*p,inti)

intj,k;

p-total=0;

printf("請輸入第%d名職工的職工工號:",i+1);

scanf("%s",p-

printf("請輸入第%d名職工的姓名:",i+1);

scanf("%s",p-name);

for(k=0,j=1;j=12,kj++,k++)

p-month[k]=j;

printf("請輸入第%d名職工的月工資(用空格隔開):",i+1);

for(j=0;jj++)

{

scanf("%f",p-gz[j]);//輸入每個月的工資

p-total+=p-gz[j];

//計算總工資

}

voidPrint(Worker*L)

//打印所有職工工資信息

inti;

Worker*p=L-next;

while(p!=NULL)

{

printf("職工編號:");

printf("%s\t\n",p-

printf("姓名:");

printf("%s\n",p-name);

printf("該職工12個月的月工資如下:");

for(i=0;ii++)

printf("%.2f",p-gz[i]);

printf("\n該職工的年度總工資為:");

printf("%.2f",p-total);

printf("\n\n");

p=p-next;

}

voidSave(Worker*L)

inti;

Worker*p=L-next;

FILE*fp=fopen("WorkerSalaryInfo.txt","w");

while(p!=NULL)

{

fprintf(fp,"職工編號:");

fprintf(fp,"%s\t\n",p-

fprintf(fp,"姓名:");

fprintf(fp,"%s\n",p-name);

fprintf(fp,"該職工12個月的月工資如下:");

for(i=0;ii++)

fprintf(fp,"%.2f",p-gz[i]);

fprintf(fp,"\n該職工的年度總工資為:");

fprintf(fp,"%.2f",p-total);

fprintf(fp,"\n\n");

p=p-next;

}

fclose(fp);

printf("保存成功,已保存至當前目錄下的‘WorkerSalaryInfo.txt'文件中");

voidmenu()

printf("\t\t\t\t\t

\n");

printf("\t\t\t\t\t▔▔▔▔▔▔▔歡迎進入工資管理系統(tǒng)▔▔▔▔▔▔▔\n");

printf("\t\t\t\t\t1.錄入職工每個月的工資信息

\n");

printf("\t\t\t\t\t2.按姓名查找某個員工各月的工資

\n");

printf("\t\t\t\t\t3.按姓名查找某個職工的某個月的工資

\n");

printf("\t\t\t\t\t4.修改某個職工某個月的工資

\n");

printf("\t\t\t\t\t5.刪除某個職工的相關信息

\n");

printf("\t\t\t\t\t6.插入職工工資信息

\n");

printf("\t\t\t\t\t7.統(tǒng)計某個職工年度總工資

\n");

printf("\t\t\t\t\t8.對職工的年度總工資進行從小到大排名

\n");

printf("\t\t\t\t\t9.輸出所有職工工資信息

\n");

printf("\t\t\t\t\t10、將所有職工的工資信息保存至文件

\n");

printf("\t\t\t\t\t0.退出

\n");

printf("\t\t\t\t\t▁▁▁▁▁▁▁▁▁▁謝謝使用▁▁▁▁▁▁▁▁▁\n");

intmain()

intitem,n,m;//item用于接收輸入的命令,n用于接收輸入的職工人數(shù)

floats;

charnam[10];

Worker*L=(Worker*)malloc(sizeof(Worker));

L-next=NULL;

do

{

system("cls");

menu();

printf("\n請輸入相應的數(shù)字,進行相應的操作:\n");

scanf("%d",item);

switch(item)

{

case1:

printf("請輸入您要錄入的職工人數(shù):");

scanf("%d",

L=CreateList(L,n);

getchar();

printf("\n請按任意鍵返回主菜單\n");

getchar();

break;

case2:

printf("請輸入您要查找的職工姓名:");

scanf("%s",nam);

LIstSearch(L,nam);

getchar();

printf("\n請按任意鍵返回主菜單\n");

getchar();

break;

case3:

printf("請輸入您要查找的職工的姓名:");

scanf("%s",nam);

printf("請輸入您要查找該職工第幾個月的工資(1到12):");

scanf("%d",

SearchMonthSalary(L,nam,m);

getchar();

printf("\n請按任意鍵返回主菜單\n");

getchar();

break;

case4:

printf("請輸入您要修改的職工姓名:");

scanf("%s",nam);

printf("\n請輸入您要修改的月份:");

scanf("%d",

printf("\n請輸入您修改后的數(shù)據:");

scanf("%f",

Modify(L,nam,m,s);

getchar();

printf("\n請按任意鍵返回主菜單\n");

getchar();

break;

case5:

printf("請輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論