jocichen 发表于 2022-6-12 22:26:43

有没有大神看看为什么运行不了啊

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

#define N 100//存储100个学生信息

int flag;//用来标记登录状态

void Fpage();
void menu();
void login();
void browse();
void insert();
void print_back();
void deleter();
void print_one(int);
void search();
void modify();
void browse_x();

struct data//出生日期
{
        int year;
        int month;
        int day;
};

struct student//学生信息
{
        char num;//学号
        char name;//姓名
        char sex;//性别
        struct data birthday;//出书年月
        int age;//年龄
        char addr;//籍贯
        char dept;//系别
        char major;//专业
        char class;//班级
        char native_changes;//学籍
}stu;

int main()//主函数
{
        Fpage();//首页
        menu();//菜单
       
        return 0;
}

void Fpage()//访问首页
{
        system("color 4e");
        printf("\n\t   ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★");
        puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※          欢迎访问学生学籍管理系统!         ※※");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※                                              ※※");
        puts("\t    ※※                              制作人:陈茗杰※※");
        puts("\t    ※※                                  2022.5.30   ※※");
    puts("\t    ※※                                              ※※");
        puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
        printf("\n\tPress [ Enter ] key to continue……\n");
    getchar();
        system("cls") ;
}

void menu()//主菜单
{
        system("color 2e");
        printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
        pritnf("\n");
        int n,r1;//n用来选择功能,r1用来输入错误时重新返回功能
        do
        {
           puts("\t\t★★★★★★★★    菜单★★★★★★★★");
           puts("\t\t★             1.登录个人账号               ★");
           puts("\t\t★             2.登记学生信息               ★");
           puts("\t\t★             3.删除学生信息               ★");
           puts("\t\t★             4.查找学生信息               ★");
           puts("\t\t★             5.修改学生信息               ★");
           puts("\t\t★             6.浏览学生籍贯               ★");
           puts("\t\t★             7.查询学籍变化               ★");
           puts("\t\t★             8.退出学生系统               ★");
           puts("\t\t★★★★★★★★★★★★★★★★★★★★★");
       printf("请选择服务种类(1-7) : [ ]\b\b");
       scanf("%d",&n);
       if(n<1||n>8)
       {
                 system("cls");
                 printf("选择错误!请正确输入!\n");
                 r1=1;
           }
           else
             r1=0;
        }while(r1==1);
        switch(n)
        {
                case 1: login();break;//登录账号
                case 2: system("cls"); insert();break;//插入
                case 3: system("cls"); deleter(); break;//删除
                case 4: system("cls"); search();break;//查找
                case 5: system("cls"); modify();break;//修改
                case 6: system("cls"); browse();break;//浏览
                case 7: system("cls"); browse_x(); break;//学籍浏览
        }
}

void login()//登录
{
        void menu();
        system("cls");
       
        if(flag) //先判断是否已登录
        {
                printf("您已经登录!\n");
                printf("Press any key to continue...\n");
                getchar();
                getchar();
                system("cls");
                menu();
        }
       
        int load();//存储文件
        int n,i,m,w;
        FILE *fp;
        if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
          n=load();//打开文件
        else
          n=0;
        struct student s;//存储学生账号
        char password;//存储密码
        int d,q;//d是用在第一个输入函数 q是第二个
        printf("\n\t请选择登录身份:1.管理员   2.用户   [ ]\b\b");
        scanf("%d",&d);
       
        if(d==1)//管理员登录
        {
                printf("\n\t\t\t请输入密码:");
                getchar();
                int j=0;//用于密码数组 下标
                while(1)
                {
                        password=getchar();
                        if(password=='\r')
                          break;
                        printf("*");
                        j++;
                }
                password='\0';
                if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
                {
                        flag=1;
                        printf("\n\t登录成功!\n");
                        printf("\tPress key to continue...");
                        getchar();
                        system("cls");
                        meun();
                }
                if(!flag)
                {
                        printf("\t\n密码错误!\n");
                        printf("What do you want to do next? 1.继续登录 2.返回菜单   [ ]\b\b");
                        scanf("%d",&q);
                       
                        if(q==1)//继续登录
                        {
                                system("cls");
                                login();
                        }
                        else if(q==2)//返回菜单
                        {
                                system("cls");
                                meun();
                        }
                       
                }
               
        }
       
        else//用户登录
    {
          printf("\n\t\t\t用户名:");
          scanf("%s",s.name);
            printf("\t\t\t密码:");
            int j=0;//密码数组下标
            while(1)
            {
                  password=getch();
                  if(password=='\r')
                    break;
                  printf("*");
                  j++;          
            }
            password='\0';
            flag=0;//未登录时flag为0
            for(i=0;i<n;i++)
              if(!strcmp(s.name,stu.name)&&!strcmp(s.name,password))
              {
                      flag=1;//登录成功flag为1
                        break;
                  }
                  
          if(flag)//登录成功
          {
                  printf("\n\t登录成功!\n");
                  printf("\tPress any key to continue...\n");
                  getchar();getchar();
                  system("cls");
                  meun();
                }
                else//登录不成功时
                {
                        m=0;//登陆错误时,防止跳不出登录界面
                        w=1;//避免过多的“用户不存在”
                        int q;//q为选项
                       
                        do
                        {
                                if(w>0)
                                  printf("用户不存在或密码错误!\n");//在第一次登录输入不存在的用户时出现
                                printf("What do you want to do next?1.继续登录2.返回菜单[ ]\b\b");
                                scanf("%d",&q);
                               
                                if(q==1)//继续登录
                                {
                                        login();
                                        m=1;
                                }
                                else if(q==2)//返回菜单
                                {
                                        system("cls");
                                        meun();
                                        m=1;
                                }
                                else//错误选择
                                {
                                        printf("选择错误!请重新选择:\n");
                                        w=0;       
                                }
                        }while(m==0);
                }
    }
}

int load()//打开文件,读取数据
{
        FILE *fp;
        int i;
        if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入一个空文件,rb为打开二进制文件,只都数据
        {
                printf("\n文件不存在!请重新输入:\n");
                return 0;
        }
        for(i=0;!feof(fp);i++)
          fread(&stu,sizeof(struct student),1,fp);//将一批数据作为一个整体一次性写入磁盘文件
          //fread(buffer,size,cout,fp)
          //buffer:数据位置 sizeof:数据字节数 count:读取次数 fp:原磁盘文件指针
                fclose(fp);
                return(i-1);
}

void input(int k)//输入学生信息
{
        getchar();
        printf("学号:");   scanf("%s",stu.num);   getchar();
        printf("姓名:");   scanf("%s",stu.name);getchar();
        printf("性别:");   scanf("%s",stu.sex);   getchar();
        printf("出生年月:");scanf("%d/%d/%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day); getchar();
        printf("年龄:");   scanf("%d",&stu.age);getchar();
    printf("籍贯:");   scanf("%s",stu.addr);getchar();
        printf("系别:");   scanf("s",stu.dept);   getchar();
        printf("专业:");   scanf("%s",stu.major); getchar();
        printf("班级:");   scanf("%s",stu.class); getchar();
        printf("学籍变化:");scanf("%s",stu.native_changes); getchar();
}

void save(int n)//保留学生信息
{
        void exit();
        FILE *fp;
        int i;
        if((fp=fopen("D:\\file.txt","wb"))==NULL)//只打开或建立一个二进制文件,只允许写数据
        {
                printf("\n Can not open file!\n");
                exit(0);
        }
        for(i=0;i<n;i++)
          if(stu.name!='0')
              if(fwrite(&stu,sizeof(struct student),1,fp)!=1)//将一批数据作为一个整体一次性写入磁盘文件
                printf("文件写入错误\n");
        fclose(fp);
}   

void insert()//添加学生信息
{
        int i,n,k,t;
        FILE *fp;
        if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入空文件,rb表示打开一个二进制文件,只允许读数据
        {
                printf("How many student do you want to add(1-%d)?:",N-1);
                n=0;
        }
        else
        {
                n=load();
                printf("How many student do you want to insert(1-%d)?:",N-n-1);
        }
        scanf("%d",&t);
        k=n+t;
        for(i=n;i<k;i++)
        {
                printf("\n 输入第%d个学生的学籍信息.\n",i-n+1);
                input(i);
        }
        save(k);//保留所有学生的信息
        print_back();
}

void print_back()//添加信息后显示“是浏览还是返回”
{
        int w,k=0;
        void browse();
        void menu();
        printf("\n\n\t插入成功\n\n");
        do
        {
                printf("What do you want to do next?\n\n\t1.浏览所有\t2.返回:[ ]\b\b");
                scanf("%d",&w);
                if(w==1)
                {
                        system("cls");
                        browse();
                }
                else if(w==2)
                {
                        system("cls");
                        menu();
                }
                else
                  printf("选择错误!请重新选择!\n");
        }while(k==0);
}

void deleter()//删除
{
        void menu();
        if(!flag)
        {
                printf("\n\n\t请先登录!\n");
                printf("\n\t请按Enter 键进入登录界面!");
                getchar();
                getchar();
                login();
        }
        else
        {
                struct student s;
                int i,n,k,w0,w1;
                n=load();
                do
                {
                        k=-1;
                        do
                        {
                                printf("\n\n请输入您想要删除的学生的姓名!\nName:");
                          scanf("%s",s.name);
                          for(i=0;i<n;i++)
                              if(strcmp(s.name,stu.name)==0)
                              {
                                    k=i;
                                    s=stu;
                              }
                          if(k==-1)
                          {
                                  int m;
                                  printf("\n\n没有这个学生的信息!\n");
                                  printf("What do you want to do next?1.继续输入 2.返回主菜单   [ ]\b\b");
                                  scanf("%d",&m);
                                  if(m==1)
                                    deleter();
                                  else
                                  {
                                          k=0;
                                          menu();
                                        }
                                }
                        }while(k==-1);
                        print_one(k);
                        printf("\n\t确定删除?\n\t1.是2.返回    [ ]\b\b");//再次询问是否删除
                        scanf("%d",&w0);
                        if(w0==1)
                        {
                                stu.name='\0';
                                save(n);
                        }
                        else
                          break;
                        printf("\n\t成功删除!\n");
                        printf("What do you want to do?\n\t1.继续2.返回   [ ]\b\b");
                        scanf("%d",&w1);        
                }while(w1==1);
                system("cls");
                meun();//不再删除时返回菜单,w1!=1
        }
}

void print_one(int k)//输出一个学生的信息
{
        system("color 4e");
        printf("学号:%s\n",stu.num);
        printf("姓名:%s\n",stu.name);
        printf("性别:%s\n",stu.sex);
        printf("出生年月:%d/%d/%d\n",stu.birthday.year,stu.birthday.month,stu.birthday.day);
        printf("年龄:%d\n",stu.age);
    printf("籍贯:%s\n",stu.addr);
        printf("系别:%s\n",stu.dept);
        printf("专业:%s\n",stu.major);
        printf("班级:%s\n",stu.class);
        printf("学籍变化:%s\n",stu.native_changes);
}

void print_n(int n)//浏览时输出所有学生的信息
{
        system("color 2e");
        int j,i=1;
        for(j=0;j<n;j++)
        {
                printf("第%个学生:\n",i++);
                print_one(j);
                printf("\n");
        }
        getchar();
}

void search()//查找
{
        void menu();
        int w0,k,i,n,w1,w2;
        struct student s;
        FILE *fp;
        if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
          n=load();
        do
        {
                printf("请选择查找类别:1.姓名 2.学号[ ]\b\b");
                scanf("%d",&w1);
                if(w1<1||w1>2)
                {
                        printf("输入错误!请重新输入!\n");
                        w2=1;
                }
                else
                  w2=0;//加这句是为了能跳出循环
        }while(w2==1);
       
        if(w1=1)//姓名查找
        {
                do
                {
                        k=-1;
                        do
                        {
                                printf("\n请输入您想要查找的学生的姓名!\nName:");
                                scanf("&s",s.name);
                                for(i=0;i<n;i++)
                                  if(strcmp(s.name,stu.name)==0)
                                  {
                                          k=i;
                                          s=stu;
                                  }
                                  if(k==-1)//没有找到
                                  {
                                          int o;
                                          printf("\n\n没有找到这个学生的信息!\n");
                                          printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
                                          scanf("%d",&o);
                                          if(o==1)
                                          {
                                                  system("cls");
                                                  search();//继续查找
                                          }
                                        else
                                        {
                                                system("cls");
                                                meun();
                                        }
                                  }
                        }while(k==1);
                  sys("cls");
                  print_one(k);//找到以后输出这个学生的信息
                  printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单[ ]\b\b");
                  scanf("%d",&w0);
                }while(w0==1);
          system("cls");
            meun();//不在寻找时返回菜单
        }
        else//按学号查找
        {
                do
                {
                        k=-1;
                        do
                        {
                                printf("\n请输入您想要查找的学生的学号!\nNum:");
                                scanf("%s",s.num);
                                for(i=1;i<n;i++)
                                  if(strcmp(s.num,stu.num)==0)
                                  {
                                          k=i;
                                          s=stu;
                                  }
                                if(k==-1)
                                {
                                        int o;
                                        printf("\n\n没有这个学生的信息!\n!");
                                        printf("What do you want to do?\n\t1.继续2.返回菜单[ ]\b\b");
                                        scanf("%d",&o);
                                        if(o==1)
                                        {
                                                system("cls");
                                                search();//继续查找
                                        }
                                        else
                                        {
                                                system("cls");
                                                meun();
                                        }
                                }
                        }while(k==-1);
                        system("cls");
                        print_one(k);//找到以后输出这个学生的学籍信息
                        printf("\nWhat do you want to do?\n\t1.继续2.返回菜单[ ]\b\b");
                        scanf("%d",&w0);
                }while(w0==1);
                system("cls");
                meun();//不再查找时返回主菜单
        }
}

int modify_data(int i)//修改信息函数
{
        int c,w1;
        void menu();
        do
        {
                puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.出生日期 5.年龄 6.籍贯 7.系别 8.专业 9.班级 10.学籍变化 11.所有信息 12.取消并返回");
                printf("请选择?:[]\b\b\b");
                scanf("%d",&c);
                if(c>12||c<1)
                {
                        puts("\n选择错误!请重新选择!");
                        getchar();
                }
        }while(c>12||c<1);
        do
        {
                switch(c)
                {
                        case 1: printf("学号:");scanf("%s",stu.num); break;
         case 2: printf("姓名:");scanf("%s",stu.name); break;
         case 3: printf("性别:");scanf("%s",stu.sex); break;
         case 4: printf("出生年月:");scanf("%d/%d/%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day); break;
               case 5: printf("年龄:");scanf("%d",&stu.age);break;
               case 6: printf("籍贯:");scanf("%s",stu.addr);break;
               case 7: printf("系别:");scanf("%s",stu.dept);break;
               case 8: printf("专业:");scanf("%s",stu.major);break;
               case 9: printf("班级:");scanf("%s",stu.class);break;
               case 10: printf("学籍变化:");scanf("%s",stu.native_changes);break;
               case 11: input(i); break;/*修改这个学生的所有信息*/
               case 12: menu();/*返回主菜单*/
                }
                puts("\nNow:\n");
                print_one(i);//输出 修改后 的这个学生的信息
                printf("\n确定?\n\n\t1.是 2.否,重新修改 3.返回不保存[ ]\b\b");
                scanf("%d",&w1);
        }while(w1==2);
        return(w1);//修改成功并选择1后返回1
}

void modify()//修改
{
        void menu();
        if(!flag)
        {
                printf("\n\n\t请先登录!\n");
                printf("\n\t请按Enter 键进入登录界面!");
                getchar();
                getchar();
                login();
        }
        else
        {
                struct student s;
                int i,n,k,w0=1,w1,w2=0;
                n=load();
                do
                {
                        k=-1;
                        do
                        {
                                printf("\n 请输入您想要修改的学生的姓名!\nName:");
                                scanf("%s",s.name);
                                for(i=0;i<n;i++)
                                        if(strcmp(s.name,stu.name)==0)//与其中一学生匹配
                                        {
                                                k=1;
                                                s=stu;
                                        }
                                   if(k==-1)//没有找到输入的学生
                                   {
                                             int o;
                                             printf("\n\n没有这个学生的信息!\n");
                                             printf("What do you want to do ?\n\t1.继续 2.返回菜单 [ ]\b\b");
                                             scanf("%d",&o);
                                             if(o==1)
                                             {
                                                     system("cls");
                                                     modify();//继续修改
                                                }
                                                else
                                                {
                                                        system("cls");
                                                        meun();
                                                }
                                   }
                          }while(k==-1);
                          system("cls");
                          printf_one(k);//输出这个学生的信息
                                w1=modify_data(k);
                                if(w1==1)//判断是否修改成功
                                {
                                        printf("\n\t修改成功 \n\n是否继续?\n\n\t1.是 2.保存返回\t[ ]\b\b");
                                        scanf("%d",&w0);
                                        w2=1;
                                }
                                else
                                {
                                        w0=0;
                                        if(w2==0)
                                          stu=s;
                                }
                                if((w0!=1)&&(w2==1))//修改成功保存
                                  save(n);
                }while(w0=1);
                system("cls");
                meun();//不再修改返回主菜单
        }
}

void browse()
{
        system("color 5f");
        int i,n;
    FILE *fp;
        if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
          n=load();//打开文件
        printf("********************学生籍贯表*********************\n");
        printf("学号      姓名       籍贯\n");
        for(i=1;i<=n ;i++)
        {
                printf("%d      %s         %s\n",stu.num,stu.name,stu.addr);
        }
       
        fclose(fp);

}

void browse_x()
{
        struct student s;
        int i,n,t=-1;
    FILE *fp;
        if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
          n=load();//打开文件
        printf("请输入要查询学生的学号:");
        scanf("%s",s.num);
        for (i=1; i<=n; i++)
        {
                if (s.num==stu.num)
                {
                printf("学号:%ld姓名:%s   学籍:%s\n",stu.num,stu.name,stu.native_changes);               
                t=-2;
                }       
        }
               
        if(t!=-2)       
        printf("Not found!\n");
}

临时号 发表于 2022-6-12 22:45:35

你的代码很多处出现拼写错误,导致编译不过,其中出现最多的拼写错误是将menu写成meun,我帮你改完了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

#define N 100//存储100个学生信息

int flag;//用来标记登录状态

void Fpage();
void menu();
void login();
void browse();
void insert();
void print_back();
void deleter();
void print_one(int);
void search();
void modify();
void browse_x();

struct data//出生日期
{
      int year;
      int month;
      int day;
};

struct student//学生信息
{
      char num;//学号
      char name;//姓名
      char sex;//性别
      struct data birthday;//出书年月
      int age;//年龄
      char addr;//籍贯
      char dept;//系别
      char major;//专业
      char class;//班级
      char native_changes;//学籍
}stu;

int main()//主函数
{
      Fpage();//首页
      menu();//菜单
         
      return 0;
}

void Fpage()//访问首页
{
      system("color 4e");
      printf("\n\t   ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★");
      puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※          欢迎访问学生学籍管理系统!         ※※");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※                                              ※※");
      puts("\t    ※※                              制作人:陈茗杰※※");
      puts("\t    ※※                                  2022.5.30   ※※");
    puts("\t    ※※                                              ※※");
      puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
      printf("\n\tPress [ Enter ] key to continue……\n");
    getchar();
      system("cls") ;
}

void menu()//主菜单
{
      system("color 2e");
      printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
      printf("\n");
      int n,r1;//n用来选择功能,r1用来输入错误时重新返回功能
      do
      {
         puts("\t\t★★★★★★★★    菜单★★★★★★★★");
         puts("\t\t★             1.登录个人账号               ★");
         puts("\t\t★             2.登记学生信息               ★");
         puts("\t\t★             3.删除学生信息               ★");
         puts("\t\t★             4.查找学生信息               ★");
         puts("\t\t★             5.修改学生信息               ★");
         puts("\t\t★             6.浏览学生籍贯               ★");
         puts("\t\t★             7.查询学籍变化               ★");
         puts("\t\t★             8.退出学生系统               ★");
         puts("\t\t★★★★★★★★★★★★★★★★★★★★★");
       printf("请选择服务种类(1-7) : [ ]\b\b");
       scanf("%d",&n);
       if(n<1||n>8)
       {
                   system("cls");
                   printf("选择错误!请正确输入!\n");
                   r1=1;
         }
         else
               r1=0;
      }while(r1==1);
      switch(n)
      {
                case 1: login();break;//登录账号
                case 2: system("cls"); insert();break;//插入
                case 3: system("cls"); deleter(); break;//删除
                case 4: system("cls"); search();break;//查找
                case 5: system("cls"); modify();break;//修改
                case 6: system("cls"); browse();break;//浏览
                case 7: system("cls"); browse_x(); break;//学籍浏览
      }
}

void login()//登录
{
      void menu();
      system("cls");
      
      if(flag) //先判断是否已登录
      {
                printf("您已经登录!\n");
                printf("Press any key to continue...\n");
                getchar();
                getchar();
                system("cls");
                menu();
      }
         
      int load();//存储文件
      int n,i,m,w;
      FILE *fp;
      if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
            n=load();//打开文件
      else
            n=0;
      struct student s;//存储学生账号
      char password;//存储密码
      int d,q;//d是用在第一个输入函数 q是第二个
      printf("\n\t请选择登录身份:1.管理员   2.用户   [ ]\b\b");
      scanf("%d",&d);
      
      if(d==1)//管理员登录
      {
                printf("\n\t\t\t请输入密码:");
                getchar();
                int j=0;//用于密码数组 下标
                while(1)
                {
                        password=getchar();
                        if(password=='\r')
                        break;
                        printf("*");
                        j++;
                }
                password='\0';
                if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
                {
                        flag=1;
                        printf("\n\t登录成功!\n");
                        printf("\tPress key to continue...");
                        getchar();
                        system("cls");
                        menu();
                }
                if(!flag)
                {
                        printf("\t\n密码错误!\n");
                        printf("What do you want to do next? 1.继续登录 2.返回菜单   [ ]\b\b");
                        scanf("%d",&q);
                     
                        if(q==1)//继续登录
                        {
                              system("cls");
                              login();
                        }
                        else if(q==2)//返回菜单
                        {
                              system("cls");
                              menu();
                        }
                     
                }
               
      }
      
      else//用户登录
    {
            printf("\n\t\t\t用户名:");
            scanf("%s",s.name);
            printf("\t\t\t密码:");
            int j=0;//密码数组下标
            while(1)
            {
                  password=getch();
                  if(password=='\r')
                      break;
                  printf("*");
                  j++;         
            }
            password='\0';
            flag=0;//未登录时flag为0
            for(i=0;i<n;i++)
            if(!strcmp(s.name,stu.name)&&!strcmp(s.name,password))
            {
                      flag=1;//登录成功flag为1
                        break;
                  }
                  
            if(flag)//登录成功
            {
                  printf("\n\t登录成功!\n");
                  printf("\tPress any key to continue...\n");
                  getchar();getchar();
                  system("cls");
                  menu();
                }
                else//登录不成功时
                {
                        m=0;//登陆错误时,防止跳不出登录界面
                        w=1;//避免过多的“用户不存在”
                        int q;//q为选项
                     
                        do
                        {
                              if(w>0)
                                    printf("用户不存在或密码错误!\n");//在第一次登录输入不存在的用户时出现
                              printf("What do you want to do next?1.继续登录2.返回菜单[ ]\b\b");
                              scanf("%d",&q);
                              
                              if(q==1)//继续登录
                              {
                                        login();
                                        m=1;
                              }
                              else if(q==2)//返回菜单
                              {
                                        system("cls");
                                        menu();
                                        m=1;
                              }
                              else//错误选择
                              {
                                        printf("选择错误!请重新选择:\n");
                                        w=0;      
                              }
                        }while(m==0);
                }
    }
}

int load()//打开文件,读取数据
{
      FILE *fp;
      int i;
      if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入一个空文件,rb为打开二进制文件,只都数据
      {
                printf("\n文件不存在!请重新输入:\n");
                return 0;
      }
      for(i=0;!feof(fp);i++)
            fread(&stu,sizeof(struct student),1,fp);//将一批数据作为一个整体一次性写入磁盘文件
            //fread(buffer,size,cout,fp)
            //buffer:数据位置 sizeof:数据字节数 count:读取次数 fp:原磁盘文件指针
                fclose(fp);
                return(i-1);
}

void input(int k)//输入学生信息
{
      getchar();
      printf("学号:");   scanf("%s",stu.num);   getchar();
      printf("姓名:");   scanf("%s",stu.name);getchar();
      printf("性别:");   scanf("%s",stu.sex);   getchar();
      printf("出生年月:");scanf("%d/%d/%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day); getchar();
      printf("年龄:");   scanf("%d",&stu.age);getchar();
    printf("籍贯:");   scanf("%s",stu.addr);getchar();
      printf("系别:");   scanf("s",stu.dept);   getchar();
      printf("专业:");   scanf("%s",stu.major); getchar();
      printf("班级:");   scanf("%s",stu.class); getchar();
      printf("学籍变化:");scanf("%s",stu.native_changes); getchar();
}

void save(int n)//保留学生信息
{
      void exit();
      FILE *fp;
      int i;
      if((fp=fopen("D:\\file.txt","wb"))==NULL)//只打开或建立一个二进制文件,只允许写数据
      {
                printf("\n Can not open file!\n");
                exit(0);
      }
      for(i=0;i<n;i++)
          if(stu.name!='0')
            if(fwrite(&stu,sizeof(struct student),1,fp)!=1)//将一批数据作为一个整体一次性写入磁盘文件
                  printf("文件写入错误\n");
      fclose(fp);
}   

void insert()//添加学生信息
{
      int i,n,k,t;
      FILE *fp;
      if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入空文件,rb表示打开一个二进制文件,只允许读数据
      {
                printf("How many student do you want to add(1-%d)?:",N-1);
                n=0;
      }
      else
      {
                n=load();
                printf("How many student do you want to insert(1-%d)?:",N-n-1);
      }
      scanf("%d",&t);
      k=n+t;
      for(i=n;i<k;i++)
      {
                printf("\n 输入第%d个学生的学籍信息.\n",i-n+1);
                input(i);
      }
      save(k);//保留所有学生的信息
      print_back();
}

void print_back()//添加信息后显示“是浏览还是返回”
{
      int w,k=0;
      void browse();
      void menu();
      printf("\n\n\t插入成功\n\n");
      do
      {
                printf("What do you want to do next?\n\n\t1.浏览所有\t2.返回:[ ]\b\b");
                scanf("%d",&w);
                if(w==1)
                {
                        system("cls");
                        browse();
                }
                else if(w==2)
                {
                        system("cls");
                        menu();
                }
                else
                  printf("选择错误!请重新选择!\n");
      }while(k==0);
}

void deleter()//删除
{
      void menu();
      if(!flag)
      {
                printf("\n\n\t请先登录!\n");
                printf("\n\t请按Enter 键进入登录界面!");
                getchar();
                getchar();
                login();
      }
      else
      {
                struct student s;
                int i,n,k,w0,w1;
                n=load();
                do
                {
                        k=-1;
                        do
                        {
                              printf("\n\n请输入您想要删除的学生的姓名!\nName:");
                            scanf("%s",s.name);
                            for(i=0;i<n;i++)
                              if(strcmp(s.name,stu.name)==0)
                              {
                                    k=i;
                                    s=stu;
                              }
                            if(k==-1)
                            {
                                    int m;
                                    printf("\n\n没有这个学生的信息!\n");
                                    printf("What do you want to do next?1.继续输入 2.返回主菜单   [ ]\b\b");
                                    scanf("%d",&m);
                                    if(m==1)
                                        deleter();
                                    else
                                    {
                                          k=0;
                                          menu();
                                        }
                              }
                        }while(k==-1);
                        print_one(k);
                        printf("\n\t确定删除?\n\t1.是2.返回    [ ]\b\b");//再次询问是否删除
                        scanf("%d",&w0);
                        if(w0==1)
                        {
                              stu.name='\0';
                              save(n);
                        }
                        else
                            break;
                        printf("\n\t成功删除!\n");
                        printf("What do you want to do?\n\t1.继续2.返回   [ ]\b\b");
                        scanf("%d",&w1);      
                }while(w1==1);
                system("cls");
                menu();//不再删除时返回菜单,w1!=1
      }
}

void print_one(int k)//输出一个学生的信息
{
      system("color 4e");
      printf("学号:%s\n",stu.num);
      printf("姓名:%s\n",stu.name);
      printf("性别:%s\n",stu.sex);
      printf("出生年月:%d/%d/%d\n",stu.birthday.year,stu.birthday.month,stu.birthday.day);
      printf("年龄:%d\n",stu.age);
    printf("籍贯:%s\n",stu.addr);
      printf("系别:%s\n",stu.dept);
      printf("专业:%s\n",stu.major);
      printf("班级:%s\n",stu.class);
      printf("学籍变化:%s\n",stu.native_changes);
}

void print_n(int n)//浏览时输出所有学生的信息
{
      system("color 2e");
      int j,i=1;
      for(j=0;j<n;j++)
      {
                printf("第%个学生:\n",i++);
                print_one(j);
                printf("\n");
      }
      getchar();
}

void search()//查找
{
      void menu();
      int w0,k,i,n,w1,w2;
      struct student s;
      FILE *fp;
      if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
            n=load();
      do
      {
                printf("请选择查找类别:1.姓名 2.学号[ ]\b\b");
                scanf("%d",&w1);
                if(w1<1||w1>2)
                {
                        printf("输入错误!请重新输入!\n");
                        w2=1;
                }
                else
                  w2=0;//加这句是为了能跳出循环
      }while(w2==1);
      
      if(w1=1)//姓名查找
      {
                do
                {
                        k=-1;
                        do
                        {
                              printf("\n请输入您想要查找的学生的姓名!\nName:");
                              scanf("&s",s.name);
                              for(i=0;i<n;i++)
                                  if(strcmp(s.name,stu.name)==0)
                                  {
                                          k=i;
                                          s=stu;
                                  }
                                  if(k==-1)//没有找到
                                  {
                                          int o;
                                          printf("\n\n没有找到这个学生的信息!\n");
                                          printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
                                          scanf("%d",&o);
                                          if(o==1)
                                          {
                                                system("cls");
                                                search();//继续查找
                                          }
                                        else
                                        {
                                                system("cls");
                                                menu();
                                        }
                                  }
                        }while(k==1);
                  system("cls");
                  print_one(k);//找到以后输出这个学生的信息
                  printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单[ ]\b\b");
                  scanf("%d",&w0);
                }while(w0==1);
            system("cls");
            menu();//不在寻找时返回菜单
      }
      else//按学号查找
      {
                do
                {
                        k=-1;
                        do
                        {
                              printf("\n请输入您想要查找的学生的学号!\nNum:");
                              scanf("%s",s.num);
                              for(i=1;i<n;i++)
                                  if(strcmp(s.num,stu.num)==0)
                                  {
                                          k=i;
                                          s=stu;
                                  }
                              if(k==-1)
                              {
                                        int o;
                                        printf("\n\n没有这个学生的信息!\n!");
                                        printf("What do you want to do?\n\t1.继续2.返回菜单[ ]\b\b");
                                        scanf("%d",&o);
                                        if(o==1)
                                        {
                                                system("cls");
                                                search();//继续查找
                                        }
                                        else
                                        {
                                                system("cls");
                                                menu();
                                        }
                              }
                        }while(k==-1);
                        system("cls");
                        print_one(k);//找到以后输出这个学生的学籍信息
                        printf("\nWhat do you want to do?\n\t1.继续2.返回菜单[ ]\b\b");
                        scanf("%d",&w0);
                }while(w0==1);
                system("cls");
                menu();//不再查找时返回主菜单
      }
}

int modify_data(int i)//修改信息函数
{
      int c,w1;
      void menu();
      do
      {
                puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.出生日期 5.年龄 6.籍贯 7.系别 8.专业 9.班级 10.学籍变化 11.所有信息 12.取消并返回");
                printf("请选择?:[]\b\b\b");
                scanf("%d",&c);
                if(c>12||c<1)
                {
                        puts("\n选择错误!请重新选择!");
                        getchar();
                }
      }while(c>12||c<1);
      do
      {
                switch(c)
                {
                        case 1: printf("学号:");scanf("%s",stu.num); break;
         case 2: printf("姓名:");scanf("%s",stu.name); break;
         case 3: printf("性别:");scanf("%s",stu.sex); break;
         case 4: printf("出生年月:");scanf("%d/%d/%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day); break;
               case 5: printf("年龄:");scanf("%d",&stu.age);break;
               case 6: printf("籍贯:");scanf("%s",stu.addr);break;
               case 7: printf("系别:");scanf("%s",stu.dept);break;
               case 8: printf("专业:");scanf("%s",stu.major);break;
               case 9: printf("班级:");scanf("%s",stu.class);break;
               case 10: printf("学籍变化:");scanf("%s",stu.native_changes);break;
               case 11: input(i); break;/*修改这个学生的所有信息*/
               case 12: menu();/*返回主菜单*/
                }
                puts("\nNow:\n");
                print_one(i);//输出 修改后 的这个学生的信息
                printf("\n确定?\n\n\t1.是 2.否,重新修改 3.返回不保存[ ]\b\b");
                scanf("%d",&w1);
      }while(w1==2);
      return(w1);//修改成功并选择1后返回1
}

void modify()//修改
{
      void menu();
      if(!flag)
      {
                printf("\n\n\t请先登录!\n");
                printf("\n\t请按Enter 键进入登录界面!");
                getchar();
                getchar();
                login();
      }
      else
      {
                struct student s;
                int i,n,k,w0=1,w1,w2=0;
                n=load();
                do
                {
                        k=-1;
                        do
                        {
                              printf("\n 请输入您想要修改的学生的姓名!\nName:");
                              scanf("%s",s.name);
                              for(i=0;i<n;i++)
                                        if(strcmp(s.name,stu.name)==0)//与其中一学生匹配
                                        {
                                                k=1;
                                                s=stu;
                                        }
                                 if(k==-1)//没有找到输入的学生
                                 {
                                             int o;
                                             printf("\n\n没有这个学生的信息!\n");
                                             printf("What do you want to do ?\n\t1.继续 2.返回菜单 [ ]\b\b");
                                             scanf("%d",&o);
                                             if(o==1)
                                             {
                                                       system("cls");
                                                       modify();//继续修改
                                                }
                                                else
                                                {
                                                      system("cls");
                                                      menu();
                                                }
                                 }
                            }while(k==-1);
                            system("cls");
                            print_one(k);//输出这个学生的信息
                              w1=modify_data(k);
                              if(w1==1)//判断是否修改成功
                              {
                                        printf("\n\t修改成功 \n\n是否继续?\n\n\t1.是 2.保存返回\t[ ]\b\b");
                                        scanf("%d",&w0);
                                        w2=1;
                              }
                              else
                              {
                                        w0=0;
                                        if(w2==0)
                                          stu=s;
                              }
                              if((w0!=1)&&(w2==1))//修改成功保存
                                    save(n);
                }while(w0=1);
                system("cls");
                menu();//不再修改返回主菜单
      }
}

void browse()
{
      system("color 5f");
      int i,n;
    FILE *fp;
      if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
            n=load();//打开文件
      printf("********************学生籍贯表*********************\n");
      printf("学号      姓名       籍贯\n");
      for(i=1;i<=n ;i++)
      {
                printf("%d      %s         %s\n",stu.num,stu.name,stu.addr);
      }
      
      fclose(fp);

}

void browse_x()
{
      struct student s;
      int i,n,t=-1;
    FILE *fp;
      if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
            n=load();//打开文件
      printf("请输入要查询学生的学号:");
      scanf("%s",s.num);
      for (i=1; i<=n; i++)
      {
                if (s.num==stu.num)
                {
                printf("学号:%ld姓名:%s   学籍:%s\n",stu.num,stu.name,stu.native_changes);               
                t=-2;
                }      
      }
               
      if(t!=-2)      
      printf("Not found!\n");
}
页: [1]
查看完整版本: 有没有大神看看为什么运行不了啊