1.要求:
2.代码:
#include
#include
#include
//结点类型定义
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,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){
welcome();
//主循环
scanf("%d", &control);
while(control)
{
switch(control)
{
case 1:
{printf("请输入要创建的员工个数n=");
scanf("%d", &n);
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资。n数据中间请用空格连接n");
ListCreate(L,n);
};
break;
case 2:
ListPrint(L);
break;//输出链表内容
case 3:
{
printf("请输入要查找的员工工资n");
scanf("%s",&w);
LocateElem(L,w);
};
break;
case 4:
{
printf("请输入欲插入的员工信息n");
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); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
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 welcome()//菜单
{
printf("ttt=====================================================n");
printf("ttt*****************************************************n");
printf("ttt n");
printf("ttt n");
printf("ttt************ ************n");
printf("ttt****** 欢迎使用(﹡^o^﹡ )(﹡^o^﹡ ) ******n");
printf("ttt************ ************n");
printf("ttt n");
printf("ttt n");
printf("ttt*****************************************************n");
printf("nnn");
printf("ttt正在为您跳转到主菜单,请耐心稍等 ( ̄_ ̄ ) ( ̄_ ̄ ).......nnn");
Sleep(1000);//1000毫秒;头文件#include
while(1) {
system("color 3f");
system("date/t");
system("time/t");
printf(" tt=============================================================================n");
printf("tt|| ( ̄▽ ̄) ( ̄▽ ̄)(*选择功能*)( ̄▽ ̄)( ̄▽ ̄) ||n");
printf("tt||============================================================================||n");
printf("tt||============================================================================||n");
printf("tt|| 【1】--- 录入员工信息 ||n");
printf("tt|| 【2】--- 输出员工信息 ||n");
printf("tt|| 【3】--- 进行查找 ||n");
printf("tt|| 【4】--- 插入信息 ||n");
printf("tt|| 【5】--- 删除信息 ||n");
printf("tt|| 【6】--- 退出 ||n");
printf("tt ==============================================================================n");
printf("nnn");
printf("请输入对应数字选择功能:");
break;
}
}
//录入信息
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
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, "姓名:%sn性别:%sn职工号:%dn", p->data.name, p->data.sex, p->data.id);
fprintf(fp, "出生年月日:%sn", p->data.birthday);
fprintf(fp, "工资:%sn住址:%sn学历:%sn职务:%snn", 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%sn",&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)
{ int buff[255];
char c;
int i=0;
if (!L || !L->next) return;
LinkList p=L->next;
int j=0;
FILE*fp=NULL;
fp=fopen("employee.txt","r");
fscanf(fp,"%d", &buff[i]);
while ((p)&&strcmp(p->data.wages,x)!=0)
{p=p->next; j++;}
if(!p)
printf("没有该信息n");
else
printf("%d %s %s %s %s %s %sn",&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);
}
}
3.需要改进的地方,不能第二次在文件中直接搜索。
或者用面向对象的写法。新手初试,期间问题感谢
qzjhjxj ,浪客 ,快乐鹦鹉 大佬们的帮助。代码仍有很多不足,望指正。



