admin 管理员组

文章数量: 887021


2023年12月18日发(作者:java基础速成)

主要源程序代码

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int shoudsave=0; //用于记录信息数目

struct folk

{

char xmmc[20]; //项目名称地址

int total; //年底职工总数

int gj; //高级职工

int zj; //中级职工

int cj; //初级职工

int qt; //其他职工

int ave;//平均职工

} //结构体定义

typedef struct node

{

struct folk data;

struct node *next; //指向struct node类型数据(建立链表)

} node,*Link;

void menu() //菜单

{

printf("********************************************************************************");

printf("tttt1职工人数录入ntttt2职工人数显示n");

printf("tttt3职工人数保存ntttt4职工人数排序n");

printf("tttt5职工人数修改ntttt6职工人数统计n");

printf("tttt7职工人数删除ntttt8职工人数查询n");

printf("tttt9帮助信息ntttt0退出系统n");

printf("********************************************************************************n");

}

void printstart()

{

printf("-----------------------------------------------------------------------n");

}

void Wrong() //输入错误

{

printf("n提示:输入错误!n");

}

void Nofind() //查找的信息不存在

{

printf("n提示:未找到符合要求的地区!n");

}

void printc() // 该函数用于输出职工信息

{

printf(" 项目名称t 职工总人数 高级职工 中级职工 初级职工 其他职工 平均职工n");

}

void printe(Node *p)//该函数用于输出数据

{

printf("%-12s%st%dt%dt%dt%dt%dt %dt %dn",p->,p->,p->,p->,p->,p->,p->);

}

Node* Locate(Link l,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针

{

Node *r;

if(strcmp(nameornum,"xmmc")==0) //按地区查询

{

r=l->next;

while(r!=NULL)

{

if(strcmp(r->,findmess)==0)

return r;

r=r->next;

}

}

}

void Add(Link l) //建立职工信息

{

Node *p,*r,*s;

char xmmc[10];

r=l;

s=l->next;

while(r->next!=NULL)

r=r->next; //使指针置指向最末尾

while(1)

{

printf("请输入地区('0'键返回菜单:)");

scanf("%s",xmmc);

if(strcmp(xmmc,"0")==0)

break;

while(s)

{

if(strcmp(s->,xmmc)==0)

{

printf("提示:地区为'%s'的城市已存在,请选择'5 修改'!n",num);

printstart();

printc();

printe(s);

printstart();

printf("n");

return;

}

s=s->next;

}

p=(Node *)malloc(sizeof(Node));

strcpy(p->,xmmc);

printf("请输入地区:");

scanf("%s",p->);

getchar();

printf("请输入高级职工人数:");

scanf("%d",&p->);

getchar();

printf("请输入中级职工人数:");

scanf("%d",&p->);

getchar();

printf("请输入初级职工人数:");

scanf("%d",&p->);

getchar();

printf("请输入其他职工人数:");

scanf("%d",&p->);

getchar();

p->=p->+p->+p->+p->;

p->=p-> / 4; //信息输入完成

p->next=NULL;

r->next=p;

r=p;

shoudsave=1;

}

}

void Qur(Link l) //查询职工信息

{

int sel;

char findmess[20];

Node *p;

if(!l->next)

{

printf("n提示:没有资料可以查询!n");

return;

}

printf("n1按地区查找.n");

scanf("%d",&sel);

if(sel==1)//按地区查询

{

printf("请输入要查询的地区:");

scanf("%s",findmess);

p=Locate(l,findmess,"xmmc");

if(p)

{

printf("tttt查询结果n");

printstart();

printc();

printe(p);

printstart();

}

void Qur(Link l) //查询学生信息

{

int sel;

char findmess[20];

Node *p;

if(!l->next)

{

printf("n提示:没有资料可以查询!n");

return;

}

printf("n1按学号查找.n2按姓名查找.n");

scanf("%d",&sel);

if(sel==1)//按学号查询

{

printf("请输入要查询的学号:");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("tttt查询结果n");

printstart();

printc();

printe(p);

printstart();

}

else

Nofind();

}

}

void Del(Link l) //删除指定职工信息

{

int sel;

Node *p,*r;

char findmess[20];

if(!l->next)

{

printf("n提示:没有相应资料可以删除!n");

return;

}

printf("n1按地区删除n");

scanf("%d",&sel);

if(sel==1)

{

printf("请你输入要删除的地区:");

scanf("%s",findmess);

p=Locate(l,findmess,"xmmc");

if(p)

{

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);

printf("n提示:该地区已经成功删除!n");

shoudsave=1;

}

else

Nofind();

}

}

void Modify(Link l)

{

Node *p;

char findmess[20];

if(!l->next)

{

printf("n提示:没有资料可以修改!n");

return;

}

printf("请输入需要修改的地区:");

scanf("%s",findmess);

p=Locate(l,findmess,"xmmc");

if(p)

{

printf("请输入新地区(原来的是%s):",p->);

scanf("%s",p->);

printf("请输入新高级职工(原来是%d):",p->);

scanf("%s",p->);

getchar();

printf("请输入新中级职工(原来是%d):",p->);

scanf("%s",p->);

printf("请输入新初级职工(原来的是%d):",p->);

scanf("%d",&p->);

getchar();

printf("请输入新其他职工(原来的是%d):",p->);

scanf("%d",&p->);

getchar();

p->=p->+p->+p->+p->+p->;

p->=p->/4;

printf("n提示:资料修改成功!n");

shoudsave=1;

}

else

Nofind();

}

void Disp(Link l)

{

int count=0;

Node *p;

p=l->next;

if(!p)

{

printf("n提示:没有资料可以显示!n");

return;

}

printf("tttt显示结果n");

printstart();

printc();

printf("n");

while(p)

{

printe(p);

p=p->next;

}

printstart();

printf("n");

}

void Tongji(Link l)

{

Node *pm,*pe,*pc,*pp,*pt,*pa; //用于指向职工人数最高的接点

Node *r=l->next;

if(!r)

{

printf("n提示:没有资料可以统计!n");

return ;

}

pm=pe=pc=pp=pt=pa=r;

while(r!=NULL)

{

if(r->>=pc->)

pc=r;

if(r->>=pm->)

pm=r;

if(r->>=pe->)

pe=r;

if(r->>=pp->)

pp=r;

if(r->>=pt->)

pt=r;

if(r->>=pa->)

pa=r;

r=r->next;

}

printf("------------------------------统计结果--------------------------------n");

printf("总人数最高者:t%s %d人n",pt->,pt->);

printf("平均人数最高者:t%s %d人n",pa->,pa->);

printf("高级职工最高者:t%s %d人n",pe->,pe->);

printf("中级职工最高者:t%s %d人n",pm->,pm->);

printf("初级职工最高者:t%s %d人n",pc->,pc->);

printf("其他职工最高者:t%s %d人n",pc->,pp->);

printstart();

}

void Sort(Link l)

{

Link ll;

Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); //用于做新的连表

ll->next=NULL;

if(l->next==NULL)

{

printf("n提示:没有资料可以排序!n");

return ;

}

p=l->next;

while(p)

{

s=(Node*)malloc(sizeof(Node)); //新建接点用于保存信息

s->data=p->data;

s->next=NULL;

rr=ll;

while(rr->next!=NULL && rr->next->>=p->)

rr=rr->next;

if(rr->next==NULL)

rr->next=s;

else

{

s->next=rr->next;

rr->next=s;

}

p=p->next;

}

free(l);

l->next=ll->next;

printf("n提示:排序完成!n");

}

void Save(Link l)

{

FILE* fp;

Node *p;

int flag=1,count=0;

fp=fopen("c:zgtj","wb");

if(fp==NULL)

{

printf("n提示:打开文件时出错!n");

exit(1);

}

p=l->next;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p=p->next;

count++;

}

else

{

flag=0;

break;

}

}

if(flag)

{

printf("n提示:数据保存成功.(有%d条记录保存.)n",count);

shoudsave=0;

}

fclose(fp);

}

void main()

{

Link l;//连表

FILE *fp; //文件指针

int sel;

char ch;

char jian;

int count=0;

Node *p,*r;

printf("tttt从业人员统计系统ntttt n");

l=(Node*)malloc(sizeof(Node));

l->next=NULL;

r=l;

fp=fopen("C:zgtj","rb");

if(fp==NULL)

{

printf("n提示:文件不存在,是否建立新文件?(y/n)n");

scanf("%c",&jian);

if(jian=='y'||jian=='Y')

fp=fopen("C:zgtj","wb");

else

exit(0);

}

printf("n提示:正在处理数据......n");

while(!feof(fp))

{

p=(Node*)malloc(sizeof(Node));

if(fread(p,sizeof(Node),1,fp)) //将文件的内容放入接点中

{

p->next=NULL;

r->next=p;

r=p; //将该接点挂入连中

count++;

}

}

fclose(fp); //关闭文件

printf("n提示:数据处理完成,共有%d条记录.n",count);

while(1)

{

menu();

printf("请选择操作:");

scanf("%d",&sel);

if(sel==0)

{

if(shoudsave==1)

{

getchar();

printf("n提示:是否保存当前文件 (y/n)?n");

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

Save(l);

}

printf("n提示:成功退出系统 !n");

break;

}

switch(sel)

{

case 1:Add(l);break; //职工人数录入

case 2:Disp(l);break;//职工人数显示

case 3:Save(l);break;//职工人数保存

case 4:Sort(l);break;//职工人数排序

case 5:Modify(l);break;//职工人数修改

case 6:Tongji(l);break;//职工人数统计

case 7:Del(l);break;//职工人数删除

case 8:Qur(l);break;//职工人数查询

case 9:printf("ttt==========帮助信息==========n");break;

default: Wrong();getchar();break;

}

}


本文标签: 职工 人数 提示 信息