要求
設(shè)計(jì)一個(gè)職工工資管理系統(tǒng):
- (1)輸入記錄:將每一個(gè)職工的姓名、ID號(hào)以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險(xiǎn)、公積金的數(shù)據(jù)作為一個(gè)記錄。該軟件能建立一個(gè)新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。
- (2)顯示記錄:根據(jù)用戶提供的記錄或者根據(jù)職工姓名顯示一個(gè)或幾個(gè)職工的各項(xiàng)工資和平均工資。
- (3)修改記錄:可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行修改并在修改前后對(duì)記錄內(nèi)容進(jìn)行顯示。
- (4)查找記錄:可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行查找并在查找前后對(duì)記錄內(nèi)容進(jìn)行顯示。
- (5)刪除記錄:可刪除數(shù)據(jù)文件中的任一記錄。?
- (6)統(tǒng)計(jì): (A)計(jì)算各項(xiàng)工資平均工資及總工資, (B)統(tǒng)計(jì)符合指定條件(如職工工資前三項(xiàng)之和在3000元以上、3000~2000元、2000~1000元) 以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。(C)按字符表格形式打印全部職工工資信息表及平均工資(包括各項(xiàng)總的平均工資)。?
- (7)保存數(shù)據(jù)文件功能。
課程設(shè)計(jì)說(shuō)明書(shū)
(1)系統(tǒng)分析:包括系統(tǒng)功能模塊劃分、數(shù)據(jù)的存儲(chǔ)和記錄屬性分析
(2)概要設(shè)計(jì):本程序功能模塊根據(jù)程序設(shè)計(jì)的要求,將程序劃分為6個(gè)模塊分別編寫(xiě)。六個(gè)模塊分別為:
1.輸入職工基本信息模塊
2.顯示職工基本信息模塊
3.修改職工基本信息模塊
4.查找職工基本信息模塊
5.刪除職工基本信息模塊?
6.統(tǒng)計(jì)職工基本信息模塊
?
源代碼?
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define N 100
struct clerk
{
int num;
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 search(); //查找
void search_num(); //按工號(hào)
void search_name(); //按姓名
void modify(); //修改
void sta(); //統(tǒng)計(jì)
void start(); //開(kāi)始
void start()
{
system("cls"); //清屏
printf("\n\n\n\n\n\n");
printf("********進(jìn)入職工工資管理系統(tǒng)**********");
}
void menu()
{
system("cls");
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 統(tǒng)計(jì) \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 8 退出 \n\n");
}
void input()
{
int i,m;
system("cls");
printf("職工人數(shù)(1--100):");
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("請(qǐng)輸入職工號(hào): ");
scanf("%d",&em[i].num);
printf("請(qǐng)輸入姓名: ");
scanf("%s",&em[i].name);
getchar();
printf("請(qǐng)輸入基本工資: ");
scanf("%d",&em[i].jbgz);
printf("請(qǐng)輸入職務(wù)工資: ");
scanf("%d",&em[i].zwgz);
printf("請(qǐng)輸入津貼: ");
scanf("%d",&em[i].jt);
printf("請(qǐng)輸入醫(yī)療保險(xiǎn): ");
scanf("%d",&em[i].yb);
printf("請(qǐng)輸入公積金: ");
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創(chuàng)建完畢!\n");
save(m);
}
void save(int m) //開(kāi)始界面
{
int i;
FILE*fp; //聲明fp是指針,用來(lái)指向FILE類型的對(duì)象
if ((fp=fopen("clerk_list","wb"))==NULL) //打開(kāi)職工列表文件為空
{
printf ("打開(kāi)失敗\n");
exit(0);
}
for (i=0;i<m;i++) //將內(nèi)存中職工的信息輸出到磁盤(pán)文件中去
if (fwrite(&em[i],sizeof(struct clerk),1,fp)!=1) //寫(xiě)入數(shù)據(jù)塊
printf("文件讀寫(xiě)錯(cuò)誤\n");
fclose(fp); //關(guān)閉文件
}
int load()
{
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); //檢測(cè)文件結(jié)束符
}
fclose(fp);
return(i-1); //返回人數(shù)
}
void display() //顯示信息
{
int i,sum=0;
int m=load();
system("cls");
printf("職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 \n");
for(i=0;i<m;i++)
{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 del()
{
int m=load();
int i,j,n,t,button;
char name[20];
printf("\n 原來(lái)的職工信息:\n");
display();
printf("\n");
printf("按姓名刪除:\n");
scanf("%s",name);
for(button=1,i=0;button&&i<m;i++) //主函數(shù)中確定button==1時(shí)各函數(shù)才可以被調(diào)用
{
if(strcmp(em[i].name,name)==0) //按員工姓名查找到某員工 并調(diào)出其資料
{
printf("\n此人原始記錄為:\n"); //顯示選定員工的信息
printf("職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 \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確定刪除 請(qǐng)按1,不刪除請(qǐng)按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)//從第i項(xiàng)開(kāi)始 將后一項(xiàng)的各成員的值賦給前一項(xiàng)各對(duì)應(yīng)的成員 完成對(duì)第i項(xiàng)的刪除
{
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)
m=m-1; //總員工數(shù)減少一人
else
printf("\n查無(wú)此人!\n");
printf("\n 刪除后的所有職工信息:\n");
save(m);
display();
printf("\n繼續(xù)刪除請(qǐng)按1,不再刪除請(qǐng)按0\n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;
}
}
void search() //查找
{
int t,button;
system("cls");
do
{
printf("\n按1 按工號(hào)查詢\n按2 按姓名查詢\n按3 回主菜單\n");
scanf("%d",&t);
if(t>=1&&t<=3)
{
button=1;
break;
}
else
{
button=0;
printf("輸入錯(cuò)誤");
}
}
while(button==0);
while(button==1)
{
switch(t) //選擇查詢方式
{
case 1:printf("按工號(hào)查詢");search_num();break;
case 2:printf("按姓名查詢");search_name();break;
case 3:button=1;break;
default:break;
}
}
}
void search_num() //按職工號(hào)查詢
{
int a;
int i,t;
int m=load();
printf("請(qǐng)輸入要查找的職工號(hào):\n");
scanf("%d",&a);
for(i=0;i<m;i++)
if(a==em[i].num)
{
printf("職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 \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對(duì)不起,查無(wú)此人\n");
printf("\n");
printf("返回查詢函數(shù)請(qǐng)按1,繼續(xù)查詢職工號(hào)請(qǐng)按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("請(qǐng)輸入姓名:\n");
scanf("%s",name);
for(i=0;i<m;i++)
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到,其記錄為:\n");
printf("職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 \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("返回查詢菜單請(qǐng)按1,繼續(xù)查詢姓名請(qǐng)按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}
}
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 原來(lái)的職工信息:\n");
display();
printf("\n");
printf("請(qǐng)輸入要修改的職工的姓名:\n");
scanf("%s",name);
for(button=1,i=0;button&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n此人原始記錄為:\n");
printf("職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 \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 ; 不修改請(qǐng)按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要進(jìn)行修改的選項(xiàng)\n 1.職工號(hào) 2.姓名 3.基本工資 4.職務(wù)工資 5.津貼 6.醫(yī)療保險(xiǎn) 7.公積金 8.返回上層\n");
printf("請(qǐng)選擇序號(hào)1-8:\n");
scanf("%d",&c);
if(c>8||c<1)
printf("\n選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
}
button=0;
}
}
if(button==1)
printf("\n查無(wú)此人\n");
do
{
switch(c)
{
case 1:printf("職工號(hào)改為: ");
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("職務(wù)工資改為: ");
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("醫(yī)療保險(xiǎn)改為: ");
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 確定修改 請(qǐng)按1 ; 重新修改 請(qǐng)按2: \n");
scanf("%d",&b);
}
while(b==2);
printf("\n修改后的所有職工信息:\n");
printf("\n");
save(m);
display();
printf("\n按1 繼續(xù)修改 ,不再修改請(qǐng)按0\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}
}
void sta() //統(tǒng)計(jì)
{
int i;
int sum=0;
int a=0,b=0,c=0;
int m=load();
system("cls");
for(i=0;i<m;i++)
{sum+=em[i].total;
if((em[i].total)<=2000&&em[i].total>=1000)
{a++;}
if(em[i].total>2000&&em[i].total<=3000)
{b++;}
if(em[i].total>3000)
{c++;}
}
printf("\n\n工資總額為:%d\n",sum);
printf("平均工資為:%d\n",sum/m);
printf("\n基本工資、職務(wù)工資、津貼之和\n");
printf("在1000-2000圓的員工占總員工的百分之%d\n",a*100/m);
printf("在2000-3000圓的員工占總員工的百分之%d\n",b*100/m);
printf("在3000圓以上的員工占總員工的百分之%d\n",c*100/m);
printf("\n\n按任意鍵繼續(xù)");
getch();
menu();
}
void main()
{
int n,button;
start();
getch();
menu();
do
{
printf("功能選擇(1--7):");
scanf("%d",&n);
if(n>=1&&n<=7)
{
button=1;
break;
}
else
{
button=0;
printf("您輸入有誤,請(qǐng)重新選擇!");
}
}
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:modify();break;
case 6:sta();break;
case 7:exit(0);break;
default :break;
}
getchar();
printf("\n");
printf("按任意鍵繼續(xù)\n");
getch();
system("cls");
menu();
printf("功能選擇(1--7):");
scanf("%d",&n);
printf("\n");
}
}
設(shè)計(jì)心得?
?這兩周的c語(yǔ)言課程設(shè)計(jì),我加深了對(duì)c語(yǔ)言程序設(shè)計(jì)的理解,使自己的操作更加熟練,發(fā)現(xiàn)了自己的不足,為自己今后的繼續(xù)學(xué)習(xí)指明了方向。在我看來(lái),考試考察的僅僅是個(gè)別知識(shí)點(diǎn),而課程設(shè)計(jì)就比較的全面。雖然說(shuō)只是做了一個(gè)程序,但是其中運(yùn)用到的知識(shí)確實(shí)很多所學(xué)到的內(nèi)容,很好的考驗(yàn)了我們的綜合能力。在這次課程設(shè)計(jì)中,我鞏固所了學(xué)過(guò)的知識(shí),能用匯編語(yǔ)言熟練地運(yùn)用順序、選擇、循環(huán)三大結(jié)構(gòu),進(jìn)一步掌握結(jié)構(gòu)體數(shù)組的使用,文件函數(shù)的使用,掌握了子程序的定義及調(diào)用。并在調(diào)試過(guò)程中不斷發(fā)現(xiàn)與改正錯(cuò)誤,完善算法,改進(jìn)用戶體驗(yàn)等等。調(diào)試索然繁瑣而艱苦,但極大的促進(jìn)了我編程能力的提高。由于自己目前能力有限,該程序還有諸多不足,感謝指正。感謝老師的悉心教導(dǎo)與細(xì)致的幫助。雖然c語(yǔ)言的課程與課程設(shè)計(jì)都已結(jié)束,但通過(guò)這次課程設(shè)計(jì)我也發(fā)現(xiàn)了差距,并將在未來(lái)努力學(xué)習(xí),積極實(shí)踐,使自己能真正的掌握運(yùn)用c語(yǔ)言。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-495834.html
附件:源碼下載
計(jì)算機(jī)課程設(shè)計(jì)-C語(yǔ)言課程設(shè)計(jì)職工工資管理系統(tǒng).zip-C文檔類資源-CSDN文庫(kù)https://download.csdn.net/download/NBITer/87372935?spm=1001.2014.3001.5503文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495834.html
到了這里,關(guān)于C語(yǔ)言課程設(shè)計(jì)_職工工資管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!