⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stu.c

📁 这是用C编写的一个学生信息管理系统。有良好的界面
💻 C
📖 第 1 页 / 共 3 页
字号:
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            if(n==2)/*往右移动越界的话移到第一个选项*/
                DrawMl(0);
            else
                DrawMl(n+1);
            flag=0;
            break;
        case UP:/*具体选项往上移动*/
            WriteText(n,x,ml[n].str[x-3]);/*输出红色字体*/
            if(x==3)/*移到最上面再按上键,就移到最下面*/
                x=3+ml[n].n-1;
            else
                x--;/*移动到新的要显示的内容*/
            BlackText(n,x,ml[n].str[x-3]);/*输出黑色字体*/
            flag=1;
            break;
        case DOWN:/*具体选项往下移动*/
            WriteText(n,x,ml[n].str[x-3]);
            if(x==(3+ml[n].n-1))/*移动到最底下再按下键就移到最上面*/
                x=3;
            else
                x++;/*移动到新的要显示的内容*/
            BlackText(n,x,ml[n].str[x-3]);
            flag=1;
            break;
        case ENTER:
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            Enter(n,x-3);/*菜单选项的具体功能*/
            flag=0;
            break;
        }
        gotoxy(79,1);
    }
}
 /*菜单选项的具体功能*/
void Enter(int m,int n)
{
    switch(m)
    {
    case 0:switch(n) /*选择了编辑菜单选项*/
        {
        case 0:Add();break;/*调用添加学生信息子函数*/
        case 1:Browse();break;/*调用浏览学生信息子函数*/
        case 2:Arrange();break;/*调用排序学生信息子函数*/
        case 3:Revise();break;/*调用修改学生信息子函数*/
        case 4:Delete();break;/*调用删除学生信息子函数*/
        case 5:exit(0);break;/*退出系统*/
        }break;
    case 1: switch(n) /*选择了查询菜单选项*/
        {
        case 0:ConsultNum();break;/*调用按学号查询学生信息子函数*/
        case 1:ConsultName();break;/*调用按姓名查询学生信息子函数*/
        }break;
    case 2:switch(n) /*选择了帮助菜单选项*/
        {
        case 0:Help();break;

        }
    }/*结束外switch*/
}


/*添加学生信息*/
void Add()
{
    FILE *fp;
    fp=fopen("students.txt","rb");/*只读方式打开文件*/
    if(fp==NULL)/*如果没有students.txt文件就新建*/
        fp=fopen("students.txt","wb");/*通过只写方式新建文件*/
    else/*如果有students.txt文件就添加*/
    {
        fclose(fp);
        fp=fopen("students.txt","ab");/*追加方式打开*/
    }
    ClrScr();
    gotoxy(2,3);
    printf("请输入学生学号:");/*输入学生的资料*/
    gets(operate.num);
    gotoxy(2,4);
    printf("请输入学生姓名:");
    gets(operate.name);
    gotoxy(2,5);
    printf("请输入学生年龄:");
    gets(operate.age);
    gotoxy(2,6);
    printf("请输入学生性别:");
    gets(operate.sex);
    gotoxy(2,7);
    printf("请输入学生学号生日:");
    gets(operate.birth);
    gotoxy(2,8);
    printf("请输入学生地址:");
    gets(operate.address);
    gotoxy(2,9);
    printf("请输入学生电话:");
    gets(operate.tel);
    gotoxy(2,10);
    printf("请输入学生Email:");
    gets(operate.email);
    fwrite(&operate,sizeof(struct StudentInfo),1,fp);/*写入学生信息*/
    fclose(fp);
    ClrScr();
    DrawFrame(30,11,50,13,0,7); /*画边框*/
    gotoxy(32,12);
    cprintf("学生信息添加成功!");
    gotoxy(79,1);
    getch();
    ClrScr();
}

/*浏览学生信息*/
void Browse()
{
    FILE *fp;
    flag=0;
    fp=fopen("students.txt","rb");
    if(fp==NULL)/*如果没有students.txt文件就打印提示*/
    {
        ClrScr();
        DrawFrame(27,11,57,13,0,7); 
        gotoxy(30,12);
        cprintf("目前还没有学生信息,请添加");
        fclose(fp);
        gotoxy(79,1);
        getch();
        ClrScr();
    }
    else/*如果有students.txt文件就浏览数据*/
    {
        for(i=0;fread(&Student[i],sizeof(struct StudentInfo),1,fp)!=0;i++)/*逐一读取学生信息,并打印出来(一次只打印一个学生的信息)*/
        {
            ClrScr();
            gotoxy(2,3);
            printf("学号:%s",Student[i].num);
            gotoxy(2,4);
            printf("姓名:%s",Student[i].name);
            gotoxy(2,5);
            printf("年龄:%s",Student[i].age);
            gotoxy(2,6);
            printf("性别:%s",Student[i].sex);
            gotoxy(2,7);
            printf("生日:%s",Student[i].birth);
            gotoxy(2,8);
            printf("地址:%s",Student[i].address);
            gotoxy(2,9);
            printf("电话:%s",Student[i].tel);
            gotoxy(2,10);
            printf("Email:%s",Student[i].email);
            gotoxy(2,12);
            printf("按任意键查看下一位学生的信息");
            gotoxy(79,1);
            getch();
            flag=1;
        }
    if(flag==0)
        {
            ClrScr();
            DrawFrame(27,11,57,13,0,7); 
            gotoxy(30,12);
        cprintf("目前还没有学生信息,请添加");
            fclose(fp);
            gotoxy(79,1);
            getch();
            ClrScr();
        }
        else
        {
            fclose(fp);
            ClrScr();
            DrawFrame(27,11,51,13,0,7); 
            gotoxy(30,12);
            cprintf("所有学生信息浏览完毕");
            gotoxy(79,1);
            getch();
            ClrScr();
        }
    }
}

/*排序*/
void Arrange()
{
    FILE *fp;
    if((fp=fopen("students.txt","rb"))==NULL)/*只读方式打开文件,如果文件不存在输出提示信息*/
    {
        ClrScr();
        DrawFrame(27,11,57,13,0,7); 
        gotoxy(30,12);
        cprintf("目前还没有学生信息,请添加");
        fclose(fp);
        gotoxy(79,1);
        getch();
        ClrScr();
    }
    for(i=0;fread(&Student[i],sizeof(struct StudentInfo),1,fp)!=0;i++);/*逐一读取文件中的学生信息*/
    fclose(fp);/*关闭文件*/
    n=i;/*把学生信息的个数赋值给n,后面要用到*/
    for(i=0;i<n;i++)/*从第一条记录起,相邻记录比较成绩*/
        for(j=i+1;j<n;j++)
        if(strcmp(Student[i].num,Student[j].num)>0)/*如果前一条信息的学号大于后一条信息的学号,那么两条信息对调(注意!不是学号对调!)*/
            {
                temp=Student[i];
                Student[i]=Student[j];
                Student[j]=temp;
            }
    fp=fopen("students.txt","wb");/*将排序后的学生信息写回文件中*/
    for(i=0;i<n;i++)
        fwrite(&Student[i],sizeof(struct StudentInfo),1,fp);
    fclose(fp);
    ClrScr();
    DrawFrame(27,11,56,13,0,7);
    gotoxy(30,12);
    cprintf("操作成功,请用浏览功能查看");
    gotoxy(79,1);
    getch();
    ClrScr();
}

/*修改学生信息*/
void Revise()
{
    FILE *fp;
    char string[20];
    char strings[10][20]={{"目前该学生学号:"},{"目前该学生姓名:"},{"目前该学生年龄:"},{"目前该学生性别:"},{"目前该学生生日:"},{"目前该学生地址:"},{"目前该学生电话:"},{"目前该学生Email:"},{"保存"},{"退出"}};
    fp=fopen("students.txt","rb");
    if(fp==NULL)/*如果没有students.txt文件就打印提示*/
    {
        ClrScr();
        DrawFrame(27,11,57,13,0,7); 
        gotoxy(30,12);
    cprintf("目前还没有学生信息,请添加");
        fclose(fp);
        gotoxy(79,1);
        getch();
        ClrScr();
    }
    else/*如果有students.txt文件就进行修改操作*/
    {
        for(i=0;fread(&Student[i],sizeof(struct StudentInfo),1,fp)!=0;i++);/*逐一读取文件中的学生信息*/
        fclose(fp);/*关闭文件*/
        n=i;/*把学生信息的条目数赋值给n*/
        ClrScr();
        gotoxy(2,3);
        printf("请输入要修改的学生信息的姓名或学号:");/*输入要修改的学生姓名或学号*/
        gets(string);
        for(flag=1,i=0;flag&&i<n;i++)/*逐一比较姓名或学号*/
        {
            if(strcmp(Student[i].num,string)==0||strcmp(Student[i].name,string)==0)/*如果找到同样姓名或学号,进行修改操作*/
            {
                ClrScr();
                textx=4;
                gotoxy(2,3);
                printf("请选择要修改的项目:");
                BlackText(0,4,&strings[-1][20]);/*输出可选择的项目菜单(不要问我这里怎么是-1,我也不知道)*/
                puts(Student[i].num);/*输出该项目对应的信息内容*/
                WriteText(0,5,&strings[0][20]);
                puts(Student[i].name);
                WriteText(0,6,&strings[1][20]);
                puts(Student[i].age);
                WriteText(0,7,&strings[2][20]);
                puts(Student[i].sex);
                WriteText(0,8,&strings[3][20]);
                puts(Student[i].birth);
                WriteText(0,9,&strings[4][20]);
                puts(Student[i].address);
                WriteText(0,10,&strings[5][20]);
                puts(Student[i].tel);
                WriteText(0,11,&strings[6][20]);
                puts(Student[i].email);
                WriteText(0,12,&strings[7][20]);
                WriteText(0,13,&strings[8][20]);
                flag1=1;
                while(flag1)/*定义在项目菜单上操作的按键控制*/
                {
                    gotoxy(79,1);
                    key=bioskey(0);/*接收按键*/
                    gotoxy(79,1);
                    switch(key)
                    {
                    case UP:/*具体选项往上移动*/
                        WriteText(0,textx,&strings[textx-5][20]);
                        if(textx==4)/*移到最上面再按上键,就移到最下面*/
                            textx=13;
                        else
                            textx--;/*移动到新的要显示的内容*/
                        BlackText(0,textx,&strings[textx-5][20]);/*输出黑色字体*/
                        flag1=1;
                        break;
                    case DOWN:/*具体选项往下移动*/
                        WriteText(0,textx,&strings[textx-5][20]);
                        if(textx==13)/*移动到最底下再按下键就移到最上面*/
                            textx=4;
                        else
                            textx++;/*移动到新的要显示的内容*/
                        BlackText(0,textx,&strings[textx-5][20]);
                        flag1=1;
                        break;
                    case ENTER:
                        Rewrite(textx-4,n);/*进入所选择的项目进行相应的操作*/
                        break;
                    }
                    gotoxy(79,1);
                }
                flag=0;
            }
        }
        if(flag)/*如果没有找到要修改的学生信息,打印提示*/
        {
            ClrScr();
            DrawFrame(27,11,55,13,0,7);  
            gotoxy(30,12);
            cprintf("没有%s的相关信息!",string);
            gotoxy(79,1);
            getch();
            ClrScr();
        }
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -