#include <stdio.h>
#include"string.h"
#include"stdlib.h"
#include"iostream.h"
typedef struct{
char Sno[8];
char Sname[20];
char Ssex[4];
char Spost[10];
}DataType;
typedef struct Node
{ DataType data;
struct Node *next;
}SLNode;
void ListInitiate(SLNode *head)
{ head = (SLNode *)malloc(sizeof(SLNode));
head->next = NULL;
}
int ListLength(SLNode *head)
{
SLNode *p = head;
int size = 0;
while(p->next != NULL)
{ p = p->next;
size ++;
}
return size;
}
int ListInsert(SLNode *head, int i, DataType x)
{ SLNode *p, *q; int j;
p = head; j = -1;
while(p->next != NULL && j < i - 1)
{ p = p->next; j++;
}
if(j != i - 1)
{ printf("插入位置参数错!");
return 0;
}
q = (SLNode *)malloc(sizeof(SLNode));
q->data = x; q->next = p->next; p->next = q;
return 1;
}
int ListDelete(SLNode *head, int i, DataType *x)
{ SLNode *p, *s; int j;
p = head; j = -1;
while(p->next != NULL && p->next->next!= NULL && j < i - 1)
{ p = p->next; j++;
}
if(j != i - 1)
{ printf("插入位置参数错!");
return 0;
}
s = p->next; *x = s->data; p->next = p->next->next;
free(s);
return 1;
}
int ListGet(SLNode *head, int i, DataType *x)
{ SLNode *p;
int j;
p = head; j = -1;
while(p->next != NULL && j < i)
{ p = p->next; j++;
}
if(j != i)
{ printf("取元素位置参数错!");
return 0;
}
*x = p->data;
return 1;
}
void Destroy(SLNode **head)
{ SLNode *p, *p1;
p = *head;
while(p != NULL)
{ p1 = p; p = p->next;
free(p1);
}
*head = NULL;
}
void StaffInsert(SLNode *L,DataType S){
int a;
printf("请输入插入位置:");
scanf("%d",&a);
printf("\n");
printf("员工号:");
cin>>S.Sno;
printf("员工姓名:");
cin>>S.Sname;
printf("员工性别:");
cin>>S.Ssex;
printf("员工职位:");
cin>>S.Spost;
ListInsert(L, a-1, S);
printf("插入成功!");
}
void StaffDelete(SLNode *L){
DataType x;
int a;
printf("请输入删除位置:");
scanf("%d",&a);
ListDelete(L,a-1,&x);
printf("删除成功!");
}
void StaffP(DataType x){
printf("%s\t",x.Sno);
printf("%s\t",x.Sname);
printf("%s\t",x.Ssex);
printf("%s\t",x.Spost);
printf("\n");
}
void StaffGet(SLNode *head){
DataType x;
int a;
int b;
int c=0;
SLNode *pWork = head->next;
printf("1.查询全部\n");
printf("2.查询单个\n");
printf("请输入选择:");
scanf("%d",&b);
switch(b){
case 1: {
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
while (pWork != NULL ){
x=pWork->data;
StaffP(x);
pWork = pWork->next;
}
break;}
case 2:printf("请输入查询位置:");
scanf("%d",&a);
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
ListGet(head,a-1,&x);
StaffP(x);
break;
default:break;
}
}
void first(SLNode *L,DataType S){
int num=0;
strcpy(S.Sno,"001");
strcpy(S.Sname,"张珊");
strcpy(S.Ssex,"女");
strcpy(S.Spost,"文员");
ListInsert(L,num,S);
num++;
strcpy(S.Sno,"002");
strcpy(S.Sname,"李思");
strcpy(S.Ssex,"女");
strcpy(S.Spost,"销售员");
ListInsert(L,num,S);
num++;
strcpy(S.Sno,"004");
strcpy(S.Sname,"王强");
strcpy(S.Ssex,"男");
strcpy(S.Spost,"经理");
ListInsert(L,num,S);
num++;
strcpy(S.Sno,"005");
strcpy(S.Sname,"赵括");
strcpy(S.Ssex,"男");
strcpy(S.Spost,"秘书");
ListInsert(L,num,S);
num++;
strcpy(S.Sno,"006");
strcpy(S.Sname,"刘刚");
strcpy(S.Ssex,"男");
strcpy(S.Spost,"文员");
ListInsert(L,num,S);
num++;
}
void main(){
SLNode L;
ListInitiate(&L);
DataType S;
int a;
first(&L,S);
while(1){
printf("\n-----------------\n");
printf("1.插入数据\n");
printf("2.删除数据\n");
printf("3.查询数据\n");
printf("4.退出\n");
printf("-----------------\n");
printf("请输入选择:");
scanf("%d",&a);
if(a==4)break;
switch(a){
case 1:StaffInsert(&L,S); break;
case 2:StaffDelete(&L); break;
case 3:StaffGet(&L);break;
}
}
}
5 个解决方案
#1
void StaffP(DataType x){
printf("%s\t",x.Sno);
printf("%s\t",x.Sname);
printf("%s\t",x.Ssex);
printf("%s\t",x.Spost);
printf("\n");
}
void StaffGet(SLNode *head){
DataType x;
int a;
int b;
int c=0;
SLNode *pWork = head->next;
printf("1.查询全部\n");
printf("2.查询单个\n");
printf("请输入选择:");
scanf("%d",&b);
switch(b){
case 1: {
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
while (pWork != NULL ){
x=pWork->data;
StaffP(x);
pWork = pWork->next;
}
break;}
case 2:printf("请输入查询位置:");
scanf("%d",&a);
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
ListGet(head,a-1,&x);
StaffP(x);
break;
default:break;
}
}
#2
查询全部结束后,就停止工作了。
查询语句代码,在上面。
查询语句代码,在上面。
#3
崩溃了。自己调试啊
#4
程序太长,不才兄弟我已经晕了,所以救不了你。你找赵四老湿,必有所获。
#5
单步调试
#1
void StaffP(DataType x){
printf("%s\t",x.Sno);
printf("%s\t",x.Sname);
printf("%s\t",x.Ssex);
printf("%s\t",x.Spost);
printf("\n");
}
void StaffGet(SLNode *head){
DataType x;
int a;
int b;
int c=0;
SLNode *pWork = head->next;
printf("1.查询全部\n");
printf("2.查询单个\n");
printf("请输入选择:");
scanf("%d",&b);
switch(b){
case 1: {
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
while (pWork != NULL ){
x=pWork->data;
StaffP(x);
pWork = pWork->next;
}
break;}
case 2:printf("请输入查询位置:");
scanf("%d",&a);
printf("学号:\t");
printf("姓名:\t");
printf("性别:\t");
printf("年龄:\n");
ListGet(head,a-1,&x);
StaffP(x);
break;
default:break;
}
}
#2
查询全部结束后,就停止工作了。
查询语句代码,在上面。
查询语句代码,在上面。
#3
崩溃了。自己调试啊
#4
程序太长,不才兄弟我已经晕了,所以救不了你。你找赵四老湿,必有所获。
#5
单步调试