• 方案介紹
  • 附件下載
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

C語言程序設(shè)計-職工工資管理系統(tǒng)

2024/08/22
2151
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

有需要資料的可了解一下.docx

共1個文件

題??? 目: 職工工資管理

一.程序設(shè)計思路

1、設(shè)計思路

(1)根據(jù)題目要求,應(yīng)該把職工工資信息用結(jié)構(gòu)體形式輸入,在定義一個全局變量和文件指針進行整個程序的運行,然后把職工工資信息送到文件中,所以應(yīng)該提供一個結(jié)構(gòu)體和文件的輸入輸出等操作;

(2)在程序中需實現(xiàn)職工工資瀏覽、查詢、統(tǒng)計等功能的操作,所以需要建立相應(yīng)的功能模塊來實現(xiàn);

(3)另外還需要提供鍵盤式選擇菜單實現(xiàn)功能,在運行時達到所要的目的。

2、總體設(shè)計

整個系統(tǒng)可以分為信息輸入、信息新增、信息瀏覽、信息排序和信息查詢五個主要模塊。

3、部分程序設(shè)計

1)信息輸入

printf("請您輸入姓名:");

scanf("%s",p->data.name);

getchar();

printf("請您輸入性別(m/f):");

scanf("%s",p->data.sex);

getchar();

printf("請您輸入上旬完成(百分比):");

scanf("%f",&p->data.spercent);

getchar();

printf("請您輸入中旬完成(百分比):");

scanf("%f",&p->data.zpercent);

getchar();

printf("請您輸入下旬完成(百分比):");

scanf("%f",&p->data.xpercent);

getchar();

p->data.totle=p->data.spercent+p->data.zpercent+p->data.xpercent;

p->data.ave=p->data.totle / 3;

if(p->data.totle<100)

{p->data.jiangjin=(p->data.totle-100)*10;}

else p->data.jiangjin=(p->data.totle-100)*10;

//信息輸入已經(jīng)完成

2)瀏覽模塊

調(diào)用排序模塊的排序功能,可以瀏覽排序后的所有職工信息。

3)排序模塊

排序模塊提供菜單選擇,實現(xiàn)按照工資卡號升序、實發(fā)工資升序排序。排序方法可以選擇冒泡排序、插入排序、選擇排序等,本系統(tǒng)用的是冒泡排序。

4)查詢模塊

實現(xiàn)按照編號和姓名的查詢,采用基本的查找方法即可。

二.功能模塊圖

.數(shù)據(jù)結(jié)構(gòu)設(shè)計

系統(tǒng)用將職工各項信息以結(jié)構(gòu)體類型char dir來定義,它包括num,name[15]等不同類型的數(shù)據(jù)項,同時定義了結(jié)構(gòu)體數(shù)組,包括N個數(shù)組元素,對應(yīng)N個職工,每一個元素用來存放一個職工的數(shù)據(jù);每個職工的信息以結(jié)構(gòu)體方式從內(nèi)存和磁盤文件中進行存儲和導(dǎo)出。以結(jié)構(gòu)體方式來整合職工的不同信息,將不同的數(shù)據(jù)組合成一個有機整體,非常方便程序的調(diào)用。

四.算法設(shè)計

1、主函數(shù)

主函數(shù)一般設(shè)計比較簡單,只提供輸入、處理和輸出部分的函數(shù)調(diào)用。各功能模塊用菜單方式選擇。

[流程圖]

"

#include "stdlib.h"

#include "string.h"

int shoudsave=0;

char dir[15];

struct member

{

char num[5];//編號

char name[15];

char sex[1];

float spercent;

float zpercent;

float xpercent;

float jiangjin;

float totle;

float ave;

}; //一個結(jié)構(gòu)體

typedef struct node

{

struct member data;//指向結(jié)構(gòu)體的結(jié)構(gòu)體

struct node *next;

}Node,*Link;

void explain()

{printf("=============================關(guān)于此程序的操作說明==============================n");

printf("===1>:員工每旬應(yīng)該完成量為33.3個百分點,輸入只輸數(shù)字部分。n");

printf("===2>:員工每月應(yīng)該完成量完成量為100個百分點。n");

printf("===3>:員工獎金按其超額總應(yīng)該完成量(即百分之百)的多少計算。n");

printf("===4>:獎金=(總完成比-1)*1000。n");

printf("===5>:員工底金為1000元。n");

printf("===6>:邏輯刪除資料必須在已經(jīng)保存了先前記錄的基礎(chǔ)上方可進行。n");

printf("===7>:進行邏輯刪除資料后如果保存即變?yōu)槲锢韯h除。n");

printf("===8>:本程序在c++環(huán)境中完成,程序文件擴展名為.c。n");

}

void menu() //菜單

{

printf("********************************************************************************");

printf("t1獲取說明信息ttttt 2輸入員工資料n");

printf("t3刪除員工資料ttttt 4查詢員工資料n");

printf("t5修改員工資料ttttt 6顯示員工資料n");

printf("t7統(tǒng)計員工業(yè)績ttttt 8排序員工實發(fā)工資n");

printf("t9保存員工資料ttttt10邏輯刪除員工資料n");

printf("t0退出系統(tǒng)n");

printf("********************************************************************************n");

}? 2、各功能模塊設(shè)計

1 輸入模塊

struct member

{

char num[5];//編號

char name[15];

char sex[1];

float spercent;

float zpercent;

float xpercent;

float jiangjin;

float totle;

float ave;

}; //一個結(jié)構(gòu)體 [流程圖]

}2 瀏覽模塊

[需求分析]

該模塊的功能是顯示所有職工記錄工資信息.

/***************瀏覽(全部)模塊***************/

void browse()?? /*瀏覽模塊*/

{

void printf_one(int i);

void printf_face();

int load();

void menu();

int i,n;

n=load();?? /*加載記錄*/

printf_face();????? /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/

for(i=0;i<n;i++)

{

if((i!=0)&&(i%10==0))?? /*目的是分屏顯示*/

{printf("nnpress any key to contiune...");

getch();

puts("nn");}

printf_one(i);??? /*調(diào)用顯示一個記錄的函數(shù)*/

printf("n");

}

printf("t there are %d record.n",n);

printf("n pass any key to back...");

getch();?? /*按任意鍵*/

menu();

}

⑷ 查找模塊

該模塊的功能是根據(jù)輸入的職工姓名和卡號查找對應(yīng)的記錄.

[程序]

/***************查找函數(shù)***************/

void search()??? /*查找模塊*/

{

int n,w1;

do

{

puts("ttt1.search by name");

puts("ttt2.search by num");

scanf("%d",&n);

if(n<1||n>2)??? /*對選擇數(shù)字作判斷*/

{

w1=1;

getchar();

}

else w1=0;

}

while(w1==1);

switch(n)

{

void search_1();

void search_2();

case 1:search_1();break;

case 2:search_2();break;

}

}

void? search_1()?? /*按姓名查找*/

{

int load();

void printf_face();

void menu();

void printf_one(int i);

int i,n,k,w1=1,w2,w3,w4;

struct list s;

n=load();

do

{

do

{

k=-1;

printf("nnenter name that you want to search!??? name:");

scanf("%s",s.name);

printf_face();??? /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/

for(i=0;i<n;i++)???? /*查找所需數(shù)據(jù)*/

if(strcmp(s.name,list[i].name)==0)

{

k=i;????? /*找到數(shù)據(jù)*/

printf_one(k);break;??? /*調(diào)用顯示一個記錄的函數(shù)*/

}

if(k==-1)

{

printf("nn NO.exit!please");

printf("nnare you again?nt1).again?? 2).NO and back? [ ]bb");

scanf("%d",&w1);

if(w1==2)break;

}

}

while(k==-1&&w1==1);???? /*如果w1不等于1這直接返回*/

w4=0;w3=0;

if(k!=-1)??? /*k不等于-1表示已找到,如果找到則選擇操作*/

{

printf("successful");

printf("nn what do you want to do?nt1).search another? 2).back? [ ]bb");

scanf("%d",&w2);

}

}

while(w2==1);

menu();

}

五、部分程序代碼

每個函數(shù)都要有功能說明)

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int shoudsave=0;

char dir[15];

struct member

{

char num[5];//編號

char name[15];

char sex[1];

float spercent;

float zpercent;

float xpercent;

float jiangjin;

float totle;

float ave;

}; //一個結(jié)構(gòu)體

typedef struct node

{

struct member data;//指向結(jié)構(gòu)體的結(jié)構(gòu)體

struct node *next;

}Node,*Link;

void explain()

{printf("=============================關(guān)于此程序的操作說明==============================n");

printf("===1>:員工每旬應(yīng)該完成量為33.3個百分點,輸入只輸數(shù)字部分。n");

printf("===2>:員工每月應(yīng)該完成量完成量為100個百分點。n");

printf("===3>:員工獎金按其超額總應(yīng)該完成量(即百分之百)的多少計算。n");

printf("===4>:獎金=(總完成比-1)*1000。n");

printf("===5>:員工底金為1000元。n");

printf("===6>:邏輯刪除資料必須在已經(jīng)保存了先前記錄的基礎(chǔ)上方可進行。n");

printf("===7>:進行邏輯刪除資料后如果保存即變?yōu)槲锢韯h除。n");

printf("===8>:本程序在c++環(huán)境中完成,程序文件擴展名為.c。n");

}

void menu() //菜單

{

printf("********************************************************************************");

printf("t1獲取說明信息ttttt 2輸入員工資料n");

printf("t3刪除員工資料ttttt 4查詢員工資料n");

printf("t5修改員工資料ttttt 6顯示員工資料n");

printf("t7統(tǒng)計員工業(yè)績ttttt 8排序員工實發(fā)工資n");

printf("t9保存員工資料ttttt10邏輯刪除員工資料n");

printf("t0退出系統(tǒng)n");

printf("********************************************************************************n");

}

void printc() // 本函數(shù)用于輸出中文

{

printf("編號 姓名??? 性別 總完成比 旬平均 基本工資 獎金 工資總額 n");

}

void printe(Node *p)//本函數(shù)用于輸出英文

{

printf("%-5s%-10s%-4s%6.1f %6.1f? %6.1f %6.1f %6.1fn",p->data.num,p->data.name,p->data.sex,p->data.totle,p->data.ave,1000.0,p->data.jiangjin,1000+p->data.jiangjin);

}

void printstart()

{

printf("-----------------------------------------------------------------------n");

}

void Wrong() //如果錯誤

{

printf("n=====>提示:輸入錯誤!n");

}

void Nofind() //如果沒找到

{

printf("n=====>提示:沒有找到該員工!n");

}

Node* Locate(Link l,char findmess[],char nameornum[]) //該函數(shù)用于定位連表中符合要求的接點,并返回該指針

{

Node *r;

if(strcmp(nameornum,"num")==0) //按編號查詢

{

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.num,findmess)==0)

return r;

r=r->next;

}

}

else if(strcmp(nameornum,"name")==0) //按姓名查詢

{

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.name,findmess)==0)

return r;

r=r->next;

}

}

return 0;

}

.程序運行結(jié)果

1、主函數(shù)運行,顯示主菜單函數(shù)menu()

2、輸入數(shù)字2,添入兩組數(shù)據(jù)

3、如果再輸入數(shù)字2,新增一組數(shù)據(jù)并瀏覽

4、輸入數(shù)字6,瀏覽所有職工信息

5、輸入4,進行查詢程序,再輸入2 ,按姓名查詢,輸入1 ,按編號查詢

6、輸入數(shù)字5,按實發(fā)工資排序。

  • 有需要資料的可了解一下.docx
    下載

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
NC7S04P5X 1 onsemi TinyLogic HS Inverter, 3000-REEL

ECAD模型

下載ECAD模型
$0.44 查看
PS2801-1-F3-A 1 NEC Electronics Group Transistor Output Optocoupler, 1-Element, 2500V Isolation,
$0.98 查看
AFBR-5803Z 1 Foxconn Transceiver, 1270nm Min, 1380nm Max, 125Mbps(Tx), 125Mbps(Rx), SC Connector, Through Hole Mount, ROHS COMPLIANT, SIP-9
$34.98 查看

相關(guān)推薦