我这个关于职工管理系统文件编译好像有问题,求解答,我运行代码连接好像有问题

九华山小和尚 2019-07-05 10:35:27
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>

#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;

typedef struct Staff //信息结构体
{
char name[10]; //姓名

char sex[5]; //性别

int Cyear; //出生年,月,日
int Cmonth;
int Cday;

int Gyear; //工作年,月,日
int Gmonth;
int Gday;

char XueLi[10]; //学历

char ZhiWu[10]; //职务

char Adress[10]; //地址

int num; //手机号码

}Staff;

typedef struct LNode
{
Staff data;
struct LNode *next;
}LNode;

/*typedef struct //辅助结构体
{
Staff data;
struct LNode *next;
}MNode;
*/
void VoidList(LNode *t1) //创建链表表头
{
if(t1=(LNode *)malloc(sizeof(LNode)))
{
exit(1);
}
t1->next=NULL;
}

Status CreatList(LNode *t1) //职工信息插入以及排序(字典)
{
LNode *a1,*a2,*a3;

a2=t1->next;
if(a1=(LNode *)malloc(sizeof(LNode)))
{
return ERROR;
}
printf("请输入职工信息:\n");

printf("姓名:\n");
scanf("%s",a1->data.name);

printf("性别(man或者woman):\n");
scanf("%s",a1->data.sex);

printf("出生年月日(分别以逗号(,)结尾.):\n");
scanf("%d,%d,%d",&(a1->data.Cyear),&(a1->data.Cmonth),&(a1->data.Cday));

printf("工作年月日(分别以逗号(,)结尾):\n");
scanf("%d,%d,%d",&(a1->data.Gyear),&(a1->data.Gmonth),&(a1->data.Gday));

printf("学历:\n");
scanf("%s",a1->data.XueLi);

printf("职务:\n");
scanf("%s",a1->data.ZhiWu);

printf("住址:\n");
scanf("%s",a1->data.Adress);

printf("电话号码:\n");
scanf("%d",a1->data.num);

if(t1->next==NULL)
{
t1->next=a1;
t1->next->next=NULL;
}
else
{
for(;a2;a2=a2->next)
{
if(a2->next!=NULL) //在两者之间插入
{
if((strcmp(a2->data.name,a1->data.name)<0)&&(strcmp(a2->next->data.name,a1->data.name)>0))
{
a1->next=a2->next;
a2->next=a1;
break;
}

}
else
if(strcmp(a2->data.name,a1->data.name)==0) //姓名相同不录入
{
break;
}

else
if((strcmp(a2->data.name,a1->data.name)<0)&&(a2->next==NULL)) //链表非空,且排在最后一个
{
a2->next=a1;
a1->next=NULL;
break;
}

else //链表非空,且在头结点后排列
if(strcmp(a2->data.name,a1->data.name)>0)
{
a3=t1->next;
t1->next=a1;
a1->next=a3;
break;
}
}
}

return OK;

}

void put(LNode *t1,FILE *fp)
{
LNode *m1;
m1=t1->next;
if((fp=fopen("职工信息.txt","w"))==NULL)
{
//如果没有该文件
printf("无法打开'职工信息.txt'!\n");
exit(0);
}

for(;m1;m1=m1->next)
{//文件中写入
fprintf(fp,"%s %s %d %d %d %d% d% d% %s %s %s %d",m1->data.name,m1->data.sex,m1->data.Cyear,m1->data.Cmonth,m1->data.Cday,m1->data.Gyear,m1->data.Gmonth,m1->data.Gday,m1->data.XueLi,m1->data.ZhiWu,m1->data.Adress,m1->data.num);
}
if(fclose(fp))
{
printf("无法关闭'职工信息.txt'!\n");
exit(0); //正常退出
}
}

void Print(LNode *t1) //打印当前职工信息
{
int i=0;
LNode *q1;
q1=t1->next;
printf("职工信息如下:\n");
printf("姓名 性别 出生年月 工作年月 学历 职务 住址 电话\n");

while(q1!=NULL)
{
printf("%s ",q1->data.name);
printf("%s ",q1->data.sex);
printf("%d %d %d ",q1->data.Cyear,q1->data.Cmonth,q1->data.Cday);
printf("%d %d %d ",q1->data.Gyear,q1->data.Gmonth,q1->data.Gday);
printf("%s ",q1->data.XueLi);
printf("%s ",q1->data.ZhiWu);
printf("%s ",q1->data.Adress);
printf("%d\n",q1->data.num);
q1=q1->next;
i=i+1;
}
printf("一共%d个员工!",i);
}

Status Delete(LNode *t1) //删除员工操作
{
char name1[10];
LNode *q2,*q3;
q2=t1;
q3=t1->next;
if(q3==NULL)
return ERROR;

printf("请输入您要删除的员工的姓名:\n");
scanf("%s",name1);
for(;q3;q3=q3->next)
{
if(strcmp(q3->data.name,name1)==0)
{
q2->next=q3->next;
free(q3);
printf("删除成功,请继续操作!\n");
break;
}
q2=q3;
}
if(q3==NULL)
{
printf("无职工信息,无需删除操作.\n");
}
return OK;
}

Status Search(LNode *t1) //查询某个职工
{
char name2[10];
int select,flag1=0,flag2=0,num1;
LNode *s1;
s1=t1->next;

if(s1==NULL)
return ERROR;

printf("请输入您要查找的人的条件:");
do
{
printf("***************\n");
printf("1.按姓名查找.\n");
printf("2.按电话查找.\n");
printf("0.结束操作.\n");
printf("***************\n");
scanf("%d",&select);
switch(select)
{
case 1:
printf("请输入要查找的人的姓名:\n");
scanf("%s",name2);
for(;s1;s1=s1->next)
{
if(strcmp(s1->data.name,name2)==0)
{
printf("这个职工的信息是:\n");
pirntf("姓名:\n");
printf("%s",s1->data.name);
printf("性别:\n");
printf("%s",s1->data.sex);
printf("出生年月日:\n");
printf("%5d%2d%2d",s1->data.Cyear,s1->data.Cmonth,s1->data.Cday);
printf("工作年月日:\n");
printf("%5d%2d%2d",s1->data.Gyear,s1->data.Gmonth,s1->data.Gday);
printf("学历:\n");
printf("%s",s1->data.XueLi);
printf("职务:\n");
printf("%s",s1->data.ZhiWu);
printf("住址:\n");
printf("%s",s1->data.Adress);
printf("电话:\n");
printf("%d",s1->data.num);
flag1=1;
break;
}
}
if(flag1=0)
{
printf("对不起,没有查到那个职工的信息.\n");
}
break;
case 2:
printf("请输入要查询者的电话号码.\n");
scanf("%d",&num1);
for(;s1;s1=s1->next)
{
if(s1->data.num==num1)
{
printf("这个职工的信息是:\n");
pirntf("姓名:\n");
printf("%s",s1->data.name);
printf("性别:\n");
printf("%s",s1->data.sex);
printf("出生年月日:\n");
printf("%5d%2d%2d",s1->data.Cyear,s1->data.Cmonth,s1->data.Cday);
printf("工作年月日:\n");
printf("%5d%2d%2d",s1->data.Gyear,s1->data.Gmonth,s1->data.Gday);
printf("学历:\n");
printf("%s",s1->data.XueLi);
printf("职务:\n");
printf("%s",s1->data.ZhiWu);
printf("住址:\n");
printf("%s",s1->data.Adress);
printf("电话:\n");
printf("%d",s1->data.num);
flag2=1;
break;
}
}
if(flag2==0)
printf("对不起,没有查询到那个职工的信息.\n");
break;
case 0:
printf("结束操作.\n");
break;

default:
printf("输入选择出错!\n");
}
}
while(select!=0);
return OK;
}

void Amend(LNode *t1) //修改某个员工的某些信息
{
int n,tag=0;
int scyear,scmonth,scday,sgyear,sgmonth,sgday,snum;
char sname[10],ssex[5],sxue[10],szhi[10],sadress[10];
char name3[10];
LNode *s2;
s2=t1->next;

if(t1->next==NULL)
{
printf("没有可以修改的学生.\n");
return;
}

printf("请输入要修改员工的姓名:\n");
scanf("%s",name3);

for(;s2;s2->next)
{
if(strcmp(s2->data.name,name3)==0)
{
tag=1;
do
{
printf("请输入您想更改的部分:\n");
printf("***************\n");
printf("0.退出更改.\n");
printf("1.姓名\n");
printf("2.性别\n");
printf("3.出生年月日\n");
printf("4.工作年月日\n");
printf("5.学历\n");
printf("6.职务\n");
printf("7.住址\n");
printf("8.电话号码\n");
printf("***************\n");

scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入想更改的名字:\n");
scanf("%s",sname);
strcpy(s2->data.name,sname);
printf("更改完成,请继续操作.\n\n");
break;
case 2:
printf("请输入想更改的性别:\n");
scanf("%s",ssex);
strcpy(s2->data.sex,ssex);
printf("更改完成,请继续操作.\n\n");
break;
case 3:
printf("请输入想更改的出生年月日.\n");
scanf("%d%d%d",&scyear,&scmonth,&scday);
s2->data.Cyear=scyear;
s2->data.Cmonth=scmonth;
s2->data.Cday=scday;
printf("更改完成,请继续操作.\n\n");
break;
case 4:
printf("请输入要更改的工作时间.\n");
scanf("%d%d%d",&sgyear,&sgmonth,&sgday);
s2->data.Gyear=sgyear;
s2->data.Gmonth=sgmonth;
s2->data.Gday=sgday;
printf("更改完成,请继续操作.\n\n");
break;
case 5:
printf("请输入想更改的学历.\n");
scanf("%s",sxue);
strcpy(s2->data.XueLi,sxue);
printf("更改完成,请继续操作.\n\n");
break;
case 6:
printf("请输入想更改的职务.\n");
scanf("%s",szhi);
strcpy(s2->data.ZhiWu,szhi);
printf("更改完成,请继续操作.\n\n");
break;
case 7:
printf("请输入想更改的住址.\n");
scanf("%s",sadress);
strcpy(s2->data.Adress,sadress);
printf("更改完成,请继续操作.\n\n");
break;
case 8:
printf("请输入想更改的号码.\n");
scanf("%d",&snum);
s2->data.num=snum;
printf("更改完成,请继续操作.\n\n");
break;
case 0:
printf("退出操作.\n");
break;
default:
printf("您的选择出现了问题,请重新选择.\n");
}
}
while(n!=0);

}
}
if(tag==0)
pirntf("抱歉,您输入的人不存在.\n");
}

void main()
{
int i;
FILE *fp;
LNode t,*T;
T=&t;

VoidList(T);

do
{
printf("*******************\n");
printf("1.新增一名员工.\n");
printf("2.删除一名员工.\n");
printf("3.查询一名员工(按照名字或号码)\n");
printf("4.输入名字,修改对应员工的属性\n");
printf("0.退出操作.\n");
printf("*******************\n");

printf("请输入您想操作的数字.\n");
scanf("%d",&i);
switch(i)
{
case 1:
if(CreatList(T)==0)
printf("创建出错.\n");
else
printf("信息建立成功.\n");
put(T,fp);

printf("打印输出当前信息.\n");
Print(T);
printf("\n");

printf("请继续操作.\n\n");
break;
case 2:
Delete(T);

//判断文件是否写入.
if((fp=fopen("职工信息.txt","w"))==NULL)
{
printf("无法打开'职工信息.txt'!\n");
exit(0);
}

put(T,fp);
if(fclose(fp))
{
printf("无法关闭'职工信息.txt'!\n");
exit(0);
}
printf("打印输出当前信息.\n");
Print(T);
printf("\n");

printf("请继续操作.\n\n");
break;
case 3:
Search(T);
printf("打印输出当前信息.\n");
Print(T);
printf("\n");

printf("请继续操作.\n\n");
break;
case 4:
Amend(T);

if((fp=fopen("职工信息.txt","w"))==NULL)
{
printf("无法打开'职工信息.txt'!\n");
exit(0);
}

put(T,fp);
if(fclose(fp))
{
printf("无法关闭'职工信息.txt'!\n");
exit(0);
}

printf("打印输出当前信息.\n");
Print(T);
printf("\n");

printf("请继续操作.\n\n");
break;
case 0:
printf("操作已退出,感谢您的使用.\n");
break;
}

}while(i!=0);
//switch
/*
VoidList(T); 创建空链表
CreatList(T); 对空链表进行赋值,员工信息
Print(T); 打印输出员工信息
Delete(T); 删除某个员工信息
Search(T); 搜寻某个员工信息
Amend(T); 修改某个员工信息
*/
}

/*
基本要求:

职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址电话等信息。

(1)新增一名员工:将新增对象按姓名以字典方式职工管理文件中。

(2)删除一名员工:从职工管理文件中删除一名职工对象。

(3)查询:从职工管理文件中查询符合某些条件的职工。

(4)修改:检索某个职工对象,对其某些属性进行修改。

(5)排序:按某种需要对职工文件对象进行排序。(字典顺序)
*/
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
慕思暗 2021-02-25
  • 打赏
  • 举报
回复
?什么东西提到了我?
embrace_linux 2019-07-10
  • 打赏
  • 举报
回复
那肯定了,除非你特别厉害
九华山小和尚 2019-07-09
  • 打赏
  • 举报
回复
引用 10 楼 main(进击的菜鸟)的回复:
[quote=引用 9 楼 九华山小和尚 的回复:] [quote=引用 8 楼 main(进击的菜鸟)的回复:]最好功能逐个实现,从最基础的开始,其他的先注释掉,这种项目不要急于写一大堆
这个项目我感觉不是很大,那样慢慢写太浪费时间了[/quote] 但是一旦出错就就像你这样子[/quote] 以后写大的程序都是一个一个功能慢慢实现吗
embrace_linux 2019-07-09
  • 打赏
  • 举报
回复
引用 9 楼 九华山小和尚 的回复:
[quote=引用 8 楼 main(进击的菜鸟)的回复:]最好功能逐个实现,从最基础的开始,其他的先注释掉,这种项目不要急于写一大堆
这个项目我感觉不是很大,那样慢慢写太浪费时间了[/quote] 但是一旦出错就就像你这样子
九华山小和尚 2019-07-09
  • 打赏
  • 举报
回复
引用 8 楼 main(进击的菜鸟)的回复:
最好功能逐个实现,从最基础的开始,其他的先注释掉,这种项目不要急于写一大堆
这个项目我感觉不是很大,那样慢慢写太浪费时间了
embrace_linux 2019-07-08
  • 打赏
  • 举报
回复
最好功能逐个实现,从最基础的开始,其他的先注释掉,这种项目不要急于写一大堆
九华山小和尚 2019-07-06
  • 打赏
  • 举报
回复
引用 3 楼 636f6c696e的回复:
编译问题90%百度就能解决了,就算论坛上问也贴下编译错误内容啊
好的,等下我来贴一下
636f6c696e 2019-07-06
  • 打赏
  • 举报
回复
编译问题90%百度就能解决了,就算论坛上问也贴下编译错误内容啊
九华山小和尚 2019-07-06
  • 打赏
  • 举报
回复
引用 6 楼 慕思暗的回复:
包教包会不急不急 不急
what?你说什么,没看懂
九华山小和尚 2019-07-05
  • 打赏
  • 举报
回复
引用 1 楼 自信男孩 的回复:
这么长的代码,建议通过注释部分功能,然后再逐步放开部分功能,一次来查找问题出在哪个功能函数里,这样也比较容易解决问题
我明天试试,没什么经验,我不知道是不是文件那里用错了
自信男孩 2019-07-05
  • 打赏
  • 举报
回复
这么长的代码,建议通过注释部分功能,然后再逐步放开部分功能,一次来查找问题出在哪个功能函数里,这样也比较容易解决问题

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧