yui_yukinoshita 2021-12-06 22:55 采纳率: 0%
浏览 34

用链式储存学生信息实现添加查找删除等操作。

#include<stdio.h>
#include<stdlib.h>
typedef struct Studentlist
{
char name[100];
char tele[100];
char card[100];
Studentlist *next;
}list,*qlist;

void initlist(qlist head)
{
head=NULL;
}
list creatnode(qlist head,int n)
{
qlist p;
qlist temp;
head=p=(list
)malloc(sizeof(list));
for(int i=0;i<n;i++)
{
temp==(list*)malloc(sizeof(list));
printf("请输入第%d个学生的资料\n",i+1);
printf("第%d个学生的姓名:\n",i+1);
scanf("%s",&p->name[100]);
printf("第%d个学生的学号:\n",i+1);
scanf("%s",&p->card[100]);
printf("第%d个学生的号码:\n",i+1);
scanf("%s",&p->tele[100]);
p->next=temp;
p=temp;
}
p->next=NULL;
printf("学生数据已经输入完毕\n");
return head;
}
void Printlist(qlist head)
{
qlist temp=head;
int i=1;
printf("学生数据为:\n");
while(temp!=NULL)
{
printf("第%d个学生的数据为%s,%s,%s",i,temp->name[100],temp->tele[100],temp->card[100]);
temp=temp->next;
i++;
}
printf("\n");
}
int startlist(qlist head)
{
if(head->next==NULL)
return 0;
else
return 1;
}
void inslist(qlist head,char a[100],char b[100],char c[100],int n)
{
int i=1;
qlist p,q;
q=(list*)malloc(sizeof(list));
if(head==NULL)
{
head=q;
q->next=NULL;
return;
}
if(i=1)
{
q->next=head;
head=q;
q->name[100]=a[100];
q->tele[100]=b[100];
q->card[100]=c[100];
}
for(i=1;i<100;i++)
{
p=p->next;
if(i==n){
q->next=p->next;
p->next=q;
q->name[100]=a[100];
q->tele[100]=b[100];
q->card[100]=c[100];
break;
}

 }
 

}
void addinglist(qlist head)
{
int i,j;
char a[100],b[100],c[100];
qlist p=head;
qlist temp;
printf("请输入要添加学生的个数:");
scanf("%d",&i);
while(p!=NULL)
{
if(p->next==NULL)
{
for(j=0;j<i;j++)
{
temp=(list*)malloc(sizeof(list));
temp=p->next;
printf("请输入学生的姓名,电话,学号:\n");
scanf("%s,%s,%s",&a[100],b[100],c[100]);
temp->name[100]=a[100];
temp->tele[100]=b[100];
temp->card[100]=c[100];
}
}
}

}
void delectlist(qlist head)
{
char x[100];
qlist p,q;
int j=1,i;
printf("请输入需要删除的学生的学号:\n");
scanf("%s",&x[100]);
if(head==NULL)
return;
else if(head->card[100]==x[100])
{
p=head->next;
free(head);
head=p;
return ;
}
q=p;
while(p->next!=NULL)
{
p=p->next;
if(p->card[100]==x[100])
{
q->next=p->next;
free(p);
break;
}
q=p;
}
}
void searchlis(qlist head)
{

char x[100];
int i=1;
qlist p=head;
printf("请输入要查询的数据元素的号码:\n");
scanf("%s",&x[100]);
while(p->next!=NULL)
{
    p=p->next;
    if(p->tele[100]==x[100])
    {
        printf("该学生在表中的第%d个位置,姓名为:%s,学号为:%s",i,p->name[100],p->card[100]);
        break;
    } 
    i++;
}
if(p->next==NULL){
printf("没有查找到该学生\n");
return ;
}

}
int main()
{
int n,h,z;
char a[100],b[100],c[100];
qlist head;
initlist(head);
printf("请输入学生的总人数:");
scanf("%d",&n);
head=creatnode(head,n);
printf("--------学生表--------\n");
printf("------请选择------\n");
printf("1.输出所有学生的信息\n");
printf("2.添加新的学生信息\n");
printf("3.插入一个学生信息\n");
printf("4.删除一个学生信息(指定学号删除)\n");
printf("5.查询一个学生信息(指定号码查找)\n");
printf("6.判断学生信息表是否为空\n");
printf("0.结束运行\n");
printf("---------------------\n");
printf("请输入编号(0-6)\n");
scanf("%d",&h);
while(1)
{
if(h<0||h>6){

    printf("输入的编号错误,请重新输入(0-6)\n");
    scanf("%d",&h);
}
    else if(h==0)
    {
    printf("程序结束\n");
    break; 
}
    else
switch(h)
{
    case 1:
        Printlist(head);
        break;
    case 2:
        addinglist(head);
        break;
    case 3:
         int x;
         printf("在输入在哪个位置插入新的数据:");
         scanf("%d",&x);
         printf("\n");
         printf("请输入该学生的姓名,号码,学号:") ;
         scanf("%s,%s,%s",&a[100],&b[100],&c[100]);
         inslist(head,a,b,c,x);    
         break;
    case 4:    
         delectlist(head);
         break;
    case 5:
        searchlis(head);
        break;
    case 6:
        startlist(head);
        if(z)
        printf("学生表不为空"); 
        else
        printf("学生表为空") ;
        break;
            
    default :
        printf("输入错误,请重新输入正确数值(0-4)"); 
        break;
}

}
}
求帮忙看看我这个程序的问题

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-12-07 02:41
    关注

    初始化和创建函数都不行,比较乱。比如创建函数,返回值怎么可能是list类型呢
    数组的使用基本上没有对的地方,比如
    scanf("%s,%s,%s",&a[100],&b[100],&c[100]);
    应该是
    scanf("%s,%s,%s",a,b,c);

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月6日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能