|
|
#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();
|
|
|
}
|
|
|
|
|
|
|