鱼C论坛

 找回密码
 立即注册
查看: 1641|回复: 0

有没有大神看看为什么出现这样子的错误!

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

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

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

x
[i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i]

                               
登录/注册后可看大图





#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.native_changes);               
                t=-2;
                }       
        }
               
        if(t!=-2)       
        printf("Not found!\n");
}

[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 12:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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