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;
}
}
版权声明:本文标题:主要源程序代码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702906388h435455.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论