You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zhigong123/职工工资管理系统终极末日版.cpp

470 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<windows.h>
FILE *fp;//文件指针
int i_entry=0;//职工的人数统计
#define MIN_C 100//每个数据对应字符串类型占据的大小
#define MAX_G 1000//职工信息量大小
struct student {
char ID[MIN_C];//职工学号
char name[MIN_C];//职工姓名
char basesalary[MIN_C];//职工基本工资
char dutywage[MIN_C];//职工职务工资
char postallowance[MIN_C];//职工津贴
char accumulationfund[MIN_C];//公积金
char medicalinsurance[MIN_C];//职工医疗保险
int totalwage;//总工资
}DATA[MAX_G];
struct student temp[1000];//用于排序的中间变量
struct student are;
//被调函数
void init();//文件的初始化读入
void GREEN();//控制台颜色为绿色
void RED();//控制台调整前景色为红色
void LIGHT();//控制台调整前景色为强光
void deal();//处理数据
//dell()函数包含的自定义函数
void notice();//提示信息
void case1();//职工综合信息录入
void entry();
void file_save();
void case2();//职工综合信息浏览
void i_printf();
void case3();//综合信息排序浏览
void ID_sort(int I,int L);
void name_sort(int I,int L);
void case4();//职工个人信息查询
void ID_find();
void name_find();
void case5();//职工综合信息修改
void Change(int x);
void case6();//职工信息的删除
int main()
{ GREEN();
printf(">********* 您好 ><欢迎使用职工信息管理系统 *********<\n");
printf(">******尊敬的用户请输入正确的密码超过4次错误将退出系统哦\n");
int u=3;
char s[15];
while(u--)
{if(u==2)
printf("您好,请输入正确密码 ") ;
else
printf("您好,您的密码有误,请重新输入");
scanf("%s",s);
if(strcmp("123456789",s)==0)
{
break;
}
else
continue;
}
if(u==0)
{ GREEN();
printf(" 》****** 您好您的密码输入有误sorry\n");
return 0;
}
else
{
if((fp=fopen("student_data.txt","r+"))==NULL)
{
printf("FILE\n");
fp=fopen("student_data.txt","w+");
}
init();//文件的初始化读入
LIGHT();
printf("当前总人数:%d\n",i_entry);
GREEN();//控制台颜色为绿色
printf(">********** 欢迎您使用职工信息管理系统1.1 **********<\n");
printf(">********** 请输入以下命令行所对应的数字进行操作: **********<\n");
printf(">**********请确定正确退出程序,否则文件将不能被正常保存。**********<\n");
deal();//处理数据
fclose(fp);//文件正常关闭
return 0;
}}
void init() //文件的初始化读取
{
while (!feof(fp))
{
fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",DATA[i_entry].ID, DATA[i_entry].name,DATA[i_entry].basesalary,
DATA[i_entry].dutywage, DATA[i_entry].postallowance, DATA[i_entry].medicalinsurance, DATA[i_entry].accumulationfund, DATA[i_entry].totalwage);
i_entry++;
}
}
void RED() {//控制台调整前景色为红色
HANDLE kai_1 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_1, FOREGROUND_INTENSITY | FOREGROUND_RED); // 为红色
}
void GREEN() {//控制台调整前景色为绿色
HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_GREEN);// 为绿色
}
void LIGHT(){
HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);// 为强光
}
void deal() {//主要处理函数
int k,flag,p;
p=1;
notice();
flag=1;
while(flag) {
if(p>1)
{
system("cls");
notice();
}
scanf("%d",&k);
system("cls");
switch(k) {
case 0: {
puts("温馨提醒:");
puts("\t ^…………^……^^谢谢您的支持,欢迎再次使用!^^……^…………^ ");
puts("\t*******职工基本信息已保存在当前目录文件 student_data.txt 下********");
flag=0;
LIGHT();
break;
}
case 1: {
case1();
break;
}
case 2: {
case2();
break;
}
case 3: {
case3();
break;
}
case 4: {
case4();
break;
}
case 5: {
case5();
break;
}
default: {
RED();
printf("请正确键入命令前数字!\n");
GREEN();
break;
}
}
p=1103;
puts("\n");
}
}
void notice() {//提示信息
RED();
puts("\t\t\t1.职工综合信息输入");
puts("\t\t\t2.职工综合信息显示");
puts("\t\t\t3.职工综合信息统计");
puts("\t\t\t4.职工个人信息查询");
puts("\t\t\t5.职工综合信息修改");
printf("\t\t\t0. 退 出 系 统\n");
GREEN();
printf("请键入:");
}
//11111111111
void case1() {//学生综合信息录入
int flag;
flag=1;
while(flag) {
entry();
LIGHT();
printf("提示1,继续录入0,录入完成.是否继续录入:");
GREEN();
scanf("%d",&flag);
i_entry++;
}
}
void entry() {//职工信息的录入
int flag,i;
system("cls");
init();
flag=1;
puts("***************>>>>>>当前模式为职工信息录入状态<<<<<<*************");
printf("请输入职工ID号");
flag=1;//标识变量,用以判断该信息是否已存在
scanf("%s",&DATA[i_entry].ID);
for(i=0; i<i_entry; i++) //判断输入数据的正误,即文件中是否已存在该信息
if(strcmp(DATA[i].ID,DATA[i_entry].ID)==0) {
flag=0;
break;
}
if(flag==1) {
printf("请输入职工姓名:");
scanf("%s",DATA[i_entry].name);
printf("请输入职工基本工资:");
scanf("%s",DATA[i_entry].basesalary);
printf("请输入职工职务工资:");
scanf("%s",DATA[i_entry].dutywage);
printf("请输入职工津贴:");
scanf("%s",DATA[i_entry].postallowance);
printf("请输入职工医疗保险:");
scanf("%s",DATA[i_entry].medicalinsurance);
printf("请输入职工公积金:");
scanf("%s",DATA[i_entry].accumulationfund);
printf("请输入职工总工资:");
scanf("%s",DATA[i_entry].totalwage);
file_save();
}
if(flag==0)
puts("该ID已经存在如需修改请转到修改命令");
}
void file_save() {//信息以文件格式录入函数
fprintf(fp, "%s\t\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",DATA[i_entry].ID, DATA[i_entry].name,DATA[i_entry].basesalary,
DATA[i_entry].dutywage, DATA[i_entry].postallowance, DATA[i_entry].medicalinsurance, DATA[i_entry].accumulationfund, DATA[i_entry].totalwage);
printf("保存成功!");
}
//2222222222222
void case2() {//职工综合信息显示
puts("***************>>>>>>当前模式为职工信息显示状态<<<<<<*************");
i_printf();
}
void i_printf() {//职工信息的输出
int i,k=1;
//printf("ID\t姓名\t基本工资\t职务工资\t津贴\t医疗保险\t公积金\t总工资");
printf("\n");
if(k)
{
for(i=0; i<i_entry; i++)
{
printf("ID%-18s\n",&DATA[i].ID);
printf("姓名:%-16s\n",DATA[i].name);
printf("基本工资:%-4s\n",&DATA[i].basesalary);
printf("职务工资:%-6s\n",DATA[i].dutywage);
printf("津贴:%-6s\n",&DATA[i].postallowance);
printf("医疗保险:%-6s\n",DATA[i].medicalinsurance);
printf("公积金:%-6s\n",DATA[i].accumulationfund);
printf("总工资:%-6s\n\n",DATA[i].totalwage);
}
LIGHT();
printf("提示退出请按0并按回车键。\n");
scanf("%d",&k);
}
}
void case3()//职工信息统计
{
int z,a=0,b=0,c=0;
//p=emp;
for(z=0;z<i_entry;z++)
{
if(DATA[z].totalwage>3000)
{
a++;
continue;
}
if(DATA[z].totalwage>=2000&&DATA[z].totalwage<=3000)
{
b++;
continue;
}
if(DATA[z].totalwage<=2000&&DATA[z].totalwage>0)
{
c++;
continue;
}
}
printf(" 总工资在3000元以上的职工人数有 %d\n\n",a);
printf(" 总工资在2000元至3000元的职工人数有%d\n\n",b);
printf(" 总工资在2000元以下的职工人数有 %d\n\n",c);
//getchar();
}
//444444444444444
void case4() {//职工个人信息查询
int v;
LIGHT();
printf("提示1,按照ID查询2,按照姓名查询.请键入:");
GREEN();
scanf("%d",&v);
if(v==1) {
ID_find();
}
if(v==2) {
name_find();
}
}
void ID_find() {//ID查找 利用strcmp()函数
int i,flag=0,k;
char wqs[MIN_C];
k=1;
system("cls");
puts("***************>>>>>>当前模式以ID查询信息状态<<<<<<*************");
while(k) {
printf("请键入职工ID ");
scanf("%s",wqs);
for(i=0; i<i_entry; i++)
if(strcmp(DATA[i].ID,wqs)==0)
{
printf("ID%-18s\n",&DATA[i].ID);
printf("姓名:%-16s\n",DATA[i].name);
printf("基本工资:%-4s\n",&DATA[i].basesalary);
printf("职务工资:%-6s\n",DATA[i].dutywage);
printf("津贴:%-12s\n",&DATA[i].postallowance);
printf("医疗保险:%-16s\n",DATA[i].medicalinsurance);
printf("公积金:%-16s\n",DATA[i].accumulationfund);
printf("总工资:%-15s\n\n",DATA[i].totalwage);
flag=1;
}
if(flag==0)
puts("未查找到该职工信息,如需录入信息请重新键入命令.");
LIGHT();
puts("请按照文字提示键入命令:");
printf("\t\t1.继续查询\n\t\t0.退出查询\n请键入命令:");
GREEN();
scanf("%d",&k);
}
}
void name_find() {//姓名查找 利用函数strcmp()==0 的特性
int i,flag=0,k;
char wqs[MIN_C];
k=1;
system("cls");
puts("***************>>>>>>当前模式以姓名查询信息状态<<<<<<*************");
while(k) {
printf("请键入职工姓名: ");
scanf("%s",wqs);
for(i=0; i<i_entry; i++)
if(strcmp(DATA[i].name,wqs)==0) {
printf("ID%-18s\n",&DATA[i].ID);
printf("姓名:%-16s\n",DATA[i].name);
printf("基本工资:%-4s\n",&DATA[i].basesalary);
printf("职务工资:%-6s\n",DATA[i].dutywage);
printf("津贴:%-12s\n",&DATA[i].postallowance);
printf("医疗保险:%-16s\n",DATA[i].medicalinsurance);
printf("公积金:%-16s\n",DATA[i].accumulationfund);
printf("总工资:%-15s\n\n",DATA[i].totalwage);
flag=1;
}
if(flag==0)
puts("未查找到该职工信息,如需录入信息请重新键入命令.");
LIGHT();
puts("请按照文字提示键入命令:");
printf("\t\t1.继续查询\n\t\t0.退出查询\n请键入命令:");
GREEN();
scanf("%d",&k);
}
}
//55555555555
void case5() {//职工综合信息修改
int flag,i,t;
system("cls");
puts("***************>>>>>>当前模式为职工信息修改状态<<<<<<*************");
LIGHT();
printf("选定检索方式1.ID检索\t2.姓名检索. 请键入:");
GREEN();
flag=0;
scanf("%d",&t);
if(t==2) {
LIGHT();
init();
printf("请输入需要修改的职工姓名:");
scanf("%s",&DATA[i_entry].name);
GREEN();
for(i=0; i<i_entry; i++) //判断输入数据的正误
if(strcmp(DATA[i].name,DATA[i_entry].name)==0) {
flag=1;
break;
}
if(flag==1) {
Change(i);
}
if(flag==0)
puts("该姓名不存在,请检查输入是否有误!");
}
if(t==1) {
LIGHT();
init();
printf("请输入需要修改的职工ID");
scanf("%s",&DATA[i_entry].ID);
GREEN();
for(i=0; i<i_entry; i++) //判断输入数据的正误
if(strcmp(DATA[i].ID,DATA[i_entry].ID)==0) {
flag=1;
break;
}
if(flag==1) {
Change(i);
}
if(flag==0)
puts("该ID不存在请检查输入是否有误");
}
}
void Change(int x) {//职工信息的更改提示内容
printf("请输入修改后的职工ID");
scanf("%s",DATA[x].ID);
printf("请输入修改后的职工姓名:");
scanf("%s",DATA[x].name);
printf("请输入修改后的职工基本工资:");
scanf("%s",DATA[x].basesalary);
printf("请输入修改后的职工职务工资:");
scanf("%s",DATA[x].dutywage);
printf("请输入修改后的职工津贴:");
scanf("%s",DATA[x].postallowance);
printf("请输入修改后的职工医疗保险:");
scanf("%s",DATA[x].medicalinsurance);
printf("请输入修改后的职工公积金:");
scanf("%s",DATA[x].accumulationfund);
printf("请输入修改后的职工总工资:");
scanf("%s",DATA[x].totalwage);
puts("数据修改完成!");
file_save();
}