小型工资管理系统
好像不能丝滑的运行,求修改
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
//建立关于工资的结构体
struct pay
{
double basic_pay; //基本工资
double add_pay; //绩效工资
double all_pay; //应付工资
};
//建立关于工作人员的结构体
struct staff
{
int id; //工号
char name[20]; //姓名
char gender[10]; //性别
char dep[20]; //所在部门
char rank[20]; //级别
int add_time; //加班时长
double reward_pay; //奖金
struct pay rests; //成员rests属于struct pay类型
}data[999] = {
{2101,"张三","男","技术部","一",10,1000},
{2102,"李四","男","运维部","二",11,2000},
{2103,"陆五","男","网安部","三",12,1500},
{2104,"王六","女","技术部","二",23,1200},
{2105,"卜七","男","网安部","一",13,1300},
{2106,"徐九","男","运维部","三",14,1600},
{2107,"刘九","男","技术部","二",15,1900},
{2108,"杨零","男","技术部","二",16,2000},
{2109,"孙一","女","技术部","一",17,1100},
{2110,"孙亿","女","网安部","一",18,1400},
};//自建一个数据库
//定义一个全局的数据库长度
int lenth = 10;
//建立关于管理员的结构体
typedef struct The_users
{
char id[20]; //账号
char pwd[20]; //密码
long phone; //电话号码为长整型
}users;
int processdata(); //定义数据处理函数 process date
void MENU1(); //主菜单
void MENU2();//二级菜单
void Exit(); //退出
void MENU1_choose();//菜单1选择
void MENU2_choose();//菜单2选择
void Register();//注册
void Create_File();//创建储存用户账号密码的文件
int create(); //增
int del(); //删
int edit(); //改
int process(); //处理
int req(); //查
int line(); //排
int showall(); //查询全部
//主菜单(登陆或者注册)
void MENU1()
{
printf("\n\n\n\n\t\t\t\t\t================================\n");
printf("\t\t\t\t\t 工 资 管 理 系 统 \n");
printf("\t\t\t\t\t 1.管理员登陆 \n");
printf("\t\t\t\t\t 2.管理员注册 \n");
printf("\t\t\t\t\t 0.退 出 \n");
printf("\t\t\t\t\t================================\n");
}
//二级菜单
void MENU2()
{
printf("\n\n\n\n\t\t\t\t\t================================\n");
printf("\t\t\t\t\t 工 资 管 理 系 统 \n");
printf("\t\t\t\t\t 1.数据处理 \n");
printf("\t\t\t\t\t 2.数据输出 \n");
printf("\t\t\t\t\t 0.退 出 \n");
printf("\t\t\t\t\t================================\n");
}
//退出
void Exit()
{
int i=0;
system("cls");
char a[20]="LOVE you,byebye^_^";
system("color 03");
printf("\n\n\n\t\t\t");
while(a[i])
{
printf("%c",a[i]);
Sleep(100);
i++;
}
}
//创建储存用户账号密码的文件
void Create_File()
{
FILE *fp;
if((fp = fopen("users.txt","rb"))==NULL)
{
if((fp = fopen("users.txt","wb+"))==NULL)
{
printf("注册失败!\n");
exit(0);
}
}
}
//注册
void Register()
{
users a,b; //定义结构体a,b
FILE *fp;
char temp[20];
int count = 0;
printf("欢迎注册!\n");
Sleep(1000);//暂停1000毫秒
fp = fopen("users.txt","r");
fread(&b, sizeof(struct The_users), 1, fp);//读入一个结构体字符块到b
printf("请输入账号:\n");
scanf("%s",&a.id);
while (1)
{
if (strcmp(a.id, b.id)) //如果两串不相等
{
if (!feof(fp)) //如果未到文件尾 feof()判断文件是否结束
{
fread(&b, sizeof(struct The_users), 1, fp);
}
else
break;
}
else
{
printf("此用户名已存在!请重新注册!\n");
Sleep(1000);//暂停1000毫秒
fclose(fp);//关闭文件
return;
}
}
printf("请输入电话号码:\n");
scanf("%ld",&a.phone);
printf("请输入密码\n");
scanf(" %s",&a.pwd);
printf("请确认密码\n");
scanf(" %s",&temp);
do{
if(!strcmp(a.pwd,temp))
{
fp = fopen("users.txt","a");//写入文件
fwrite(&a, sizeof(struct The_users), 1, fp);//读入一个结构体字符块到a
printf("账号注册成功,请登录!\n");
system("pause");//暂停
system("cls");//清屏
MENU1();//重新进入一级菜单
return;
}
else{
printf("两次密码不匹配!请重新输入!\n");
scanf("%s",&a.pwd);
printf("请确认密码\n");
scanf("%s",&temp);
}
}while(1);
}
//登陆
void login()
{
users a,b;//定义结构体The_users别名
FILE *fp;
printf("欢迎来到登录界面!\n");
Sleep(1000);//暂停1000毫秒
fp = fopen("users.txt","r");
fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 写入b
printf("请输入账号\n");
scanf("%s",&a.id);
while (1)
{
if (strcmp(a.id, b.id)==0) //如果有此用户名
{
break;
}
else
{
if (!feof(fp)) //如果文件没有读完
{
fread(&b, sizeof(struct The_users), 1, fp);
}
else
{
printf("此用户名不存在,请重新输入!\n");
Sleep(500);
fclose(fp);
return;
}
}
}
printf("请输入密码\n");
scanf("%s",&a.pwd);
do{
if (strcmp(a.pwd, b.pwd)==0) //对比密码 如果密码匹配
{
fclose(fp);
printf("登录成功,欢迎使用!");
system("pause");//暂停
system("cls");//清屏
MENU2_choose();//进入二级菜单
return;
}
else
{
printf("密码不正确!请重新输入密码\n");
scanf("%s",&a.pwd);
}
}while(strcmp(a.pwd, b.pwd)==0);
}
//修改菜单及修改选择
int processdata()
{
int order;
while(1)
{
printf("****************************\n");
printf("数据处理菜单:\n");
printf("1.输入员工信息\n");
printf("2.删除员工信息\n");
printf("3.修改员工信息\n");
printf("4.处理员工信息\n");
printf("5.显示所有员工信息\n");
printf("6.退出\n");
printf("****************************\n");
printf("---请输入菜单项:---\n");
scanf("%d",&order);
if(order==6)
{
Sleep(1000);//暂停1000毫秒
Exit();//退出
return 0;
}
switch(order){
case 1: create();break;
case 2: del();break;
case 3: edit();break;
case 4: process();break;
case 5: showall(); break;
default: printf("\n404 NOT FOUND!"); getchar(); getchar(); system("cls");
}
}
return 0;
}
//增添信息
int create()
{
int i;
i = lenth;
printf("\n");
printf("新增员工工号:");
scanf("%d", &data[i].id);
printf("\n");
printf("新增员工姓名:");
scanf("%s", &data[i].name);
printf("\n");
printf("新增员工性别:");
scanf("%s", &data[i].gender);
printf("\n");
printf("新增员工所属部门:");
scanf("%s", &data[i].dep);
printf("\n");
printf("新增员工级别:");
scanf("%s", &data[i].rank);
printf("\n");
printf("新增员工加班时间:");
scanf("%d", &data[i].add_time);
printf("\n");
printf("新增员工奖金:");
scanf("%lf", &data[i].reward_pay);
printf("\n");
process();//计算处理信息
printf("创建成功!\n");
lenth++;
getchar();
getchar();//读取接下来的两个字符,起暂停的作用
system("cls");//清屏
processdata();
return 0;
}
//删除信息
int del()
{
int i = lenth;
int num;
printf("\n按0返回");
printf("\n请输入删除员工工号:");
scanf("%d", &num);
for(int j=0; j<=i+1; j++)
{
if(num==0)
processdata();
break;
if(num==data[j].id)
{
for( ;j<=i-j; j++){
data[j] = data[j+1];
}
lenth--;
printf("\n删除成功!\n");
break;
}
if(j==i+1)
{
printf("\n查无此人!\n");
break;
}
}
getchar();
getchar();
system("cls");
return 0;
}
//修改信息
int edit()
{
int i = lenth;
int num;
printf("\n请输入需要修改的员工工号:");
scanf("%d", &num);
printf("\n");
for(int j=0; j<=i+1; j++)
{
if(num==data[j].id)
{
printf("修改姓名:");
scanf("%s", &data[j].name);
printf("\n");
printf("修改性别:");
scanf("%s", &data[j].gender);
printf("\n");
printf("修改所属部门:");
scanf("%s", &data[j].dep);
printf("\n");
printf("修改级别:");
scanf("%s", &data[j].rank);
printf("\n");
printf("修改加班时长:");
scanf("%d", &data[j].add_time);
printf("\n");
printf("修改奖金:");
scanf("%d", &data[j].reward_pay);
printf("\n");
process();//计算处理信息
printf("修改成功!\n");
system("pause");//暂停
system("cls");//清屏
showall();//转到 查询全部
break;
}
if(j==i+1){
printf("\n查无此人!\n");
break;
}
}
system("pause");//暂停
system("cls");
return 0;
}
//计算处理信息
int process()
{
int i = 0;
while(data[i].rank!="\0")
{
/*按照级别分配基本工资*/
if(data[i].rank == "一" )
data[i].rests.basic_pay = 8000;
if(data[i].rank == "二" )
data[i].rests.basic_pay = 9000;
if(data[i].rank == "三" )
data[i].rests.basic_pay = 10000;
/*按照加班时间计算绩效工资*/
data[i].rests.add_pay = data[i].add_time * 50;
i++;
}
data[i].rests.all_pay = data[i].rests.basic_pay + data[i].rests.add_pay + data[i].reward_pay;
}
//cmp函数的返回值,<0(不进行置换),>0(进行置换),0(不进行置换)。
int cmp(const void *a, const void *b) //const是C/C++中的类型修饰符。节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。
{
return *(int*)a - *(int*)b; //由小到大排序
//return *(int *)b - *(int *)a; 由大到小排序
}
//员工信息排序输出
int line()
{
int i;
int id_data[100];
i = lenth;
char* str[11] = {"工号", "姓名", "性别", "部门", "级别" , "加班时长" , "基本工资" , "绩效工资", "奖金", "应发工资"};
for(int j = 0; j<i; j++)
{
id_data[j] = data[j].id;
}
qsort(id_data, i, sizeof(id_data[0]) , cmp);//qsort就是C语言中的快排函数
printf("\n排序成功!\n\n") ;
//数据表的字段输出
for(int n=0; n<8; n++){
printf("%-12s" , str[n]);
}
printf("\n\n");
//数据排序输出
for(int n1 = 0; n1<i; n1++)
{
for(int n2 = 0; n2<i; n2++ )
{
if(id_data[n1] == data[n2].id)
{
printf(" %-10d", data[n2].id);
printf(" %-10s", data[n2].name);
printf(" %-10s", data[n2].gender);
printf("%-10s", data[n2].dep);
printf(" %-10s", data[n2].rank);
printf(" %-10d", data[n2].add_time);
printf(" %-10d", data[n2].rests.basic_pay);
printf(" %-10d", data[n2].rests.add_pay);
printf(" %-10d", data[n2].reward_pay);
printf(" %-10d", data[n2].rests.all_pay );
printf("\n\n");
}
}
}
getchar();
getchar();
system("cls");
return 0;
}
//查询员工信息
int req()
{
int i = lenth;
int num;
char* str[11] = {"工号", "姓名", "性别", "部门", "级别" , "加班时长" , "基本工资" , "绩效工资", "奖金", "应发工资"};
printf("\n请输入需要查询员工工号:");
scanf("%d", &num);
printf("\n\n");
for(int n=0; n<11; n++)
{
printf("%-12s" , str[n]);
}
printf("\n\n");
for(int j=0; j<=i+1; j++)
{
if(num==data[j].id)
{
printf(" %-10d", data[j].id);
printf(" %-10s", data[j].name);
printf(" %-10s", data[j].gender);
printf("%-10s", data[j].dep);
printf(" %-10s", data[j].rank);
printf(" %-10d", data[j].add_time);
printf(" %-10d", data[j].rests.basic_pay);
printf(" %-10d", data[j].rests.add_pay);
printf(" %-10d", data[j].reward_pay);
printf(" %-10d", data[j].rests.all_pay );
printf("\n\n");
printf("\n查询成功!\n\n");
break;
}
if(j==i+1){
printf(" 无\n");
printf("\n查无此人!\n");
break;
}
}
getchar();
getchar();
system("cls");
return 0;
}
//查询全部数据
int showall()
{
int i;
char* str[11] = {"工号", "姓名", "性别", "部门", "级别" , "加班时长" , "基本工资" , "绩效工资", "奖金", "应发工资"};
i = lenth - 1;
process();
printf("\n");
printf("查询成功!\n\n");
for(int n=0; n<8; n++)
{
printf("%-12s" , str[n]);
}
printf("\n\n");
for(int j=0; j<=i; j++)
{
printf(" %-10d", data[j].id);//"%-10d" -:左对齐 10:数字宽度为10
printf(" %-10s", data[j].name);
printf(" %-10s", data[j].gender);
printf("%-10s", data[j].dep);
printf(" %-10s", data[j].rank);
printf(" %-10d", data[j].add_time);
printf(" %-10d", data[j].rests.basic_pay);
printf(" %-10d", data[j].rests.add_pay);
printf(" %-10d", data[j].reward_pay);
printf(" %-10d", data[j].rests.all_pay );
printf("\n\n");
}
getchar();
getchar();
system("cls");
return 0;
}
//二级菜单选择
void MENU2_choose()
{
int order;
MENU2();
while(1)
{
scanf("%d",&order);
if(order==0)
{
Exit();
return;
}
if(order==1)
processdata();
if(order==2)
line();
}
}
void MENU1_choose()
{
int order;
MENU1();
while(1)
{
scanf("%d",&order);
if(order==1)
login();
if(order==0)
{
Exit();
return;
}
if(order==2)
Register();
}
}
int main()
{
MENU1_choose();
}