700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言 课程设计——职工信息管理系统

C语言 课程设计——职工信息管理系统

时间:2023-02-06 09:05:06

相关推荐

C语言 课程设计——职工信息管理系统

C语言 课程设计——职工信息管理系统

提示:该课程设计是本人第一次制作,有诸多不足之处,希望王对你有些许帮助!!!

文章目录

C语言 课程设计——职工信息管理系统前言一、首先定义一个结构体数组二、定义主函数三、主菜单四、录入职工信息五、文件操作六、浏览职工信息七、删除职工信息八、添加职工信息查询职工信息按姓名查询按职工号查询九、修改职工信息十、排序职工信息代码详情总结

前言

要求:

1、公司人员众多,所以录入职工信息时职工号不可重复,同时也不能为负数;

2、输入性别时只能输入W(woman)或M(man),不能输入其他,总不可能是人妖吧!

3、电话限制不能为负数,工资保留两位小数,同时也不能为负数;

4、全程主要考察学生增删查改以及排序的能力。


提示:以下是本篇文章正文内容,下面案例可供参考

一、首先定义一个结构体数组

代码如下(示例):

struct work {//员工信息结构体int Number;//职工号号char name[20];//姓名char sex; // 性别char date[20]; // 出生年月char education[20]; //学历float wages; //工资char addr[20];//住址int Tel;//电话};struct work worker[100],worker1;

二、定义主函数

代码如下(示例):

int main() {system("color F4"); //设置输出字体及背景颜色int n;while(1) //正常程序里,用来等待中断的产生{menu();//调用菜单函数printf("尊敬的领导,请您输入你需要操作的序号(1-8): ");scanf("%d",&n);if(n==0){printf("输入错误,请重新输入!\n");system("pause");fflush(stdin);continue;}switch(n) {case 1: system("cls");printf("\n");printf("\t\t\t 录入职工信息\n\n");input(); break; //执行到相应程序跳出switchcase 2: system("cls");printf("\n");printf("\t\t\t\t浏览职工信息\n");display();printf("\n按Enter键继续\n"); getchar(); getchar();system("cls");break;//执行到相应程序跳出switchcase 3: system("cls");printf("\n");printf("\t\t\t\t查询职工信息\n");search(); break;//执行到相应程序跳出switch case 4: system("cls");printf("\n");printf("\t\t\t\t删除职工信息\n\n"); Delete(); case 5: system("cls");printf("\n");printf("\t\t\t\t修改职工信息\n");display(); //调用浏览函数 change();break;//执行到相应程序跳出switchcase 6: system("cls");printf("\n");printf("\t\t职工信息排序\n");sort();break;//执行到相应程序跳出switchcase 7: system("cls");printf("\n");printf("\t\t添加职工信息\n\n");add() ;break;//执行到相应程序跳出switchcase 8: system("cls"); printf("\n\n\n\n\n\n\t\t\tThank you for using !\n\n\n\n\n\n");getchar();getchar();exit(8);break; //执行到相应程序跳出switch} } }

三、主菜单

代码如下(示例):

void menu() //主菜单{printf("\n\n");printf("职工信息管理系统 \n\n"); printf(" 南工科技有限公司欢迎您\n\n"); printf("*****************************************************************\n");printf("*1.录入职工信息");printf("§2.浏览职工信息*\n");printf("*3.查询职工信息");printf("§4.删除职工信息*\n");printf("*5.修改职工信息");printf("§6.职工信息排序*\n");printf("*7.添加职工信息");printf("§8.退出职工系统*\n");printf("*****************************************************************\n");printf("\n");}

四、录入职工信息

代码如下(示例):

void input() //录入职工信息{int i,m,num; char s='W';char t='M';char sex;printf("尊敬的领导,请您输入需要创建信息的职工人数: ");scanf("%d",&m); system("cls");printf("\n"); for (i=0;i<m;i++)//循环录入m个职工信息{printf("第%d个员工信息输入:\n", i+1);printf("请输入职工号: ");scanf("%d",&num);for(int j=0;j<i;j++)while(worker[j].Number==num) //判断输入的职工号是否与原来的重复{printf("职工号为 %d 的员工已存在,请重新输入:\n",num);scanf("%d",&num);}worker[i].Number=num; //将重新输入的职工号录入程序中printf("请输入姓名: "); scanf("%s",&worker[i].name);do{printf("请输入性别(W/M): "); getchar(); scanf("%c",&worker[i].sex);if(worker[i].sex==s||worker[i].sex==t){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1);printf("请输入出生日期: "); scanf("%s",&worker[i].date); printf("请输入学历: "); scanf("%s",worker[i].education); do{printf("请输入工资: ");scanf("%f",&worker[i].wages);if(worker[i].wages>0){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1); printf("请输入住址: "); scanf("%s",worker[i].addr);do{printf("请输入电话: "); scanf("%d",&worker[i].Tel);if(worker[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("D:\\work_list.txt","wb"))==NULL) /*创建文件并判断是否能打开*/ {printf ("cannot open file!\n");exit(0); }for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&worker[i],sizeof(struct work),1,fp)!=1)printf("file write error!\n"); fclose(fp); } int read() //导入函数 {FILE*fp; int i=0; if((fp=fopen("D:\\work_list.txt","rb"))==NULL){printf ("cannot open file!\n");exit(0);} else {do {fread(&worker[i],sizeof(struct work),1,fp); i++;}while(feof(fp)==0); } fclose(fp);return(i-1); }

六、浏览职工信息

代码如下(示例):

void display() //浏览职工信息{int i; int m=read(); //读取文件printf("\n贵公司所有职工信息:\n"); printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话\n"); for(i=0;i<m;i++) printf("\n%d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n");}

七、删除职工信息

代码如下(示例):

void Delete() //删除职工信息 {int m=read(); //读取文件int i,j,t,n,f,Num; //f用于调用第一个switch中的函数 t用于下面第二个switch语句调用Delete和返回 n用于下面确认是否删除 display(); //调用浏览职工信息函数printf("请您输入要删除的职工的职工号(大佬您不在考虑考虑嘛!): "); scanf("%d",&Num); for(i=0,f=1;f&&i<m;i++) //遍历全部职员{if(worker[i].Number==Num) //判断输入职工号是否与原职工号相同{printf("\n已找到此人,原始记录为:\n"); printf("\n职工号\t姓名\t性别\t出生日期\t学历\t 工资\t住址\t 电话 \n"); printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认删除请按 1(出来混口饭吃都不容易!请您三思!!!),取消删除请按 0: "); scanf("%d",&n); if(n==1) //如果删除,则其他的信息都向前移一行 {for(j=i;j<m-1;j++)worker[j]=worker[j+1];//当找到第j个职工时,for语句后j自加了1,所以下面的应该把改后的信息赋值给第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);//调用保存函数 display(); //调用浏览函数break;case 1: printf("\n\t\t\t对不起,贵公司没有该员工!\n"); display(); //调用浏览函数break;case 2: printf("\n\t\t\t\t取消删除!\n");break;} //display(); /*调用浏览函数*/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; char s='W';char t='M';printf("请您输入需要添加信息的职工人数: "); scanf("%d",&m); if(m+n>100) {system("cls");printf("\n对不起,您所构建的职工人数超出范围。请重新输入(0至%d之间):\n\n",100-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(worker[j].Number==num) //判断输入职工号是否与原职工号重复{printf("职工号为 %d 的员工已存在,请重新输入\n",num);scanf("%d",&num); //重新输入职工号}worker[i].Number=num;printf("请输入姓名: "); scanf("%s",worker[i].name);do{printf("请输入性别(W/M): "); getchar(); scanf("%c",&worker[i].sex);if(worker[i].sex==s||worker[i].sex==t){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1);printf("请输入出生日期: "); scanf("%s",&worker[i].date); printf("请输入学历: "); scanf("%s",&worker[i].education); do{printf("请输入工资: ");scanf("%f",&worker[i].wages);if(worker[i].wages>0){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1); printf("请输入住址: "); scanf("%s",&worker[i].addr);printf("请输入电话: "); scanf("%d",&worker[i].Tel);system("cls"); printf("\n一个职工的信息档案创建完毕!请输入下一个职工的信息\n"); printf("\n"); }save(m+n); //调用save并保存文件system("cls"); printf("\n添加职工信息完成! \n"); display(); //调用display函数 浏览全部信息printf("\n按Enter键继续\n"); getchar(); //吸收回车getchar(); //吸收回车system("cls");}}

查询职工信息

提示:可通过姓名或职工号进行查询。

代码如下(示例):

void search()//查询职工信息{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");search_name();break;case 2: printf("\n按职工号查询\n");search_NUMS();break; default:break; }system("cls");} }

按姓名查询

代码如下(示例):

void search_name()//按姓名查找职工信息 {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,worker[i].name)==0) //strcmp对两个字符串的大小进行比较{if(n==0) {printf("\n已找到以下信息:\n");printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话 \n"); }n++;printf("\n %d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);}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"); search();break;default:break; } }}

按职工号查询

代码如下(示例):

void search_NUMS()//按职工号查找职工信息{int num1; int i,t,n=0; int m=read(); printf("\n请输入要查找的职工号: ");scanf("%d",&num1); for(i=0;i<m;i++) //遍历 if(num1==worker[i].Number) {if(n==0) {printf("\n已找到以下信息:\n");printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话\n"); }n++;printf("\n %d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);}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"); search();break;default:break; } }}

九、修改职工信息

代码如下(示例):

void change()//修改职工信息 {int Number; //职工号char name[20];//姓名char sex; // 性别char date[20];// 出生日期char education[20]; //学历float wages; //工资char addr[20];//住址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(worker[i].Number==Number) //判断输入的职工号是否与原职工号相同{k=1;printf("\n已找到该职工号员工,其记录为:\n"); printf("\n职工号\t姓名\t性别\t出生日期\t学历\t 工资\t住址\t 电话 \n");printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认修改请按1,取消修改请按0:");scanf("%d",&n); if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别 4.出生日期 5.学历 6.工资 7.住址 8.电话 \n");printf("请输入你想修改的那一项序号: "); scanf("%d",&c);//输入数字对应操作选项 do {switch(c){case 1: printf("职工号改为: ");scanf("%d",&g);for(int i=0;i<m;i++)while(worker[i].Number==g) //判断输入的职工号是否与原来的重复{printf("职工号为 %d 的员工已存在,请重新输入:\n",g);scanf("%d",&g);}worker[i].Number=g; //将重新输入的职工号录入程序中break; case 2: printf("姓名改为: "); scanf("%s",name); strcpy(worker[i].name,name);break;case 3: printf("性别改为:"); getchar();scanf("%c",&sex);worker[i].sex=sex;break; case 4: printf("出生日期改为: "); scanf("%s",&date);strcpy(worker[i].date,date);break; case 5: printf("学历改为: "); scanf("%s",education);strcpy(worker[i].education,education);break; case 6: printf("基本工资改为: "); scanf("%f",&wages);worker[i].wages=wages; break;case 7: printf("住址改为: ");scanf("%s",&addr); strcpy(worker[i].addr,addr);break;case 8: printf("电话改为: "); scanf("%d",Tel); worker[i].Tel=Tel; break;} printf("\n确认修改 请按1,重新输入 请按2: "); scanf("%d",&b); if(b==1){system("cls");save(m);//储存修改后的数据printf("\n"); display();//浏览修改后的数据}} 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: display();change();//返回修改函数break; case 0: break; default:break; }system("cls"); }

十、排序职工信息

提示:此处是按职工号从小到大进行排序。

代码如下(示例):

void sort()//排序职工信息 {int d;do {printf("\n职工号排序请按 1:; 返回主菜单请按 0: "); scanf("%d",&d);if(d>=0&&d<=1) {break;} else {printf("对不起,您输入有误,请重新选择!");}}while(0);system("cls");while(1) {switch(d) {case 1: printf("\n按职工号排序为(数字由小到大排列):\n");sort_Num();break;case 0: system("cls");main();break;}system("cls");}}void sort_Num()//按职工号排序函数 //浏览信息时按照职工号由小到大顺序排序{int i,j,k; int m=read();for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++) if(worker[j].Number>worker[j+1].Number)//排序 {worker1=worker[j];worker[j]=worker[j+1];worker[j+1]=worker1;} save(m); //按职工号由小到大的顺序存储printf("\n职工号\t姓名\t性别\t年龄\t学历\t 工资\t住址\t 电话 \n"); for(i=0;i<m;i++) printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认修改请按1,取消修改请按0:");scanf("%d",&k); switch(k) {case 1: system("cls");sort(); //调用排序函数break; case 0: system("cls");main();break; default:break; }system("cls"); }

代码详情

#include <stdio.h>#include <stdlib.h>#include <windows.h>//system("cls");清屏#include <string.h> struct work {//员工信息结构体int Number;//职工号号char name[20];//姓名char sex; // 性别char date[20]; // 出生年月char education[20]; //学历float wages; //工资char addr[20];//住址int Tel;//电话};struct work worker[100],worker1; //功能函数声明void menu(); //主菜单void input(); //输入员工信息void save(int m); //存储信息int read(); // 读取信息void display();//浏览信息void add() ; //添加void search(); //查找void search_name(); //按姓名查找void search_NUMS(); //按职工号查找void Delete(); //删除操作void change(); //修改操作void sort(); //排序操作void sort_Num(); //按职工号排序浏览信息时按照职工号由小到大顺序排序//主函数int main() {system("color F4"); //设置输出字体及背景颜色int n;while(1) //正常程序里,用来等待中断的产生{menu();//调用菜单函数printf("尊敬的领导,请您输入你需要操作的序号(1-8): ");scanf("%d",&n);if(n==0){printf("输入错误,请重新输入!\n");system("pause");fflush(stdin);continue;}switch(n) {case 1: system("cls");printf("\n");printf("\t\t\t 录入职工信息\n\n");input(); break; //执行到相应程序跳出switchcase 2: system("cls");printf("\n");printf("\t\t\t\t浏览职工信息\n");display();printf("\n按Enter键继续\n"); getchar(); getchar();system("cls");break;//执行到相应程序跳出switchcase 3: system("cls");printf("\n");printf("\t\t\t\t查询职工信息\n");search(); break;//执行到相应程序跳出switch case 4: system("cls");printf("\n");printf("\t\t\t\t删除职工信息\n\n"); Delete(); case 5: system("cls");printf("\n");printf("\t\t\t\t修改职工信息\n");display(); //调用浏览函数 change();break;//执行到相应程序跳出switchcase 6: system("cls");printf("\n");printf("\t\t职工信息排序\n");sort();break;//执行到相应程序跳出switchcase 7: system("cls");printf("\n");printf("\t\t添加职工信息\n\n");add() ;break;//执行到相应程序跳出switchcase 8: system("cls"); printf("\n\n\n\n\n\n\t\t\tThank you for using !\n\n\n\n\n\n");getchar();getchar();exit(8);break; //执行到相应程序跳出switch} } }//其他函数void menu() //主菜单{printf("\n\n");printf("职工信息管理系统 \n\n"); printf(" 南工科技有限公司欢迎您\n\n"); printf("*****************************************************************\n");printf("*1.录入职工信息");printf("§2.浏览职工信息*\n");printf("*3.查询职工信息");printf("§4.删除职工信息*\n");printf("*5.修改职工信息");printf("§6.职工信息排序*\n");printf("*7.添加职工信息");printf("§8.退出职工系统*\n");printf("*****************************************************************\n");printf("\n");}void input() //录入职工信息{int i,m,num; char s='W';char t='M';char sex;printf("尊敬的领导,请您输入需要创建信息的职工人数: ");scanf("%d",&m); system("cls");printf("\n"); for (i=0;i<m;i++)//循环录入m个职工信息{printf("第%d个员工信息输入:\n", i+1);printf("请输入职工号: ");scanf("%d",&num);for(int j=0;j<i;j++)while(worker[j].Number==num) //判断输入的职工号是否与原来的重复{printf("职工号为 %d 的员工已存在,请重新输入:\n",num);scanf("%d",&num);}worker[i].Number=num; //将重新输入的职工号录入程序中printf("请输入姓名: "); scanf("%s",&worker[i].name);do{printf("请输入性别(W/M): "); getchar(); scanf("%c",&worker[i].sex);if(worker[i].sex==s||worker[i].sex==t){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1);printf("请输入出生日期: "); scanf("%s",&worker[i].date); printf("请输入学历: "); scanf("%s",worker[i].education); do{printf("请输入工资: ");scanf("%f",&worker[i].wages);if(worker[i].wages>0){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1); printf("请输入住址: "); scanf("%s",worker[i].addr);do{printf("请输入电话: "); scanf("%d",&worker[i].Tel);if(worker[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("D:\\work_list.txt","wb"))==NULL) /*创建文件并判断是否能打开*/ {printf ("cannot open file!\n");exit(0); }for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&worker[i],sizeof(struct work),1,fp)!=1)printf("file write error!\n"); fclose(fp); } int read() //导入函数 {FILE*fp; int i=0; if((fp=fopen("D:\\work_list.txt","rb"))==NULL){printf ("cannot open file!\n");exit(0);} else {do {fread(&worker[i],sizeof(struct work),1,fp); i++;}while(feof(fp)==0); } fclose(fp);return(i-1); }void display() //浏览职工信息{int i; int m=read(); //读取文件printf("\n贵公司所有职工信息:\n"); printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话\n"); for(i=0;i<m;i++) printf("\n%d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n");} void Delete() //删除职工信息 {int m=read(); //读取文件int i,j,t,n,f,Num; //f用于调用第一个switch中的函数 t用于下面第二个switch语句调用Delete和返回 n用于下面确认是否删除 display(); //调用浏览职工信息函数printf("请您输入要删除的职工的职工号(大佬您不在考虑考虑嘛!): "); scanf("%d",&Num); for(i=0,f=1;f&&i<m;i++) //遍历全部职员{if(worker[i].Number==Num) //判断输入职工号是否与原职工号相同{printf("\n已找到此人,原始记录为:\n"); printf("\n职工号\t姓名\t性别\t出生日期\t学历\t 工资\t住址\t 电话 \n"); printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认删除请按 1(出来混口饭吃都不容易!请您三思!!!),取消删除请按 0: "); scanf("%d",&n); if(n==1) //如果删除,则其他的信息都向前移一行 {for(j=i;j<m-1;j++)worker[j]=worker[j+1];//当找到第j个职工时,for语句后j自加了1,所以下面的应该把改后的信息赋值给第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);//调用保存函数 display(); //调用浏览函数break;case 1: printf("\n\t\t\t对不起,贵公司没有该员工!\n"); display(); //调用浏览函数break;case 2: printf("\n\t\t\t\t取消删除!\n");break;} //display(); /*调用浏览函数*/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; char s='W';char t='M';printf("请您输入需要添加信息的职工人数: "); scanf("%d",&m); if(m+n>100) {system("cls");printf("\n对不起,您所构建的职工人数超出范围。请重新输入(0至%d之间):\n\n",100-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(worker[j].Number==num) //判断输入职工号是否与原职工号重复{printf("职工号为 %d 的员工已存在,请重新输入\n",num);scanf("%d",&num); //重新输入职工号}worker[i].Number=num;printf("请输入姓名: "); scanf("%s",worker[i].name);do{printf("请输入性别(W/M): "); getchar(); scanf("%c",&worker[i].sex);if(worker[i].sex==s||worker[i].sex==t){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1);printf("请输入出生日期: "); scanf("%s",&worker[i].date); printf("请输入学历: "); scanf("%s",&worker[i].education); do{printf("请输入工资: ");scanf("%f",&worker[i].wages);if(worker[i].wages>0){break;}else{printf("对不起,您输入格式错误,请重新输入!\n");}}while(1); printf("请输入住址: "); scanf("%s",&worker[i].addr);printf("请输入电话: "); scanf("%d",&worker[i].Tel);system("cls"); printf("\n一个职工的信息档案创建完毕!请输入下一个职工的信息\n"); printf("\n"); }save(m+n); //调用save并保存文件system("cls"); printf("\n添加职工信息完成! \n"); display(); //调用display函数 浏览全部信息printf("\n按Enter键继续\n"); getchar(); //吸收回车getchar(); //吸收回车system("cls");}}void search()//查询职工信息{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");search_name();break;case 2: printf("\n按职工号查询\n");search_NUMS();break; default:break; }system("cls");} } void search_name()//按姓名查找职工信息 {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,worker[i].name)==0) //strcmp对两个字符串的大小进行比较{if(n==0) {printf("\n已找到以下信息:\n");printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话 \n"); }n++;printf("\n %d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);}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"); search();break;default:break; } }} void search_NUMS()//按职工号查找职工信息{int num1; int i,t,n=0; int m=read(); printf("\n请输入要查找的职工号: ");scanf("%d",&num1); for(i=0;i<m;i++) //遍历 if(num1==worker[i].Number) {if(n==0) {printf("\n已找到以下信息:\n");printf("\n职工号\t姓名\t性别\t出生\t学历\t工资\t住址\t电话\n"); }n++;printf("\n %d\t%s\t%c\t%s\t%s\t%5.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);}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"); search();break;default:break; } }} void change()//修改职工信息 {int Number; //职工号char name[20];//姓名char sex; // 性别char date[20];// 出生日期char education[20]; //学历float wages; //工资char addr[20];//住址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(worker[i].Number==Number) //判断输入的职工号是否与原职工号相同{k=1;printf("\n已找到该职工号员工,其记录为:\n"); printf("\n职工号\t姓名\t性别\t出生日期\t学历\t 工资\t住址\t 电话 \n");printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认修改请按1,取消修改请按0:");scanf("%d",&n); if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别 4.出生日期 5.学历 6.工资 7.住址 8.电话 \n");printf("请输入你想修改的那一项序号: "); scanf("%d",&c);//输入数字对应操作选项 do {switch(c){case 1: printf("职工号改为: ");scanf("%d",&g);for(int i=0;i<m;i++)while(worker[i].Number==g) //判断输入的职工号是否与原来的重复{printf("职工号为 %d 的员工已存在,请重新输入:\n",g);scanf("%d",&g);}worker[i].Number=g; //将重新输入的职工号录入程序中break; case 2: printf("姓名改为: "); scanf("%s",name); strcpy(worker[i].name,name);break;case 3: printf("性别改为:"); getchar();scanf("%c",&sex);worker[i].sex=sex;break; case 4: printf("出生日期改为: "); scanf("%s",&date);strcpy(worker[i].date,date);break; case 5: printf("学历改为: "); scanf("%s",education);strcpy(worker[i].education,education);break; case 6: printf("基本工资改为: "); scanf("%f",&wages);worker[i].wages=wages; break;case 7: printf("住址改为: ");scanf("%s",&addr); strcpy(worker[i].addr,addr);break;case 8: printf("电话改为: "); scanf("%d",Tel); worker[i].Tel=Tel; break;} printf("\n确认修改 请按1,重新输入 请按2: "); scanf("%d",&b); if(b==1){system("cls");save(m);//储存修改后的数据printf("\n"); display();//浏览修改后的数据}} 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: display();change();//返回修改函数break; case 0: break; default:break; }system("cls"); } void sort()//排序职工信息 {int d;do {printf("\n职工号排序请按 1:; 返回主菜单请按 0: "); scanf("%d",&d);if(d>=0&&d<=1) {break;} else {printf("对不起,您输入有误,请重新选择!");}}while(0);system("cls");while(1) {switch(d) {case 1: printf("\n按职工号排序为(数字由小到大排列):\n");sort_Num();break;case 0: system("cls");main();break;}system("cls");}}void sort_Num()//按职工号排序函数 //浏览信息时按照职工号由小到大顺序排序{int i,j,k; int m=read();for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++) if(worker[j].Number>worker[j+1].Number)//排序 {worker1=worker[j];worker[j]=worker[j+1];worker[j+1]=worker1;} save(m); //按职工号由小到大的顺序存储printf("\n职工号\t姓名\t性别\t年龄\t学历\t 工资\t住址\t 电话 \n"); for(i=0;i<m;i++) printf("\n %d\t%s\t %c\t %s\t%s\t %9.2f\t%s\t%d\n",worker[i].Number,worker[i].name, worker[i].sex,worker[i].date,worker[i].education,worker[i].wages,worker[i].addr,worker[i].Tel);printf("\n确认修改请按1,取消修改请按0:");scanf("%d",&k); switch(k) {case 1: system("cls");sort(); //调用排序函数break; case 0: system("cls");main();break; default:break; }system("cls"); }

总结

提示:此次课程设计并非本人全程设计,其中还借鉴他人寻找灵感,从而进行完善。如有不足之处,可以私信报错,谢谢大家!!

我会继续努力的!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。