#初始化有问题导致查找,插入,输出都不行,救命救命明天就交了球球帮忙改一改吧
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define MAXN 1000
typedef struct workers //线性表链式存储结构的定义
{
char sid[10]; //编号
char name[10]; //姓名
char gender[10]; //性别
char birth[6]; //出生年月
char edu[30]; //学历 (education的缩写)
char duty[30]; //职务
char number[30]; //电话
char add[50]; //住址
struct workers*next;
}Node,*LinkList;
LinkList InitList(LinkList *S);
LinkList CreateLinkList(int n); // //带n个节点的链表,返回链表的头指针
int InsList(LinkList S, int i);//插入信息
int DelList(LinkList S,int i);//删除信息
int update(LinkList h); //更新信息
void search(LinkList h); //查询信息
void Output1(LinkList S); //输出1
void Output2(LinkList S); //输出表格
void select(int option,LinkList S); //选择函数
typedef int ElemType; //数据元素类型定义
//主函数
int main(void){
int option;
//显示菜单
LinkList S= (LinkList) malloc(sizeof(Node));
while(1){
printf("-----欢迎使用员工管理系统-----\n");
printf("[1]输入信息\n");
printf("[2]查询信息\n");
printf("[3]更新信息\n");
printf("[4]插入信息\n");
printf("[5]删除信息\n");
printf("[6]输出表格\n");
printf("[7]退出系统\n");
printf("\n");
printf("请输入您的选择:");
scanf("%d",&option);
if(option==7){
break;
}else if(option>7||option<=0){
printf("输入错误!\n");
}else if(option>=1&&option<=7){
select(option,S); //根据选项调用函数
}
}
}
void select(int option,LinkList S)
{
int i,j;
char a[10],x[10];
switch(option)
{
case 1:
int n;
printf("创建线性表操作.\n");
printf("请输入你要创建线性表的长度:\n");
scanf("%d",&n);
S = CreateLinkList(n);
break;
case 2:
search(S);
break;
case 3:
update(S);
break;
case 4:
printf("请输入插入的位置:");
scanf("%d",&i);
InsList(S,i);
break;
case 5:
printf("请输入删除的位置:");
scanf("%d",&j);
DelList(S,j);
break;
case 6:
Output2(S);
break;
case 7:
printf("\n谢谢使用,再见!\n");
break;
default:
printf("\t输入错误,请重新输入\n");
}
}
int update(LinkList h){
char s[10];
LinkList p;
p=h->next;
printf("请输入要查找的编号:");
scanf("%s",&s);
if(!p){
return 0;
}else{
while(p&&p->sid!=s){
p=p->next;
}
if(!p){
return 0;
}else{
printf("请输入要更新的姓名:\n");
scanf("%s",&p->name);
printf("请输入要更新的性别:\n");
scanf("%s",&p->gender);
printf("请输入要更新的出生年月:\n");
scanf("%s",&p->birth);
printf("请输入要更新的学历:\n");
scanf("%s",&p->edu);
printf("请输入要更新的职务:\n");
scanf("%s",&p->duty);
printf("请输入要更新的电话:\n");
scanf("%s",&p->number);
printf("请输入要更新的住址:\n");
scanf("%s",&p->add);
return 1;
}
}
}
void search(LinkList h){
int x;
char si[10]; //编号
char na[10]; //姓名
char bi[6]; //出生年月
char ed[30]; //学历
char du[30]; //职务
char nu[30]; //电话
char ad[50]; //住址
LinkList p;
p=h;
printf("[1]编号\n");
printf("[2]姓名\n");
printf("[3]出生年月\n");
printf("[4]学历\n");
printf("[5]职务\n");
printf("[6]电话\n");
printf("[7]住址\n");
printf("请输入你要查询的信息:\n");
scanf("%d",&x);
switch(x){
case 1:
printf("请输入你要查询的编号:\n");
scanf("%s",&si);
if(!p){
printf("该编号不存在!\n");
}else{
while(p&&p->sid!=si){
p=p->next;
}
if(!p){
printf("该编号不存在!\n");
}else{
Output1(p);
}
}
break;
case 2:
printf("请输入你要查询的姓名:\n");
scanf("%s",&na);
if(!p){
printf("该姓名不存在!\n");
}else{
while(p&&p->name!=na){
p=p->next;
}
if(!p){
printf("该姓名不存在!\n");
}else{
Output1(p);
}
}
break;
case 3:
printf("请输入你要查询的出生年月:\n");
scanf("%s",&bi);
if(!p){
printf("该日期不存在!\n");
}else{
while(p&&p->birth!=bi){
p=p->next;
}
if(!p){
printf("该日期不存在!\n");
}else{
Output1(p);
}
}
break;
case 4:
printf("请输入你要查询的学历:\n");
scanf("%s",&ed);
if(!p){
printf("该学历不存在!\n");
}else{
while(p&&p->edu!=ed){
p=p->next;
}
if(!p){
printf("该学历不存在!\n");
}else{
Output1(p);
}
}
break;
case 5:
printf("请输入你要查询的职务:\n");
scanf("%s",&du);
if(!p){
printf("该职务不存在!\n");
}else{
while(p&&p->duty!=du){
p=p->next;
}
if(!p){
printf("该职务不存在!\n");
}else{
Output1(p);
}
}
break;
case 6:
printf("请输入你要查询的电话:\n");
scanf("%s",&nu);
if(!p){
printf("该电话不存在!\n");
}else{
while(p&&p->number!=nu){
p=p->next;
}
if(!p){
printf("该电话不存在!\n");
}else{
Output1(p);
}
}
break;
case 7:
printf("请输入你要查询的住址:\n");
scanf("%s",&ad);
if(!p){
printf("该住址不存在!\n");
}else{
while(p&&p->add!=ad){
p=p->next;
}
if(!p){
printf("该电话不存在!\n");
}else{
Output1(p);
}
}
break;
default:
printf("你输入的数字有误!\n");
break;
}
}
void Output1(LinkList S){
LinkList p;
p=S->next;
printf("编号 姓名 出生年月 学历 职务 电话 住址\n");
printf("%-14s%-16s%-18s%-15s%-15s%-16s%-18s\n",p->sid,p->name,p->birth,p->edu,p->duty,p->number,p->add);
}
void Output2(LinkList S){
LinkList p;
p=S->next;
printf("编号 姓名 出生年月 学历 职务 电话 住址\n");
while(p){
printf("%-14s%-16s%-18s%-15s%-15s%-16s%-18s\n",p->sid,p->name,p->birth,p->edu,p->duty,p->number,p->add);
p=p->next;
}
}
/*
LinkList InitList(LinkList S)
{
int n;
S = (LinkList)malloc(sizeof(Node));
S->next = NULL;
int i;
printf("请输入人数;") ;
scanf("%d",n);
for(i=0;i<n;i++)
{
LinkList p;//申请节点p
p=(Node*)malloc(sizeof(Node));;
printf("请输入插入的人员姓名:\n");
scanf("%s",p->name) ;
printf("请输入此人编号:\n");
scanf("%s",p->sid);
printf("请输入此人性别:\n");
scanf("%s",p->gender);
printf("请输入此人出生年月:\n");
scanf("%s",p->birth);
printf("请输入此人学历:\n");
scanf("%s",p->edu);
printf("请输入此人职务:\n");
scanf("%s",p->duty);
printf("请输入此人电话:\n");
scanf("%s",p->number);
printf("请输入此人住址:\n");
scanf("%s",p->add);
p->next = NULL;
S->next = p;
S = p;
}
return S;
} */
LinkList CreateLinkList(int n)
{
LinkList LNode;
LinkList H;
H = (Node*)malloc(sizeof(LNode));
H->next = NULL; //(*H).next = NULL;
int i;
for(i=0;i<n;i++)
{
LinkList p;//申请节点p
p=(Node*)malloc(sizeof(LNode));;
printf("请输入插入的人员姓名:\n");
scanf("%s",p->name) ;
printf("请输入此人编号:\n");
scanf("%s",p->sid);
printf("请输入此人性别:\n");
scanf("%s",p->gender);
printf("请输入此人出生年月:\n");
scanf("%s",p->birth);
printf("请输入此人学历:\n");
scanf("%s",p->edu);
printf("请输入此人职务:\n");
scanf("%s",p->duty);
printf("请输入此人电话:\n");
scanf("%s",p->number);
printf("请输入此人住址:\n");
scanf("%s",p->add);
p->next = NULL;
//把p点接入T后面
H->next = p;
H = p;
}
return H;
}
int InsList(LinkList S, int i) //插入信息
{
Node *pre,*s;
int k;
if(i <= 0)
return 0;
else
{
pre = S;
k = 0;
while(pre != NULL&&k < i-1)
{
pre = pre -> next;
k = k++;
}
if(pre == NULL)
{
printf("插入位置不合理!\n");
return 0;
}
s = (Node*)malloc(sizeof(Node));
printf("请输入插入的人员姓名:\n");
scanf("%s",s->name) ;
printf("请输入此人编号:\n");
scanf("%s",s->sid);
printf("请输入此人性别:\n");
scanf("%s",s->gender);
printf("请输入此人出生年月:\n");
scanf("%s",s->birth);
printf("请输入此人学历:\n");
scanf("%s",s->edu);
printf("请输入此人职务:\n");
scanf("%s",s->duty);
printf("请输入此人电话:\n");
scanf("%s",s->number);
printf("请输入此人住址:\n");
scanf("%s",s->add);
s ->next =pre ->next;
pre->next = s;
return 1;
}
}
int DelList(LinkList S,int i)
{
Node *pre=S,*r;
int k;
pre = 0;k = 0;
while(pre->next != NULL&&k < i-1 )
{
pre = pre->next;
k = k++;
}
if(k != i-1)
{
printf("删除结点位置不合理!");
return 0;
}
r = pre->next;
pre->next = pre->next->next;
free(r);
return 1;
}