无法运行,在另一个程序上可以运行出结果,但在这个程序上不行、
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
//结点类型定义
typedef struct{
int id;//职工号
char name[00];//名字
char sex[10];//性别
char birthday[15];//出生年月
char wages[15];//工资
char address[60];//住址
char education[10];//学历
char positions[10];//职务
} ElemType;
typedef struct node{
ElemType data;
struct node* next;
}LNode,* LinkList;
//函数声明
void ListCreate(LinkList &L,int n); //创建员工基本信息链表
void ListPrint(LinkList L); //浏览员工基本信息
void LocateElem(LinkList L,int x); //查找 某个员工基本信息
void ListInsert(LinkList &L,ElemType e); //添加员工信息到单链表
void ListDelete(LinkList &L,int x); //删除一个员工信息
void welcome();
//主函数
int main()
{system("color 3f");
int control; // 循环中控制操作
int x; //查找的员工学号
int n; //欲创建的员工个数
ElemType e; //员工信息
LinkList p; //工作指针
LinkList L; //链表头指针
while(1){
printf(" 1创造链表 2输出链表 3查找 4插入 5删除 6 结束程序\n");
//主循环
scanf("%d",&control);
printf("请输入要创建的员工个数n=:\n");
scanf("%d",&n);
while(control)
{
switch(control)
{
case 1:
{
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资\n");
ListCreate(L,n);
};break;
case 2:
ListPrint(L);break;//输出链表内容
case 3:
{
printf("请输入要查找的员工工资\n");
scanf("%d",&x);
LocateElem(L,x);
};break;
case 4:
{
printf("请输入欲插入的员工信息\n");
scanf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
ListInsert(L,e);
};break;
case 5:
{
printf("请输入欲删除员工的职工号\n");
scanf("%d",&x);
ListDelete(L,x);
};break;
default:
{
printf("程序结束\n");
exit(0);
}break;//结束程序
}
printf("0结束程序 1创造链表 2输出链表 3查找 4插入 5删除\n");
scanf("%d",&control);
}
}
return 0;
}
void ListCreate(LinkList &L,int n){
//正位序输入n个元素的值,建立带表头结点的单链表L
LinkList p,r;
int i;
FILE *fp;//文件
fp=fopen("employee.txt","a+");
if (fp == NULL) //判断文件是否成功打开
{
printf("File open failed!\n");
exit(0);
}
L = (LinkList) malloc (sizeof(LNode));
L->next=NULL;
r=L; //尾指针r指向头结点
for(i=0;i<n;++i){
p = (LinkList) malloc (sizeof(LNode)); //生成新结点
scanf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p->next=NULL; r->next=p; //插入到表尾
r=p; //r指向新的尾结点
}
fprintf(fp,"姓名:%c\n性别:%c\n职工号:%d\n",p->data.name,p->data.sex,p->data.id);
fprintf(fp,"出生年月日:%d年%d月%d日\n",p->data.birthday);
fprintf(fp,"工资:%d\n住址:%c\n学历:%c\n职务:%c\n\n",p->data.wages,p->data.address,p->data.education,p->data.positions);
fclose(fp);
}
//输出链表的值
void ListPrint(LinkList L)
{
LinkList p=L->next;
if(!p)
printf("没有元素输出\n");
while (p)
{
printf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p=p->next;
}
}
//工资定位
void LocateElem(LinkList L,char x)
{
LinkList p=L->next;
int j=0;
while ((p)&&(p->data.wages!=x))
{p=p->next; j++;}
if(!p)
printf("没有该信息\n");
else
printf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
}
//插入
void ListInsert(LinkList &L,ElemType e)
{
// 在带头结点的单链线性表L表尾插入元素e
LinkList q,p=L;
while (p->next)
{p=p->next;}
q=(LinkList)malloc(sizeof(LNode));
p->next=q;
q->data=e;
q->next=NULL;
}
//删除
void ListDelete(LinkList &L,int x)
{
LinkList q,p=L;
while ((p->next)&&(p->next->data.id!=x))
p=p->next;
if(!p->next)
printf("没有找到学号为%d的学生信息\n",x);
else
{
q=p->next;
p->next=p->next->next;
free(q);
}
}
改变x类型为char
可以有正确结果.
/要求职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、
电话等(职工号不重复)。试设计一个职工信息管理系统,包括以下功能:
a) 系统以菜单方式工作;000
b) 职工信息录入功能(职工信息用文件保存)--输入;000
c) 职工信息浏览功能 --输出;000
d) 查询或排序功能:(至少一种查询方式) --算法;
e) 按工资查询;
f) 按学历查询。/
上面x是int
scanf("%d",&x);
ListDelete(L,x);
下面
void LocateElem(LinkList L,char x)应该为void LocateElem(LinkList L,int x)
void LocateElem(LinkList L,char x)中
p->data.wages!=x
wages是char数组,不能直接==或者!=,如果x也是字符串要用strcmp比较,如果x只是int,那么需要先把x转成字符串或者wages转成int了比较。
下面printf中不需要加&
修改完善如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
//结点类型定义
typedef struct {
int id;//职工号
char name[20];//名字
char sex[10];//性别
char birthday[15];//出生年月
char wages[15];//工资
char address[60];//住址
char education[10];//学历
char positions[10];//职务
} ElemType;
typedef struct node {
ElemType data;
struct node* next;
}LNode, * LinkList;
//函数声明
void ListCreate(LinkList& L, int n); //创建员工基本信息链表
void ListPrint(LinkList L); //浏览员工基本信息
void LocateElem(LinkList L, char* x); //查找 某个员工基本信息
void ListInsert(LinkList& L, ElemType e); //添加员工信息到单链表
void ListDelete(LinkList& L, int x); //删除一个员工信息
//void welcome();
//主函数
int main()
{
system("color 3f");
int control; // 循环中控制操作
int x; //查找的员工学号
int n; //欲创建的员工个数
char w[20];
ElemType e = {0};//员工信息
LinkList p=NULL; //工作指针
LinkList L=NULL; //链表头指针
while (1) {
printf(" 1创造链表 2输出链表 3查找 4插入 5删除 6 结束程序\n");
//主循环
scanf("%d", &control);
while (control)
{
switch (control)
{
case 1:
{
printf("请输入要创建的员工个数n=:\n");
scanf("%d", &n);
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资\n");
ListCreate(L, n);
}; break;
case 2:
ListPrint(L); break;//输出链表内容
case 3:
{
printf("请输入要查找的员工工资\n");
scanf("%s", w); //scanf("%d", &x);
LocateElem(L, w);
}; break;
case 4:
{
printf("请输入欲插入的员工信息\n");
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资\n");
scanf("%d %s %s %s %s %s %s", &e.id, e.name, e.birthday,
e.sex, e.address, e.education, e.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
ListInsert(L, e);
}; break;
case 5:
{
printf("请输入欲删除员工的职工号\n");
scanf("%d", &x);
ListDelete(L, x);
}; break;
default:
{
printf("程序结束\n");
exit(0);
}break;//结束程序
}
printf("0结束程序 1创造链表 2输出链表 3查找 4插入 5删除\n");
scanf("%d", &control);
}
}
return 0;
}
void ListCreate(LinkList& L, int n) {
//正位序输入n个元素的值,建立带表头结点的单链表L
LinkList p, r;
int i;
FILE* fp;//文件
fp = fopen("employee.txt", "a+");
if (fp == NULL) //判断文件是否成功打开
{
printf("File open failed!\n");
exit(0);
}
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
r = L; //尾指针r指向头结点
for (i = 0; i < n; ++i) {
p = (LinkList)malloc(sizeof(LNode)); //生成新结点
scanf("%d %s %s %s %s %s %s", &p->data.id, p->data.name, p->data.birthday, p->data.sex,
p->data.address, p->data.education, p->data.wages);
//输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p->next = NULL;
r->next = p; //插入到表尾
r = p; //r指向新的尾结点
}
for (p = L->next; p; p = p->next) {
fprintf(fp, "姓名:%s\n性别:%s\n职工号:%d\n", p->data.name, p->data.sex, p->data.id);
fprintf(fp, "出生年月日:%s\n", p->data.birthday);
fprintf(fp, "工资:%s\n住址:%s\n学历:%s\n职务:%s\n\n", p->data.wages, p->data.address,
p->data.education, p->data.positions);
}
fclose(fp);
}
//输出链表的值
void ListPrint(LinkList L)
{
if (!L || !L->next) return;
LinkList p = L->next;
if (!p)
printf("没有元素输出\n");
while (p)
{
printf("%d %s %s %s %s %s %s\n", p->data.id, p->data.name, &p->data.birthday,
p->data.sex, p->data.address, p->data.education, p->data.wages);
//输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p = p->next;
}
}
//工资定位
void LocateElem(LinkList L, char* x)
//void LocateElem(LinkList L, char x)
{
if (!L || !L->next) return;
LinkList p = L->next;
int j = 0;
while ((p) && strcmp(p->data.wages, x) != 0) //(p->data.wages != x)
{
p = p->next; j++;
}
if (!p)
printf("没有该信息\n");
else
printf("%d %s %s %s %s %s %s\n", p->data.id, p->data.name, p->data.birthday,
p->data.sex, p->data.address, p->data.education, p->data.wages);
//输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
}
//插入
void ListInsert(LinkList& L, ElemType e)
{
// 在带头结点的单链线性表L表尾插入元素e
if (!L || !L->next) return;
LinkList q, p = L;
while (p->next)
{
p = p->next;
}
q = (LinkList)malloc(sizeof(LNode));
p->next = q;
q->data = e;
q->next = NULL;
}
//删除
void ListDelete(LinkList& L, int x)
{
if (!L || !L->next) return;
LinkList q, p = L;
while ((p->next) && (p->next->data.id != x))
p = p->next;
if (!p->next)
printf("没有找到学号为%d的学生信息\n", x);
else
{
q = p->next;
p->next = p->next->next;
free(q);
}
}