C语言课程设计——工资管理系统

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个字符
显示n个字符
(7)新增员工工资信息
新增员工工资信息
(8)工资信息查找
工资信息查找
(9)工资信息修改
工资信息修改
(10)工资信息删除
工资信息删除
2.main函数
程序是把main函数放在前面,放前放后并不影响,大部分c编译器默认先编译main函数,作为入口。
main函数
3.运行截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路清晰,很简单,先从外部功能函数写起,一点一点写,如有问题请私信博主。

评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Turing_number.2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值