[C语言]职工信息管理系统
本帖最后由 xin112532604 于 2022-8-31 08:11 编辑职工信息管理系统
录入模块:输入该厂现有员工信息并保存与文件中,方便日后进行排序,更新,统计,打印等操作。
输出模块:将所有员工信息,或所需员工信息输出于屏幕上,用于查询员工信息每二十条
删除模块:此分为按姓名,职工号删除
添加模块:添加新员工信息并保存起来。
修改模块:找到该员工选择所要修改的选项。
查询模块:此分为按姓名,职工号查询
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define FORMART "|%-20d|%-15s|%-20lld|%-12.1f|\n"
#define txtA emp.Number,emp.name,emp.Tel,emp.money
struct employee{//员工信息结构体
int Number;//职工号
char name;//姓名
float money;//工资
long long int Tel;//电话
};
struct employee emp,emp1;
//功能函数声明
void Welcome();//主菜单
void in();//输入员工信息
void save(int m); //存储信息
intread(); // 读取信息
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.Number==num)
{ printf("职工号为 %d 的员工已存在,请重新输入:\n",num);
scanf("%d",&num);
}
emp.Number=num;
printf("请输入姓名:");
scanf("%s",&emp.name);
do
{
printf("请输入工资:");
scanf("%f",&emp.money);
if(emp.money>0) break;
else printf("对不起,您输入格式错误,请重新输入!\n");
}while(1);
do
{
printf("请输入电话:");
scanf("%lld",&emp.Tel);
if(emp.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,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,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.Number,emp.name,emp.Tel,emp.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.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=emp;
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.Number==num) //判断输入职工号是否与原职工号重复
{ printf("职工号为 %d 的员工已存在,请重新输入\n",num);
scanf("%d",&num); //重新输入职工号
}
emp.Number=num;
printf("请输入姓名:");
scanf("%s",emp.name);
do
{
printf("请输入工资:");
scanf("%f",&emp.money);
if(emp.money>0)
{
break;
}
else
{
printf("对不起,您输入格式错误,请重新输入!\n");
}
}while(1);
printf("请输入电话:");
scanf("%lld",&emp.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; //定义一个数组指向字符串
int i,t,n=0;
int m=read();
printf("\n请输入要查找的姓名:");
scanf("%s",name1);
for(i=0;i<m;i++) //遍历
if(strcmp(name1,emp.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.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; //姓名
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.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.Number==g) //判断输入的职工号是否与原来的重复
{ printf("职工号为 %d 的员工已存在,请重新输入:\n",g);
scanf("%d",&g);
}
emp.Number=g; //将重新输入的职工号录入程序中
break;
case 2: printf("姓名改为: ");
scanf("%s",name);
strcpy(emp.name,name);
break;
case 4: printf("基本工资改为: ");
scanf("%f",&money);
emp.money=money;
break;
case 3: printf("电话改为: ");
scanf("%lld",Tel);
emp.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");
}
源码发附件就好。贴个图比贴源码更好理解! Mokte 发表于 2022-9-2 15:44
为什么不能发个成品图出来呢?
这个是在cmd窗口编译运行的程序,还没在运用在软件中呢:lol 谢谢楼主分享,编程是个技术活,要有创作意图,还要能用编程语言写出代码。 感谢楼主的分享!学习了 为什么不能发个成品图出来呢? 楼主很棒,一起加油哦{:1_893:} 可以可以 学习学习 感谢楼主的分享!学习了