如何将该代码的数据用链表储存,求教。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 3 //假设测试数据为3
struct student//定义结构体类型
{
    char num[10];
    char name[10];
    char sex;
    int age;
    char bz[100];
};
void menu()//菜单函数
{
    printf(" ~~~~~~~~~~~~~~~电子信息类921班~~~~~~~~~~~~~~~~\n\n");
    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");

}
int password()//密码验证函数
{
    int i=3;
    char ch[]={"123"};
    char pass[20];
    do
    {
        printf("请输入你的登录密码:\n");
        scanf("%s",pass);
        if(!strcmp(ch,pass))
        {
            return 0;
        }
        else
        {
            i--;
            printf("输入有误,剩余输入次数为%d\n",i);
        }
    }while(i);
    if(i==0)
    {return -1;}

}
void get(struct student*stu,int n)//信息录入
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("请输入学生基本信息:学号 姓名 性别 年龄(m/w) 备注\n");
        scanf("%s%s %c%d%s",stu[i].num,stu[i].name,&stu[i].sex,&stu[i].age,stu[i].bz);

    }

}
void display(struct student*stu,int n)//信息显示
{
    int i;
    printf("学生信息:学号   姓名   性别   年龄   备注\n");
    for(i=0;i<n;i++)
    {
        printf("%15s%15s%15c%15d%15s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
    }
}
void store(struct student*stu,int n)//信息保存
{
   FILE*fp;
   fp=fopen("c:\\课程设计2\\student.txt","w+");
   if(fp==NULL)
   {
       printf("文件不存在!\n");

   }
   fprintf(fp,"学号 姓名 性别 年龄 备注\n");
   for(int i=0;i<n;i++)
   fprintf(fp,"%4s %4s %4c %4d %4s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
   fclose(fp);
}
void modify(struct student*stu,int n)//信息修改
{
    int i=3;
    char ch[]={"123"};
    char pass[20];
    printf("请输入你的修改密码:\n");
    scanf("%s",pass);
    if(!strcmp(ch,pass))
    {
    int i,ch;
    int check=1;
    char num[10];


        printf("----------------1-修改学号------------------\n");
        printf("----------------2-修改姓名------------------\n");
        printf("----------------3-修改性别------------------\n");
        printf("----------------4-修改年龄------------------\n");
        printf("----------------5-退出----------------------\n\n\n");
        printf("请输入选项(1-5):\n");
        scanf("%d",&ch);
        switch(ch)
        {
        case 1:
            {
                printf("修改学生学号:\n");
                printf("请输入学号:\n");
                scanf("%s",num);
                for(i=0;i<n;i++)
                {
                    if(!strcmp(num,stu[i].num))
                    {
                        printf("学生信息:学号   姓名   性别   年龄   备注\n");
                        printf("%4s%4s%4c%4d%4s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                        printf("重新输入该学生的学号:\n");
                        scanf("%s",stu[i].num);
                        store(stu,n);//保存修改
                    }check=0;

                } if(check==1)
                        printf("查无此人!\n");



            }break;
          case 2:
              {
                 printf("修改学生姓名:\n");
                 printf("请输入学号:\n");
                 scanf("%s",num);
                 for(i=0;i<n;i++)
                 {
                    if(!strcmp(num,stu[i].num))
                    {
                        printf("学生信息:学号   姓名   性别   年龄   备注\n");
                        printf("%4s%4s%4c%4d%4s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                        printf("重新输入该学生的姓名:\n");
                        scanf("%s",stu[i].name);
                        store(stu,n);
                    }
                    check=0;

                 }
                 if(check==1)
                        printf("查无此人!\n");

              }break;
          case 3:
            {
                 printf("修改学生性别:\n");
                 printf("请输入学号:\n");
                 scanf("%s",num);
                 for(i=0;i<n;i++)
                 {
                    if(!strcmp(num,stu[i].num))
                    {
                        printf("学生信息:学号   姓名   性别   年龄   备注\n");
                        printf("%4s%4s%4c%4d%4s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                        printf("重新输入该学生的性别:\n");
                        scanf(" %c",&stu[i].sex);
                        store(stu,n);
                    }check=0;



                }
                if(check==1)
                        printf("查无此人!\n");

            }break;
          case 4:
            {
                 printf("修改学生年龄:\n");
                 printf("请输入学号:\n");
                 scanf("%s",num);
                 for(i=0;i<n;i++)
                 {
                    if(!strcmp(num,stu[i].num))
                    {
                        printf("学生信息:学号   姓名   性别   年龄   备注\n");
                        printf("%4s%4s%4c%4d%4s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                        printf("重新输入该学生的年龄:\n");
                        scanf("%d",&stu[i].age);
                        store(stu,n);
                    }check=0;

            }
           if(check==1)
                        printf("查无此人!\n");

    }break;

    }

}
else printf("密码错误!\n");
}
void dele(struct student*stu,int n)//信息删除
{
    int i,j;
    char num[10];
    int check=1;
    printf("删除学生信息:\n");
    printf("请输入学号\n");
    scanf("%s",num);
    for(i=0;i<n;i++)
    {
        if(!strcmp(num,stu[i].num))
        {  strcpy(stu[i].num," ");
           strcpy(stu[i].name," ");
           strcpy(stu[i].bz," ");
           stu[i].sex=' ';
           stu[i].age=0;
           check=0;
        }
    }
    if(check==1)
        printf("该学生不存在!\n");
}
void search(struct student*stu,int n)//信息查询
{
    int ch,i;
    int check=1;
        printf("----------------1-学号查询------------------\n");
        printf("----------------2-姓名查询------------------\n");
        printf("----------------3-性别查询------------------\n");
        printf("----------------4-年龄查询------------------\n");
        printf("----------------5-退出----------------------\n\n\n");
    printf("请输入选择(1-5):");
    scanf("%d",&ch);
    switch(ch)
    {
    case 1:
        {
            char num[10];
            printf("请输入学号:\n");
            scanf("%s",num);
            for(i=0;i<n;i++)
            {
                if(!strcmp(num,stu[i].num))
                {
                    printf("%12s%12s%12c%12d%12s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                    check=0;
                }
            }
            if(check==1)
                printf("该学生不存在!\n");
        }break;
    case 2:
        {
            char name[10];
            printf("请输入姓名:\n");
            scanf("%s",name);
            for(i=0;i<n;i++)
            {
                if(!strcmp(name,stu[i].name))
                {
                    printf("%12s%12s%12c%12d%12s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                    check=0;
                }
            }
            if(check==1)
                printf("该学生不存在!\n");
        }break;
    case 3:
        {
            char sex;
            printf("请输入性别:\n");
            scanf(" %c",&sex);
            for(i=0;i<n;i++)
            {
                if(sex==stu[i].sex)
                {
                   printf("%12s%12s%12c%12d%12s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                   check=0;
                }
            }
             if(check==1)
                printf("该学生不存在!\n");
        }break;
    case 4:
        {
            int age;
            printf("请输入年龄:\n");
            scanf("%d",&age);
            for(i=0;i<n;i++)
            {
                if(age==stu[i].age)
                {
                   printf("%12s%12s%12c%12d%12s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].bz);
                   check=0;
                }
            }
            if(check==1)
                printf("该学生不存在!\n");
        }break;
        default:break;
    }
}
void main()//主函数
{   struct student stu[N];//定义结构体数组
    int password();//调用密码验证函数
    if(password()==0)
    {
    menu();/*调用菜单函数*/
    int n;
    char m;
    int check;/*输入有效性检测*/
    do
    {
        printf("请选择你即将进行的操作(1-7):\n");
        scanf("%d",&n);
        if(n>=1&&n<=7)
        {
            check=1;
            break;
        }
        else
            {check=0;
             printf("输入无效!请重新选择!");
            }
    }while(check==0);
    while(check==1)
    {
        switch(n)
        {
            case 1:printf("***输入学生基本信息***\n\n");
                   get(stu,N);/*调用输入函数*/
                   break;
            case 2:printf("***显示学生基本信息***\n\n");
                   display(stu,N);/*调用显示函数*/
                   break;
            case 3:printf("***保存学生基本信息***\n\n");
                   store(stu,N);/*调用保存函数*/
                   break;
            case 4:printf("***删除学生基本信息***\n\n");
                   dele(stu,N);/*调用删除函数*/
                   break;
            case 5:printf("***修改学生基本信息***\n\n");
                   modify(stu,N);/*调用修改函数*/
                   break;
            case 6:printf("***查询学生基本信息***\n\n");
                   search(stu,N);/*调用查询函数*/
                   break;
            case 7:exit(0);
                   break;
            default:break;
        }
    printf("\n");
    printf("是否继续?(y or n)\n");
    getchar();
    m=getchar();
    if(m=='y')
    {
        check=1;
        system("cls");/*清屏*/
        menu();/*再次调用菜单函数*/
        printf("请再次选择你即将进行的步骤(1-7):\n");
        scanf("%d",&n);
    }
    else exit(0);
    }
    }
    else
        printf("输入次数已经用尽,系统将自动退出!\n");
}

1个回答

链表存储只是在运行程序的时候节省空间,到最后为了数据在下次程序运行时不丢失还是要存入二进制文件中的(我以前学C语言是这样的),可以参考谭浩强后面链表部分的内容

CrushIT
crush灿 谢谢
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐