职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:1、系统以菜单方式工作2、职工信息录入功能(职工信息用文件保存)--输入3、职工信息浏览功能--输出4、职工信息查询功能--算法查询方式 按学历查询等按职工号查询等5、职工信息删除、修改功能
这是偶然翻出来的好久之前写的课程设计,这是我第一次写的比较完整的项目,有点生涩。想着整理一下分享出来
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct worker{
char ID[10];//工号
char name[15];//姓名
char sex[3];//性别
char age[3];//年龄
char education[20];//学历
char wage[10];//工资
char addr[30];//地址
char phone[20];//电话
}work[1000];
int n;
void read()//从文件读入数据
{
FILE *fp;//定义结构指针,实现对文件的操作
int i=0;
if((fp=fopen("d:\\date.txt","r"))==NULL)//判断文件是否存在,r打开文件进行只读
{
printf("请在d盘新建一个名为date的文件!\n");
return ;
}
fscanf(fp,"%d\n",&n);
while(i<n){
fscanf(fp,"%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].age);
fscanf(fp,"%s\n%s\n%s\n%s\n",work[i].education,work[i].wage,work[i].addr,work[i].phone);
i++;
}//读入文件
fclose(fp);//关闭文件
}
void write()//向文件中写入数据
{
FILE *fp;
int i=0;
if((fp=fopen("d:\\date.txt","w"))==NULL)//w只写
{
printf("无法打开文件!\n");
}
fprintf(fp,"%d\n",n);
while(i<n)
{
fprintf(fp,"%s %s %s %s ",work[i].ID,work[i].name,work[i].sex,work[i].age);
fprintf(fp,"%s %s %s %s\n",work[i].education,work[i].wage,work[i].addr,work[i].phone);
i++;
}
fclose(fp);
}
void input()//输入
{
int i,flag;//flag标记工号是否存在
char c;
read();//将原有数据读入
do{
flag=0;
printf("请输入职工工号: \n");
scanf("%s",work[n].ID);
for(i=0;i<n;i++)
{
if(strcmp(work[i].ID,work[n].ID)==0){
flag=1;
break;
}
}
if(flag==1)
{
printf("该工号已存在\n");
printf("是否继续输入?(Y/N):\n");
scanf("%s",&c);
if(c=='N'||c=='n')
break;
continue;
}
printf("请输入职工姓名: \n");
scanf("%s",work[n].name);
printf("请输入职工性别: \n");
scanf("%s",work[n].sex);
printf("请输入职工年龄: \n");
scanf("%s",work[n].age);
printf("请输入职工学历: \n");
scanf("%s",work[n].education);
printf("请输入职工工资: \n");
scanf("%s",work[n].wage);
printf("请输入职工住址: \n");
scanf("%s",work[n].addr);
printf("请输入职工电话: \n");
scanf("%s",work[n].phone);
printf("\t\t是否继续输入?(Y/N):");
scanf("%s",&c);
n++;
} while(c!='N'&&c!='n');
write();
printf("\n数据已保存\n");
}
void output_infor(int k)//信息输出
{
printf("\t\t工号:%s\n",work[k].ID);
printf("\t\t姓名:%s\n",work[k].name);
printf("\t\t性别:%s\n",work[k].sex);
printf("\t\t年龄:%s\n",work[k].age);
printf("\t\t学历:%s\n",work[k].education);
printf("\t\t工资:%s\n",work[k].wage);
printf("\t\t地址:%s\n",work[k].addr);
printf("\t\t电话:%s\n",work[k].phone);
printf("\n\n\n");
}
void show()//信息浏览
{
int i;
read();
if(n==0)
printf("无记录!\n");
else
for(i=0;i<n;i++){
output_infor(i);
}
}
void que()//查询信息
{
char num;
int flag=0,i;
char q_ID[20];//要查询的工号
char q_education[20];//要查询的学历
char c;
read();
while(1)
{
printf("1.按工号查询,2.按学历查询。请输入1或2:");
scanf("%s",&num);
if(num<'1'||num>'2')
{
printf("输入错误!\n");
continue;
}
if(num=='1')
{
printf("请输入所查询工号:\n");
scanf("%s",q_ID);
for(i=0;i<n;i++){
if(strcmp(work[i].ID,q_ID)==0)
{
output_infor(i);
flag=1;
break;
}
}
}
else if(num=='2')
{
printf("请输入要查询学历: \n");
scanf("%s",q_education);
for(i=0;i<n;i++){
if(strcmp(work[i].education,q_education)==0)
{
output_infor(i);
flag=1;
}
}
}
if(flag==0)
printf("无该员工信息!\n");
printf("是否继续查询(Y/N):");
scanf("%s",&c);
if(c=='n'||c=='N')
break;
}
}
void del()//删除职工信息
{
char delete_ID[20];
int i,j,flag;
char c;
read();
while(1){
flag=0;
printf("请输入需要删除职工工号: \n");
scanf("%s",delete_ID);
for(i=0;i<n;i++)
{
if(strcmp(work[i].ID,delete_ID)==0)
{
n--;
flag=1;
for(j=i;j<n;j++){
work[j]=work[j+1];}
break;
}
}
if(!flag)
printf("无此员工信息!\n");
else
printf("删除成功!\n");
printf("是否继续删除(Y/N):\n");
scanf("%s",&c);
if(c=='n'||c=='N')
break;
}
write();
}
void mod()//修改信息
{
char change_ID[20];
int number;//员工在数据中的位置
char num;
char message[100];//修改的信息
char c;//指令Y?N
int i,flag=0;
read(); //读出
while(1)
{
printf("请输入需修改的职工的工号:\n");
scanf("%s",change_ID);
for(i=0;i<n;i++)
{
if(strcmp(work[i].ID,change_ID)==0)
{
number=i;
flag=1;
break;
}
}
if(flag==0)
{
printf("无此员工信息!!\n");
printf("是否继续修改(Y/N):");
scanf("%s",&c);
if(c=='N'||c=='n')
break;
continue;
}
printf("1.修改电话 2.修改工资 3.修改学历 4.修改年龄 \n");
printf("请输入(1-4):");
scanf("%s",&num);
if(num<'1'||num>'4')
{
printf("输入错误!\n");
continue;
}
printf("请输入修改后的信息:");
scanf("%s",message);
switch(num)
{
case '1':strcpy(work[number].phone,message); break;
case '2':strcpy(work[number].wage,message); break;
case '3':strcpy(work[number].education,message);break;
case '4':strcpy(work[number].age,message);break;
}
printf("\n\n是否继续修改(Y/N):");
scanf("%s",&c);
if(c=='N'||c=='n') break;
}
write();
}
void menu()//菜单
{
printf("\t\t************职工信息管理系统菜单**********\n");
printf("\t\t* *\n");
printf("\t\t* 1.录入职工信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 2.显示职工信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 3.查询职工信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 4.删除职工信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 5.修改职工信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t* *\n");
printf("\t\t******************************************\n");
printf("\t\t请输入指令(1-5): ");
}
int main()
{
int num;
n=0;
while(1)
{
menu();
scanf("%d",&num);
switch(num)
{
case 1: input(); break;
case 2: show(); break;
case 3: que(); break;
case 4: del(); break;
case 5: mod(); break;
case 0: printf("谢谢使用!\n\n"); return 0;
default :printf("\n--->无效的指令!\n\n\n");
} }}
百度网盘(上面的代码)
链接:https://pan.baidu.com/s/1g4eLmSe8VLJ37BjSRH0w6w?pwd=kayq
提取码:kayq