C语言编写工资管理系统类似学生管理系统
C語言編寫工資管理系統類似學生管理系統
開始界面和菜單界面B
void start() //開始界面 { system("cls");//清屏 system("color 1E"); //設置文字顏色為黃色 背景色藍色 printf("\n\n\n\n\n\n"); printf("********************************************************************************"); printf("*****************************歡迎使用工資管理系統*****************************"); printf("*********************************************************************************\n\n\n\n\n"); printf("\t\t\t ***按任意鍵進入***\n"); }void menu() //菜單界面 { system("cls");system("color 1F");printf("***菜單***\n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 1 輸入 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 2 顯示 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 3 查找 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 4 刪除 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 5 添加 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 6 修改 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 7 統計 \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>> 8 退出 \n\n");printf("說明:*如首次使用 尚未輸入數據 請先輸入數據 \n *輸入的數據將自動保存 \n *再次選擇輸入功能時原數據將被覆蓋\n\n");}主函數
void main()//主函數{ int n,button;char a;start(); getch();menu(); do{printf("功能選擇(1--8):\n");scanf("%d",&n);if(n>=1&&n<=8){button=1;break;}else{button=0;printf("您輸入有誤,請重新選擇!");}}while(button==0);while(button==1){switch(n){ case 1: input();break;case 2: display();break;case 3: search();break;case 4:del();break;case 5: add();break;case 6:modify();break;case 7:sta();break;case 8:exit(0);break;default :break;}getchar();printf("\n");printf("按任意鍵繼續\n");getch();system("cls"); /*清屏*/menu(); /*調用菜單函數*/printf("功能選擇(1--8):\n");scanf("%d",&n);printf("\n");}}函數頭和定義函數A
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define N 100
struct clerk
{
int num; //ID號
char name[20]; //姓名
int jbgz; //基本工資
int zwgz; //職務工資
int jt; // 津貼
int yb; //醫療保險
int gjj; /公積金/
int total; //總工資
}em[100];
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_name();
void modify();
void sta();
void start(); /定義各函數/
瀏覽函數
void display() /瀏覽函數/
{
int i,sum=0;
int m=load();
system(“cls”);
printf(“職工號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 \n”);
for(i=0;i<m;i++) /m為輸入部分的職工人數/
{printf("\n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);
sum+=em[i].total;//計算員工總工資之和
}
printf("\n\n職工平均工資為:%d \n",sum/m);
}
錄入函數
void input() /錄入函數/
{
int i,m;
system(“cls”);
printf(“職工人數(1–100):\n”);
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("請輸入職工號: ");
scanf("%d",&em[i].num);
printf("請輸入姓名: ");
scanf("%s",&em[i].name);
getchar();
printf("請輸入基本工資: ");
scanf("%d",&em[i].jbgz);
printf("請輸入職務工資: ");
scanf("%d",&em[i].zwgz);
printf("請輸入津貼: ");
scanf("%d",&em[i].jt);
printf("請輸入醫療保險: ");
scanf("%d",&em[i].yb);
printf("請輸入公積金: ");
scanf("%d",&em[i].gjj);
em[i].total=((em[i].jbgz)+(em[i].zwgz)+(em[i].jt)-(em[i].yb)-(em[i].gjj));//計算總工資
printf("\n");//計算總工資
}
printf("\n創建完畢!\n");
save(m);//保存職工人數m
}
刪除函數
void del() /*刪除函數 */
{
int m=load();
int i,j,n,t,button;
char name[20];
printf("\n 原來的職工信息:\n");
display(); //顯示刪除前的員工信息
printf("\n");
printf(“按姓名刪除:\n”);
scanf("%s",name);
for(button=1,i=0;button&&i<m;i++)//主函數中確定button==1時各函數才可以被調用
{
if(strcmp(em[i].name,name)==0)//按員工姓名查找到某員工 并調出其資料
{
printf("\n此人原始記錄為:\n");//顯示選定員工的信息
printf(“職工號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 \n”);
printf("\n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);
printf("\n確定刪除 請按1,不刪除請按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)//從第i項開始 將后一項的各成員的值賦給前一項各對應的成員 完成對第i項的刪除
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].jbgz=em[j+1].jbgz;
em[j].zwgz=em[j+1].zwgz;
em[j].jt=em[j+1].jt;
em[j].yb=em[j+1].yb;
em[j].gjj=em[j+1].gjj;
em[j].total=em[j+1].total;
}
. button=0;
}
}
}
if(!button)//button==0表明刪除已完成
m=m-1;//總員工數減少一人
else
printf("\n查無此人!\n");
printf("\n 刪除后的所有職工信息:\n");
save(m); //調用保存函數
display(); //調用瀏覽函數
printf("\n繼續刪除請按1,不再刪除請按0\n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;
}
}
添加函數
void add()/添加函數/
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原來的職工信息:\n");
display();
printf("\n");
fp=fopen(“emploee_list”,“a”);
printf(“請輸入想增加的職工數:\n”);//確定要加入的職工數n
scanf("%d",&n);
for (i=m;i<(m+n);i++)//添加n名員工的信息
{
printf("\n 請輸入新增加職工的信息:\n");
printf("請輸入職工號: ");
scanf("%d",&em[i].num);
printf("\n");
printf("請輸入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("請輸入基本工資: ");
scanf("\t%d",&em[i].jbgz);
printf("請輸入職務工資: ");
scanf("%d",&em[i].zwgz);
printf("請輸入津貼: ");
scanf("%d",&em[i].jt);
printf("請輸入醫療保險: ");
scanf("\t%d",&em[i].yb);
printf("請輸入公積金: ");
scanf("%d",&em[i].gjj);
em[i].total=( em[i].jbgz+ em[i].zwgz + em[i].jt- em[i].yb- em[i].gjj);//計算該員工總工資
printf("\n");
count=count+1;
printf(“已增加的人數:\n”);
printf("%d\n",count);
}
printf("\n添加成功\n");
m=m+count;//將新添加員工的人數加到總員工人數中
printf("\n增加后的所有職工信息:\n");
printf("\n");
save(m);
display();//顯示添加后的信息
fclose(fp);
}
統計函數
void sta()//統計函數
{
int i;
int sum=0;
int a=0,b=0,c=0;
int m=load();
system(“cls”);//清屏函數
for(i=0;i<m;i++) /m為輸入部分的職工人數/
{sum+=em[i].total;
if((em[i].total)<=1500&&em[i].total>=1000)
{a++;}
if(em[i].total>1500&&em[i].total<=2000)
{b++;}
if(em[i].total>2000)
{c++;}
}
printf("\n\n工資總額為:%d\n",sum);
printf(“平均工資為:%d\n”,sum/m);
printf("\n基本工資、職務工資、津貼之和\n");
printf(“在1000-1500圓的員工占總員工的百分之%d\n”,a*100/m);
printf(“在1500-2000圓的員工占總員工的百分之%d\n”,b*100/m);
printf(“在2000圓以上的員工占總員工的百分之%d\n”,c*100/m);
printf("\n\n按任意鍵繼續");
getch();
menu();
}
修改函數
void modify() /修改函數/
{
int num;
char name[20];
int jbgz;
int zwgz;
int jt;
int yb;
int gjj;
int b,c,i,n,t,button;
int m=load();
system(“cls”);
printf("\n 原來的職工信息:\n");
display();
printf("\n");
printf(“請輸入要修改的職工的姓名:\n”);
scanf("%s",name);
for(button=1,i=0;button&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n此人原始記錄為:\n");
printf(“職工號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 \n”);
printf("\n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);
printf("\n確定 按1 ; 不修改請按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要進行修改的選項\n 1.職工號 2.姓名 3.基本工資 4.職務工資 5.津貼 6.醫療保險 7.公積金 8.返回上層\n");
printf(“請選擇序號1-8:\n”);
scanf("%d",&c);
if(c>8||c<1)
printf("\n選擇錯誤,請重新選擇!\n");
}
button=0;
}
}
if(button==1)
printf("\n查無此人\n");
do
{
switch? /因為當找到第i個職工時,for語句后i自加了1,所以下面的應該把改后的信息賦值給第i-1個人/
{
case 1:printf("職工號改為: ");
scanf("%d",&num);
em[i-1].num=num;
break;
case 2:printf("姓名改為: ");
scanf("%s",name);
strcpy(em[i-1].name,name);
break;
case 3:printf("基本工資改為: ");
getchar();
scanf("%d",&jbgz);
em[i-1].jbgz=jbgz;
em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);
break;
case 4:printf("職務工資改為: ");
scanf("%d",&zwgz);
em[i-1].zwgz=zwgz;
em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);
break;
case 5:printf("津貼改為: ");
scanf("%d",&jt);
em[i-1].jt=jt;
em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);
break;
case 6:printf("醫療保險改為: ");
scanf("%d",&yb);
em[i-1].yb=yb;
em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);
break;
case 7:printf("公積金改為: ");
scanf("%d",&gjj);
em[i-1].gjj=gjj;
em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);
break;
case 8:modify();
break;
}
printf("\n");
printf("\n\n 確定修改 請按1 ; 重新修改 請按2: \n");
scanf("%d",&b);
}
while(b==2);
printf("\n修改后的所有職工信息:\n");
printf("\n");
save(m);
display();
printf("\n按1 繼續修改 ,不再修改請按0\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}
}
查詢函數
void search()/查詢函數/
{
int t,button;
system(“cls”);//清屏
do
{
printf("\n按1 按工號查詢\n按2 按姓名查詢\n按3 回主菜單\n");
scanf("%d",&t);
if(t>=1&&t<=3)
{
button=1;
break;
}
else
{
button=0;
printf(“輸入錯誤”);
}
}
while(button==0);//回到查詢選擇項
while(button==1)
{
switch(t)//選擇查詢方式
{
case 1:printf(“按工號查詢\n”);search_num();break;
case 2:printf(“按姓名查詢\n”);search_name();break;
case 3:button=2,menu();
default:break;
}
}
}
void search_num()//按職工號查詢
{
int a;
int i,t;
int m=load();
printf(“請輸入要查找的職工號:\n”);
scanf("%d",&a);
for(i=0;i<m;i++)
if(a==em[i].num)
{
printf(“職工號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 \n”);
printf("\n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);
break;
}
if(i==m)
printf("\n對不起,查無此人\n");
printf("\n");
printf(“返回查詢函數請按1,繼續查詢職工號請按2\n”);
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2: break;
default:break;
}
}
void search_name()
{
char name[30];
int i,t;
int m=load();
printf(“請輸入姓名:\n”);
scanf("%s",name);
for(i=0;i<m;i++)
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到,其記錄為:\n");
printf(“職工號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 \n”);
printf("\n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);
}
if(i==m)
printf("\n\n");
printf("\n");
printf(“返回查詢菜單請按1,繼續查詢姓名請按2\n”);
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}
}
保存文件
void save(int m) /保存文件函數/
{
int i;
FILE*fp; //聲明fp是指針,用來指向FILE類型的對象
if ((fp=fopen(“clerk_list”,“wb”))==NULL) //打開職工列表文件為空
{
printf (“打開失敗\n”);
exit(0);
}
for (i=0;i<m;i++) /將內存中職工的信息輸出到磁盤文件中去/
if (fwrite(&em[i],sizeof(struct clerk),1,fp)!=1)//寫入數據塊 &em[i]:是要輸出數據的地址 sizeof(struct clerk):獲取一個單體的長度 1:數據項的個數 fp:目標文件指針
printf(“文件讀寫錯誤\n”);
fclose(fp);// 緩沖區內最后剩余的數據輸出到磁盤文件中,并釋放文件指針和有關的緩沖區
}
int load() /導入函數 int型/
{
FILE*fp;
int i=0;
if((fp=fopen(“clerk_list”,“rb”))==NULL)
{
printf (“cannot open file\n”);
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(struct clerk),1,fp); //讀取
i++;
}
while(feof(fp)==0); //檢測流上的文件結束符
}
fclose(fp);
return(i-1);//返回人數
}
總結
以上是生活随笔為你收集整理的C语言编写工资管理系统类似学生管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程语言之常用的编译器和软件的版本规范
- 下一篇: 谈谈各个编程语言吧