asp.net下一套C#学生成绩管理系统的源代码

int saveflag=0;      //表示是否需要对数据进行存盘

struct student      //表示学生的相关信息
{
    char num[10];           //学号
    char name[10];          //姓名
    char grade[5];          //班级
    int chinesemark;        //语文成绩
    int mathmark;           //数学成绩
    int englishmark;        //英语成绩
    int totalmark;          //总成绩
    double averagemark;     //平均分
};

typedef struct node         //创建链表结点
{
    struct student data;
    struct node *next;
}node,*link;

void gotoxy(int x,int y)    //设置光标的位置
{
    coord c;
    c.x=x-1;
    c.y=y-1;
    setconsolecursorposition(getstdhandle(std_output_handle),c);
}  

void menu()                //主菜单显示
{
    system("cls");         //清屏
    system("color bd");    //设定字体和背景颜色
    gotoxy(15,4);
    printf("                学生成绩管理信息系统");
    gotoxy(14,7);
    printf("************************菜单***************************");
    gotoxy(14,9);
    printf("* 1 添加学生记录   2 删除学生记录    3 查找学生记录 *");
    gotoxy(14,11);
    printf("* 4 修改学生记录   5 单科成绩排名    6 总成绩排名    *");
    gotoxy(14,13);
    printf("* 7 信息预览       8 不及格人数统计 9 最高分统计    *");
    gotoxy(14,15);
    printf("* 10 保存数据       0 退出本系统                      *");
    gotoxy(14,17);
    printf("*******************************************************nn");
}

node* locate(link l,char findness[],char nameornum[])     //查找记录定位
{
    node *r;
    if(strcmp(nameornum,"num")==0)        //按学号查找
    {
        r=l->next;
        while(r)
        {
            if(strcmp(r->data.num,findness)==0)
                return r;
            r=r->next;                    //如果找到,则返回结点
        }
    }
    else if(strcmp(nameornum,"name")==0) //按姓名查找
    {
        r=l->next;
        while(r)
        {
            if(strcmp(r->data.name,findness)==0)
                return r;
            r=r->next;
        }
    }
    return 0;                             //如果没有找到,则返回null
}

void printfheader()                 //打印表头
{
    printf(header1);
    printf(header2);
    printf(header3);
}

void printdata(node *p)             //打印一个记录信息
{
    printf("    |%10s|%6s|%10s| %3d | %3d | %3d | %3d |%10.2f|n",p->data.num,p->data.grade,p->data.name,
        p->data.chinesemark,p->data.mathmark,p->data.englishmark,p->data.totalmark,p->data.averagemark);
}

void stringinput(char *t,unsigned int lens,char *notice)      //输入字符串
{
    char s[20];
    do
    {
        printf(notice);             //输出提示信息
        scanf("%s",s);
        if(strlen(s)>lens-1)
            printf("========>您输入的信息长度超出范围!n");
    }while(strlen(s)>lens);
    strcpy(t,s);
}

int numinput(char *notice)
{
    int num;
    do
    {
        printf(notice);           //输出提示信息
        scanf("%d",&num);
        if(num>100||num<0)
            printf("========>您输入的分数有误!,请重新输入n");
    }while(num>100||num<0);
    return num;
}

void display(link l)                //预览打印信息
{
   
    node *p,*r;
    int choice,select;
    char grade[5];
    char ch='y';
    char findness[20];
    int flag;
    p=l->next;
    if(p==null)                     //如果没有学生记录
    {
        printf("n============>没有学生记录!n");
        getchar();
        printf("请按任意键返回主菜单n");
        system("pause");
        return;
    }
    printf("nn");
    printf("                               学生信息预览nn");
    while(ch=='y'||ch=='y')
    {
        printf("            1 按班级对学生信息预览 2 对个人进行信息预览n");
        printf("   请输入您的选择:(1-2):");
        scanf("%d",&choice);
        getchar();
        p=l->next;
        flag=0;
        if(choice==1)
        {
            printf("=========>请输入班级(1-?):");
            scanf("%s",grade);
            while(p)                    //检测输入的班级是否存在学生记录
            {
                if(strcmp(p->data.grade,grade)==0)
                {
                    flag++;
                }
                p=p->next;
            }
            if(flag==0)
            {
                printf("========>没有该班学生的记录!n");
            }
            else
            {
                p=l->next;
                printfheader();
                while(p)
                {
                    if(strcmp(p->data.grade,grade)==0)
                    {
                        printdata(p);
                        printf(header3);
                    }
                    p=p->next;
                }
            }
            getchar();
            printf("n========>是否继续进行预览?(y/n):");
            scanf("%c",&ch);
            getchar();
        }
        else
        {
            printf("==========>1 按学号进行预览 2 按姓名进行预览n");
            printf("    请输入您的选择:(1-2):");
            scanf("%d",&select);
            getchar();
            if(select==1)                         //学号查找
            {
                printf("========>请输入学号:");
                scanf("%s",findness);
                r=locate(l,findness,"num");       //记录查找定位
                if(r==null)                       //如果该学生记录不存在
                {
                    printf("========>该学生记录不存在!n");
                }
                else
                {
                    printfheader();
                    printdata(r);
                    printf(header3);
                }
            }
            else                                 //姓名查找
            {
                printf("========>请输入姓名:");
                scanf("%s",findness);
                r=locate(l,findness,"name");
                if(r==null)                     
                {
                    printf("========>该学生记录不存在!n");
                }
                else
                {
                    printfheader();
                    printdata(r);
                    printf(header3);
                }
            }
            getchar();
            printf("n========>是否继续进行预览?(y/n):");
            scanf("%c",&ch);
        }
    }
}

void add(link l)                //添加学生记录
{
    node *p,*r,*s;
    char ch1,ch2,flag=0,num[10];
    r=l;
    s=l->next;
    system("cls");
    while(r->next!=null)       //让r指向链表结尾,以添加记录
    {
        r=r->next;
    }
    ch2='y';
    while(ch2=='y'||ch2=='y')
    {
        while(1)
        {
            stringinput(num,10,"请输入学生的学号(输入0表示返回主菜单):");
            flag=0;
            if(strcmp(num,"0")==0)      //如果输入0,则返回主菜单
            {
                return;
            }
            s=l->next;
            while(s)          //检测输入的学号是否已存在
            {
                if(strcmp(s->data.num,num)==0)
                {
                    flag=1;
                    break;
                }
                s=s->next;
            }
            if(flag==1)      //输入的学号已存在
            {
                getchar();
                printf("此学号已存在,是否重新输入?(y/n):");
                scanf("%c",&ch1);
                if(ch1=='y'||ch1=='y')
                    continue;
                else
                    return;
            }
            else
            {
                break;
            }
        }
        p=(node *)malloc(sizeof(node));      //输入相关信息,建立学生记录结点
        strcpy(p->data.num,num);
        stringinput(p->data.grade,5,"请输入学生的班级(1-?):");
        stringinput(p->data.name,10,"请输入学生的姓名:");
        p->data.chinesemark=numinput("请输入语文成绩(0-100):");
        p->data.mathmark=numinput("请输入数学成绩(0-100):");
        p->data.englishmark=numinput("请输入英语成绩(0-100):");
        p->data.totalmark=p->data.chinesemark+p->data.mathmark+p->data.englishmark;
        p->data.averagemark=p->data.totalmark/3.0;
        p->next=null;
        r->next=p;
        r=p;
        saveflag=1;
        getchar();
        printf("n是否继续添加学生记录?(y/n):");
        scanf("%c",&ch2);
    }
    return;
}


void delete(link l)            //删除学生记录
{
    int select;
    node *p,*r;
    char findness[15];
    char ch;
    p=l->next;
    ch='y';
    system("cls");
    if(p==null)              //如果不存在学生记录
    {
        printf("n没有学生信息记录!请按任意键返回主菜单.....n");
        system("pause");
        return;
    }
    printfheader();
    while(p)
    {
        printdata(p);
        printf(header3);
        p=p->next;
    }
    printf("                  删除学生记录n");
    while(ch=='y'||ch=='y')
    {
        printf("=============>1 通过学号删除   2 通过姓名删除n");
        printf("请输入您的选择(1-2):");
        scanf("%d",&select);
        if(select==1)                      //学号删除
        {
            stringinput(findness,10,"请输入要删除学生的学号:");
            r=locate(l,findness,"num");
            if(r)
            {
                p=l;
                while(p->next!=r)
                    p=p->next;
                p->next=r->next;            //合并节点来删除学生记录
            }
            else
            {
                printf("n您的输入有误,该学生记录不存在!n");
                printf("=====>是否继续删除?(y/n):");
                getchar();
                scanf("%c",&ch);
                continue;
            }
            free(r);
            printf("=====>是否继续删除?(y/n):");
            getchar();
            scanf("%c",&ch);
            saveflag=1;
        }
        else if(select==2)                //www.3ppt.com姓名删除
        {
            stringinput(findness,10,"请输入要删除学生的姓名:");
            r=locate(l,findness,"name");
            if(r)
            {
                p=l;
                while(p->next!=r)
                    p=p->next;
                p->next=r->next;
            }
            else
            {
                printf("n您的输入有误,该学生记录不存在!n");
                printf("=====>是否继续删除?(y/n):");
                getchar();
                scanf("%c",&ch);
                continue;
            }
            free(r);
            printf("=====>是否继续删除?(y/n):");
            getchar();
            scanf("%c",&ch);
            saveflag=1;
        }
        else
        {
            printf("n您的输入有误!n");
            printf("=====>是否继续删除?(y/n):");
            getchar();
            scanf("%c",&ch);
        }
    }
}

void search(link l)            //查找学生记录
{
    node *p,*r;
    int select;
    char ch;
    char findness[15];
    ch='y';
    p=l->next;
    system("cls");              //清屏
    if(p==null)
    {
        printf("=========>没有学生记录!请按任意键返回主菜单......n");
        getchar();
        system("pause");
        return;
    }
    while(ch=='y'||ch=='y')
    {
        printf("                              查找学生记录nn");
        printf("                    1 按学号查找         2 按姓名查找n");
        printf("请输入您的选择(1-2):");
        scanf("%d",&select);
        getchar();
        if(select==1)           //按学号进行查找
        {
            stringinput(findness,10,"请输入你要查找学生的学号:");
            r=locate(l,findness,"num");
            if(r==null)        //如果该学生记录不存在
            {
                printf("您的输入有误!该学生记录不存在!n");
            }
            else
            {
                printfheader();
                printdata(r);
                printf(header3);
            }
            printf("======>是否继续进行查找?(y/n):");
            getchar();
            scanf("%c",&ch);
        }
        else if(select==2)     //按姓名查找
        {
            stringinput(findness,10,"请输入你要查找学生的姓名:");
            r=locate(l,findness,"name");
            if(r==null)       //如果该学生记录不存在
            {
                printf("您的输入有误!该学生记录不存在!n");
            }
            else
            {
                printfheader();
                printdata(r);
                printf(header3);
            }
            printf("======>是否继续进行查找?(y/n):");
            getchar();
            scanf("%c",&ch);
        }
        else
        {
            printf("您的输入有误!n");
            printf("======>是否继续进行查找?(y/n):");
            scanf("%c",&ch);
        }
    }
}

void modify(link l)            //修改学生记录
{
    node *p,*r;
    char ch='y';
    char findness[15];
    p=l->next;
    system("cls");
    if(p==null)
    {
        printf("n========>没有学生记录nn请按任意键返回主菜单.....");
        getchar();
        getchar();
        return;
    }
    printf("                             修改学生记录nn");
    while(ch=='y'||ch=='y')
    {
        stringinput(findness,10,"请输入要修改学生的学号:");
        r=locate(l,findness,"num");            //根据学号找出该学生记录的结点
        if(r==null)
        {
            printf("========没有该学生记录!是否继续修改?(y/n):");
            getchar();
            scanf("%c",&ch);
            continue;
        }
        else                                  //进行修改,重新输入数据
        {
            printf("请重新输入姓名: ");
            scanf("%s",r->data.name);
            printf("请重新输入班级: ");
            scanf("%s",r->data.grade);
            printf("请重新输入语文成绩: ");
            scanf("%d",&r->data.chinesemark);
            printf("请重新输入数学成绩: ");
            scanf("%d",&r->data.mathmark);
            printf("请重新输入英语成绩: ");
            scanf("%d",&r->data.englishmark);
            r->data.totalmark=r->data.chinesemark+r->data.mathmark+r->data.englishmark;
            r->data.averagemark=r->data.totalmark/3.0;
            saveflag=1;
            printf("========>是否继续修改?(y/n):");
            getchar();
            scanf("%c",&ch);
        }
    }
}

void sort1(link l)             //单科成绩排名
{
    node *p,*r,*s;
    link l;
    int select;
    char ch='y';
    p=l->next;
    system("cls");
    if(p==null)
    {
        printf("n========>没有学生记录!nn请按任意键返回主菜单.....n");
        getchar();
        getchar();
        return;
    }
    printf("                                  单科成绩排名nn");
    printf("              1 按语文成绩排名 2 按数学成绩排名   3 按英语成绩排名n");
    while(ch=='y'||ch=='y')
    {
        printf("======>请输入您的选择(1-3):");
        scanf("%d",&select);
        l=(node *)malloc(sizeof(node));
        l->next=null;                   //新的链表头结点
        if(select==1)                   //插入法进行排序,语文成绩排名
        {
            p=l->next;
            while(p)
            {
                s=(node *)malloc(sizeof(node));      //申请结点存放取出的学生记录
                s->data=p->data;
                s->next=null;
                r=l;
                while(r->next&&r->next->data.chinesemark>s->data.chinesemark)   //查找
                {
                    r=r->next;
                }
                if(r->next==null)     //如果所有的学生成绩比取出的低
                {
                    r->next=s;
                }
                else
                {
                    s->next=r->next;
                    r->next=s;
                }
                p=p->next;
            }
        }
        else if(select==2)               //数学成绩排名
        {
            p=l->next;
            while(p)
            {
                s=(node *)malloc(sizeof(node));
                s->data=p->data;
                s->next=null;
                r=l;
                while(r->next&&r->next->data.mathmark>s->data.mathmark)
                {
                    r=r->next;
                }
                if(r->next==null)
                {
                    r->next=s;
                }
                else
                {
                    s->next=r->next;
                    r->next=s;
                }
                p=p->next;
            }
        }
        else                              //英语成绩排名
        {
            p=l->next;
            while(p)
            {
                s=(node *)malloc(sizeof(node));
                s->data=p->data;
                s->next=null;
                r=l;
                while(r->next&&r->next->data.englishmark>s->data.englishmark)
                {
                    r=r->next;
                }
                if(r->next==null)
                {
                    r->next=s;
                }
                else
                {
                    s->next=r->next;
                    r->next=s;
                }
                p=p->next;
            }
        }
        l->next=l->next;
        p=l->next;
        printfheader();
        while(p)
        {
            printdata(p);
            printf(header3);
            p=p->next;
        }
        printf("========>是否继续?(y/n):");
        getchar();
        scanf("%c",&ch);
        getchar();
    }
    return;
}


void sort2(link l)             //总成绩排名
{
    node *p,*r,*s;
    link l;
    p=l->next;
    system("cls");
    if(p==null)
    {
        printf("========>没有学生记录!n请按任意键返回主菜单......");
        getchar();
        getchar();
        return;
    }
    l=(node *)malloc(sizeof(node));
    l->next=null;
    p=l->next;
    while(p)
    {
        s=(node *)malloc(sizeof(node));      //申请结点存放取出的学生记录
        s->data=p->data;
        s->next=null;
        r=l;
        while(r->next&&r->next->data.totalmark>s->data.totalmark)   //查找
        {
            r=r->next;
        }
        if(r->next==null)
        {
            r->next=s;
        }
        else
        {
            s->next=r->next;
            r->next=s;
        }
        p=p->next;
    }
    l->next=l->next;
    p=l->next;
    printf("                                 综合成绩排名n");
    printfheader();
    while(p)
    {
        printdata(p);
        printf(header3);
        p=p->next;
    }
    printf("n========>请按任意键返回主菜单.......");
    getchar();
    getchar();
   
}

void topmark(link l)          //最高分统计
{
    node *topchinese,*topmath,*topenglish,*toptotal;
    node *p;
    int topchinesemark=0,topmathmark=0,topenglishmark=0,toptotalmark=0;
    p=l->next;
    system("cls");
    if(p==null)
    {
        printf("n======>没有学生记录!n请按任意键返回主菜单.....n");
        getchar();
        getchar();
        return;
    }
    while(p)                //查找最高分
    {
        if(p->data.chinesemark>=topchinesemark)
        {
            topchinese=p;
            topchinesemark=p->data.chinesemark;
        }
        if(p->data.mathmark>=topmathmark)
        {
            topmath=p;
            topmathmark=p->data.mathmark;
        }
        if(p->data.englishmark>=topenglishmark)
        {
            topenglish=p;
            topenglishmark=p->data.englishmark;
        }
        if(p->data.totalmark>=toptotalmark)
        {
            toptotal=p;
            toptotalmark=p->data.totalmark;
        }
        p=p->next;
    }
    gotoxy(24,8);
    printf("       最高分统计nn");
    printf("               语文最高分: %3d   姓名: %-10s 学号: %-10sn",topchinese->data.chinesemark,
        topchinese->data.name,topchinese->data.num);
    printf("               数学最高分: %3d   姓名: %-10s 学号: %-10sn",topmath->data.mathmark,
        topmath->data.name,topmath->data.num);
    printf("               英语最高分: %3d   姓名: %-10s 学号: %-10sn",topenglish->data.englishmark,
        topenglish->data.name,topenglish->data.num);
    printf("               综合最高分: %3d   姓名: %-10s 学号: %-10sn",toptotal->data.totalmark,
        toptotal->data.name,toptotal->data.num);
    printf("nn请按任意键返回主菜单......");
    getchar();
    getchar();
    return;
}


void count(link l)             //统计各科不及格人数以及总不及格人数        
{
    int chinesecount=0;
    int mathcount=0;
    int englishcount=0;
    int totalcount=0;
    node *p;
    p=l->next;
    system("cls");
    if(p==null)              //如果没有学生记录
    {
        printf("n没有学生记录!n");
        printf("请按任意键返回主菜单.....n");
        getchar();
        getchar();
        return;
    }
    while(p)
    {
        if(p->data.chinesemark<60)       //统计语文不及格人数
            chinesecount++;
        if(p->data.englishmark<60)      //统计英语不及格人数
            englishcount++;
        if(p->data.mathmark<60)         //统计数学不及格人数
            mathcount++;
        if(p->data.chinesemark<60||p->data.englishmark<60||p->data.mathmark<60)   //统计总不及格人数
            totalcount++;
        p=p->next;
    }
    gotoxy(24,8);
    printf("       不及格人数统计nn");
    printf("                             语文不及格人数: %dnn",chinesecount);
    printf("                             数学不及格人数: %dnn",mathcount);
    printf("                             英语不及格人数: %dnn",englishcount);
    printf("                             总的不及格人数: %dnn",totalcount);
    printf("n请按任意键返回主菜单.....n");
    getchar();
    getchar();
    return;
}


void save(link l)              //保存数据到磁盘文件
{
    file *fp;
    node *p;
    fp=fopen("d:student.txt","wt");   //只写打开文件
    if(fp==null)
    {
        printf("n打开数据文件失败!n");
        getchar();
        return;
    }
    p=l->next;
    while(p)
    {
        if(fwrite(p,sizeof(node),1,fp)==1)     //将数据写入文件
        {
            p=p->next;
        }
        else
        {
            break;
        }
    }
    printf("保存数据成功!n");
    fclose(fp);
}


void wrong()                  //报错处理
{
    printf("============>错误提示:您的输入有误!n");
    getchar();
}

int main(void)
{
    link l,p,r;                 //链表
    file *fp;               //文件指针
    int select;             //表示选择
    char ch;                //输入字符            
    l=(node*)malloc(sizeof(struct node));        //为链表申请头结点
    if(!l)
    {
        printf("n 链表结点申请失败!n");
        return 0;
    }
    l->next=null;
    r=l;
    fp=fopen("d:student.txt","at+");         //以追加方式打开一个文本文件,可读可写,若此文件不存在,则建立此文件
    if(fp==null)
    {
        printf("n无法打开数据文件!n");
        exit(0);
    }
    while(!feof(fp))
    {
        p=(node*)malloc(sizeof(node));
        if(!p)
        {
            printf("内存申请失败!n");
            exit(0);
        }
        if(fread(p,sizeof(node),1,fp)==1)      //一次从文件中读取一个学生信息记录
        {
            p->next=null;
            r->next=p;
            r=p;
        }
    }
    fclose(fp);                               //关闭文件
    menu();
    while(1)
    {
        system("cls");                        //清屏
        menu();
        p=r;
        printf("n                请选择操作(0-10):");
        scanf("%d",&select);
        if(select==0)
        {
            if(saveflag==1)
            {
                getchar();
                printf("n=========>是否保存数据?(y/n):");
                scanf("%c",&ch);
                if(ch=='y'||ch=='y')
                    save(l);
            }
            getchar();
            break;
        }
        switch(select)
        {
        case 1: add(l);break;                       //添加学生记录    
        case 2: delete(l);break;                    //删除学生记录
        case 3: search(l);break;                    //查找学生记录
        case 4: modify(l);break;                    //修改学生记录
        case 5: sort1(l);break;                     //按单科为学生进行成绩排名
        case 6: sort2(l);break;                     //按总成绩为学生进行成绩排名
        case 7: system("cls");display(l);break;     //对学生信息进行预览打印
        case 8: count(l);break;                     //对每科不及格的人数以及总不不及格人数进行统计
        case 9: topmark(l);break;                   //对数据进行保存
        case 10: save(l);break;
        default: wrong();getchar();break;
        }
    }
    return 0;   
}

    woaizhj

cnblogs.com        aijuan_511@163.com     woaizhj

51cto.com    jujucaishifu    woaizhj

51cto.com    9u9u    woaizhj

转载于:https://www.cnblogs.com/huabingchen/archive/2011/04/04/2005162.html

目的:通过调研目前教学管理系统中的成绩管理子系统,了解成绩管理子系统的业务流程;通过分析比较,结合用户对成绩管理子系统的改进意见与实现情况,运用面向对象思想方法,设计和实现一个满足功能和性能,并有所创新的成绩管理子系统,以提高成绩管理的自动化、友好性等。本系统基于.NET平台和SQL Server数据库,通过毕业设计,可以使学生对.NET结构下开发B/S模式的分布式三层数据库系统有一个全面的了解。 本系统从功能上划分可分为以下几大模块:功能模块管理,组权限管理,学生信息管理,课程信息管理,学生成绩管理,授课信息管理,学生信息查询,学生成绩统计等几大模块。以下将对各子模块进行说明。 功能模块管理:将系统功能模块保存到数据库中以便于动态地进行不同用户组权限的分配等操作。本模块包括功能模块的添加,删除,修改等。 组权限管理:对用户进行分组,并将权限设置到不同的用户组。 学生信息管理模块:输入学生基本信息,并可以对学生信息进行添加、查询、修改、删除。还可以关键字查询并从数据库里调出的学生基本信息.输出学生基本信息,学号、班号、姓名查询的信息结果。 课程信息管理:设置课程号,课程名,先修课等课程信息。 成绩信息管理模块:输入成绩信息,并可以对成绩信息进行添加、查询、修改、删除。还可以用关键字查询并调出数据库里的学生基本成绩信息的修改、删除等。输出查询的学生成绩信息。 授课信息管理:对教师授课信息的调度,安排等信息的管理。 学生信息查询:本模块是可对学生成绩进行查询,可按学号,姓名,年龄,所在院系,入学年份等不同条件独立查询或进行模糊查询。 学生成绩统计:对学生成绩总分,平均分等进行统计。 系统管理员后台用户名为 admin 密码为 www.mycodes.net 普通用户(测试用例)用户名为:user01,密码:111111 DB下为Sql数据库,附加即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值