#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#include<string.h>
#include<math.h>
#define Max_teacher 100
typedef struct Teacher{
int num;//教职工号
char name[15];//姓名
char X;//性别
int year;//年龄
char zc;//P初级,J中级,H高级
int money;
char address[10];//工作单位
char km[10];//教学科目
}teacher;
typedef struct node{
teacher date;
struct node *next;
}Node;
Node *head=NULL;
Node *end= NULL;
Node *p=NULL;
Node *q=NULL;
void Add();//输入教职工信息
void Add1();//输入一个教职工信息
void Pint();//输出教职工信息
void Scearch();//按教职工的教职工号查找教职工
void Delect();//删除教职工信息
void Aver();//求教职工的平均工资
void HighMeny();//寻找 工资最高的教职工
void mohu();//模糊搜索
void chushihua();//初 始化一条数据
int main()
{
system(“color 7”);
int mark=3;//允许输入密码的次数
char order;//命令
char mima[11];
printf(" 哈尔滨理工大学教职工管理系统\n 请输入密码\n");
while(mark)
{
scanf("%11s",mima);
if(strcmp(“sucaisheng\0”,mima)0)
{
system(“color 7”);
printf(" 欢迎 苏财胜 登陆哈尔滨理工大学教职工管理系统\n");
break;
}
else
{
system(“color 4”);
mark–;
if(mark0)
{
printf(“此账户已被冻结,请去哈理工账户管理中心解冻\n “);
return -1;
}
printf(“密码错误,请重新输入!\n还剩下%d次输入次数\n”,mark);
}
}
printf(“初始化数据请输入Q\n模糊搜索请输入M\n如果要初始化教职工信息请输入R\n查看教职工信息请输入P\n按教职工号查找教职工请输入S\n删掉教职工的信息请输入D\n增加一条数据请输入O\n求平均工资请输入A\n查找工资最高的教职工请输入C\n退出请输入E\n”);
getchar();
while(1)
{
scanf(”%c”,&order);
getchar();
switch(order)
{
case ‘Q’: system(“CLS”); chushihua(); break;
case ‘M’: system(“CLS”); mohu(); break;
case ‘R’: system(“CLS”); Add(); break;
case ‘O’: system(“CLS”); Add1(); break;
case ‘P’: system(“CLS”); Pint(); break;
case ‘S’: system(“CLS”); Scearch(); break;
case ‘D’: system(“CLS”); Delect(); break;
case ‘A’: system(“CLS”); Aver(); break;
case ‘C’: system(“CLS”); HighMeny(); break;
case ‘E’: goto a;
default :printf(“请输入合法的命令\n”); break;
}
printf(“初始化数据请输入Q\n模糊搜索请输入M\n如果要初始化教职工信息请输入R\n查看教职工信息请输入P\n查找教职工请输入S\n删掉教职工的信息请输入D\n增加一条数据请输入O\n求平均工资请输入A\n查找工资最高的教职工请输入C\n退出请输入E\n”);
}
a:
return 0;
}
void Pint()
{
Node *q1;
q1=head;
if(headNULL)
printf(“系统内数据已被清空,请输入教职工信息\n”);
while(head!=NULL&&q1->next!=NULL)
{
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q1->date.num,q1->date.name,q1->date.X,q1->date.year,q1->date.zc,q1->date.money,q1->date.address,q1->date.km);
q1=q1->next;
}
if(head!=NULL&&q1->nextNULL)
{
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q1->date.num,q1->date.name,q1->date.X,q1->date.year,q1->date.zc,q1->date.money,q1->date.address,q1->date.km);
printf(“教职工信息已全部输出\n”);
}
}
void Scearch()
{
Node *q2;
int num1,mark=0;
q2=head;
printf(“请输入需要查询的教职工号\n”);
scanf("%d",&num1);
getchar();
while(q2!=NULL&&q2->next!=NULL)
{
if(q2->date.num!=num1)
q2=q2->next;
else
{
mark=1;
break;
}
}
if(mark1)
{
printf(“你查询的教职工信息如下:”);
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q2->date.num,q2->date.name,q2->date.X,q2->date.year,q2->date.zc,q2->date.money,q2->date.address,q2->date.km);
}
else if(q2->date.numnum1)
{
printf(“你查询的教职工信息如下:”);
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q2->date.num,q2->date.name,q2->date.X,q2->date.year,q2->date.zc,q2->date.money,q2->date.address,q2->date.km);
}
else printf(“系统中没有你要查找的教职工信息!\n”);
}
void Delect()
{
int num2,mark=0;
Node *q3,*q4,*temp;
q3=head;
q4=head;
printf(“请输入想要删除的教职工号:”);
scanf("%d",&num2);
getchar();
while(head!=NULL&&q3->next!=NULL)
{
if(q3->date.num!=num2)
{
q4=q3;
q3=q3->next;
}
else
{
mark=1;
break;
}
}
if(mark1)
{
temp=q3->next;
q4->next=temp;
free(q3);
printf(“删除完成\n”);
}
else if(q3->date.numnum2)
{
q4->next=NULL;
free(q3);
printf(“删除完成\n”);
}
else printf(“系统中没有你想要删除的教职工编号!\n”);
}
void Aver()
{
float sum=0,aver=0;
Node *p1;
p1=head;
int i=0;
while(head!=NULL&&p1->next!=NULL)
{
sum+=p1->date.money;
i+=1;
p1=p1->next;
}
if(head!=NULL&&p1->next==NULL)
{
sum+=p1->date.money;
i+=1;
}
aver=sum/i;
printf("%f\n",aver);
}
void HighMeny()
{
Node *p1;
float max=0;
p1=head;
while(head!=NULL&&p1->next!=NULL)
{
if(p1->date.money>max)
max=p1->date.money;
p1=p1->next;
}
if(head!=NULL&&p1->nextNULL)
{
if(p1->date.money>max)
max=p1->date.money;
}
printf("%.2f\n",max);
}
void mohu()
{
Node *q5;
char temp;
char *res;
char name1[15];
int n;
q5=head;
printf(“输入想要查找的人名,支持模糊查找\n”);
scanf("%s",name1);
getchar();
while(head!=NULL&&q5->next!=NULL)
{
n=5;
res=memchr(q5->date.name,name1[0],strlen(q5->date.name));
if(resNULL)
continue;
while(1)
{
n=5;
n=memcmp(res,name1,strlen(name1)-1);
if(n!=0)
{
if(strlen(res)<=strlen(name1))
break;
else
res=memchr(res+1,name1[0],strlen(q5->date.name));
if(resNULL)
break;
}
else if(n0)
{
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q5->date.num,q5->date.name,q5->date.X,q5->date.year,q5->date.zc,q5->date.money,q5->date.address,q5->date.km);
break;
}
}
q5=q5->next;
}
if(head!=NULL&&q5->nextNULL)
{
n=1;
res=memchr(q5->date.name,name1[0],strlen(q5->date.name));
while(1)
{
n=memcmp(res,name1,strlen(name1)-1);
if(n!=0)
{
if(strlen(res)<=strlen(name1))
break;
else
res=memchr(res+1,name1[0],strlen(q5->date.name));
if(resNULL)
break;
}
else if(n0)
{
printf(“教职工号:%d 姓名:%s 性别:%c 年龄:%d 职称:%c 工资:%d 工作单位:%s 教学科目:%s\n”,q5->date.num,q5->date.name,q5->date.X,q5->date.year,q5->date.zc,q5->date.money,q5->date.address,q5->date.km);
break;
}
}
}
}
void Add()
{
int T;
int num;//教职工号
char name[15];
char X;//性别
int year;//年龄
char zc;//P初级,J中级,H高级
int money;
char address[10];//工作单位
char km[10];//教学科目
if(!(p=(Node *)malloc(sizeof(Node))))
{
printf(“请求空间失败\n”);
exit(0);
}
else
{
printf(“请输入要加入的数据\n教职工号 姓名 性别 年龄 职称 工资 工作单位 教学科目\n”);
scanf("%d",&num);
scanf("%s",name);
getchar();
scanf("%c",&X);
scanf("%d",&year);
getchar();
scanf("%c",&zc);
getchar();
scanf("%d",&money);
scanf("%s",address);
scanf("%s",km);
getchar();
p->date.num=num;
strcpy(p->date.name,name);
p->date.X=X;
p->date.year=year;
p->date.zc=zc;
p->date.money=money;
strcpy(p->date.address,address);
strcpy(p->date.km,km);
q=p;
if(endNULL)
end=q;
else
{
end->next=q;
end=q;
}
end->next=NULL;
}
if(headNULL)
head=p;
z:
printf(“如果还要加入数据请输入1,不在增加数据请输入0\n”);
scanf("%d",&T);
getchar();
if(T!=1&&T!=0)
{
printf(“输入指令无效\n”);
goto z;
}
while(T)
{
if(!(p=(Node *)malloc(sizeof(Node))))
{
printf(“请求空间失败\n”);
exit(0);
}
else
{
printf(“请输入要加入的数据\n教职工号 姓名 性别 年龄 职称 工资 工作单位 教学科目\n”);
scanf("%d",&num);
scanf("%s",name);
getchar();
scanf("%c",&X);
scanf("%d",&year);
getchar();
scanf("%c",&zc);
scanf("%d",&money);
scanf("%s",address);
scanf("%s",km);
getchar();
p->date.num=num;
strcpy(p->date.name,name);
p->date.X=X;
p->date.year=year;
p->date.zc=zc;
p->date.money=money;
strcpy(p->date.address,address);
strcpy(p->date.km,km);
q->next =p;
q=p;
end=q;
end->next =NULL;
}
b:
printf(“如果还要加入数据请输入1,不在增加数据请输入0\n”);
scanf("%d",&T);
getchar();
if(T!=1&&T!=0)
{
printf(“输入指令无效\n”);
goto b;
}
}
}
void chushihua()
{
int num=100;//教职工号
char name[15]={“苏财胜”};
char X=‘m’;//性别
int year=17;//年龄
char zc=‘j’;//P初级,J中级,H高级
int money=4000;
char address[10]={“hlg”};//工作单位
char km[10]={“shuxue”};//教学科目
Node *p1;
if(!(p1=(Node *)malloc(sizeof(Node))))
{
printf(“请求空间失败\n”);
exit(0);
}
else
{
p1->date.num=num;
strcpy(p1->date.name,name);
p1->date.X=X;
p1->date.year=year;
p1->date.zc=zc;
p1->date.money=money;
strcpy(p1->date.address,address);
strcpy(p1->date.km,km);
end=p1;
end->next=NULL;
}
if(headNULL)
head=p1;
printf(“初始化数据完成\n”);
}
void Add1()
{
int num;//教职工号
char name[15];
char X;//性别
int year;//年龄
char zc;//P初级,J中级,H高级
int money;
char address[10];//工作单位
char km[10];//教学科目
Node *p1;
if(!(p1=(Node *)malloc(sizeof(Node))))
{
printf(“请求空间失败\n”);
exit(0);
}
else
{
printf(“请输入要加入的数据\n教职工号 姓名 性别 年龄 职称 工资 工作单位 教学科目\n”);
scanf("%d",&num);
scanf("%s",name);
getchar();
scanf("%c",&X);
scanf("%d",&year);
getchar();
scanf("%c",&zc);
scanf("%d",&money);
scanf("%s",address);
scanf("%s",km);
getchar();
p1->date.num=num;
strcpy(p1->date.name,name);
p1->date.X=X;
p1->date.year=year;
p1->date.zc=zc;
p1->date.money=money;
strcpy(p1->date.address,address);
strcpy(p1->date.km,km);
end->next=p1;
end=p1;
end->next=NULL;
}
printf(“添加完成\n”);
}