as821621435 2017-03-09 01:16 采纳率: 0%
浏览 1336
已结题

用链表写的职工工资管理系统在读取文件内容时出错

#include
#include
#include
#include
#define LEN sizeof(struct worker)
#define N 3
int n;
typedef struct worker //定义结构体
{
long num;
char name[20];
char bm[20];
int gwgz;
int gwjt;
int bfgz;
int ylbx;
int sds;
int sdf;
int yfgz;
int sfgz;
struct worker*next;

}YZY;
int*tzz()//创建头指针
{
YZY*head;
head = (YZY*)malloc(LEN);
return (head);
}
void create(YZY*head)//创建链表函数
{
YZY*p1;
YZY*p2;
p2 = (YZY*)malloc(LEN);
p1 = head;
p2 = head;
for(n = 1; n < N; n++)
{
p1 = (YZY*)malloc(LEN);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
}
void save(YZY*head) //保存函数
{
FILE*fp;
YZY*p1;
p1 = head;
if ((fp = fopen("stu.txt", "wb")) == NULL)
{
printf("can not open file\n");

}

do
{
    fwrite(p1, sizeof(LEN), 1, fp);
    p1 = p1->next;

}while (p1 != NULL);
fclose(fp);
return;

}
void add(YZY*head) //添加原始信息函数
{
YZY*p1;
p1 = head;
n = 1;
do
{
printf("请输入第%d个职工的初始信息:\n", n);
printf("请输入员工的职工号:\n");
scanf("%d", &p1->num);
printf("请输入员工的姓名:\n");
scanf("%s", p1->name);
printf("请输入员工的所属部门\n");
scanf("%s", p1->bm);
printf("请输入员工的岗位工资\n");
scanf("%d", &p1->gwgz);
printf("请输入员工的岗位津贴\n");
scanf("%d", &p1->gwjt);
printf("请输入员工的补发工资\n");
scanf("%d", &p1->bfgz);
printf("请输入员工的医疗保险\n");
scanf("%d", &p1->ylbx);
printf("请输入员工的水电费\n");
scanf("%d", &p1->sdf);
p1->yfgz = p1->gwgz + p1->gwjt + p1->bfgz + p1->ylbx;
p1 = p1->next;
system("cls");
n++;
} while (p1 != NULL);
save(head);
}

void load(YZY*head)//读取函数
{

FILE*fp;
YZY*p;
p = head;
if ((fp = fopen("stu.txt", "rb")) == NULL)
{
    printf("error\n");
    exit(0);
}
do
{
    fread(p, sizeof(LEN),1, fp);
    printf("%d", p->num);
    p = p->next;
} while (p != NULL);
fclose(fp);
return;

}
void print(YZY*head)//输出所有员工信息
{
YZY*p;
printf("全体职工信息如下:\n");
/*load(head);*/
p = head;
do
{
printf("员工号为:%d\n", p->num);
printf("姓名:%s\n", p->name);
printf("所属部门:%s\n", p->bm);
printf("岗位工资为:%d\n", p->gwgz);
printf("岗位津贴为:%d\n", p->gwjt);
printf("医疗保险为:%d\n", p->ylbx);
printf("补发工资为:%d\n", p->bfgz);
printf("所得税为:%d\n", p->sds);
printf("水电费为:%d\n", p->sdf);
printf("应发工资为%d\n", p->yfgz);
printf("实发工资为:%d\n", p->sfgz);
p = p->next;
} while (p != NULL);

}
void del(YZY*head) //删除函数
{
YZY*p;
YZY*q;
q = (YZY*)malloc(LEN);
p = head;
int ch;
int a;
printf("请输入您要删除的职工的职工号\n");
scanf("%d", &ch);
printf("请确认是否删除员工号为%d的员工\n", ch);
printf("1(确认删除) 2(退出主菜单)");
scanf("%d", &a);
if (a == 2)
{
menu();
}
if (a == 1)
{
if (head->num == ch)
{
head = p->next;
free(head);
printf("删除成功按任意键返回 主菜单\n");
system("pause");
menu();

    }
    for (p = p->next; p->num != ch; p = p->next)
    {
        p = q;
        if (p->num = ch)
        {
            q->next = p->next;
            free(p);
            return;
            printf("删除成功按任意键返回主菜单\n");
            system("pause");
            menu();

        }
    }
    if (p->num != ch)
    {
        printf("对不起查无此人 将返回主菜单\n");
        menu();
    }
}
save(head);

}

void insert(YZY*head) //增添函数
{
YZY*p;
YZY*q;
q = head;
p = (YZY*)malloc(LEN);
printf("请输入您要增加的员工的员工号:\n");
scanf("%d", &p->num);
for (; q != NULL; q = q->next)
{
if (q->num == p->num)

        printf("对不起 该工号已经被占用 请重新输入\n");



    else
    {
        printf("输入成功 请完成其它信息的输入\n");
        printf("请输入员工的姓名:\n");
        scanf("%s", p->name);
        printf("请输入员工的所属部门\n");
        scanf("%s", p->bm);
        printf("请输入员工的岗位工资\n");
        scanf("%d", &p->gwgz);
        printf("请输入员工的岗位津贴\n");
        scanf("%d", &p->gwjt);
        printf("请输入员工的补发工资\n");
        scanf("%d", &p->bfgz);
        printf("请输入员工的医疗保险\n");
        scanf("%d", &p->ylbx);
        printf("请输入员工的水电费\n");
        scanf("%d", &p->sdf);
        p->yfgz = p->gwgz + p->gwjt + p->bfgz + p->bfgz + p->ylbx;
        p->next = head->next;
        head->next = p;
        save(head);
    }
    break;
}

}
void search(YZY*head)
{
int ch;
int i;
YZY m;
YZY*p;
p = head;
printf("请选择您要查询的方式: 1、按职工号查找 2、按职工姓名查找\n");
scanf("%d", &ch);
if (ch == 1)
{
printf("请输入您要查找的职工号\n");
scanf("%d", &i);
if (p->num == i)
{
printf("该员工的信息如下\n");
printf("该员工的员工号为:%d\n", p->num);
printf("该员工的姓名为:%s\n", p->name);
printf("该员工所属的部门是:%s\n", p->bm);
printf("该员工的岗位工资为:%d\n", p->gwgz);
printf("该员工的岗位津贴为:%d\n", p->gwjt);
printf("该员工的补发工资为:%d\n", p->bfgz);
printf("该员工的医疗保险为:%d\n", p->ylbx);
printf("该员工的所得税为:%d\n", p->sds);
printf("该员工的水电费为:%d\n", p->sdf);
printf("该员工的应发工资为:%d\n", p->yfgz);
printf("该员工的实发工资为:%d\n", p->sfgz);
}

    for (p = p->next; p != NULL; p = p->next)
    {
        if (p->num == i)

        {

            printf("该员工的信息如下\n");
            printf("该员工的员工号为:%d\n", p->num);
            printf("该员工的姓名为:%s\n", p->name);
            printf("该员工所属的部门是:%s\n", p->bm);
            printf("该员工的岗位工资为:%d\n", p->gwgz);
            printf("该员工的岗位津贴为:%d\n", p->gwjt);
            printf("该员工的补发工资为:%d\n", p->bfgz);
            printf("该员工的医疗保险为:%d\n", p->ylbx);
            printf("该员工的所得税为:%d\n", p->sds);
            printf("该员工的水电费为:%d\n", p->sdf);
            printf("该员工的应发工资为:%d\n", p->yfgz);
            printf("该员工的实发工资为:%d\n", p->sfgz);
            goto loop;

        }
    }

            if (p == NULL)
            {
                printf("输入的职工号错误\n");

            }

        loop:i = 0;
}


if (ch == 2)
{
    printf("请输入要查找的的员工姓名\n");
    scanf("%s", m.name);
    if (strcmp(p->name, m.name) == 0)
    {
        printf("该员工的信息如下\n");
        printf("该员工的员工号为:%d\n", p->num);
        printf("该员工的姓名为:%s\n", p->name);
        printf("该员工所属的部门是:%s\n", p->bm);
        printf("该员工的岗位工资为:%d\n", p->gwgz);
        printf("该员工的岗位津贴为:%d\n", p->gwjt);
        printf("该员工的补发工资为:%d\n", p->bfgz);
        printf("该员工的医疗保险为:%d\n", p->ylbx);
        printf("该员工的所得税为:%d\n", p->sds);
        printf("该员工的水电费为:%d\n", p->sdf);
        printf("该员工的应发工资为:%d\n", p->yfgz);
        printf("该员工的实发工资为:%d\n", p->sfgz);
    }

    menu();
}
if (p = NULL)
{
    printf("你输入的的名字错误\n");




}
menu();

}
void modify(YZY*head)
{

YZY*p1;
int ch;
printf("请输入您要改的员工的工号:\n");
scanf("%d", &ch);
p1 = head;
for (; p1->num != ch; p1 = p1->next)
{
    if (p1->num == ch)
    {
        printf("请输入新员工的初始信息:\n");
        printf("请输入新的职工号:\n");
        scanf("%d", &p1->num);
        printf("请输入新的姓名:\n");
        scanf("%s", p1->name);
        printf("请输入新的所属部门\n");
        scanf("%s", p1->bm);
        printf("请输入新的岗位工资\n");
        scanf("%d", &p1->gwgz);
        printf("请输入新的岗位津贴\n");
        scanf("%d", &p1->gwjt);
        printf("请输入新的补发工资\n");
        scanf("%d", &p1->bfgz);
        printf("请输入新的医疗保险\n");
        scanf("%d", &p1->ylbx);
        printf("请输入新的水电费\n");
        scanf("%d", &p1->sdf);
        p1->yfgz = p1->gwgz + p1->gwjt + p1->bfgz + p1->bfgz + p1->ylbx;
        /*count(p1);*/
        save(head);

    }
    if (p1 == NULL)
    {

        printf("对不起查无此人 将返回主菜单\n");


    }

}

}

int menu()
{
printf(" ****************欢迎进入南天职工工资管理系统******************** \n");
printf(" 1.录入员工基本信息 2.输出所有员工初始数据 \n");
printf(" 3.查询员工工资明细 4.增加员工工资信息 \n");
printf(" 5.修改员工工资信息 6.删除员工工资信息 \n");
printf(" 7.读出原始数据 制作人:姚智瀛");
printf(" (请选择输入1-6选择您的操作 ) \n");
return 0;
}

int main()
{
int m;
m = 0;
int button;
YZY*head;
head = tzz();
create(head);
menu();
while (m != 1)
{

    printf("请根据提示选择您要使用的功能\n");
    scanf("%d", &button);
    switch (button)
    {   
    case 1: add(head);  break;
    case 2:print(head);   break;
    case 3:search(head);  break;
    case 4:insert(head);     break;
    case 5:modify(head);  break;
    case 6:del(head);     break;
    case 7:load(head);    break;
    case 8:
    case 9:printf("输入错误 请依照提示重新输入\n"); break;
    default:  break;

    }

    menu();


}

}

  • 写回答

8条回答 默认 最新

  • 魔亦有道 2017-03-09 01:15
    关注

    请把错误提示也一起粘贴出来

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题