学生成绩管理系统

来源:互联网 发布:汇川plc编程软件下载 编辑:程序博客网 时间:2024/05/01 21:56
#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define CLS system("cls")#define N 12#define MAX 100int flag=0;struct X{    int x;};struct student{    char name[N];    char num[N];    char major[N];    struct X A;    struct X B;    struct X C;    struct X D;} stu[MAX];void face();void menue();void login();int load();void input();void save();void exit();void insert();void printf_back();void browse();void printf_n();void printf_one();void browse();void deleter();void search();void modify();int modify_data();int main(){    face();    menue();}void face(){    system("color 4e");    printf("\n\t    ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");    puts("  ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");    puts("  ※※                                                                    ※※");    puts("  ※※                                                                    ※※");    puts("  ※※          Welcome to visit the student management system!           ※※");    puts("  ※※                                                                    ※※");    puts("  ※※                                                                    ※※");    puts("  ※※                                                                    ※※");    puts("  ※※                                                                    ※※");    puts("  ※※                                           Author:zhangpeng         ※※");    puts("  ※※                                             Date:2014.06.19        ※※");    puts("  ※※                                                                    ※※");    puts("  ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");    printf("\n\tPress [ Enter ] key to continue……\n");    getchar();    CLS;}void menue() //主菜单{    int n,w1;    system("color 2e");    printf("\n\t      Welcome to use the student management system!!\n");    printf("\n");    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★★★★★★★★★★★★★★★★★★★★★★");        printf("\n\n   Please select the type of service (1-7) : [ ]\b\b");        scanf("%d",&n);        if(n<1||n>7)        {            CLS;            printf("\nSelect error!  Please try again\n\n\n\n");            w1=1;        }        else            w1=0;    }    while(w1);    switch(n)    {    case 1:        login();        break; //登录    case 2:        CLS;        insert();        break; //插入    case 3:        CLS;        deleter();        break; //删除    case 4:        CLS;        search();        break; //查找    case 5:        CLS;        modify();        break; //修改    case 6:        CLS;        browse();        break; //浏览    case 7:        exit();        break; //退出    }}int load() //打开文件,读取里面的数据{    FILE *fp;    int i;    if((fp=fopen("D:\\file.txt","r"))==NULL) ///读入空文件,rb表示打开一个二进制文件,只允许读数据    {        printf("\nThere is no such file!:\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 login(){    int n,i,m,w,d,q,w2,w3;    char password[20];    struct student s;    CLS;    if(flag)    {        printf(" .--.\n");        printf("/.-. '----------.\n");        printf("\'-' .--\"--\"\"-\"-'\n");        printf(" '--'\n");        printf("  Logged successful!\n");        printf("Press any key to continue. . .\n");        getchar();        CLS;        menue();    }    FILE *fp;    if((fp=fopen("D:\\file.txt","r"))!=NULL) ///不是空文件        n=load(); //打开文件    else        n=0;    do    {        printf("\n\t请选择登录身份:\n\n\t\t\t1.管理员      2.用户     [ ]\b\b");        scanf("%d",&d);        if (d!=1&&d!=2)        {            CLS;            printf("\nSelect error!  Please try again\n\n\n\n");            w2=1;        }        else            w2=0;    }    while(w2);    if(d==1)    {        printf("\n\t\t\tPlease enter the password:");        getchar();        int j=0;        while(1)        {            password[j]=getch();            if(password[j]=='\r')                break;            printf("*");            j++;        }        password[j]='\0';        if(!strcmp(password,"123")) /*判断密码是否正确*/        {            flag=1;            printf("\n");            printf("  .--.\n");            printf(" /.-. '----------.\n");            printf(" \\'-' .--\"--\"\"-\"-'\n");            printf("  '--'\n");            printf("    Logged successful!\n");            printf("      Press any key to continue. . .\n");            getchar();            CLS;            menue();        }        if(!flag)        {            CLS;            printf("\t\nPassword is error!\n\n");            do            {                printf("\n\tWhat do you want to do next? 1.继续登录  2.返回菜单   [ ]\b\b");                scanf("%d",&q);                if (q!=1&&q!=2)                {                    CLS;                    printf("\nSelect error!  Please try again\n\n\n");                    w3=1;                }                else                    w3=0;            }            while (w3);            if(q==1) /*继续登录*/            {                CLS;                login();            }            else if(q==2) /*返回主菜单*/            {                CLS;                menue();            }        }    }    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)==0&&strcmp(password,"321")==0)            {                flag=1; //登录成功flag=1                break;            }        }        if(flag)        {            printf("\n");            printf("  .--.\n");            printf(" /.-. '----------.\n");            printf(" \\'-' .--\"--\"\"-\"-'\n");            printf("  '--'\n");            printf("    Logged successful!\n");            printf("      Press any key to continue. . .\n");            getchar();            CLS;            menue(); /*登录成功后返回主菜单*/        }        else        {            int m=0; //设置m是为了避免陷入 登录失败时 跳不出登录界面            int w=1; //设置w是为了避免输出多次 “用户不存在”            int q; //q为选项            CLS;            printf("\n\tThe user name does not exist or password is wrong!\n"); //第一次登录时输入不存在的用户时显示            do            {                printf("\n\t\tWhat do you want to do next?\n\n\t\t    1.继续登录  2.返回菜单   [ ]\b\b");                scanf("%d",&q);                if (q!=1&&q!=2)                {                    w=1;                    CLS;                    printf("\n\tSelect error!  Please try again\n\n");                }                else                    w=0;            }            while(w);            if(q==1) //继续登录            {                CLS;                login();            }            else if(q==2) //返回主菜单            {                CLS;                menue();            }        }    }}void input(int k) //输入学生信息{    getchar();    printf("学号:");    gets(stu[k].num);    printf("姓名:");    gets(stu[k].name);    printf("专业:");    gets(stu[k].major);    printf("科目A:");    scanf("%d",&stu[k].A.x);    printf("科目B:");    scanf("%d",&stu[k].B.x);    printf("科目C:");    scanf("%d",&stu[k].C.x);    printf("科目D:");    scanf("%d",&stu[k].D.x);}void save(int n) //保存学生信息{    FILE *fp;    int i;    if((fp=fopen("D:\\file.txt","w+"))==NULL) ///只打开或建立一个二进制文件,只允许写数据    {        printf("\nCan not open file!\n");        exit();    }    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 exit() //退出{    exit(0);}void insert() //添加学生信息{    if(!flag)    {        printf("\n\n\tPlease login first!\n");        printf("\n\tPlease press Enter to login interface!");        getchar();        getchar();        login();    }    else    {        int i,n,k,t;        FILE *fp;        if((fp=fopen("D:\\file.txt","r"))==NULL) ///读入空文件,rb表示打开一个二进制文件,只允许读数据        {            printf("How many people 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); //保存所有学生的信息        printf_back();//添加学生信息后显示的“是浏览还是返回”    }}void printf_back()//添加学生信息后显示的“是浏览还是返回”{    int w,k=0;    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)        {            CLS;            browse();        }        else if(w==2)        {            system("cls");            menue();        }        else            printf("  选择错误!请重新选择!\n");    }    while(k==0);}void printf_one(int k) //输出一个学生的信息{    system("color 4e");    printf("学号:%s\n",stu[k].num);    printf("姓名:%s\n",stu[k].name);    printf("专业:%s\n",stu[k].major);    printf("科目A的成绩:%d\n",stu[k].A.x);    printf("科目B的成绩:%d\n",stu[k].B.x);    printf("科目C的成绩:%d\n",stu[k].C.x);    printf("科目D的成绩:%d\n",stu[k].D.x);}void printf_n(int n) //浏览时输出所有学生的信息{    system("color 2e");    int j,i=1;    for(j=0; j<n; j++)    {        printf("第%d个学生:\n",i++);        printf_one(j);        printf("\n");    }    getchar();}void browse()//浏览{    if(!flag)    {        printf("\n\n\tPlease login first!\n");        printf("\n\tPlease press Enter to login interface!");        getchar();        getchar();        login();    }    else    {        system("color 5f");        int n;        n=load();        printf_n(n);        printf("  共有 %d 个学生的记录.\n",n);        printf("\nPress [ ENTER ] key to back...");        getchar();        CLS;        menue(); //返回主函数    }}void deleter() //删除{    if(!flag)    {        printf("\n\n\tPlease login first!\n");        printf("\n\tPlease press Enter to login interface!");        getchar();        getchar();        login();    }    else    {        struct student s;        int i,n,k,w0,w1;        n=load();        do        {            k=-1;            //printf_n(n); /*删除之前先显示所有学生的信息*/            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;                        menue();                    }                }            }            while(k==-1);            printf_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);        CLS;        menue(); //不再删除时返回主菜单,w1!=1    }}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\t1.继续    2.返回菜单  [ ]\b\b");                    scanf("%d",&o);                    if(o==1)                    {                        system("cls");                        search(); /*继续查找*/                    }                    else                    {                        system("cls");                        menue();                    }                }            }            while(k==-1);            system("cls");            printf_one(k); /*找到以后输出这个学生的信息*/            printf("\nWhat do you want to do next?\n\t1).继续    2).返回菜单   [ ]\b\b");            scanf("%d",&w0);        }        while(w0==1);        system("cls");        menue(); /*不再查找时返回主菜单*/    }    else /*按学号查找*/    {        do        {            k=-1;            do            {                printf("\n请输入您想要查找的学生的学号!\nNum:");                scanf("%s",s.num);                for(i=0; 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)                    {                        CLS;                        search(); /*继续查找*/                    }                    else                    {                        CLS;                        menue();                    }                }            }            while(k==-1);            CLS;            printf_one(k); /*找到以后输出这个学生的学籍信息*/            printf("\nWhat do you want to do?\n\t1).继续   2).返回菜单   [ ]\b\b");            scanf("%d",&w0);        }        while(w0==1);        CLS;        menue();//不再查找时返回主菜单    }}int modify_data(int i) //修改信息函数{    int c,w1;    do    {        puts("\n请选择要修改的选项:\n\n1.学号 2.姓名  3.专业  4.科目A  5.科目B 6.科目C  7.科目D   8.所有信息 9.取消并返回");        printf("请选择?: [  ]\b\b\b");        scanf("%d",&c);        if(c>9||c<1)        {            puts("\n选择错误!请重新选择!");            getchar();        }    }    while(c>9||c<1);    do    {        switch(c)        {        case 1:            printf("学号:");            gets(stu[i].num);            break;        case 2:            printf("姓名:");            gets(stu[i].name);            break;        case 3:            printf("专业:");            gets(stu[i].major);            break;        case 4:            printf("科目A:");            scanf("%d",&stu[i].A.x);            break;        case 5:            printf("科目B:");            scanf("%d",&stu[i].B.x);            break;        case 6:            printf("科目C:");            scanf("%d",&stu[i].C.x);            break;        case 7:            printf("科目D:");            scanf("%d",&stu[i].D.x);            break;        case 8:            input(i);            break;  /*修改这个学生的所有信息*/        case 9:            menue();  /*返回主菜单*/        }        puts("\nNow:\n");        printf_one(i); /*输出 修改后 的这个学生的信息*/        printf("\n确定?\n\n\t1).是  2).不,重新修改  3).返回不保存 [ ]\b\b");        scanf("%d",&w1);    }    while(w1==2);    return(w1); /*修改成功并选择1后返回1*/}void modify() /*修改*/{    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;            //printf_n(n); /*删除之前先显示所有学生的信息*/            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\t1.继续    2.返回菜单  [ ]\b\b");                    scanf("%d",&o);                    if(o==1)                    {                        CLS;                        modify(); /*继续修改*/                    }                    else                    {                        CLS;                        menue();                    }                }            }            while(k==-1);            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");        menue();/*不再修改返回主菜单*/    }}

2 1