求助大佬帮忙修改一下读取函数文件?(怎样在关闭程序第二次再次运行时直接读取第一次存入的文件数据) 不胜感谢!!

#include<stdio.h>
//#include<dos.h>
#include<stdlib.h>
#include<string.h>
//#include<mem.h>
#include<ctype.h>
//#include<malloc.h>
 
 
typedef struct stu
{
    char num[10];
    char name[5];
    char sex[2];
    int age;
    char addr[16];
    char major[16];
    char xb[16];
    struct stu *next;
}STUDENT;
 
STUDENT*init();                 //初始化函数                 \/
int menu_select();              //菜单函数                \/
STUDENT*create();               //注册学生信息函数         \/
void search(STUDENT*head);      //查询函数        \/
void printstu(STUDENT*head);    //显示学生信息函数
void revise(STUDENT *head);     //修改函数       \/
STUDENT*del(STUDENT*head);      //删除函数     \/
void save(STUDENT *head);       //保存文件函数     \/
STUDENT *read(STUDENT *head);//读取文件函数(读文件) 
 
int main()
{
    STUDENT *head;
    head = init();
   
    int nam,secret;        /*登录操作使用的变量*/
    printf("\n\n\n\n");
    printf("\t------------------------学生学学籍管理系统------------------------\n");
    printf("\n\n");
    printf("\t\t\t\t账号:");
    scanf("%d", &nam);
    printf("\n");
    printf("\t\t\t\t密码:");
    scanf("%d", &secret);
    //system("cls");
 
    if(nam == 172021 && secret==172021)
    {
     printf("\n\n");
        printf("\t\t\t\t登录成功!!!\n\n");
 
        for(;;)
        {
            switch(menu_select())
            {
                case 1:
                    head = create();//注册
                    break;
 
                case 2:
                    search(head);//查询
                    break;
 
                case 3:
                    revise(head);//修改
                    break;
                case 4:
                    head=del(head);//删除
                    break;
                case 5:
                    printstu(head);//显示信息
                    break;
                case 6:
                    exit(0);//退出系统
                    break;
                default:
                       printf("输入错误");
                       break;
 
            }
        }
    }
    else
    {
       printf("输入错误,请重新登录");
    }
 
 
 
}
 
STUDENT*init()//初始化函数操作
{
    return NULL;
}
 
 
 
int menu_select()//菜单函数
{
    int n;
    //printf("\n按确定键进入菜单\n");
    //getchar();
    //system("cls");
    printf("****************************欢迎使用学生学学籍管理系统***********************\n");
    printf("\n");
    printf("                          ----------菜单---------                        \n");
    printf("\n\n");
    printf("\t\t\t1.\t注册学生信息\n\n\t\t\t2.\t查询学生信息\n\n\t\t\t3.\t修改学生信息\n\n\t\t\t4.\t删除学生信息\n\n\t\t\t5.\t显示已存入学生信息\n\n\t\t\t6.\t退出系统\n\n");
    do
    {
        printf("输入你的选择:   ");
        scanf("%d", &n);
    } while(n<1||n>9);
 
    return(n);
 
}
 
STUDENT *create()//创建链表,注册学生信息
{
    char answer;
    STUDENT *head=NULL;
    STUDENT *p;
    STUDENT *last=NULL;
    //system("cls");
    do
    {
        p = (STUDENT *)malloc(sizeof(STUDENT));
        if (!p)
            exit(0);
        printf("\n\n");
        printf("----------学生信息录入---------- \n");
        printf("\n");
        printf("------请输入:\n");
        printf("\t学号:");
        scanf("%s", p->num);
        printf("\t姓名:");
        scanf("%s", p->name);
        printf("\t性别:");
        scanf("%s", p->sex);
        printf("\t年龄:");
        scanf("%d", &p->age);
        printf("\t户籍:");
        scanf("%s", p->addr);
        printf("\t专业:");
        scanf("%s", p->major);
        printf("\t系别:");
        scanf("%s", p->xb);
        printf("\n");
        printf("\t是否继续录入?(Y or N):   ");
        getchar();   /* for '\n' */
        scanf("%c", &answer);
 
        if(last) {
            last->next = p;
            last = last->next;
        } else {
            last = p;
            head = last;
        }
    } while(answer=='Y'||answer=='y');
 
    //last->next =read(head);
 
    save(head);    /* store infor into file */
    //read(head);
    printf("\n");
    printf("\t保存成功!!!\n\n");
    return head;
}
 
 
 
void save(STUDENT *head)//保存文件函数(写文件)
{
 FILE *fp;
 STUDENT *p;
 p=head;
    if((fp=fopen("student.txt","w"))==NULL)
 {
  printf("failed to open the file!!");
  exit(1);
  }
  while(p!=NULL)
  {
   fprintf(fp,"%s %s %s %d %s %s %s \n",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
   p=p->next;
  }
  fclose(fp);
 
}
 
 /*STUDENT *read(STUDENT *head)//读取文件函数(读文件)
{
    FILE *fp;
 if((fp=fopen("student.txt","r"))==NULL)
 {
  printf("failed to open the file!!");
  return head;
  }
  STUDENT *new_1=(STUDENT *)malloc(sizeof(STUDENT));
  STUDENT *head1=new_1;
  while(!feof(fp))
  {
   STUDENT *q=(STUDENT *)malloc(sizeof(STUDENT));
   fscanf(fp,"\n%s %s %s %d %s %s %s",q->num,q->name,q->sex,q->age,q->addr,q->major,q->xb);
   new_1->next=q;
   new_1=q;
  }
  new_1->next=NULL;
  return head1;
  fclose(fp);*/
 
 /*FILE *fp;
 STUDENT *p;
 p=head;
    if((fp=fopen("student.txt","r"))==NULL)
 {
  printf("failed to open the file!!");
  exit(1);
  }
  while(p!=NULL)
  {
   fscanf(fp,"\n%s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
   p=p->next;
  }
  fclose(fp);
 
}*/
void search(STUDENT *head)//搜素学生信息函数函数
{
    STUDENT *p;
    char s[5];//存放待搜索学生姓名
    //system("cls");
    printf("请输入要查找的学生姓名;");
    scanf("%s", s);
    p = head;
    while (p && strcmp(p->name,s)) {
        p = p->next;
    }
 
    if(p)
    {
        printf("已找到该学生信息!!!\n\n");
        printf("----------------------------------------------------------------\n");
        printf("|  学号   |  姓名  |   性别  |  年龄  |  户籍  |  专业  |  系别  |\n");
        printf("-----------------------------------------------------------------\n");
        printf("   %s      %s       %s      %d     %s     %s      %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
        printf("\n");
       
    }
    else
    {
        printf("没有找到该学生");
    }
 
}
 
STUDENT*del(STUDENT*head)//删除信息函数
{
    if (!head)
        return NULL;
 
    STUDENT *p1,*p2;//p1为查找的需要删除节点,p2为其前驱指针
    char c,s[6];
    //system("cls");
    printf("请输入要删除的学生学号;\n");
    scanf("%s",s);
    p1=p2=head;//将头指针分别赋给p1,p2
 
    if (strcmp(head->num, s) == 0) {
        printf("----------------------------------------------------------------\n");
        printf("|  学号   |  姓名  |   性别  |  年龄  |  户籍  |  专业  |  系别  |\n");
        printf("-----------------------------------------------------------------\n");
        printf("   %s      %s       %s      %d     %s     %s      %s",p1->num,p1->name,p1->sex,p1->age,p1->addr,p1->major,p1->xb);
        head = head->next;
        printf("\n\n");
        printf("已删除!!!\n\n");
        return head;
    }
 
    while(p1 && strcmp(p1->name, s))
    {
        p2 = p1;
        p1 = p1->next;
    }
    if (!p1) {
        printf("没有这个学生的信息!!!\n\n");
        return head;
    }
    if(strcmp(p1->name,s) == 0) //学号被找到
    {
        printf("----------------------------------------------------------------\n");
        printf("|  学号   |  姓名  |   性别  |  年龄  |  户籍  |  专业  |  系别  |\n");
        printf("-----------------------------------------------------------------\n");
        printf("   %s      %s       %s      %d     %s     %s      %s",p1->num,p1->name,p1->sex,p1->age,p1->addr,p1->major,p1->xb);
        printf("\n\n");
 
        printf("是否要删除该学生,输入Y删除,输入N退出:");
        getchar();
        scanf("%c",&c);
        if(c=='N'||c=='n')
            printf("exit");
        else
        {
            if(p1==head)//如果删除的是首节点
            {
                head=p1->next;
            }
            else
            {
                p2->next=p1->next;
                free(p1);
            }
 
            printf("\n学号为;%s的学生信息已被删除",s);
            return (head);
 
        }
 
    }
 
    return head;
}
 
void revise(STUDENT *head)//修改函数
{
    if (!head)
        return;
 
    int n;
    STUDENT *p;
    char s[5];//存放待搜索学生姓名
    //system("cls");
    printf("请输入要查找的学生姓名;");
    scanf("%s", s);
    p=head;
    while(p && strcmp(p->name,s))
    {
        p = p->next;
    }
    if (!p) {
        printf("没有找到该学生");
        return;
    }
 
    if (p)
    {
        printf("已找到该学生信息!!!\n");
        printf("----------------------------------------------------------------\n");
        printf("|  学号   |  姓名  |   性别  |  年龄  |  户籍  |  专业  |  系别  |\n");
        printf("-----------------------------------------------------------------\n");
        printf("   %s      %s       %s      %d     %s     %s      %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
        printf("\n\n");
        printf("请选择您要修改的学生的信息内容:\n");
        printf("+----------------------+\n");
        printf("| 姓名          请按 1 |\n");
        printf("| 专业          请按 2 |\n");
        printf("| 户籍          请按 3 |\n");
        printf("| 系别          请按 4 |\n");
        printf("+----------------------+\n");
        printf("请输入您的选择: ");
        scanf("%d", &n);
        printf("\n");
        switch(n)
        {
            case 1:
                printf("请输入新姓名");
                scanf("%s",p->name);
                break;
            case 2:
                printf("请输入新专业");
                scanf("%s",p->major);
                break;
            case 3:
                printf("请输入新户籍");
                scanf("%s",p->addr);
                break;
            case 4:
                printf("请输入新系别");
                scanf("%s",p->xb);
                break;
            default:
                printf("输入错误");
                break;
        }
        printf("\n修改成功!!!\n");
    }
}
 
 
void printstu(STUDENT*head)//显示学生信息函数
{
    STUDENT *p;
    printf("------------------------------------------------------------------\n");
    printf("| 学号   |  姓名  |   性别  |  年龄  |  户籍  |  专业  |  系别  |\n");
    printf("------------------------------------------------------------------\n");
    p=head;
   
    while(p!=NULL)
    {
        printf("   %s      %s       %s      %d     %s     %s      %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
        p=p->next;
        printf("\n");
        printf("\n");
    }
    printf("\n");
    printf("显示完毕!!!\n\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值