用C语言开发一个简单的雇员业绩管理系统。
【数据结构】
雇员数据文件:工号、姓名、年龄、进入本单位时间、学历、职称、所在部门。员工业绩数据文件:工号、年度、能力业绩、表现业绩、态度评价、业绩总和、综合评价。(其中能力业绩、表现业绩、态度评价按照百分制计算,综合评价是这3项业绩的平均值)
【基本功能】
(1)员工信息管理:输入员工信息保存到数据文件中;删除员工信息;根据工号修改员工的信息。
(2)员工业绩信息管理:按年度输入业绩信息保存到数据文件中,修改某年度业绩信息。
(3)排序功能:按照某年度员工业绩的综合评价从高到低排序。
(4)查询功能:① 按姓名查询的员工信息;② 查询某员工某年度的业绩;③查询综合评价最优的员工。
思路:
#include <stdio.h>
#include <string.h>
void StaffInfo(void)
{
unsigned char FunNum;
printf("添加员工信息,请输入1 \n");
printf("删除员工信息,请输入2 \n");
printf("修改员工信息,请输入3 \n");
gets(&FunNum);
switch(FunNum)
{
case '1' :
printf("请输入员工信息?? \n");
break;
//实现添加删除和修改员工信息。
}
}
int main (void)
{
unsigned char unNum;
while(1){
printf("============================\n");
printf("功能选择: \n");
printf("员工信息管理,输入1 \n");
printf("员工业绩信息管理,输入2 \n");
printf("排序功能,输入3 \n");
printf("查询功能,输入4 \n");
gets(&unNum);
switch(unNum)
{
case '1' : //员工信息管理
printf("进入员工信息管理子系统\n");
StaffInfo();
break;
case '2' : //员工业绩信息管理
printf("进入员工业绩信息管理子系统\n");
//写员工业绩相关的处理。
break;
case '3' : //排序功能
printf("进入排序功能子系统\n");
//写排序相关的处理。
break;
case '4' : //查询功能
printf("进入查询功能子系统\n");
//写查询相关处理。
break;
default:
printf("输入错误!!\n");
break;
}
}
return 0;
}
#include <stdio.h>
#include <
stdlib.h>
#include <string.h>
#include <conio.h>
#define N 2
int Number = N;
void bc(struct Link *st);
void Draw(FILE *fp);
void link(FILE *fp);
void output(FILE *fp);
int Search(FILE *fp);
void input(FILE *fp);
void add();
void delbyname();
void delbyUser();
void del();
struct Link
{
char User[20];
char Code[20];
char name[10];
char sex[10];
}people[N];
int i;
void input(FILE *fp)
{
for (i = 0; i < N; i++)
{
printf("请输出第%d个人员的信息\n", i + 1);
printf("输入人员姓名:\t");
scanf("%s",people[i].name);
printf("输入人员性别:\t");
scanf("%s", people[i].sex);
printf("输入人员账号:\t");
scanf("%s", people[i].User);
printf("输入人员密码:\t");
scanf("%s", people[i].Code);
fwrite(&people[i], sizeof(struct Link), 1, fp);
}
fclose(fp);
}
int Search(FILE *fp)
{
char test_User[20];
char test_Code[20];
printf("请输入账号:\t");
scanf("%s", test_User);
printf("请输入密码:\t");
scanf("%s", test_Code);
for (i = 0; i < Number; i++)
{
if (strcmp(test_User, people[i].User) == 0)
{
if (strcmp(test_Code, people[i].Code) == 0)
{
printf("登录成功!\n");
_getch();
}
else
{
printf("密码输入错误!\n");
return 0;
}
}
}
}
void output(FILE *fp)
{
fp = fopen("manage.txt", "r");
i= 0;
while (fread(&people[i], sizeof(struct Link), 1, fp) != NULL)
{
printf("第%d个人员的信息\n",i+1);
printf("姓名:\t%s\n性别:\t%s\n",people[i].name,people[i].sex);
printf("账号:\t%s\n密码:\t%s\n", people[i].User, people[i].Code);
i++;
}
fclose(fp);
}//OK了
void link(FILE *fp)
{
int n;
printf("\n\n\n\n\t\t\t登录界面\n");
while (true)
{
n = Search(fp);
if (n != 0) break;
}
}
void Draw(FILE *fp)
{
int n;
printf("\n\n\n\t\t********** 菜单栏 **********\n");
printf("\t\t****** 1.文件的写入 ******\n");
printf("\t\t****** 2.文件的读出 ******\n");
printf("\t\t****** 3.账号密码登录 ******\n");
printf("\t\t****** 4.人员增加 ******\n");
printf("\t\t****** 5.人员删除 ******\n");
printf("\t\t****** 6.退出系统 ******\n");
printf("请输入你的选择:\t");
scanf("%d", &n);
switch (n)
{
case 1:
input(fp);
break;
case 2:
output(fp);
break;
case 3:
link(fp);
break;
case 4:
add();
break;
case 5:
del();
break;
case 6:
exit(0);
}
}
void bc(struct Link *st)
{
FILE *fp = NULL;
fp = fopen("manage.txt", "ab+");
fwrite(st, sizeof(struct Link), 1, fp);
fclose(fp);
}
void add()//增加人员信息
{
int numberTemp = 0;
int i = 0;
struct Link temp;
printf("请输入要增加的人员信息数量:");
scanf("%d", &numberTemp);
for (i = 0; i<numberTemp; i++)
{
printf("输入第%d个人员信息\n", i + 1);
printf("姓名:\t");
scanf("%s", temp.name);
printf("性别:\t");
scanf("%s", temp.sex);
printf("账号:\t");
scanf("%s", temp.User);
printf("密码:\t");
scanf("%s", temp.Code);
people[Number++] = temp; //将刚添加的写入到数组
bc(&temp); //将刚添加的写入到文件
}
printf("添加成功\n");
}
void delbyname()//按姓名删除
{
FILE *fp = NULL;
char name[60];
int i = 0;
int j = 0;
printf("请输入要删除的人员的名字:");
scanf("%s", name);
for (i = 0; i<Number; i++)
{
if (strcmp(name, people[i].name) == 0) //如果查找到就删除
{
for (j = i; j<Number - 1; j++)
{
people[j] = people[j + 1];
}
Number--;
}
} //将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了
fp = fopen("manage.txt", "wb");
for (i = 0; i<Number; i++)
{
fwrite(&people[i], sizeof(struct Link), 1, fp);
}
fclose(fp);
printf("删除成功;\n");
}
void delbyUser()//按账号删除
{
FILE *fp = NULL;
char User[20];
int i = 0;
int j = 0;
printf("请输入要删除的人员的账号:");
scanf("%s", User);
for (i = 0; i<Number; i++)
{
if (strcmp(User, people[i].User) == 0) //如果查找到就删除
{
for (j = i; j<Number - 1; j++)
{
people[j] = people[j + 1];
} Number--;
}
} //将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了
fp = fopen("manage.txt", "wb");
for (i = 0; i<Number; i++)
{
fwrite(&people[i], sizeof(struct Link), 1, fp);
}
fclose(fp);
printf("删除成功;\n");
}
void del()//删除
{
int n = 0;
printf("选择删除方式\n");
printf("1 按姓名删除\n");
printf("2 按账号删除\n");
printf("请输入你的选择:\t");
scanf("%d", &n);
switch (n)
{
case 1: delbyname();
break;
case 2: delbyUser();
break;
}
}
void main()
{
FILE *fp;
fp = fopen("manage.txt", "w");
if (fp == NULL) exit(0);
while (true) Draw(fp);
}