[CSS] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define FORMART "|%-20d|%-15s|%-20lld|%-12.1f|\n"
#define txtA emp[i].Number,emp[i].name,emp[i].Tel,emp[i].money
struct employee{//员工信息结构体
int Number;//职工号
char name[20];//姓名
float money;//工资
long long int Tel;//电话
};
struct employee emp[1000],emp1;
//功能函数声明
void Welcome(); //主菜单
void in(); //输入员工信息
void save(int m); //存储信息
int read(); // 读取信息
void Print();//浏览信息
void add() ; //添加
void find(); //查找
void findname(); //按姓名查找
void findnum(); //按职工号查找
void Delete(); //删除操作
void change(); //修改操作
//主函数
int main() {
system("color 0e");
int n;
while(1)
{
Welcome();
scanf("%d",&n);
if(n==0)
{
printf("输入错误,请重新输入!\n");
system("pause");
fflush(stdin);
continue;
}
switch(n)
{
case 1: system("cls");
printf("\n\t\t\t 录入职工信息\n\n");
in();
break;
case 2: system("cls");
printf("\n\t\t\t\t浏览职工信息\n");
Print();
system("cls");
break;
case 3: system("cls");
printf("\n\t\t\t\t查询职工信息\n");
find();
break;
case 4: system("cls");
printf("\n\t\t添加职工信息");
add() ;
break;
case 5: system("cls");
printf("\n\t\t\t\t删除职工信息\n\n");
Delete();
case 6: system("cls");
printf("\n\t\t\t\t修改职工信息\n");
change();
Print();
system("cls");
break;
case 7: getchar();
exit(7);
break;
}
}
}
void Welcome(){ //主菜单
printf("\n\n\n");
printf("\t\t**************************欢迎访问职工信息管理系统************************\n");
printf("\t\t** **\n");
printf("\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\t** 7---退出职工信息系统 **\n");
printf("\t\t** **\n");
printf("\t\t** **\n");
printf("\t\t**************************************************************************");
printf("\n请您选择你需要的操作(1-7): ");
}
void in(){ //录入职工信息
int i,m,num;
printf("请您输入需要创建信息的职工人数: ");
scanf("%d",&m);
system("cls");
printf("\n");
for (i=0;i<m;i++)
{ printf("第%d个员工信息输入:\n", i+1);
printf("请输入职工号: ");
scanf("%d",&num);
for(int j=0;j<i;j++)
while(emp[j].Number==num)
{ printf("职工号为 %d 的员工已存在,请重新输入:\n",num);
scanf("%d",&num);
}
emp[i].Number=num;
printf("请输入姓名: ");
scanf("%s",&emp[i].name);
do
{
printf("请输入工资: ");
scanf("%f",&emp[i].money);
if(emp[i].money>0) break;
else printf("对不起,您输入格式错误,请重新输入!\n");
}while(1);
do
{
printf("请输入电话: ");
scanf("%lld",&emp[i].Tel);
if(emp[i].Tel>0)
{
break;
}
else
{
printf("对不起,您输入格式错误,请重新输入!\n");
}
}while(1);
system("cls");
printf("\n职工信息创建完成!\n\n");
}
save(m); //保存入文件中
}
void save(int m){
int i;
FILE *fp;
if ((fp=fopen("employee.dat","wb"))==NULL)
{ printf ("cannot open file!\n");
exit(0);
}
for (i=0;i<m;i++)
if (fwrite(&emp[i],sizeof(struct employee),1,fp)!=1)
printf("file write error!\n");
fclose(fp);
}
int read(){ //导入函数
FILE*fp;
int i=0;
if((fp=fopen("employee.dat","rb"))==NULL)
{ printf ("cannot open file!\n");
exit(0);
}
else
{
do {
fread(&emp[i],sizeof(struct employee),1,fp);
i++;
}while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
void Print(){ //浏览职工信息
char ch;
int m=read(),x;
int page=1,firstindex=0,i,pageamount=m/20+1,j;//定义联系人为一页
x=m-19;
do
{ system("cls");
if(page>pageamount)
printf("**对不起,页数的最大值为%d\n",pageamount);
else if (page < 0)
printf("**对不起,输入的数字必须为正数\n");
else
{
firstindex=20*(page - 1)-1;
printf("\n贵公司所有职工信息(共计%d人):\n",m);
printf("************************************************************************\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|职工号 |姓名 |电话 |工资 |\t\n");
for(i=0;i<firstindex;++i) m=i;
i=0;
//x=m-19;
while(m!=NULL&&i<20)
{
if(j>=m+x)
{
break;
}
i++;
j=i+firstindex;
printf("|%-20d|%-15s|%-20lld|%-12.1f|\n",emp[j].Number,emp[j].name,emp[j].Tel,emp[j].money);
}
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|*************************** 第%d页(共%d页) *****************************|\n", page, pageamount);
}
printf("请输入跳转页面(按0返回通讯录主菜单):");
scanf("%d",&page);
}
while (page);
printf("\n");
}
void Delete(){ //删除职工信息
int m=read();
int i,j,t,n,f,Num;
//Print();
printf("请您输入要删除的职工的职工号: ");
scanf("%d",&Num);
for(i=0,f=1;f&&i<m;i++) //遍历全部职员
{ if(emp[i].Number==Num) //判断输入职工号是否与原职工号相同
{
printf("\n已找到此人,原始记录为:\n");
printf("************************************************************************\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|职工号 |姓名 |电话 |工资 |\t\n");
printf(FORMART,txtA);
printf("\n确认删除请按 1,取消删除请按 0: ");
scanf("%d",&n);
if(n==1)
{ for(j=i;j<m-1;j++)
emp[j]=emp[j+1];
f=0;
}
else f=2;
}
}
system("cls");
switch(f){
case 0: m=m-1;
printf("\n\t\t\t\t删除成功!\n");
save(m); //调用保存函数
//Print(); //调用浏览函数
break;
case 1: printf("\n\t\t\t没有该员工!\n");
//Print(); //调用浏览函数
break;
case 2: printf("\n\t\t\t\t取消删除!\n");
break;
}
//Print(); /*调用浏览函数*/
printf("\n继续删除请按1,返回主菜单请按0: ");
scanf("%d",&t); //输入t调用switch中的函数
system("cls");
switch(t)
{ case 1: Delete();
break;
case 0: system("cls");
main();
break;
default: break;
}
system("cls");
}
void add(){ //添加职工信息
int n=read(); //读取文件
int i,m,num=0;
printf("(目前职工人数%d人)\n\n",n);
printf("请您输入需要添加信息的职工人数: ");
scanf("%d",&m);
if(m+n>1000) {
system("cls");
printf("\n职工人数超出范围,请重新输入(0至%d之间):\n\n",1000-n);
add(); //重新调用add()函数
}
else{
for (i=n;i<m+n;i++)
{ printf("第%d个员工信息输入(按Enter确认输入): \n", i+1);
printf("请输入职工号:");
scanf("%d",&num);
for(int j=0;j<i;j++)
while(emp[j].Number==num) //判断输入职工号是否与原职工号重复
{ printf("职工号为 %d 的员工已存在,请重新输入\n",num);
scanf("%d",&num); //重新输入职工号
}
emp[i].Number=num;
printf("请输入姓名:");
scanf("%s",emp[i].name);
do
{
printf("请输入工资:");
scanf("%f",&emp[i].money);
if(emp[i].money>0)
{
break;
}
else
{
printf("对不起,您输入格式错误,请重新输入!\n");
}
}while(1);
printf("请输入电话:");
scanf("%lld",&emp[i].Tel);
system("cls");
printf("\n一个职工的信息档案创建完毕!请输入下一个职工的信息\n");
printf("\n");
}
save(m+n); //调用save并保存文件
system("cls");
printf("\n添加职工信息完成! \n");
Print(); //调用Print函数 浏览全部信息
printf("\n按Enter键继续\n");
getchar(); //吸收回车
getchar(); //吸收回车
system("cls");
}
}
void find(){ //查询职工信息
int t;
do {
printf("\n 姓名查询请按 1; 职工号查询请按 2; 进入主菜单请按 0 : ");
scanf("%d",&t); //输入数字对应操作选项
if(t>=0&&t<=3)
{ break; }
else { printf("您输入有误,请重新选择!"); }
}while(0);
system("cls");
while(1)
{
switch(t)
{ case 0: main();
break;
case 1: printf("\n按姓名查询\n");
findname();
break;
case 2: printf("\n按职工号查询\n");
findnum();
break;
default:break;
}
system("cls");
}
}
void findname(){ //按姓名查找职工信息
char name1[20]; //定义一个数组指向字符串
int i,t,n=0;
int m=read();
printf("\n请输入要查找的姓名: ");
scanf("%s",name1);
for(i=0;i<m;i++) //遍历
if(strcmp(name1,emp[i].name)==0) //strcmp对两个字符串的大小进行比较
{
if(n==0)
{ printf("\n已找到以下信息:\n");
printf("************************************************************************\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|职工号 |姓名 |电话 |工资 |\t\n");
}
n++;
printf(FORMART,txtA); }
if(n==0) //没有一个符合条件
{ printf("\n对不起,贵公司没有该员工!\n");
getchar();
getchar();
}
else
{ printf("\n查询到有 %d 个员工符合要求。\n",n);
printf("\n");
printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :");
scanf("%d",&t); //输入数字对应操作选项
switch(t)
{ case 0: system("cls");
main();
break;
case 1: Delete();
break;
case 2: change();
break;
case 3: break;
case 4: system("cls");
find();
break;
default:break;
}
}
}
void findnum(){ //按职工号查找职工信息
int num1;
int i,t,n=0;
int m=read();
printf("\n请输入要查找的职工号: ");
scanf("%d",&num1);
for(i=0;i<m;i++) //遍历
if(num1==emp[i].Number)
{
if(n==0)
{ printf("\n已找到以下信息:\n");
printf("************************************************************************\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|职工号 |姓名 |电话 |工资 |\t\n");
}
n++;
printf(FORMART,txtA); }
if(n==0) //没有一个符合条件
{ printf("\n对不起,贵公司没有该员工!\n");
getchar();
getchar();
}
else
{ printf("\n查询到有 %d 个员工符合要求。\n",n);
printf("\n");
printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :");
scanf("%d",&t); //输入数字对应操作选项
switch(t)
{ case 0: system("cls");
main();
break;
case 1: Delete();
break;
case 2: change();
break;
case 3: break;
case 4: system("cls");
find();
break;
default:break;
}
}
}
void change() { //修改职工信息
int Number; //职工号
char name[20]; //姓名
float money; //工资
int Tel; //电话
int b=1,c,i,n,t,k=0,g;
int m=read(); //导入文件内的信息
printf("\n");
printf("请输入要修改的职工的职工号: ");
scanf("%d",&Number);
system("cls");
for(i=0;i<m;i++)
{ if(emp[i].Number==Number) //判断输入的职工号是否与原职工号相同
{ k=1;
printf("\n已找到该职工号员工,其记录为:\n");
printf("************************************************************************\n");
printf("|\t\t\t\t\t\t\t\t |\n");
printf("|职工号 |姓名 |电话 |工资 |\t\n");
printf(FORMART,txtA);
printf("\n确认修改请按1,取消修改请按0:");
scanf("%d",&n);
if(n==1)
{ printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.电话 4.工资 \n");
printf("请输入你想修改的那一项序号: ");
scanf("%d",&c); //输入数字对应操作选项
do {
switch(c)
{ case 1: printf("职工号改为: ");
scanf("%d",&g);
for(int i=0;i<m;i++)
while(emp[i].Number==g) //判断输入的职工号是否与原来的重复
{ printf("职工号为 %d 的员工已存在,请重新输入:\n",g);
scanf("%d",&g);
}
emp[i].Number=g; //将重新输入的职工号录入程序中
break;
case 2: printf("姓名改为: ");
scanf("%s",name);
strcpy(emp[i].name,name);
break;
case 4: printf("基本工资改为: ");
scanf("%f",&money);
emp[i].money=money;
break;
case 3: printf("电话改为: ");
scanf("%lld",Tel);
emp[i].Tel=Tel;
break;
}
printf("\n确认修改 请按1,重新输入 请按2: ");
scanf("%d",&b);
if(b==1)
{
system("cls");
save(m);//储存修改后的数据
printf("\n");
}
} while(b==2);
}
}
else if(i==(m-1)) i++;
}
if(k==0) {
printf("\n对不起,您输入有误!\n");
getchar();
getchar();
}
else{
printf("\n继续修改请按 1,退出修改请按 0: ");
scanf("%d",&t);
}
system("cls");
switch(t)
{ case 1:
change();//返回修改函数
break;
case 0: break;
default:break;
}
system("cls");
}