#初始化有问题导致查找,插入,输出都不行,救命救命明天就交了球球帮忙改一改吧
#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;
}
好的,让我来帮你看看代码问题。
首先,在你的主函数中,你创建链表时使用了malloc申请内存,但是创建链表的函数中也有malloc申请内存,这样会造成内存泄漏。建议在创建链表函数中使用malloc,而在主函数中直接传入链表头指针。
其次,在初始化函数InitList中,你没有将链表头节点赋值为NULL。建议在函数中添加以下语句:
S->next = NULL;
接下来,在查询函数search中,你进行字符串比较时使用了“!=”运算符,但是应该使用strcmp函数进行字符串比较。例如,在查询编号时,你应该修改为:
while(p&&strcmp(p->sid, si) != 0){
p=p->next;
}
在插入函数InsList中,你的k=k++应该修改为k++,否则k的值始终为0,导致插入位置计算错误。
最后,在输出函数Output1中,你的员工信息输出格式可能存在一定问题,你可以根据需要调整一下输出格式。
除此之外,还有一些小问题需要优化,例如输入时可以增加一些判断防止输入非法值等。希望以上内容对你有所帮助,祝你顺利完成任务!
今天的学习就告一段落了,本章就是写于2021年12月23日23:20,希望我能在复习中能给各位初学者一些建议和少走一些弯路,我在大一的时候也是不学无术之流,所以我写这篇文章不光是复习,我也希望大家不要荒废大一的时间,能够踏踏实实学习。
本章我们学习了C语言的发展和比较简单的一些知识点,现在你还能回忆起什么是函数体吗?main函数是干嘛的?#是表示什么的?算法的优劣有哪些特点呢?常量是怎么定义的呢?希望大家有所收获。