C语言课程设计——工资管理系统
不讲废话,直接上代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100 //最大员工人数
int NN; //实际员工人数
struct employee
{
char num[6]; //工号
char name[8]; //姓名
char sex[4]; //性别
char unit[20]; //单位
char tele[15]; //电话
int base; //基本工资//
int jt; //津贴
int kk; //扣款
int sfgz; //实发工资
}emp[N];
void Info_In(); //导入员工工资信息
void Info_Save(); //保存工资信息
void Info_Locate(); //查找
void Info_Append(); //新增工资信息
void Info_Modify(); //信息修改
void Info_Delete(); //删除工资信息
void display(); //显示所有员工工资信息
void disp_row(struct employee temp);//显示一个员工信息
void Disp_Title(); //显示表头
void disp_str(char ch,int n); //显示n个字符信息
//系统主模块
int main()
{
int choice;
Info_In(); //导入员工信息文件
while(1)
{
printf("\n\n");
disp_str(' ',35);
printf("工资管理系统\n");
disp_str('*',92);
putchar('\n');
disp_str(' ',36);
printf("1.显示工资信息\n");
disp_str(' ',36);
printf("2.新增工资信息\n");
disp_str(' ',36);
printf("3.查找工资信息\n");
disp_str(' ',36);
printf("4.修改工资信息\n");
disp_str(' ',36);
printf("5.删除工资信息\n");
disp_str(' ',36);
printf("6.退出\n");
disp_str('*',92);
putchar('\n');
printf("请输入代码选择(1-6): ");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
display();
break;
case 2:
Info_Append();
break;
case 3:
Info_Locate();
break;
case 4:
Info_Modify();
break;
case 5:
Info_Delete();
break;
case 6:
Info_Save();
printf("谢谢使用!\n");
exit(0);
default:
system("cls");
continue;
}
}
}
//导入员工信息
void Info_In()
{
int n=0;
struct employee temp;
FILE *fp;
if((fp=fopen("工资.txt","r"))==NULL)
{
printf("can't open file!\n");
return ;
}
while(fscanf(fp,"%s%s%s%s%s%d%d%d%d",temp.num,temp.name,temp.sex,
temp.unit,temp.tele,&temp.base,&temp.jt,&temp.kk,&temp.sfgz)!=EOF)
emp[n++]=temp;
NN=n;
printf("系统工资信息已导入!共 %d 人!\n",NN);
}
//显示信息表头
void Disp_Title()
{
printf("%-6s%-8s %-4s %-15s %-11s %-10s %-7s%-7s%-7s\n","工号","姓名","性别","单 位","电 话 ","基本工资","津贴","扣款"," 实发工资");
}
//显示一条信息
void disp_row(struct employee temp)
{
printf("%-6s",temp.num);
printf("%-8s ",temp.name);
printf("%-4s ",temp.sex);
printf("%-15s ",temp.unit);
printf("%-11s ",temp.tele);
printf("%-10d ",temp.base);
printf("%-8d ",temp.jt);
printf("%-8d ",temp.kk);
printf("%-8d\n",temp.sfgz);
}
//保存工资信息
void Info_Save()
{
FILE *fp;
int i=0,k=0;
if((fp=fopen("工资.txt","w"))==NULL)
{
printf("can't open file!\n");
return ;
}
while(i<NN )
{
fprintf(fp,"%-6s %-8s %-4s %-20s %-11s %-10d %-8d %-8d %-8d\n",emp[i].num,emp[i].name,emp[i].sex,emp[i].unit,emp[i].tele,emp[i].base,emp[i].jt,emp[i].kk,emp[i].sfgz);
i++;
}
printf("系统工资信息已保存!共 %d 人!\n",NN);
fclose(fp);
}
//显示所有员工工资信息
void display()
{
char ch;
int i,n=0;
printf("\n\n");
printf("系统共有%d个员工工资信息\n",NN);
disp_str('*',92);
putchar('\n');
Disp_Title();
for(i=0;i<NN;i++)
{
disp_row(emp[i]);
if((i+1)%10==0) //每屏显示10条信息
{
disp_str('*',92);
printf("\n");
printf("按回车键继续显示下屏,按其他键结束显示!\n");
printf("请按键......");
ch=getchar();
if(ch!='\n')
break;
}
}
disp_str('*',92);
printf("\n\n工资信息显示结束,按任意键键继.....");
getchar();
system("cls");
return ;
}
//显示n个字符信息
void disp_str(char ch,int n)
{
int i;
for(i=0;i<n;i++)
printf("%c",ch);
return ;
}
//新增员工工资信息
void Info_Append()
{
struct employee temp;
char ch='Y',num[6];
int i,flag;
while(ch=='Y'||ch=='y')
{
printf("\n\n");
flag=0;
printf("请输入新增员工个人信息\n\n");
printf("工号: ");
gets(num);
for(i=0;i<NN;i++)
if(strcmp(num,emp[i].num)==0) flag=1;
if(!flag)
{
strcpy(temp.num,num);
printf("姓名: ");
gets(temp.name);
printf("性别: ");
gets(temp.sex);
printf("单位: ");
gets(temp.unit);
printf("电话: ");
gets(temp.tele);
printf("基本工资: ");
scanf("%d",&temp.base);
printf("津贴: ");
scanf("%d",&temp.jt);
printf("扣款: ");
scanf("%d",&temp.kk);
getchar();
temp.sfgz=temp.base+temp.jt-temp.kk;
emp[i]=temp;
NN++;
Info_Save(); //保存系统信息
printf("是否继续输入信息(Y/N):");
scanf("%c",&ch);
getchar();
continue;
}
else
{
printf("系统已有工号为 %s 的员工!请重新编号!\n\n",num);
return;
}
}
return ;
}
//工资信息查找
void Info_Locate()
{
char name[8],num[6];
int i,n=0,flag,ch;
while(1)
{
flag=0;
putchar('\n');
disp_str(' ',18);
printf("查询员工信息\n");
disp_str('*',92);
putchar('\n');
disp_str(' ',17);
printf("1.按名字查询\n");
disp_str(' ',17);
printf("2.按工号查询\n");
disp_str(' ',17);
printf("3.返回上一层\n");
disp_str('*',92);
putchar('\n');
printf("请输入代码选择(1-3):");
scanf("%d",&ch);
getchar();
if(ch==1)
{
printf("请输入要查找的姓名:");
gets(name);
for(i=0;i<NN;i++)
if(strcmp(emp[i].name,name)==0)
{
flag=1;
putchar('\n');
Disp_Title();
disp_row(emp[i]);
}
if(!flag)
printf("没有找到符合的记录!\n");
printf("\n按任意键返回...");
getchar();
}
else if(ch==2)
{
printf("请输入要查找的工号:");
gets(num);
for(i=0;i<NN;i++)
{
if(strcmp(emp[i].num,num)==0)
{
flag=1;
putchar('\n');
Disp_Title();
disp_row(emp[i]);
}
}
if(!flag)
printf("没有找到符合的记录!\n");
printf("\n按任意键返回...");
getchar();
}
else if(ch==3)
{
system("cls");
return;
}
}
}
//工资信息修改(工号不可修改)
void Info_Modify()
{
char num[6];
int i,flag,ch;
while(1)
{
flag=0;
printf("请输入待修改员工工号:");
gets(num);
for(i=0;i<NN;i++)
if(strcmp(num,emp[i].num)==0)
{
flag=1;
break;
}
if(flag)
{
printf("该员工信息为:\n");
Disp_Title();
disp_row(emp[i]);
printf("\n请输入新的信息:\n");
printf("姓名: ");
gets(emp[i].name);
printf("性别: ");
gets(emp[i].sex);
printf("单位: ");
gets(emp[i].unit);
printf("电话: ");
gets(emp[i].tele);
printf("基本工资: ");
scanf("%d",&emp[i].base);
printf("津贴: ");
scanf("%d",&emp[i].jt);
printf("扣款: ");
scanf("%d",&emp[i].kk);
getchar();
emp[i].sfgz=emp[i].base+emp[i].jt-emp[i].kk;
printf("修改后的信息如下:\n");
disp_row(emp[i]);
Info_Save(); //保存系统信息
}
else
printf("该员工不存在!\n");
printf("继续修改(Y/N)?");
ch=getchar();
getchar();
if(ch!='Y' && ch!='y') break;
}
}
//工资信息删除
void Info_Delete()
{
char num[6];
int i,j,flag,ch;
while(1)
{
flag=0;
printf("请输入待删除员工工号:");
gets(num);
for(i=0;i<NN;i++)
if(strcmp(num,emp[i].num)==0)
{
flag=1;
break;
}
if(flag)
{
printf("该员工信息为:\n");
Disp_Title();
disp_row(emp[i]);
printf("确认删除(Y/N)? ");
ch=getchar();
getchar();
if(ch=='Y' || ch=='y')
{
for(j=i;j<NN-1;j++)
emp[j]=emp[j+1];
NN--;
printf("删除成功!\n");
Info_Save(); //保存系统信息
}
break;
}
else
{
printf("该员工不存在!\n");break;
}
}
}
txt文档
1001 张三 男 安大 13905551234 10000 1000 100 10900
1002 李四 女 合工大 13905551235 2000 200 20 2180
1003 王五 男 山东大学 13905551236 4000 400 40 4360
1005 方七 男 上海大学 13905551238 3050 35 10 3075
1006 赵八 男 西北大学 13905551239 6000 600 60 6540
1010 LILI nan nu 321 3000 300 30 3270
正文:
1.外部函数
(1)导入员工信息
(2)显示信息表头
(3)显示一条信息
(4)保存工资信息
(5)显示所有员工工资信息
(6)显示n个字符
(7)新增员工工资信息
(8)工资信息查找
(9)工资信息修改
(10)工资信息删除
2.main函数
程序是把main函数放在前面,放前放后并不影响,大部分c编译器默认先编译main函数,作为入口。
3.运行截图
思路清晰,很简单,先从外部功能函数写起,一点一点写,如有问题请私信博主。