鱼C论坛

 找回密码
 立即注册
查看: 1774|回复: 1

[已解决]有没有大神看看为什么运行不了啊

[复制链接]
发表于 2022-6-12 22:26:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[15];//学号
        char name[15];//姓名
        char sex[5];//性别
        struct data birthday;//出书年月
        int age;//年龄
        char addr[50];//籍贯
        char dept[50];//系别
        char major[30];//专业
        char class[30];//班级
        char native_changes[30];//学籍
}stu[N];

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[20];//存储密码
        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[j]=getchar();
                        if(password[j]=='\r')
                          break;
                        printf("*");
                        j++;
                }
                password[j]='\0';
                if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
                {
                        flag=1;
                        printf("\n\t登录成功!\n");
                        printf("\tPress [Enter] 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[j]=getch();
                    if(password[j]=='\r')
                      break;
                    printf("*");
                    j++;          
            }
            password[j]='\0';
            flag=0;//未登录时flag为0
            for(i=0;i<n;i++)
              if(!strcmp(s.name,stu[i].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[i],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[k].num);   getchar();
        printf("姓名:");   scanf("%s",stu[k].name);  getchar();
        printf("性别:");   scanf("%s",stu[k].sex);   getchar();
        printf("出生年月:");  scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); getchar();
        printf("年龄:");   scanf("%d",&stu[k].age);  getchar();
    printf("籍贯:");   scanf("%s",stu[k].addr);  getchar();
        printf("系别:");   scanf("s",stu[k].dept);   getchar();
        printf("专业:");   scanf("%s",stu[k].major); getchar();
        printf("班级:");   scanf("%s",stu[k].class); getchar();
        printf("学籍变化:");scanf("%s",stu[k].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[i].name[0]!='0')
              if(fwrite(&stu[i],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[i].name)==0)
                              {
                                      k=i;
                                      s=stu[i];
                              }
                            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[k].name[0]='\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[k].num);
        printf("姓名:%s\n",stu[k].name);
        printf("性别:%s\n",stu[k].sex);
        printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day);
        printf("年龄:%d\n",stu[k].age);
    printf("籍贯:%s\n",stu[k].addr);
        printf("系别:%s\n",stu[k].dept);
        printf("专业:%s\n",stu[k].major);
        printf("班级:%s\n",stu[k].class);
        printf("学籍变化:%s\n",stu[k].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[i].name)==0)
                                  {
                                          k=i;
                                          s=stu[i];
                                  }
                                  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[i].num)==0)
                                  {
                                          k=i;
                                          s=stu[i];
                                  }
                                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[i].num); break;
         case 2: printf("姓名:");  scanf("%s",stu[i].name); break;
         case 3: printf("性别:");  scanf("%s",stu[i].sex); break;
         case 4: printf("出生年月:");  scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break;
                 case 5: printf("年龄:");  scanf("%d",&stu[i].age);break;
                 case 6: printf("籍贯:");  scanf("%s",stu[i].addr);break;
                 case 7: printf("系别:");  scanf("%s",stu[i].dept);break;
                 case 8: printf("专业:");  scanf("%s",stu[i].major);break;
                 case 9: printf("班级:");  scanf("%s",stu[i].class);break;
                 case 10: printf("学籍变化:");scanf("%s",stu[i].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[i].name)==0)//与其中一学生匹配
                                        {
                                                k=1;
                                                s=stu[i];
                                        }
                                   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[k]=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[i].num,stu[i].name,stu[i].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[i].num)
                {
                printf("学号:%ld  姓名:%s   学籍:%s  \n",stu[i].num,stu[i].name,stu[i].native_changes);               
                t=-2;
                }       
        }
               
        if(t!=-2)       
        printf("Not found!\n");
}
最佳答案
2022-6-12 22:45:35
你的代码很多处出现拼写错误,导致编译不过,其中出现最多的拼写错误是将menu写成meun,我帮你改完了
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<conio.h>

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

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

  7. void Fpage();
  8. void menu();
  9. void login();
  10. void browse();
  11. void insert();
  12. void print_back();
  13. void deleter();
  14. void print_one(int);
  15. void search();
  16. void modify();
  17. void browse_x();

  18. struct data//出生日期
  19. {
  20.         int year;
  21.         int month;
  22.         int day;
  23. };

  24. struct student//学生信息
  25. {
  26.         char num[15];//学号
  27.         char name[15];//姓名
  28.         char sex[5];//性别
  29.         struct data birthday;//出书年月
  30.         int age;//年龄
  31.         char addr[50];//籍贯
  32.         char dept[50];//系别
  33.         char major[30];//专业
  34.         char class[30];//班级
  35.         char native_changes[30];//学籍
  36. }stu[N];

  37. int main()//主函数
  38. {
  39.         Fpage();//首页
  40.         menu();//菜单
  41.          
  42.         return 0;
  43. }

  44. void Fpage()//访问首页
  45. {
  46.         system("color 4e");
  47.         printf("\n\t     ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★");
  48.         puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
  49.         puts("\t    ※※                                              ※※");
  50.         puts("\t    ※※                                              ※※");
  51.         puts("\t    ※※          欢迎访问学生学籍管理系统!           ※※");
  52.         puts("\t    ※※                                              ※※");
  53.         puts("\t    ※※                                              ※※");
  54.         puts("\t    ※※                                              ※※");
  55.         puts("\t    ※※                                              ※※");
  56.         puts("\t    ※※                              制作人:陈茗杰  ※※");
  57.         puts("\t    ※※                                  2022.5.30   ※※");
  58.     puts("\t    ※※                                              ※※");
  59.         puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
  60.         printf("\n\tPress [ Enter ] key to continue……\n");
  61.     getchar();
  62.         system("cls") ;
  63. }

  64. void menu()//主菜单
  65. {
  66.         system("color 2e");
  67.         printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
  68.         printf("\n");
  69.         int n,r1;//n用来选择功能,r1用来输入错误时重新返回功能
  70.         do
  71.         {
  72.            puts("\t\t★★★★★★★★    菜单  ★★★★★★★★");
  73.            puts("\t\t★             1.登录个人账号               ★");
  74.            puts("\t\t★             2.登记学生信息               ★");
  75.            puts("\t\t★             3.删除学生信息               ★");
  76.            puts("\t\t★             4.查找学生信息               ★");
  77.            puts("\t\t★             5.修改学生信息               ★");
  78.            puts("\t\t★             6.浏览学生籍贯               ★");
  79.            puts("\t\t★             7.查询学籍变化               ★");
  80.            puts("\t\t★             8.退出学生系统               ★");
  81.            puts("\t\t★★★★★★★★★★★★★★★★★★★★★");
  82.        printf("请选择服务种类(1-7) : [ ]\b\b");
  83.        scanf("%d",&n);
  84.        if(n<1||n>8)
  85.        {
  86.                    system("cls");
  87.                    printf("选择错误!请正确输入!\n");
  88.                    r1=1;
  89.            }
  90.            else
  91.                r1=0;
  92.         }while(r1==1);
  93.         switch(n)
  94.         {
  95.                 case 1: login();break;//登录账号
  96.                 case 2: system("cls"); insert();  break;//插入
  97.                 case 3: system("cls"); deleter(); break;//删除
  98.                 case 4: system("cls"); search();  break;//查找
  99.                 case 5: system("cls"); modify();  break;//修改
  100.                 case 6: system("cls"); browse();  break;//浏览
  101.                 case 7: system("cls"); browse_x(); break;//学籍浏览
  102.         }
  103. }

  104. void login()//登录
  105. {
  106.         void menu();
  107.         system("cls");
  108.       
  109.         if(flag) //先判断是否已登录
  110.         {
  111.                 printf("您已经登录!\n");
  112.                 printf("Press any key to continue...\n");
  113.                 getchar();
  114.                 getchar();
  115.                 system("cls");
  116.                 menu();
  117.         }
  118.          
  119.         int load();//存储文件
  120.         int n,i,m,w;
  121.         FILE *fp;
  122.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  123.             n=load();//打开文件
  124.         else
  125.             n=0;
  126.         struct student s;//存储学生账号
  127.         char password[20];//存储密码
  128.         int d,q;//d是用在第一个输入函数 q是第二个
  129.         printf("\n\t请选择登录身份:1.管理员   2.用户     [ ]\b\b");
  130.         scanf("%d",&d);
  131.       
  132.         if(d==1)//管理员登录
  133.         {
  134.                 printf("\n\t\t\t请输入密码:");
  135.                 getchar();
  136.                 int j=0;//用于密码数组 下标
  137.                 while(1)
  138.                 {
  139.                         password[j]=getchar();
  140.                         if(password[j]=='\r')
  141.                           break;
  142.                         printf("*");
  143.                         j++;
  144.                 }
  145.                 password[j]='\0';
  146.                 if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
  147.                 {
  148.                         flag=1;
  149.                         printf("\n\t登录成功!\n");
  150.                         printf("\tPress [Enter] key to continue...");
  151.                         getchar();
  152.                         system("cls");
  153.                         menu();
  154.                 }
  155.                 if(!flag)
  156.                 {
  157.                         printf("\t\n密码错误!\n");
  158.                         printf("What do you want to do next? 1.继续登录 2.返回菜单   [ ]\b\b");
  159.                         scanf("%d",&q);
  160.                        
  161.                         if(q==1)//继续登录
  162.                         {
  163.                                 system("cls");
  164.                                 login();
  165.                         }
  166.                         else if(q==2)//返回菜单
  167.                         {
  168.                                 system("cls");
  169.                                 menu();
  170.                         }
  171.                        
  172.                 }
  173.                
  174.         }
  175.       
  176.         else//用户登录
  177.     {
  178.             printf("\n\t\t\t用户名:");
  179.             scanf("%s",s.name);
  180.             printf("\t\t\t密码:");
  181.             int j=0;//密码数组下标
  182.             while(1)
  183.             {
  184.                     password[j]=getch();
  185.                     if(password[j]=='\r')
  186.                       break;
  187.                     printf("*");
  188.                     j++;         
  189.             }
  190.             password[j]='\0';
  191.             flag=0;//未登录时flag为0
  192.             for(i=0;i<n;i++)
  193.               if(!strcmp(s.name,stu[i].name)&&!strcmp(s.name,password))
  194.               {
  195.                       flag=1;//登录成功flag为1
  196.                         break;
  197.                   }
  198.                   
  199.             if(flag)//登录成功
  200.             {
  201.                     printf("\n\t登录成功!\n");
  202.                     printf("\tPress any key to continue...\n");
  203.                     getchar();getchar();
  204.                     system("cls");
  205.                     menu();
  206.                 }
  207.                 else//登录不成功时
  208.                 {
  209.                         m=0;//登陆错误时,防止跳不出登录界面
  210.                         w=1;//避免过多的“用户不存在”
  211.                         int q;//q为选项
  212.                        
  213.                         do
  214.                         {
  215.                                 if(w>0)
  216.                                     printf("用户不存在或密码错误!\n");//在第一次登录输入不存在的用户时出现
  217.                                 printf("What do you want to do next?1.继续登录  2.返回菜单  [ ]\b\b");
  218.                                 scanf("%d",&q);
  219.                               
  220.                                 if(q==1)//继续登录
  221.                                 {
  222.                                         login();
  223.                                         m=1;
  224.                                 }
  225.                                 else if(q==2)//返回菜单
  226.                                 {
  227.                                         system("cls");
  228.                                         menu();
  229.                                         m=1;
  230.                                 }
  231.                                 else//错误选择
  232.                                 {
  233.                                         printf("选择错误!请重新选择:\n");
  234.                                         w=0;      
  235.                                 }
  236.                         }while(m==0);  
  237.                 }
  238.     }
  239. }

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

  256. void input(int k)//输入学生信息
  257. {
  258.         getchar();
  259.         printf("学号:");   scanf("%s",stu[k].num);   getchar();
  260.         printf("姓名:");   scanf("%s",stu[k].name);  getchar();
  261.         printf("性别:");   scanf("%s",stu[k].sex);   getchar();
  262.         printf("出生年月:");  scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); getchar();
  263.         printf("年龄:");   scanf("%d",&stu[k].age);  getchar();
  264.     printf("籍贯:");   scanf("%s",stu[k].addr);  getchar();
  265.         printf("系别:");   scanf("s",stu[k].dept);   getchar();
  266.         printf("专业:");   scanf("%s",stu[k].major); getchar();
  267.         printf("班级:");   scanf("%s",stu[k].class); getchar();
  268.         printf("学籍变化:");scanf("%s",stu[k].native_changes); getchar();
  269. }

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

  286. void insert()//添加学生信息
  287. {
  288.         int i,n,k,t;
  289.         FILE *fp;
  290.         if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入空文件,rb表示打开一个二进制文件,只允许读数据
  291.         {
  292.                 printf("How many student do you want to add(1-%d)?:",N-1);
  293.                 n=0;
  294.         }
  295.         else
  296.         {
  297.                 n=load();
  298.                 printf("How many student do you want to insert(1-%d)?:",N-n-1);
  299.         }
  300.         scanf("%d",&t);
  301.         k=n+t;
  302.         for(i=n;i<k;i++)
  303.         {
  304.                 printf("\n 输入第%d个学生的学籍信息.\n",i-n+1);
  305.                 input(i);
  306.         }
  307.         save(k);//保留所有学生的信息
  308.         print_back();
  309. }

  310. void print_back()//添加信息后显示“是浏览还是返回”
  311. {
  312.         int w,k=0;
  313.         void browse();
  314.         void menu();
  315.         printf("\n\n\t插入成功\n\n");
  316.         do
  317.         {
  318.                 printf("What do you want to do next?\n\n\t1.浏览所有\t2.返回:[ ]\b\b");
  319.                 scanf("%d",&w);
  320.                 if(w==1)
  321.                 {
  322.                         system("cls");
  323.                         browse();
  324.                 }
  325.                 else if(w==2)
  326.                 {
  327.                         system("cls");
  328.                         menu();
  329.                 }
  330.                 else
  331.                     printf("选择错误!请重新选择!\n");
  332.         }while(k==0);
  333. }

  334. void deleter()//删除
  335. {
  336.         void menu();
  337.         if(!flag)
  338.         {
  339.                 printf("\n\n\t请先登录!\n");
  340.                 printf("\n\t请按Enter 键进入登录界面!");
  341.                 getchar();
  342.                 getchar();
  343.                 login();
  344.         }
  345.         else
  346.         {
  347.                 struct student s;
  348.                 int i,n,k,w0,w1;
  349.                 n=load();
  350.                 do
  351.                 {
  352.                         k=-1;
  353.                         do
  354.                         {
  355.                                 printf("\n\n请输入您想要删除的学生的姓名!\nName:");
  356.                             scanf("%s",s.name);
  357.                             for(i=0;i<n;i++)
  358.                               if(strcmp(s.name,stu[i].name)==0)
  359.                               {
  360.                                       k=i;
  361.                                       s=stu[i];
  362.                               }
  363.                             if(k==-1)
  364.                             {
  365.                                     int m;
  366.                                     printf("\n\n没有这个学生的信息!\n");
  367.                                     printf("What do you want to do next?1.继续输入 2.返回主菜单   [ ]\b\b");
  368.                                     scanf("%d",&m);
  369.                                     if(m==1)
  370.                                         deleter();
  371.                                     else
  372.                                     {
  373.                                             k=0;
  374.                                             menu();
  375.                                         }
  376.                                 }
  377.                         }while(k==-1);
  378.                         print_one(k);
  379.                         printf("\n\t确定删除?\n\t1.是  2.返回    [ ]\b\b");//再次询问是否删除
  380.                         scanf("%d",&w0);
  381.                         if(w0==1)
  382.                         {
  383.                                 stu[k].name[0]='\0';
  384.                                 save(n);
  385.                         }
  386.                         else
  387.                             break;
  388.                         printf("\n\t成功删除!\n");
  389.                         printf("What do you want to do?\n\t1.继续  2.返回   [ ]\b\b");
  390.                         scanf("%d",&w1);        
  391.                 }while(w1==1);
  392.                 system("cls");
  393.                 menu();//不再删除时返回菜单,w1!=1
  394.         }
  395. }

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

  410. void print_n(int n)//浏览时输出所有学生的信息
  411. {
  412.         system("color 2e");
  413.         int j,i=1;
  414.         for(j=0;j<n;j++)
  415.         {
  416.                 printf("第%个学生:\n",i++);
  417.                 print_one(j);
  418.                 printf("\n");
  419.         }
  420.         getchar();
  421. }

  422. void search()//查找
  423. {
  424.         void menu();
  425.         int w0,k,i,n,w1,w2;
  426.         struct student s;
  427.         FILE *fp;
  428.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  429.             n=load();
  430.         do
  431.         {
  432.                 printf("请选择查找类别:1.姓名 2.学号  [ ]\b\b");
  433.                 scanf("%d",&w1);
  434.                 if(w1<1||w1>2)
  435.                 {
  436.                         printf("输入错误!请重新输入!\n");
  437.                         w2=1;
  438.                 }
  439.                 else
  440.                     w2=0;//加这句是为了能跳出循环
  441.         }while(w2==1);
  442.       
  443.         if(w1=1)//姓名查找
  444.         {
  445.                 do
  446.                 {
  447.                         k=-1;
  448.                         do
  449.                         {
  450.                                 printf("\n请输入您想要查找的学生的姓名!\nName:");
  451.                                 scanf("&s",s.name);
  452.                                 for(i=0;i<n;i++)
  453.                                   if(strcmp(s.name,stu[i].name)==0)
  454.                                   {
  455.                                           k=i;
  456.                                           s=stu[i];
  457.                                   }
  458.                                   if(k==-1)//没有找到
  459.                                   {
  460.                                           int o;
  461.                                           printf("\n\n没有找到这个学生的信息!\n");
  462.                                           printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
  463.                                           scanf("%d",&o);
  464.                                           if(o==1)
  465.                                           {
  466.                                                   system("cls");
  467.                                                   search();//继续查找
  468.                                           }
  469.                                         else
  470.                                         {
  471.                                                 system("cls");
  472.                                                 menu();
  473.                                         }
  474.                                   }
  475.                         }while(k==1);
  476.                     system("cls");
  477.                     print_one(k);//找到以后输出这个学生的信息
  478.                     printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单  [ ]\b\b");
  479.                     scanf("%d",&w0);
  480.                 }while(w0==1);
  481.             system("cls");
  482.             menu();//不在寻找时返回菜单
  483.         }
  484.         else//按学号查找
  485.         {
  486.                 do
  487.                 {
  488.                         k=-1;
  489.                         do
  490.                         {
  491.                                 printf("\n请输入您想要查找的学生的学号!\nNum:");
  492.                                 scanf("%s",s.num);
  493.                                 for(i=1;i<n;i++)
  494.                                   if(strcmp(s.num,stu[i].num)==0)
  495.                                   {
  496.                                           k=i;
  497.                                           s=stu[i];
  498.                                   }
  499.                                 if(k==-1)
  500.                                 {
  501.                                         int o;
  502.                                         printf("\n\n没有这个学生的信息!\n!");
  503.                                         printf("What do you want to do?\n\t1.继续  2.返回菜单  [ ]\b\b");
  504.                                         scanf("%d",&o);
  505.                                         if(o==1)
  506.                                         {
  507.                                                 system("cls");
  508.                                                 search();//继续查找
  509.                                         }
  510.                                         else
  511.                                         {
  512.                                                 system("cls");
  513.                                                 menu();
  514.                                         }
  515.                                 }
  516.                         }while(k==-1);
  517.                         system("cls");
  518.                         print_one(k);//找到以后输出这个学生的学籍信息
  519.                         printf("\nWhat do you want to do?\n\t1.继续  2.返回菜单  [ ]\b\b");
  520.                         scanf("%d",&w0);
  521.                 }while(w0==1);
  522.                 system("cls");
  523.                 menu();//不再查找时返回主菜单
  524.         }
  525. }

  526. int modify_data(int i)//修改信息函数
  527. {
  528.         int c,w1;
  529.         void menu();
  530.         do
  531.         {
  532.                 puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.出生日期 5.年龄 6.籍贯 7.系别 8.专业 9.班级 10.学籍变化 11.所有信息 12.取消并返回");
  533.                 printf("请选择?:[  ]\b\b\b");
  534.                 scanf("%d",&c);
  535.                 if(c>12||c<1)
  536.                 {
  537.                         puts("\n选择错误!请重新选择!");
  538.                         getchar();
  539.                 }
  540.         }while(c>12||c<1);
  541.         do
  542.         {
  543.                 switch(c)
  544.                 {
  545.                         case 1: printf("学号:");  scanf("%s",stu[i].num); break;
  546.          case 2: printf("姓名:");  scanf("%s",stu[i].name); break;
  547.          case 3: printf("性别:");  scanf("%s",stu[i].sex); break;
  548.          case 4: printf("出生年月:");  scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break;
  549.                  case 5: printf("年龄:");  scanf("%d",&stu[i].age);break;
  550.                  case 6: printf("籍贯:");  scanf("%s",stu[i].addr);break;
  551.                  case 7: printf("系别:");  scanf("%s",stu[i].dept);break;
  552.                  case 8: printf("专业:");  scanf("%s",stu[i].major);break;
  553.                  case 9: printf("班级:");  scanf("%s",stu[i].class);break;
  554.                  case 10: printf("学籍变化:");scanf("%s",stu[i].native_changes);break;
  555.                  case 11: input(i); break;  /*修改这个学生的所有信息*/
  556.                  case 12: menu();  /*返回主菜单*/
  557.                 }
  558.                 puts("\nNow:\n");
  559.                 print_one(i);//输出 修改后 的这个学生的信息
  560.                 printf("\n确定?\n\n\t1.是 2.否,重新修改 3.返回不保存[ ]\b\b");
  561.                 scanf("%d",&w1);
  562.         }while(w1==2);
  563.         return(w1);//修改成功并选择1后返回1
  564. }

  565. void modify()//修改
  566. {
  567.         void menu();
  568.         if(!flag)
  569.         {
  570.                 printf("\n\n\t请先登录!\n");
  571.                 printf("\n\t请按Enter 键进入登录界面!");
  572.                 getchar();
  573.                 getchar();
  574.                 login();
  575.         }
  576.         else
  577.         {
  578.                 struct student s;
  579.                 int i,n,k,w0=1,w1,w2=0;
  580.                 n=load();
  581.                 do
  582.                 {
  583.                         k=-1;
  584.                         do
  585.                         {
  586.                                 printf("\n 请输入您想要修改的学生的姓名!\nName:");
  587.                                 scanf("%s",s.name);
  588.                                 for(i=0;i<n;i++)
  589.                                         if(strcmp(s.name,stu[i].name)==0)//与其中一学生匹配
  590.                                         {
  591.                                                 k=1;
  592.                                                 s=stu[i];
  593.                                         }
  594.                                    if(k==-1)//没有找到输入的学生
  595.                                    {
  596.                                                int o;
  597.                                                printf("\n\n没有这个学生的信息!\n");
  598.                                                printf("What do you want to do ?\n\t1.继续 2.返回菜单 [ ]\b\b");
  599.                                                scanf("%d",&o);
  600.                                                if(o==1)
  601.                                                {
  602.                                                        system("cls");
  603.                                                        modify();//继续修改
  604.                                                 }
  605.                                                 else
  606.                                                 {
  607.                                                         system("cls");
  608.                                                         menu();
  609.                                                 }
  610.                                    }
  611.                             }while(k==-1);
  612.                             system("cls");
  613.                             print_one(k);//输出这个学生的信息
  614.                                 w1=modify_data(k);
  615.                                 if(w1==1)//判断是否修改成功
  616.                                 {
  617.                                         printf("\n\t修改成功 \n\n是否继续?\n\n\t1.是 2.保存返回\t[ ]\b\b");
  618.                                         scanf("%d",&w0);
  619.                                         w2=1;
  620.                                 }
  621.                                 else
  622.                                 {
  623.                                         w0=0;
  624.                                         if(w2==0)
  625.                                             stu[k]=s;
  626.                                 }
  627.                                 if((w0!=1)&&(w2==1))//修改成功保存
  628.                                     save(n);  
  629.                 }while(w0=1);
  630.                 system("cls");
  631.                 menu();//不再修改返回主菜单
  632.         }
  633. }

  634. void browse()
  635. {
  636.         system("color 5f");
  637.         int i,n;
  638.     FILE *fp;
  639.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  640.             n=load();//打开文件
  641.         printf("********************学生籍贯表*********************\n");
  642.         printf("学号      姓名       籍贯\n");
  643.         for(i=1;i<=n ;i++)
  644.         {  
  645.                 printf("%d        %s         %s\n",stu[i].num,stu[i].name,stu[i].addr);
  646.         }
  647.       
  648.         fclose(fp);

  649. }

  650. void browse_x()
  651. {
  652.         struct student s;
  653.         int i,n,t=-1;
  654.     FILE *fp;
  655.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  656.             n=load();//打开文件
  657.         printf("请输入要查询学生的学号:");
  658.         scanf("%s",s.num);
  659.         for (i=1; i<=n; i++)
  660.         {
  661.                 if (s.num==stu[i].num)
  662.                 {
  663.                 printf("学号:%ld  姓名:%s   学籍:%s  \n",stu[i].num,stu[i].name,stu[i].native_changes);               
  664.                 t=-2;
  665.                 }      
  666.         }
  667.                
  668.         if(t!=-2)      
  669.         printf("Not found!\n");
  670. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-12 22:45:35 | 显示全部楼层    本楼为最佳答案   
你的代码很多处出现拼写错误,导致编译不过,其中出现最多的拼写错误是将menu写成meun,我帮你改完了
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<conio.h>

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

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

  7. void Fpage();
  8. void menu();
  9. void login();
  10. void browse();
  11. void insert();
  12. void print_back();
  13. void deleter();
  14. void print_one(int);
  15. void search();
  16. void modify();
  17. void browse_x();

  18. struct data//出生日期
  19. {
  20.         int year;
  21.         int month;
  22.         int day;
  23. };

  24. struct student//学生信息
  25. {
  26.         char num[15];//学号
  27.         char name[15];//姓名
  28.         char sex[5];//性别
  29.         struct data birthday;//出书年月
  30.         int age;//年龄
  31.         char addr[50];//籍贯
  32.         char dept[50];//系别
  33.         char major[30];//专业
  34.         char class[30];//班级
  35.         char native_changes[30];//学籍
  36. }stu[N];

  37. int main()//主函数
  38. {
  39.         Fpage();//首页
  40.         menu();//菜单
  41.          
  42.         return 0;
  43. }

  44. void Fpage()//访问首页
  45. {
  46.         system("color 4e");
  47.         printf("\n\t     ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★");
  48.         puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
  49.         puts("\t    ※※                                              ※※");
  50.         puts("\t    ※※                                              ※※");
  51.         puts("\t    ※※          欢迎访问学生学籍管理系统!           ※※");
  52.         puts("\t    ※※                                              ※※");
  53.         puts("\t    ※※                                              ※※");
  54.         puts("\t    ※※                                              ※※");
  55.         puts("\t    ※※                                              ※※");
  56.         puts("\t    ※※                              制作人:陈茗杰  ※※");
  57.         puts("\t    ※※                                  2022.5.30   ※※");
  58.     puts("\t    ※※                                              ※※");
  59.         puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
  60.         printf("\n\tPress [ Enter ] key to continue……\n");
  61.     getchar();
  62.         system("cls") ;
  63. }

  64. void menu()//主菜单
  65. {
  66.         system("color 2e");
  67.         printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
  68.         printf("\n");
  69.         int n,r1;//n用来选择功能,r1用来输入错误时重新返回功能
  70.         do
  71.         {
  72.            puts("\t\t★★★★★★★★    菜单  ★★★★★★★★");
  73.            puts("\t\t★             1.登录个人账号               ★");
  74.            puts("\t\t★             2.登记学生信息               ★");
  75.            puts("\t\t★             3.删除学生信息               ★");
  76.            puts("\t\t★             4.查找学生信息               ★");
  77.            puts("\t\t★             5.修改学生信息               ★");
  78.            puts("\t\t★             6.浏览学生籍贯               ★");
  79.            puts("\t\t★             7.查询学籍变化               ★");
  80.            puts("\t\t★             8.退出学生系统               ★");
  81.            puts("\t\t★★★★★★★★★★★★★★★★★★★★★");
  82.        printf("请选择服务种类(1-7) : [ ]\b\b");
  83.        scanf("%d",&n);
  84.        if(n<1||n>8)
  85.        {
  86.                    system("cls");
  87.                    printf("选择错误!请正确输入!\n");
  88.                    r1=1;
  89.            }
  90.            else
  91.                r1=0;
  92.         }while(r1==1);
  93.         switch(n)
  94.         {
  95.                 case 1: login();break;//登录账号
  96.                 case 2: system("cls"); insert();  break;//插入
  97.                 case 3: system("cls"); deleter(); break;//删除
  98.                 case 4: system("cls"); search();  break;//查找
  99.                 case 5: system("cls"); modify();  break;//修改
  100.                 case 6: system("cls"); browse();  break;//浏览
  101.                 case 7: system("cls"); browse_x(); break;//学籍浏览
  102.         }
  103. }

  104. void login()//登录
  105. {
  106.         void menu();
  107.         system("cls");
  108.       
  109.         if(flag) //先判断是否已登录
  110.         {
  111.                 printf("您已经登录!\n");
  112.                 printf("Press any key to continue...\n");
  113.                 getchar();
  114.                 getchar();
  115.                 system("cls");
  116.                 menu();
  117.         }
  118.          
  119.         int load();//存储文件
  120.         int n,i,m,w;
  121.         FILE *fp;
  122.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  123.             n=load();//打开文件
  124.         else
  125.             n=0;
  126.         struct student s;//存储学生账号
  127.         char password[20];//存储密码
  128.         int d,q;//d是用在第一个输入函数 q是第二个
  129.         printf("\n\t请选择登录身份:1.管理员   2.用户     [ ]\b\b");
  130.         scanf("%d",&d);
  131.       
  132.         if(d==1)//管理员登录
  133.         {
  134.                 printf("\n\t\t\t请输入密码:");
  135.                 getchar();
  136.                 int j=0;//用于密码数组 下标
  137.                 while(1)
  138.                 {
  139.                         password[j]=getchar();
  140.                         if(password[j]=='\r')
  141.                           break;
  142.                         printf("*");
  143.                         j++;
  144.                 }
  145.                 password[j]='\0';
  146.                 if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
  147.                 {
  148.                         flag=1;
  149.                         printf("\n\t登录成功!\n");
  150.                         printf("\tPress [Enter] key to continue...");
  151.                         getchar();
  152.                         system("cls");
  153.                         menu();
  154.                 }
  155.                 if(!flag)
  156.                 {
  157.                         printf("\t\n密码错误!\n");
  158.                         printf("What do you want to do next? 1.继续登录 2.返回菜单   [ ]\b\b");
  159.                         scanf("%d",&q);
  160.                        
  161.                         if(q==1)//继续登录
  162.                         {
  163.                                 system("cls");
  164.                                 login();
  165.                         }
  166.                         else if(q==2)//返回菜单
  167.                         {
  168.                                 system("cls");
  169.                                 menu();
  170.                         }
  171.                        
  172.                 }
  173.                
  174.         }
  175.       
  176.         else//用户登录
  177.     {
  178.             printf("\n\t\t\t用户名:");
  179.             scanf("%s",s.name);
  180.             printf("\t\t\t密码:");
  181.             int j=0;//密码数组下标
  182.             while(1)
  183.             {
  184.                     password[j]=getch();
  185.                     if(password[j]=='\r')
  186.                       break;
  187.                     printf("*");
  188.                     j++;         
  189.             }
  190.             password[j]='\0';
  191.             flag=0;//未登录时flag为0
  192.             for(i=0;i<n;i++)
  193.               if(!strcmp(s.name,stu[i].name)&&!strcmp(s.name,password))
  194.               {
  195.                       flag=1;//登录成功flag为1
  196.                         break;
  197.                   }
  198.                   
  199.             if(flag)//登录成功
  200.             {
  201.                     printf("\n\t登录成功!\n");
  202.                     printf("\tPress any key to continue...\n");
  203.                     getchar();getchar();
  204.                     system("cls");
  205.                     menu();
  206.                 }
  207.                 else//登录不成功时
  208.                 {
  209.                         m=0;//登陆错误时,防止跳不出登录界面
  210.                         w=1;//避免过多的“用户不存在”
  211.                         int q;//q为选项
  212.                        
  213.                         do
  214.                         {
  215.                                 if(w>0)
  216.                                     printf("用户不存在或密码错误!\n");//在第一次登录输入不存在的用户时出现
  217.                                 printf("What do you want to do next?1.继续登录  2.返回菜单  [ ]\b\b");
  218.                                 scanf("%d",&q);
  219.                               
  220.                                 if(q==1)//继续登录
  221.                                 {
  222.                                         login();
  223.                                         m=1;
  224.                                 }
  225.                                 else if(q==2)//返回菜单
  226.                                 {
  227.                                         system("cls");
  228.                                         menu();
  229.                                         m=1;
  230.                                 }
  231.                                 else//错误选择
  232.                                 {
  233.                                         printf("选择错误!请重新选择:\n");
  234.                                         w=0;      
  235.                                 }
  236.                         }while(m==0);  
  237.                 }
  238.     }
  239. }

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

  256. void input(int k)//输入学生信息
  257. {
  258.         getchar();
  259.         printf("学号:");   scanf("%s",stu[k].num);   getchar();
  260.         printf("姓名:");   scanf("%s",stu[k].name);  getchar();
  261.         printf("性别:");   scanf("%s",stu[k].sex);   getchar();
  262.         printf("出生年月:");  scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); getchar();
  263.         printf("年龄:");   scanf("%d",&stu[k].age);  getchar();
  264.     printf("籍贯:");   scanf("%s",stu[k].addr);  getchar();
  265.         printf("系别:");   scanf("s",stu[k].dept);   getchar();
  266.         printf("专业:");   scanf("%s",stu[k].major); getchar();
  267.         printf("班级:");   scanf("%s",stu[k].class); getchar();
  268.         printf("学籍变化:");scanf("%s",stu[k].native_changes); getchar();
  269. }

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

  286. void insert()//添加学生信息
  287. {
  288.         int i,n,k,t;
  289.         FILE *fp;
  290.         if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入空文件,rb表示打开一个二进制文件,只允许读数据
  291.         {
  292.                 printf("How many student do you want to add(1-%d)?:",N-1);
  293.                 n=0;
  294.         }
  295.         else
  296.         {
  297.                 n=load();
  298.                 printf("How many student do you want to insert(1-%d)?:",N-n-1);
  299.         }
  300.         scanf("%d",&t);
  301.         k=n+t;
  302.         for(i=n;i<k;i++)
  303.         {
  304.                 printf("\n 输入第%d个学生的学籍信息.\n",i-n+1);
  305.                 input(i);
  306.         }
  307.         save(k);//保留所有学生的信息
  308.         print_back();
  309. }

  310. void print_back()//添加信息后显示“是浏览还是返回”
  311. {
  312.         int w,k=0;
  313.         void browse();
  314.         void menu();
  315.         printf("\n\n\t插入成功\n\n");
  316.         do
  317.         {
  318.                 printf("What do you want to do next?\n\n\t1.浏览所有\t2.返回:[ ]\b\b");
  319.                 scanf("%d",&w);
  320.                 if(w==1)
  321.                 {
  322.                         system("cls");
  323.                         browse();
  324.                 }
  325.                 else if(w==2)
  326.                 {
  327.                         system("cls");
  328.                         menu();
  329.                 }
  330.                 else
  331.                     printf("选择错误!请重新选择!\n");
  332.         }while(k==0);
  333. }

  334. void deleter()//删除
  335. {
  336.         void menu();
  337.         if(!flag)
  338.         {
  339.                 printf("\n\n\t请先登录!\n");
  340.                 printf("\n\t请按Enter 键进入登录界面!");
  341.                 getchar();
  342.                 getchar();
  343.                 login();
  344.         }
  345.         else
  346.         {
  347.                 struct student s;
  348.                 int i,n,k,w0,w1;
  349.                 n=load();
  350.                 do
  351.                 {
  352.                         k=-1;
  353.                         do
  354.                         {
  355.                                 printf("\n\n请输入您想要删除的学生的姓名!\nName:");
  356.                             scanf("%s",s.name);
  357.                             for(i=0;i<n;i++)
  358.                               if(strcmp(s.name,stu[i].name)==0)
  359.                               {
  360.                                       k=i;
  361.                                       s=stu[i];
  362.                               }
  363.                             if(k==-1)
  364.                             {
  365.                                     int m;
  366.                                     printf("\n\n没有这个学生的信息!\n");
  367.                                     printf("What do you want to do next?1.继续输入 2.返回主菜单   [ ]\b\b");
  368.                                     scanf("%d",&m);
  369.                                     if(m==1)
  370.                                         deleter();
  371.                                     else
  372.                                     {
  373.                                             k=0;
  374.                                             menu();
  375.                                         }
  376.                                 }
  377.                         }while(k==-1);
  378.                         print_one(k);
  379.                         printf("\n\t确定删除?\n\t1.是  2.返回    [ ]\b\b");//再次询问是否删除
  380.                         scanf("%d",&w0);
  381.                         if(w0==1)
  382.                         {
  383.                                 stu[k].name[0]='\0';
  384.                                 save(n);
  385.                         }
  386.                         else
  387.                             break;
  388.                         printf("\n\t成功删除!\n");
  389.                         printf("What do you want to do?\n\t1.继续  2.返回   [ ]\b\b");
  390.                         scanf("%d",&w1);        
  391.                 }while(w1==1);
  392.                 system("cls");
  393.                 menu();//不再删除时返回菜单,w1!=1
  394.         }
  395. }

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

  410. void print_n(int n)//浏览时输出所有学生的信息
  411. {
  412.         system("color 2e");
  413.         int j,i=1;
  414.         for(j=0;j<n;j++)
  415.         {
  416.                 printf("第%个学生:\n",i++);
  417.                 print_one(j);
  418.                 printf("\n");
  419.         }
  420.         getchar();
  421. }

  422. void search()//查找
  423. {
  424.         void menu();
  425.         int w0,k,i,n,w1,w2;
  426.         struct student s;
  427.         FILE *fp;
  428.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  429.             n=load();
  430.         do
  431.         {
  432.                 printf("请选择查找类别:1.姓名 2.学号  [ ]\b\b");
  433.                 scanf("%d",&w1);
  434.                 if(w1<1||w1>2)
  435.                 {
  436.                         printf("输入错误!请重新输入!\n");
  437.                         w2=1;
  438.                 }
  439.                 else
  440.                     w2=0;//加这句是为了能跳出循环
  441.         }while(w2==1);
  442.       
  443.         if(w1=1)//姓名查找
  444.         {
  445.                 do
  446.                 {
  447.                         k=-1;
  448.                         do
  449.                         {
  450.                                 printf("\n请输入您想要查找的学生的姓名!\nName:");
  451.                                 scanf("&s",s.name);
  452.                                 for(i=0;i<n;i++)
  453.                                   if(strcmp(s.name,stu[i].name)==0)
  454.                                   {
  455.                                           k=i;
  456.                                           s=stu[i];
  457.                                   }
  458.                                   if(k==-1)//没有找到
  459.                                   {
  460.                                           int o;
  461.                                           printf("\n\n没有找到这个学生的信息!\n");
  462.                                           printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
  463.                                           scanf("%d",&o);
  464.                                           if(o==1)
  465.                                           {
  466.                                                   system("cls");
  467.                                                   search();//继续查找
  468.                                           }
  469.                                         else
  470.                                         {
  471.                                                 system("cls");
  472.                                                 menu();
  473.                                         }
  474.                                   }
  475.                         }while(k==1);
  476.                     system("cls");
  477.                     print_one(k);//找到以后输出这个学生的信息
  478.                     printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单  [ ]\b\b");
  479.                     scanf("%d",&w0);
  480.                 }while(w0==1);
  481.             system("cls");
  482.             menu();//不在寻找时返回菜单
  483.         }
  484.         else//按学号查找
  485.         {
  486.                 do
  487.                 {
  488.                         k=-1;
  489.                         do
  490.                         {
  491.                                 printf("\n请输入您想要查找的学生的学号!\nNum:");
  492.                                 scanf("%s",s.num);
  493.                                 for(i=1;i<n;i++)
  494.                                   if(strcmp(s.num,stu[i].num)==0)
  495.                                   {
  496.                                           k=i;
  497.                                           s=stu[i];
  498.                                   }
  499.                                 if(k==-1)
  500.                                 {
  501.                                         int o;
  502.                                         printf("\n\n没有这个学生的信息!\n!");
  503.                                         printf("What do you want to do?\n\t1.继续  2.返回菜单  [ ]\b\b");
  504.                                         scanf("%d",&o);
  505.                                         if(o==1)
  506.                                         {
  507.                                                 system("cls");
  508.                                                 search();//继续查找
  509.                                         }
  510.                                         else
  511.                                         {
  512.                                                 system("cls");
  513.                                                 menu();
  514.                                         }
  515.                                 }
  516.                         }while(k==-1);
  517.                         system("cls");
  518.                         print_one(k);//找到以后输出这个学生的学籍信息
  519.                         printf("\nWhat do you want to do?\n\t1.继续  2.返回菜单  [ ]\b\b");
  520.                         scanf("%d",&w0);
  521.                 }while(w0==1);
  522.                 system("cls");
  523.                 menu();//不再查找时返回主菜单
  524.         }
  525. }

  526. int modify_data(int i)//修改信息函数
  527. {
  528.         int c,w1;
  529.         void menu();
  530.         do
  531.         {
  532.                 puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.出生日期 5.年龄 6.籍贯 7.系别 8.专业 9.班级 10.学籍变化 11.所有信息 12.取消并返回");
  533.                 printf("请选择?:[  ]\b\b\b");
  534.                 scanf("%d",&c);
  535.                 if(c>12||c<1)
  536.                 {
  537.                         puts("\n选择错误!请重新选择!");
  538.                         getchar();
  539.                 }
  540.         }while(c>12||c<1);
  541.         do
  542.         {
  543.                 switch(c)
  544.                 {
  545.                         case 1: printf("学号:");  scanf("%s",stu[i].num); break;
  546.          case 2: printf("姓名:");  scanf("%s",stu[i].name); break;
  547.          case 3: printf("性别:");  scanf("%s",stu[i].sex); break;
  548.          case 4: printf("出生年月:");  scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break;
  549.                  case 5: printf("年龄:");  scanf("%d",&stu[i].age);break;
  550.                  case 6: printf("籍贯:");  scanf("%s",stu[i].addr);break;
  551.                  case 7: printf("系别:");  scanf("%s",stu[i].dept);break;
  552.                  case 8: printf("专业:");  scanf("%s",stu[i].major);break;
  553.                  case 9: printf("班级:");  scanf("%s",stu[i].class);break;
  554.                  case 10: printf("学籍变化:");scanf("%s",stu[i].native_changes);break;
  555.                  case 11: input(i); break;  /*修改这个学生的所有信息*/
  556.                  case 12: menu();  /*返回主菜单*/
  557.                 }
  558.                 puts("\nNow:\n");
  559.                 print_one(i);//输出 修改后 的这个学生的信息
  560.                 printf("\n确定?\n\n\t1.是 2.否,重新修改 3.返回不保存[ ]\b\b");
  561.                 scanf("%d",&w1);
  562.         }while(w1==2);
  563.         return(w1);//修改成功并选择1后返回1
  564. }

  565. void modify()//修改
  566. {
  567.         void menu();
  568.         if(!flag)
  569.         {
  570.                 printf("\n\n\t请先登录!\n");
  571.                 printf("\n\t请按Enter 键进入登录界面!");
  572.                 getchar();
  573.                 getchar();
  574.                 login();
  575.         }
  576.         else
  577.         {
  578.                 struct student s;
  579.                 int i,n,k,w0=1,w1,w2=0;
  580.                 n=load();
  581.                 do
  582.                 {
  583.                         k=-1;
  584.                         do
  585.                         {
  586.                                 printf("\n 请输入您想要修改的学生的姓名!\nName:");
  587.                                 scanf("%s",s.name);
  588.                                 for(i=0;i<n;i++)
  589.                                         if(strcmp(s.name,stu[i].name)==0)//与其中一学生匹配
  590.                                         {
  591.                                                 k=1;
  592.                                                 s=stu[i];
  593.                                         }
  594.                                    if(k==-1)//没有找到输入的学生
  595.                                    {
  596.                                                int o;
  597.                                                printf("\n\n没有这个学生的信息!\n");
  598.                                                printf("What do you want to do ?\n\t1.继续 2.返回菜单 [ ]\b\b");
  599.                                                scanf("%d",&o);
  600.                                                if(o==1)
  601.                                                {
  602.                                                        system("cls");
  603.                                                        modify();//继续修改
  604.                                                 }
  605.                                                 else
  606.                                                 {
  607.                                                         system("cls");
  608.                                                         menu();
  609.                                                 }
  610.                                    }
  611.                             }while(k==-1);
  612.                             system("cls");
  613.                             print_one(k);//输出这个学生的信息
  614.                                 w1=modify_data(k);
  615.                                 if(w1==1)//判断是否修改成功
  616.                                 {
  617.                                         printf("\n\t修改成功 \n\n是否继续?\n\n\t1.是 2.保存返回\t[ ]\b\b");
  618.                                         scanf("%d",&w0);
  619.                                         w2=1;
  620.                                 }
  621.                                 else
  622.                                 {
  623.                                         w0=0;
  624.                                         if(w2==0)
  625.                                             stu[k]=s;
  626.                                 }
  627.                                 if((w0!=1)&&(w2==1))//修改成功保存
  628.                                     save(n);  
  629.                 }while(w0=1);
  630.                 system("cls");
  631.                 menu();//不再修改返回主菜单
  632.         }
  633. }

  634. void browse()
  635. {
  636.         system("color 5f");
  637.         int i,n;
  638.     FILE *fp;
  639.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  640.             n=load();//打开文件
  641.         printf("********************学生籍贯表*********************\n");
  642.         printf("学号      姓名       籍贯\n");
  643.         for(i=1;i<=n ;i++)
  644.         {  
  645.                 printf("%d        %s         %s\n",stu[i].num,stu[i].name,stu[i].addr);
  646.         }
  647.       
  648.         fclose(fp);

  649. }

  650. void browse_x()
  651. {
  652.         struct student s;
  653.         int i,n,t=-1;
  654.     FILE *fp;
  655.         if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
  656.             n=load();//打开文件
  657.         printf("请输入要查询学生的学号:");
  658.         scanf("%s",s.num);
  659.         for (i=1; i<=n; i++)
  660.         {
  661.                 if (s.num==stu[i].num)
  662.                 {
  663.                 printf("学号:%ld  姓名:%s   学籍:%s  \n",stu[i].num,stu[i].name,stu[i].native_changes);               
  664.                 t=-2;
  665.                 }      
  666.         }
  667.                
  668.         if(t!=-2)      
  669.         printf("Not found!\n");
  670. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表