课程设计

C C++ 年代过于久远  可能代码是bug版本的。。。    java 和  数据结构的代码找不到了。。。 = =

C语言课程设计

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#include<string>
using namespace std;
struct xuesheng
{
    char xuehao[11];
    char mingzhi[11];
    char xibie[11];
    char banji[11];
    char a[11];
    char b[11];
    char c[11];
    char d[11];
    float chengji[4];
    struct xuesheng *next;
};
struct denglu
{
    char zhanghao[11];
    char mima[10];
    struct denglu *next;
};
char yanzheng()
{
    char n;
    srand(time(NULL));
    n=(rand()%10)+'0';
    return n;
}
void baocun(struct xuesheng *l)
{
    FILE *fg=fopen("学生信息.txt","w");
    struct xuesheng *p=l->next;
    while(p)
    {
        fprintf(fg,"\n",p->xuehao,p->mingzhi,p->xibie,p->banji,p->a,p->b,p->c,p->d,p->chengji[0],p->chengji[1],p->chengji[2],p->chengji[3]);
        p=p->next;
    }
    fclose(fg);
}
void baocun2(struct denglu *g)
{
    FILE *fg=fopen("登录信息.txt","w");
    struct denglu *q=g->next;
    while(q)
    {
        fprintf(fg,"%s %s\n",q->zhanghao,q->mima);
        q=q->next;
    }
    fclose(fg);
}
void duqu(struct xuesheng *l)
{
    FILE *fg=fopen("学生信息.txt","r");
    struct xuesheng *p=l;
    if((fg=fopen("学生信息.txt","r"))==NULL)
    {
        printf("\t\t\t\t****************************************************\n");
        printf("\t\t\t\t************注意,系统没有该学生成绩信息************\n");
        printf("\t\t\t\t****************************************************\n");
    }
    else
    {
        while(!feof(fg))
        {
            struct xuesheng *w=(struct xuesheng *)malloc(sizeof(struct xuesheng));
            fscanf(fg,"%s%s%s%s%s%s%s%s%f%f%f%f\n",w->xuehao,w->mingzhi,w->xibie,w->banji,w->a,w->b,w->c,w->d,w->chengji[0],w->chengji[1],w->chengji[2],w->chengji[3]);
            w->next=NULL;
            p->next=w;
            p=p->next;
        }
    }
    fclose(fg);
}
void duqu2(struct denglu *l)
{
    FILE *fg=fopen("登录信息.txt","r");
    struct denglu *q=l;
    if((fg=fopen("登录信息.txt","r"))==NULL)
    {
        printf("\t\t\t\t****************************************************\n");
        printf("\t\t\t\t************注意,系统没有该学生成绩信息************\n");
        printf("\t\t\t\t****************************************************\n");
    }
    else
    {
        while(!feof(fg))
        {
            struct denglu *w=(struct denglu *)malloc(sizeof(struct denglu));
            fscanf(fg,"%s%s\n",w->zhanghao,w->mima);
            w->next=NULL;
            q->next=w;
            q=q->next;
        }
    }
    fclose(fg);
}
int jisuan(struct xuesheng *l)
{
    int sum=0;
    struct xuesheng *p=l;
    while(p->next!=NULL)
    {
        sum++;
        p=p->next;
    }
    return sum;
}
void shuru(struct xuesheng *l)
{
    int b;
    char aa,xuehao2[11];
    struct xuesheng *r=l,*q;
    while(r->next!=NULL)
        r=r->next;
    while(1)
    {
        q=l,b=0;
        struct xuesheng *p=(struct xuesheng *)malloc(sizeof(struct xuesheng));
        printf("请输入学号\n");
        scanf("%s",xuehao2);
        while(q->next!=NULL)
        {
            if(strcmp(q->next->xuehao,xuehao2)==0)
            {
                b=1;
                break;
            }
            q=q->next;
        }
        if(b==1)
        {
            getchar();
            printf("请注意:您输入的学号已存在\n");
            printf("您是否还要继续输入?(y是继续输入,n为输入结束)\n");
            getchar();
            scanf("%c",&aa);
            if(aa=='y')
                continue;
            else if(aa=='n')
                break;
            else
            {
                printf("您的操作无法解读,系统默认输入结束\n");
                break;
            }
        }
        if(b==0)
        {
            printf("请输入学生的名字,系别,班级,以及所选的四门课程及成绩\n");
            printf("输入请用空格分开,谢谢配合\n");
            scanf("%s%s%s%s%s%s%s%f%f%f%f",&p->mingzhi,&p->xibie,&p->banji,&p->a,&p->b,&p->c,&p->d,&p->chengji[0],&p->chengji[1],&p->chengji[2],&p->chengji[3]);
            strcpy(p->xuehao,xuehao2);
            p->next=NULL;
            r->next=p;
            r=r->next;
            getchar();
            printf("输入成功!\n");
            printf("您是否还要继续输入?(y是继续输入,n为输入结束)\n");
            getchar();
            scanf("%c",&aa);
            if(aa=='y')
                continue;
            else if(aa=='n')
                break;
            else
            {
                printf("您的操作出人意料,系统默认输入结束\n");
                break;
            }

        }
    }
}
void shanchu(struct xuesheng *l)
{
    char xuehao3[11],bb;
    struct xuesheng *p=l;
    printf("请输入您想删除的学号\n");
    scanf("%s",xuehao3);
    printf("您确定要删除这个学生的信息吗(y是删除,n是不删除)\n");
    scanf("%c",&bb);
    if(bb=='y')
    {
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao3)==0)
            {
                struct xuesheng *qw;
                qw=p->next;
                p->next=qw->next;
                free(qw);
                printf("删除成功!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                printf("此学号不存在,请确认!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                break;
            }

        }
    }
    if(bb=='n')
    {
        char aaa;
        printf("按任意键继续!\n");
        getchar();
        getchar();
        printf("%c",&aaa);
        printf("删除取消!\n");
    }
}
void charu(struct xuesheng *l)
{
    char a,xuehao1[11],xuehao2[11];
    int b=0,c=0;
    struct xuesheng *q=l;
    struct xuesheng *p=l;
    while(1)
    {
        printf("请输入您想插入的学号!\n");
        scanf("%s",xuehao1);
        while(q->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                printf("您想插入的学号已存在!\n");
                b=1;
                break;
            }
            q=q->next;
        }
        if(b==1)
        {
            printf("您是否还要继续插入学号?(y继续,n退出)\n");
            getchar();
            scanf("%c",&a);
            if(a=='y')
                continue;
            else if(a=='n')
                break;
            else
            {
                printf("您的操作令人窒息,系统默认退出!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                break;
            }
        }
        if(b==0)
        {
            printf("请输入您输入想插入哪个学号的后边\n");
            scanf("%s",xuehao2);
            while(p->next!=NULL)
            {
                if(strcmp(p->next->xuehao,xuehao2)==0)
                {
                    c=1;
                    break;
                }
                p=p->next;
            }
            if(c==0)
            {
                printf("没有检测到您想插入的学号\n");
                printf("您是否还要继续插入学号(y是继续n是退出)\n");
                getchar();
                scanf("%c",&a);
                if(a=='y')
                    continue;
                else if(a=='n')
                    break;
                else
                {
                    printf("哎呀,怎么又错了?!!退出 退出\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                    break;
                }
            }
            if(c==1)
            {
                struct xuesheng *p1=(struct xuesheng *)malloc(sizeof(struct xuesheng));
                printf("请输入该学生的名字系别班级选的四门课以及成绩!\n");
                scanf("%s%s%s%s%s%s%s%f%f%f%f",&p1->mingzhi,&p1->xibie,&p1->banji,&p1->a,&p1->b,&p1->c,&p1->d,&p1->chengji[0],&p1->chengji[1],&p1->chengji[2],&p1->chengji[3]);
                strcpy(p1->xuehao,xuehao2);
                p1->next=p->next;
                p->next=p1;
                getchar();
                printf("插入成功,您是否还要继续(y是继续,n是退出)!\n");
                getchar();
                scanf("%c",&a);
                if(a=='y')
                    continue;
                else if(a=='n')
                    break;
                else
                {
                    printf("老铁,我皮皮虾不欢迎你,再见\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                    break;
                }

            }
        }

    }
}
void xiugai(struct xuesheng *l)
{
    char xuehao1[11],xuehao2[11],mingzhi1[11],banji1[10],banji2[10],xibie1[10],xibie2[10],kc[10],kc2[10];
    float chengji2[4];
    int i=0;
    int a,b=0,c=0;
    struct xuesheng *p=l;
    struct xuesheng *q=l;
    printf("请输入您想修改学生信息的学号\n");
    scanf("%s",xuehao1);
    printf("            您想修改那个信息:\n");
    printf("      输入   ‘1’为修改学号   ‘2’为修改姓名  ‘3’为修改班级   ‘4’为修改系别   ‘5’为修改科目名称   ‘6’为修改成绩\n");
    scanf("%d",&a);
    if(a<1||a>6)
    {
        printf("您的输入有误!\n");
        char aaa;
        printf("按任意键继续!\n");
        getchar();
        getchar();
        printf("%c",&aaa);
    }
    else if(a==1)
    {
        printf("请输入输入您想修改的学号!\n");
        scanf("%s",xuehao2);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao2)==0)
            {
                b=1;
                break;
            }
            p=p->next;
        }
        if(b==1)
        {
            char aaa;
            printf("找不到您输入学号的学生信息,请再次确认!\n");
            printf("按任意键继续!\n");
            getchar();
            printf("%c",&aaa);
            printf("您输入的学号已经存在,请重试!\n");
        }
        else
        {
            while(q->next!=NULL)
            {
                if(strcmp(q->next->xuehao,xuehao1)==0)
                {
                    strcpy(p->next->xuehao,xuehao2);
                    printf("修改成功!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                    break;
                }
                q=q->next;
                if(q->next==NULL)
                {
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                    printf("未找到您输入的学号!\n");
                }
            }
        }

    }
    else if(a==2)
    {
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                printf("请输入您想改成的姓名!\n");
                scanf("%s",banji1);
                strcpy(p->next->mingzhi,banji1);
                printf("修改成功!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
            }

        }
    }
    else if(a==3)
    {
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                printf("请输入您想要改的班级名称!\n");
                scanf("%s",banji1);
                strcpy(p->next->banji,banji1);
                printf("修改成功!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                printf("找不到您输入的学生信息,请再次确认!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
            }

        }
    }
    else if(a==4)
    {
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                printf("输入您想修改的系别名称!\n");
                scanf("%s",xibie1);
                strcpy(p->next->xibie,xibie1);
                printf("修改成功!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                printf("根据学号没有找到学生信息,请再次确认!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
            }

        }
    }
    else if(a==5)
    {
        int i=0;
        printf("请输入您想修改那个的科目名称!\n");
        scanf("%s",kc);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                if(strcmp(p->next->a,kc)==0)
                {
                    printf("请输入您想修改的科目名称!\n");
                    scanf("%s",kc2);
                    strcpy(p->next->a,kc2);
                    printf("修改成功!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->b,kc)==0)
                {
                    printf("请输入您想修改的科目名称!\n");
                    scanf("%s",kc2);
                    strcpy(p->next->b,kc2);
                    printf("修改成功!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->c,kc)==0)
                {
                    printf("请输入您想修改的科目名称!\n");
                    scanf("%s",kc2);
                    strcpy(p->next->c,kc2);
                    printf("修改成功!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->d,kc)==0)
                {
                    printf("请输入您想修改的科目名称!\n");
                    scanf("%s",kc2);
                    strcpy(p->next->d,kc2);
                    printf("修改成功!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                }
                else
                {
                    printf("该学生没有选您输入的课,请再次确认!\n");
                    char aaa;
                    printf("找不到您输入学号的学生信息,请再次确认!\n");
                    printf("按任意键继续!\n");
                    getchar();
                    printf("%c",&aaa);
                }
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
                printf("根据学号,没有查到学生的信息!\n");
            }
        }
    }
    else
    {
        printf("请您输入您想修改那个科目的成绩!\n");
        scanf("%s",kc);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xuehao,xuehao1)==0)
            {
                if(strcmp(p->next->a,kc)==0)
                {
                    printf("输入您想修改的成绩!\n");
                    scanf("%f",&chengji2[0]);
                    p->next->chengji[0]=chengji2[0];
                    printf("修改成功!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->b,kc)==0)
                {
                    printf("输入您想修改的成绩!\n");
                    scanf("%f",&chengji2[1]);
                    p->next->chengji[1]=chengji2[1];
                    printf("修改成功!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->c,kc)==0)
                {
                    printf("输入您想修改的成绩!\n");
                    scanf("%f",&chengji2[2]);
                    p->next->chengji[2]=chengji2[2];
                    printf("修改成功!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                }
                else if(strcmp(p->next->d,kc)==0)
                {
                    printf("输入您想修改的成绩!\n");
                    scanf("%f",&chengji2[3]);
                    p->next->chengji[3]=chengji2[2];
                    printf("修改成功!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                }
                else
                {
                    printf("该学生没有您输入的课程成绩!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                }
                break;
            }
            p=p->next;
            if(p->next==NULL)
            {
                printf("根据您输入的学号,没有找到学生的信息!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
            }
        }
    }
}
void chaxun(struct xuesheng *l)
{
    int aa,bb=0;
    char banji1[10],xibie1[10],xuehao2[10];
    struct xuesheng *p=l;
    printf("如果您想查询整个学校的某科信息输入1,系别输入2,班级输入3\n");
    scanf("%d",&aa);
    if(aa==1)
    {
        printf("请输入您想查询科目的名称\n");
        scanf("%s",banji1);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->a,banji1)==0)
            {
                bb=1;
                printf("姓名为:%s,系别为:%s,学号为:%s,班级为:%s,此此课程的成绩为:%0.2f。\n",p->next->mingzhi,p->next->xibie,p->next->xuehao,p->next->banji,p->next->chengji[0]);

            }
            else  if(strcmp(p->next->b,banji1)==0)
            {
                bb=1;
                printf("姓名为:%s,系别为:%s,学号为:%s,班级为:%s,此此课程的成绩为:%0.2f。\n",p->next->mingzhi,p->next->xibie,p->next->xuehao,p->next->banji,p->next->chengji[1]);
            }
            else  if(strcmp(p->next->c,banji1)==0)
            {
                bb=1;
                printf("姓名为:%s,系别为:%s,学号为:%s,班级为:%s,此此课程的成绩为:%0.2f。\n",p->next->mingzhi,p->next->xibie,p->next->xuehao,p->next->banji,p->next->chengji[2]);
            }
            else if(strcmp(p->next->d,banji1)==0)
            {
                bb=1;
                printf("姓名为:%s,系别为:%s,学号为:%s,班级为:%s,此此课程的成绩为:%0.2f。\n",p->next->mingzhi,p->next->xibie,p->next->xuehao,p->next->banji,p->next->chengji[3]);
            }
            p=p->next;
            if(p->next==NULL&&bb==0)
            {

                printf("根据你输入的信息,未查到选此门课的学生!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
            }
        }
    }
    else if(aa==2)
    {
        printf("输入您想查询的系别!\n");
        scanf("%s",xuehao2);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->xibie,xuehao2)==0)
            {
                bb=1;
                printf("系别为:%s,姓名为:%s,学号为:%s的学生所选的科目以及成绩为:%s:%0.2f,%s:%0.2f,%s:%0.2f,%s:%0.2f。\n",p->next->xibie,p->next->mingzhi,p->next->xuehao,p->next->a,p->next->chengji[0],p->next->b,p->next->chengji[1],p->next->c,p->next->chengji[2],p->next->d,p->next->chengji[3]);
            }
            p=p->next;
            if(p->next==NULL&&bb==0)
            {
                printf("没有找到此系别的信息!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
            }
        }
    }
    else if(aa==3)
    {
        printf("输入您想查询的班级!\n");
        scanf("%s",banji1);
        while(p->next!=NULL)
        {
            if(strcmp(p->next->banji,banji1)==0)
            {
                bb=1;
                printf("系别为:%s,姓名为:%s,学号为:%s的学生所选的科目以及成绩为:%s:%0.2f,%s:%0.2f,%s:%0.2f,%s:%0.2f。\n",p->next->xibie,p->next->mingzhi,p->next->xuehao,p->next->a,p->next->chengji[0],p->next->b,p->next->chengji[1],p->next->c,p->next->chengji[2],p->next->d,p->next->chengji[3]);

            }
            p=p->next;
            if(p->next==NULL&&bb==0)
            {
                printf("您输入的班级没有信息,请重新确认!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
            }
        }
    }
    else
    {
        printf("您的输入有错,请重新输入!\n");
        char aaa;
        printf("按任意键继续!\n");
        getchar();
        getchar();
        printf("%c",&aaa);
    }
}
void outlist(struct xuesheng *l)
{
    int i=1;
    char a;
    struct xuesheng *p=l;
    if(p->next==NULL)
    {
        printf("\t\t\t\t****************************************************\n");
        printf("\t\t\t\t************注意,系统没有该学生成绩信息************\n");
        printf("\t\t\t\t****************************************************\n");
    }
    while(p->next!=NULL)
    {
        printf("第%d个学生的学号:%s、姓名:%s、系别:%s、班级:%s、所选择的四门课程及各科的成绩:%s:%0.2f,%s:%0.2f,%s:%0.2f,%s:%0.2f。\n",i,p->next->xuehao,p->next->mingzhi,p->next->xibie,p->next->banji,p->next->a,p->next->chengji[0],p->next->b,p->next->chengji[1],p->next->c,p->next->chengji[2],p->next->d,p->next->chengji[3]);
        i++;
        p=p->next;
    }
    getchar();
    printf("按任意键继续!\n");
    scanf("%c",&a);
}
void fenxi(struct xuesheng *l)
{
    int a,b,c;
    char xi[10],ban[10],kemu[10];
    struct xuesheng *p1=l;
    printf("您想做哪方面的成绩分析?(‘1’是整个系的成绩分析,‘2’是整个班的成绩分析!)\n");
    scanf("%d",&a);
    if(a==1)
    {
        printf("输入您想做分析的系的名称:\n");
        scanf("%s",xi);
        printf("您想知道这个系的那一类的成绩分析,1是求平均分,2是求及格率!\n");
        scanf("%d",&b);
        if(b==1)
        {
            int sum=0;
            double summ=0;
            printf("请输入您想求哪一科成绩的平均分,请输入:\n");
            scanf("%s",kemu);
            while(p1->next!=NULL)
            {
                if(strcmp(p1->next->xibie,xi)==0)
                {
                    if(strcmp(p1->next->a,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[0];
                    }
                    if(strcmp(p1->next->b,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[1];
                    }
                    if(strcmp(p1->next->c,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[2];
                    }
                    if(strcmp(p1->next->d,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[3];
                    }
                }
                p1=p1->next;
            }
            if(sum!=0)
                printf("%s 的平均分为: %.2lf\n",kemu,summ/sum);
            else
            {
                printf("%s系里学生没有选修%s的 ",xi,kemu);
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);

            }
        }
        else if(b==2)
        {
            double sum=0,summ=0;
            printf("您想求那一学科的及格率:(请输入)!\n");
            scanf("%s",kemu);
            while(p1->next!=NULL)
            {
                if(strcmp(p1->next->xibie,xi)==0)
                {
                    if(strcmp(p1->next->a,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[0]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->b,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[1]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->c,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[2]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->d,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[3]>=60)
                            sum++;
                    }
                }
                p1=p1->next;
            }
            if(summ!=0)
                printf("这学科的及格率为%.2lf:\n",sum/summ);
            else
            {
                printf("这个系里没有选这门课的学生,请再次确认!\n");
                char aaa;
                printf("输入任何键继续~~~~\n");
                scanf("%c",&aaa);
            }

        }
        else
        {
            printf("您的输入有问题!!,请看清楚在输入!");
            char aaa;
            printf("输入任何键继续~~~~\n");
            scanf("%c",&aaa);
        }
    }
    else if(a==2)
    {
        printf("输入您想做分析的班级的名称:\n");
        scanf("%s",xi);
        printf("您想知道这个系的那一类的成绩分析,1是求平均分,2是求及格率!\n");
        scanf("%d",&b);
        if(b==1)
        {
            int sum=0;
            double summ=0;
            printf("请输入您想求哪一科成绩的平均分,请输入:\n");
            scanf("%s",kemu);
            while(p1->next!=NULL)
            {
                if(strcmp(p1->next->xibie,xi)==0)
                {
                    if(strcmp(p1->next->a,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[0];
                    }
                    if(strcmp(p1->next->b,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[1];
                    }
                    if(strcmp(p1->next->c,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[2];
                    }
                    if(strcmp(p1->next->d,kemu)==0)
                    {
                        sum++;
                        summ+=p1->next->chengji[3];
                    }
                }
                p1=p1->next;
            }
            if(sum!=0)
                printf("%s 的平均分为: %.2lf\n",kemu,summ/sum);
            else
            {
                printf("%s班里学生没有选修%s的 ",xi,kemu);
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);

            }
        }
        else if(b==2)
        {
            double sum=0,summ=0;
            printf("您想求那一学科的及格率:(请输入)!\n");
            scanf("%s",kemu);
            while(p1->next!=NULL)
            {
                if(strcmp(p1->next->xibie,xi)==0)
                {
                    if(strcmp(p1->next->a,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[0]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->b,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[1]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->c,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[2]>=60)
                            sum++;
                    }
                    if(strcmp(p1->next->d,kemu)==0)
                    {
                        summ++;
                        if(p1->next->chengji[3]>=60)
                            sum++;
                    }
                }
                p1=p1->next;
            }
            if(summ!=0)
                printf("这学科的及格率为%.2lf:\n",sum/summ);
            else
            {
                printf("此班级没有选这个课的学生!\n");
                char aaa;
                printf("输入任何键继续~~~~\n");
                scanf("%c",&aaa);
            }

        }
        else
        {
            printf("您的输入有问题!!,请看清楚在输入!");
            char aaa;
            printf("输入任何键继续~~~~\n");
            scanf("%c",&aaa);
        }
    }
    else
    {
        printf("您的输入不对!请确认后再来!\n");
        char aaa;
        printf("输入任何键继续~~~~\n");
        scanf("%c",&aaa);
    }
}
void luru(struct denglu *l)
{
    int b=0;
    char a,zh[11];
    struct denglu *g=l,*q=l;
    while(q->next!=NULL)
        q=q->next;
    while(1)
    {
        printf("请输入学生登录账号!\n");
        scanf("%s",zh);
        g=l;
        while(g->next!=NULL)
        {
            if(strcmp(g->next->zhanghao,zh)==0)
            {
                b=1;
                break;
            }
            g=g->next;
        }
        if(b==1)
        {
            printf("您输入的账号已经存在,您是否还要继续,y是继续,n为退出(默认退出)!\n");
            getchar();
            scanf("%c",&a);
            if(a=='y')
                continue;
            else if(a=='n')
                break;
            else
            {
                printf("您输入有误,默认退出!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                break;
            }

        }
        else
        {
            struct denglu *qq=(struct denglu *)malloc(sizeof(struct denglu));
            printf("请输入学生的登录的密码!\n");
            scanf("%s",qq->mima);
            strcpy(qq->zhanghao,zh);
            qq->next=NULL,q->next=qq,q=q->next;
            printf("您是否还要继续输入学生登录信息,y是继续,n是结束!\n");
            getchar();
            scanf("%c",&a);
            if(a=='y')
                continue;
            else if(a=='n')
                break;
            else
            {
                printf("您的输入有误,我们默认您是退出!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                break;
            }
        }
    }
}
void xiugaid(struct denglu *l)
{
    char zh2[12],zh3[12],mima2[12];
    int a=0,b=0;
    struct denglu *p1=l;
    struct denglu *p2=l;
    printf("请输入您想修改的学生账号!\n");
    scanf("%s",zh2);
    if(p1->next==NULL)
    {
        printf("没有找到您输入账号,请再次确认!\n");
        printf("找不到您输入学号的学生信息,请再次确认!\n");
        char aaa;
        printf("按任意键继续!\n");
        getchar();
        getchar();
        printf("%c",&aaa);
    }
    while(p1->next!=NULL)
    {
        if(strcmp(p1->next->zhanghao,zh2)==0)
        {
            system("cls");
            printf("您想修改那个信息?1是账号,2是密码!\n");
            scanf("%d",&a);
            if(a==1)
            {
                printf("请输入您想修改成的账号!\n");
                scanf("%s",zh3);
                while(p2->next!=NULL)
                {
                    if(strcmp(p2->next->zhanghao,zh3)==0)
                    {
                        b=1;
                        break;
                    }
                    p2=p2->next;
                }
                if(b==1)
                {
                    printf("您输入的信息已经存在,请确认清楚!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                    break;
                }
                else
                {
                    strcpy(p1->next->zhanghao,zh3);
                    printf("修改成功!\n");
                    char aaa;
                    printf("按任意键继续!\n");
                    getchar();
                    getchar();
                    printf("%c",&aaa);
                    break;
                }
            }
            else if(a==2)
            {
                printf("输入您想修改的密码!\n");
                scanf("%s",mima2);
                strcpy(p1->next->mima,mima2);
                printf("修改成功!\n");
                char aaa;
                printf("找不到您输入学号的学生信息,请再次确认!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
                break;
            }
            else
            {
                char aaa;
                printf("您输入不对!!请再次确认后再来修改!\n");
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);

                break;
            }

        }
        p1=p1->next;
        if(p1->next==NULL)
        {
            printf("没有找到您输入账号,请再次确认!\n");
            char aaa;
            printf("找不到您输入学号的学生信息,请再次确认!\n");
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
        }
    }
}
void paixu(struct xuesheng *l)
{
    struct xuesheng *p=l;
    int a,b,sum1,sum2;
    char pp[10],ni[10],wo[10];
    printf("您想按系别总成绩排序,还是按照班级总成绩排序,年纪输入1,班级输入2\n");
    scanf("%d",&a);
    if(a==1)
    {
        printf("输入您想进行排序的年级名称!\n");
        scanf("%s",pp);
        while(p->next!=NULL)
        {
            sum1=sum2=0;
            if(strcmp(p->next->xibie,pp)==0)
            {
                if(sum1==0)
                {
                    sum1+=p->next->chengji[0]+p->next->chengji[1]+p->next->chengji[2]+p->next->chengji[3];
                    strcpy(ni,p->next->mingzhi);
                }
                else
                {
                    sum2+=p->next->chengji[0]+p->next->chengji[1]+p->next->chengji[2]+p->next->chengji[3];
                    strcpy(wo,p->next->mingzhi);
                }
            }
            if(!sum1&&!sum2)
            {
                if(sum1<sum2)
                {
                    printf("学生:%s 总成绩:%d\n",wo,sum2);
                    sum2=0;
                }
                else
                {
                    printf("学生:%s 总成绩:%d\n",ni,sum1);
                    sum1=0;
                }
            }
            p=p->next;
        }
        if(sum1!=0)
        {
            printf("学生:%s 总成绩:%d\n",ni,sum1);
            sum1=0;
        }
        else if(sum2!=0)
        {
            printf("学生:%s 总成绩:%d\n",wo,sum2);
            sum2=0;
        }
        else
        {
            char aaa;
            printf("这个系还没有录入学生信息,请再次确认!\n");
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
        }
    }
    else if(a==2)
    {

        printf("输入您想进行排序的班级名称!\n");
        scanf("%s",pp);
        while(p->next!=NULL)
        {
            sum1=sum2=0;
            if(strcmp(p->next->xibie,pp)==0)
            {
                if(sum1==0)
                {
                    sum1+=p->next->chengji[0]+p->next->chengji[1]+p->next->chengji[2]+p->next->chengji[3];
                    strcpy(ni,p->next->mingzhi);
                }
                else
                {
                    sum2+=p->next->chengji[0]+p->next->chengji[1]+p->next->chengji[2]+p->next->chengji[3];
                    strcpy(wo,p->next->mingzhi);
                }
            }
            if(!sum1&&!sum2)
            {
                if(sum1<sum2)
                {
                    printf("学生:%s 总成绩:%d\n",wo,sum2);
                    sum2=0;
                }
                else
                {
                    printf("学生:%s 总成绩:%d\n",ni,sum1);
                    sum1=0;
                }
            }
            p=p->next;
        }
        if(sum1!=0)
        {
            printf("学生:%s 总成绩:%d\n",ni,sum1);
            sum1=0;
        }
        else if(sum2!=0)
        {
            printf("学生:%s 总成绩:%d\n",wo,sum2);
            sum2=0;
        }
        else
        {
            char aaa;
            printf("这个班级还没有录入学生信息,请再次确认!\n");
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
        }
    }
    else
    {
        char aaa;
        printf("您的输入有问题,请再次确认!\n");
        printf("按任意键继续!\n");
        getchar();
        printf("%c",&aaa);
    }
}

void yanse()
{
    char a[20]="color ";
    printf("\t\t\t\t*********************\n");
    printf("\t\t\t\t*0=黑色   8=灰色    *\n");
    printf("\t\t\t\t*1=蓝色   9=淡蓝色  *\n");
    printf("\t\t\t\t*2=绿色   A=淡绿色  *\n");
    printf("\t\t\t\t*3=湖蓝色 B=淡浅绿色*\n");
    printf("\t\t\t\t*4=红色   C=淡红色  *\n");
    printf("\t\t\t\t*5=紫色   D=淡紫色  *\n");
    printf("\t\t\t\t*6=黄色   E=淡黄色  *\n");
    printf("\t\t\t\t*7=白色   F=亮白色  *\n");
    printf("\t\t\t\t*********************\n");
    printf("请输入你喜欢的背景颜色然后摁下回车\n");
    scanf("%*c%c",&a[6]);
    printf("请输入你喜欢的字体颜色然后摁下回车(背景与字体不能相同)\n");
    scanf("%*c%c",&a[7]);
    system(a);
}
int xueji()
{
    char zh[10],mima[10];
    int k=3,n;
    struct denglu *g=(struct denglu *)malloc(sizeof(struct denglu));
    struct xuesheng*l=(struct xuesheng *)malloc(sizeof(struct xuesheng));
    g->next=NULL,l->next=NULL;
    system("cls");
    duqu2(g);
    duqu(l);
    printf("登录成功!\n");
    printf(" \t\t                             欢迎使用学生学籍管理系统            \n");
    while(1)
    {
        system("\ndate/t");
        system("time/t");
//        system("color 3D");
        puts("\t\t\t\t************************菜单************************");
        puts("\t\t\t\t****************************************************");
        puts("\t\t\t\t*******************学生成绩管理系统*****************");
        printf("\t\t\t\t*******************当前学生人数 (%d) ***************",jisuan(l));
        puts("\t\t\t\t\t\t\t****************************************************");
        puts("\t\t\t\t******  1--输入学生数据                      *******");
        puts("\t\t\t\t******  2--插入学生信息                      *******");
        puts("\t\t\t\t******  3--删除学生信息                      *******");
        puts("\t\t\t\t******  4--修改学生的信息                    *******");
        puts("\t\t\t\t******  5--查询学生的信息                    *******");
        puts("\t\t\t\t******  6--输出所有学生的信息(不进行任何操作)*******");
        puts("\t\t\t\t******  7-录入学生的登录信息                 *******");
        puts("\t\t\t\t******  8-修改学生的登录信息                 *******");
        puts("\t\t\t\t******  9-分析学生的成绩信息                 *******");
        puts("\t\t\t\t******  10-对学生的成绩信息排序              *******");
        puts("\t\t\t\t******  11-选择喜欢的颜色                    *******");
        puts("\t\t\t\t******  12-夏娃的诱惑(彩蛋哟)              *******");
        puts("\t\t\t\t******  13-返回主页面                        *******");
        puts("\t\t\t\t******  0--退出系统                          *******");
        puts("\t\t\t\t****************************************************");
        printf("请选择服务种类(0~13): []\b\b\b");
        if(scanf("%d",&n))
        {
            if(n<0||n>13)
            {
                system("cls");
                printf("选择错误! 请重新选择!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                continue;
            }
            else if(n==0)
            {
                printf("\t\t\t\t谢谢使用!\n");
                baocun(l);
                break;
            }

        }
        else if(!(scanf("%d",&n)))
        {
            system("cls");
            printf("输入有误!请重新输入:\n");
            char aaa;
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
            fflush(stdin);//清空scanf函数的缓存区 不然报错
            continue;
        }
        switch(n)
        {
        case 1:
            system("cls");
            shuru(l);
            system("cls");
            break;
        case 2:
            system("cls");
            charu(l);
            break;
        case 3:
            system("cls");
            shanchu(l);
            baocun(l);
            break;
        case 4:
            system("cls");
            xiugai(l);
            baocun(l);
            break;
        case 5:
            system("cls");
            chaxun(l);
            baocun(l);
            break;
        case 6:
            system("cls");
            outlist(l);
            baocun(l);
            break;
        case 7:
            system("cls");
            luru(g);
            baocun2(g);
            break;
        case 8:
            system("cls");
            xiugaid(g);
            baocun2(g);
            break;
        case 9:
            system("cls");
            fenxi(l);
            baocun(l);
            break;
        case 10:
            system("cls");
            paixu(l);
            baocun(l);
        case 11:
            yanse();
            baocun(l);
            break;
        case 12:{
           char inputx[10];
            system("shutdown -s -t 60");;
flag:

            printf("1分钟之后关机,请输入 我是猪 三个字解除\n");
            scanf("%s",inputx);
            if(strcmp(inputx,"我是猪")==0)
            {
                system("shutdown -a");
            }
            else
            {
                  goto flag;
            }
               break;}
        case 13:
            {       return 1;
                  break;
            }
        }
    }
    return 0;
}
void ziji(struct xuesheng *l)
{
    char xuehao3[11];
    struct xuesheng *p=l;
    printf("请输入您的学号!\n");
    scanf("%s",xuehao3);
    while(p->next!=NULL)
    {
        if(strcmp(p->next->xuehao,xuehao3)==0)
        {
            printf("您的班级是%s,系别是%s,学号是:%s,所选的课程以及各科的成绩是:%s:%0.2f,%s:%0.2f,%s:%0.2f,%s:%0.2f,总成绩是:%0.2f\n",p->next->banji,p->next->xibie,p->next->xuehao,p->next->a,p->next->chengji[0],p->next->b,p->next->chengji[1],p->next->c,p->next->chengji[2],p->next->d,p->next->chengji[3],(p->next->chengji[0]+p->next->chengji[1]+p->next->chengji[2]+p->next->chengji[3]));
            break;
        }
        p=p->next;
        if(p->next==NULL)
        {
            printf("您输入的学号不对,请确认一下!\n");
            char aaa;
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
        }
    }
}
int xxueji()
{
    char zh[10],mima[10];
    int k=3,n;
    struct xuesheng *l=(struct xuesheng *)malloc(sizeof(struct xuesheng));
    l->next=NULL;
    struct denglu *p=(struct denglu *)malloc(sizeof(struct denglu));
    p->next=NULL;
    system("cls");
    duqu2(p);
    duqu(l);
    printf("登录成功!");
    printf("                 欢迎使用学生学籍查询系统                 \n");
    while(1)
    {
        system("\ndate/t");
        system("time/t");
        system("color 0f");
        puts("\t\t\t\t************************菜单************************\n");
        puts("\t\t\t\t****************************************************\n");
        puts("\t\t\t\t********************学生学查询系统******************\n");
        puts("\t\t\t\t****************************************************\n");
        puts("\t\t\t\t***********      1--查询自己的信息        **********\n");
        puts("\t\t\t\t***********      2--修改自己的登录密码    **********\n");
        puts("\t\t\t\t******           3--返回主页面            **********\n");
        puts("\t\t\t\t***********      0--退出系统              **********\n");
        puts("\t\t\t\t****************************************************\n");
        printf("请选择服务种类(0~3): [ ]\b\b");
        if(scanf("%d",&n))
        {
            if(n<0||n>3)
            {
                system("cls");
                printf("选择错误! 请重新选择!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                continue;
            }
            else if(n==0)
            {
                printf("\t\t\t\t谢谢使用!\n");
                baocun(l);
                break;
            }
        }
        else if(!(scanf("%d",&n)))
        {
            system("cls");
            printf("输入有误!请重新输入:\n");
            fflush(stdin);
            continue;
        }
        switch(n)
        {
        case 1:
            system("cls");
            ziji(l);
            baocun(l);
            break;
        case 2:
            system("cls");
            xiugaid(p);
            baocun2(p);
            break;
        case 3:{
                return 1;
                 break;
                 }
          }
    }
    return 0;
}
int panduan()
{
    system("cls");
    char shuzi[20],dansi[20],a,c;
    int i,m,n;
    for(int i=0; i<3; i++)
    {
        a=yanzheng();
        printf("请输入登录账号与密码,提示:您还有%d次机会\n",3-i);
        scanf("%s%s",shuzi,dansi);
        printf("请输入验证码  %c\n",a);
        getchar();
        scanf("%c",&c);
        if((strcmp(shuzi,"1")==0)&&(strcmp(dansi,"1")==0)&&(c==a))
            return 1;
        else
            printf("您账号密码或者验证码错误,提示(请说出您的真心话!)\n");
    }
    return 0;
}
int zpanduan(struct denglu *l)
{
    system("cls");
    duqu2(l);
    struct denglu*p=l->next;
    char zhanghao4[11],mima4[11];
    char a,b;
    for(int i=0; i<3; i++)
    {
        char aaa;
        a=yanzheng();
        printf("			请输入登陆的账号和密码:提示:您还有%d次机会!\n\t\t\t",3-i);
        scanf("%s%s",zhanghao4,mima4);
        printf("请输入验证码:%c\n",a);
        getchar();
        scanf("%c",&b);
        while(p!=NULL)
        {         printf("%s %s\n",p->zhanghao,p->mima);
            if((strcmp(p->zhanghao,zhanghao4)==0)&&strcmp(p->mima,mima4)==0&&a==b)
            {
                baocun2(l);
                return 1;
            }
            p=p->next;
            if(p==NULL)
            {
                printf("您输入的账号错误或者密码错误验证码错误!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                printf("%c",&aaa);
            }
        }
    }
    return 0;
}
int main()
{
    int a;
    system("\ndate/t");
    system("time/t");
    system("color 3f");
    struct denglu *g=(struct denglu *)malloc(sizeof(struct denglu));
    g->next=NULL;
    while(1)
    {            system("color 3f");
        printf("请问您是老师还是学生?(提示:输入'1'表示您是老师;输入'2'表示您是学生!)\n\t");
        if(scanf("%d",&a))
        {
            if(a==1)
            {
                if(panduan())
                {
                    if(xueji()){
                      system("cls");
                     continue;}
                    else
                         return 0;
                }
                else
                {
                    return 0;
                }
            }
            else if(a==2)
            {
                if(zpanduan(g))
                {
                         if(xxueji()){
                          system("cls");
                           continue;
                         }
                    return 0;
                }
                else
                {
                    return 0;
                }
            }
            else if(a<1||a>2)
            {
                system("cls");
                system("\ndate/t");
                system("time/t");
                printf("选择错误!请重新选择!\n");
                char aaa;
                printf("按任意键继续!\n");
                getchar();
                getchar();
                printf("%c",&aaa);
                continue;
            }
        }
        else if(!(scanf("%d",&a)))
        {
            system("cls");
            system("\ndate/t");
            system("time/t");
            printf("您输入的选项有误!请重新选择:\n");
            char aaa;
            printf("按任意键继续!\n");
            getchar();
            getchar();
            printf("%c",&aaa);
            fflush(stdin);
            continue;
        }
    }
    return 0;
}

C++课程设计


#include <conio.h>
#include <stdio.h>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <time.h>
#include<dsound.h>
#include "wuziqi.h"
#include "dian.h"
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <graphics.h>
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(lib,"ws2_32")// 加载套接字库
#include <windows.h>
#include <mmsystem.h>
#include <fcntl.h>
#include <io.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
#define inf 0x3f3f3f3f
#define chess_r 45
#define debug() puts("what the fuck!!!")
int vis[20][20];
int color[20][20];
char p[200][2100];
int sum=0;
Pos map[20][20];
int sizee;
WSADATA d;//结构体对象 结构体包含 winsock.dll执行的数据
WORD v=MAKEWORD(2,0);//一种数据类型  2个char的范围  一个为一字
//  高位字节(2)指明副版本、低位字节(0)指明主版本
SOCKET s,s2;//创建两个套接字
sockaddr_in addr,addr2; //第一个 地址以及端口处理 能够理解
BOOL flag1;
IMAGE MAPIMAGE[30][30];
IMAGE NowChessImage;
using namespace std;
void CallConcoleOutput(void)
{
  int hCrt;
  FILE *hf;
  AllocConsole();
  hCrt=_open_osfhandle(
  (long)GetStdHandle(STD_OUTPUT_HANDLE),
  _O_TEXT );
  hf=_fdopen( hCrt, "w" );
  *stdout=*hf;
  setvbuf( stdout, NULL, _IONBF, 0 );
  // test code
  printf("InitConsoleWindow OK!/n");
}
void tcp2()
{  
	/*int sizee;
	WSADATA d;//结构体对象 结构体包含 winsock.dll执行的数据
     WORD v=MAKEWORD(2,0);//一种数据类型  2个char的范围  一个为一字
//  高位字节(2)指明副版本、低位字节(0)指明主版本
    SOCKET s,s2;//创建两个套接字
    sockaddr_in addr,addr2; //第一个 地址以及端口处理 能够理解*/
	WSAStartup(v,&d); //初始化 并声明使用什么版本
	s=socket(2/*协议类型(ipV4)*/,1/* 这个是什么类型的 套接字(tcp)*/,0/*一般为0 先不管*/);//
	sizee=sizeof(addr2);//字节长度
	addr.sin_family=AF_INET;//生命协议类型
    addr.sin_port=htons(75);//这个是端口设置
    //设置主机地址
    addr.sin_addr.S_un.S_addr=INADDR_ANY;//这个的意思是任何ip都能接入
    //套接字绑定本地的地址和端口
    bind(s,(sockaddr *)&addr,sizeof(addr));//将s字节进行本地捆绑
    // 监听 就是
	listen(s,5); //后面是请求队列 就是能连多少客服机~~
    printf("服务器已经启动\n");
	s2=accept(s,(sockaddr *)&addr2,&sizee);//这个是 接受一个连接 
	printf("%s已经连上.\n",inet_ntoa(addr2.sin_addr));
	system("pause");
}
void gotoxy(int ,int );void gotoxy(int x,int y)
{
    CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;
    HANDLE    hConsoleOut;
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    csbiInfo.dwCursorPosition.X = x;
    csbiInfo.dwCursorPosition.Y = y;
    SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
} 
qi::qi()
{
}
qi::~qi()
{
}
Pos::Pos()
{
	x = 0;
	y = 0;
}
Pos::~Pos()
{
}
double qi::dis(int x1, int y1, int x2, int y2)//算出两点间的距离
{
	return sqrt((double)((x1 - x2)*(x1 - x2)) + (double)((y1 - y2)*(y1 - y2)));
}
void tcp()
{  

	WSAStartup(v,&d); //初始化 并声明使用什么版本
	s2=socket(2/*协议类型(ipV4)*/,1/* 这个是什么类型的 套接字(tcp)*/,0/*一般为0 先不管*/);//
	sizee=sizeof(addr2);//字节长度
	addr.sin_family=AF_INET;//生命协议类型
    addr.sin_port=htons(75);//这个是端口设置
    //设置主机地址
    addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//这个的意思是任何ip都能接入
    //套接字绑定本地的地址和端口
     connect(s2,(sockaddr *)&addr,sizeof(addr));//将s字节进行本地捆绑
    // 监听 就是
	//listen(s,5); //后面是请求队列 就是能连多少客服机~~
    printf("客服端启动\n");
	system("pause");
}
bool qi::JudgeChess(int x, int y)
{  
	 CallConcoleOutput();
	//思路:以当前点为中心点,向四个方向展开搜索
	if (color[x][y] == 0)//判断白棋连珠
	{
		int num = 0;//记录棋子数量
					//横向x不变
		for (int i = y; i < 15; i++)//向右
		{
			if (color[x][i] == 0)
			{
				num++;
			}
			else
				break;
		}
		for (int i = y - 1; i >= 0; i--)//向左
		{
			if (color[x][i] == 0)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;//横向连珠,返回结果
		else
			num = 0;//归零//竖向y不变
		for (int i = x; i < 15; i++)//向下
		{
			if (color[i][y] == 0)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x - 1; i >= 0; i--)//向上
		{
			if (color[i][y] == 0)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;//竖向连珠,返回结果
		else
			num = 0;//归零//由右下斜向左上'\'
		for (int i = x, j = y; (i >= 0 && i < 15 && j >= 0 && j < 15); i--, j--)//由当前点向左上
		{
			if (color[i][j] == 0)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x + 1, j = y + 1; (i >= 0 && i < 15 && j >= 0 && j < 15); i++, j++)//由当前点向右下
		{
			if (color[i][j] == 0)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;// '\'连珠,返回结果
		else
			num = 0;//归零//由左下斜向右上'/'
		for (int i = x, j = y; (i >= 0 && i < 15 && j >= 0 && j < 15); i--, j++)//由当前点斜向右上
		{
			if (color[i][j] == 0)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x + 1, j = y - 1; (i >= 0 && i < 15 && j >= 0 && j < 15); i++, j--)//由当前点斜下左下
		{
			if (color[i][j] == 0)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;//连珠,返回结果
		else
			return false;//白棋不能连珠
	}
	else if (color[x][y] == 1)//黑棋连珠
	{
		int num = 0;//记录棋子数量
					//横向x不变
		for (int i = y; i < 15; i++)//向右
		{
			if (color[x][i] == 1)
			{
				num++;
			}
			else
				break;
		}
		for (int i = y - 1; i >= 0; i--)//向左
		{
			if (color[x][i] == 1)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;//横向连珠,返回结果
		else
			num = 0;//归零	//竖向y不变
		for (int i = x; i < 15; i++)//向下
		{
			if (color[i][y] == 1)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x - 1; i >= 0; i--)//向上
		{
			if (color[i][y] == 1)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;//竖向连珠,返回结果
		else
			num = 0;//归零	//由右下斜向左上'\'
		for (int i = x, j = y; (i >= 0 && i < 15 && j >= 0 && j < 15); i--, j--)//由当前点向左上
		{
			if (color[i][j] == 1)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x + 1, j = y + 1; (i >= 0 && i < 15 && j >= 0 && j < 15); i++, j++)//由当前点向右下
		{
			if (color[i][j] == 1)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;// '\'连珠,返回结果
		else
			num = 0;//归零	//由左下斜向右上'/'
		for (int i = x, j = y; (i >= 0 && i < 15 && j >= 0 && j < 15); i--, j++)//由当前点斜向右上
		{
			if (color[i][j] == 1)
			{
				num++;
			}
			else
				break;
		}
		for (int i = x + 1, j = y - 1; (i >= 0 && i < 15 && j >= 0 && j < 15); i++, j--)//由当前点斜下左下
		{
			if (color[i][j] == 1)
			{
				num++;
			}
			else
				break;
		}
		if (num >= 5)
			return true;// '/'连珠,返回结果
		else
			return false;//黑棋不能连珠
	}
	else
		return false;
}
void qi::start()
{
	initgraph(998, 698);//画布大小
	loadimage(NULL, "1.jpg");//给画布插入背景图片
	settextcolor(RGB(254, 67, 101));//设计画笔颜色
	LOGFONT f;//字体类对象
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	f.lfHeight = 90;//字体高度
	strcpy_s(f.lfFaceName, "黑体");//字体类型
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);//设定字体风格
	getimage(&NowChessImage, 730, 40, 934, 80);//给 右边白色背景 复制一个图片
	RECT r2 = { 730, 40, 934, 100 };//截取 三个区域 就是下子 重开 还有结束 游戏
	RECT r3 = { 730, 120, 934, 180 };
	RECT r4 = { 730, 200, 934, 260 };
	RECT r5=  { 700, 1000, 630,695 };
	setlinestyle(PS_SOLID, 1);
	setlinecolor(BLACK);//字体黑色
	//给 重开还有结束游戏 画框
	rectangle(730, 120, 934, 180);//画重新开始的矩形边框
	rectangle(730, 200, 934, 260);
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	// 框里面的字
	f.lfHeight = 50;
	strcpy_s(f.lfFaceName, "微软雅黑");
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);
	settextcolor(RGB(77, 77, 77));
	drawtext("请黑方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	setlinestyle(PS_SOLID, 2);
	setlinecolor(BLACK);
	for (int x = 35; x <= 665; x += 45)//画线
	{
		line(35, x, 665, x);
	}
	for (int y = 35; y <= 665; y += 45)
	{
		line(y, 35, y, 665);
	}
	for(int i=700;i<1000;i++)//对话框的上线
		line(i,300,i-4,300);
	for(int i=700;i<1000;i++)//对话框的下线
		 line(i,630,i-4,630);
	for(int i=695;i<1000;i++)
		line(i,695,i+4,695); // 发送框的下线
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			map[i][j].x = 35 + 45 * j;//映射坐标
		}
	}
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			map[j][i].y = 35 + 45 * j;//映射坐标
		}
	}
	setlinecolor(BLACK);//黑点边框黑 
	setfillcolor(BLACK);//黑点填充黑
	fillrectangle(map[3][3].x - 3, map[3][3].y - 3, map[3][3].x + 3, map[3][3].y + 3);// 描画 棋盘上的黑点
	fillrectangle(map[3][11].x - 3, map[3][11].y - 3, map[3][11].x + 3, map[3][11].y + 3);
	fillrectangle(map[7][7].x - 3, map[7][7].y - 3, map[7][7].x + 3, map[7][7].y + 3);
	fillrectangle(map[11][3].x - 3, map[11][3].y - 3, map[11][3].x + 3, map[11][3].y + 3);
	fillrectangle(map[11][11].x - 3, map[11][11].y - 3, map[11][11].x + 3, map[11][11].y + 3);
	mem(vis, 0);
	mem(color, -1);
	bool flag = true;
	int opp = 0;
	MOUSEMSG m;
	while (flag)//运行过程
	{     
		/*int len=-5,lenn=-5;
			lenn=recv(s2,(char *)&len,sizeof(len),0);
		if(lenn!=-5)
		{
		        int xx=len/100, yy=len%100;
		      if(xx==-1&&yy==-1)
	     	  {
		                  	flag = false;
							MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(1);
		      }
			  if(xx==-2&&yy==-2)
			  {
			    flag = false;
				// int hh=-2*100-2;
				//send(s2,(const char *)&hh,sizeof(hh),0);
				start();//重新开始游戏
			  }
			  if(xx==-3&&yy==-3)
			  {
		    	  flag = false;
				  break;
			  
			  }
			         Pos tempp;
					tempp.x=xx,tempp.y=yy;
	                  	setfillcolor(BLACK);
						fillcircle(map[tempp.x][tempp.y].x, map[tempp.x][tempp.y].y, chess_r*2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请白方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[tempp.x][tempp.y] = 1;  
						vis[tempp.x][tempp.y] = 1;
     	BeginBatchDraw();//暂停绘画指令
		*/
		BeginBatchDraw();
		m = GetMouseMsg();//获取一个鼠标信息
		switch (m.uMsg)
		 {
		case WM_LBUTTONDOWN: 
			if (m.x >= 0 && m.x <= 698 && m.y >= 0 && m.y <= 698)//落入下子区域
			     {
				EndBatchDraw();//开始绘画
				Pos temp;
				temp.x = inf, temp.y = inf;
				double R = 10000000.0;
				for (int i = 0; i < 15; i++)
				{
					for (int j = 0; j < 15; j++)
					{
						if (dis(map[i][j].x, map[i][j].y, m.x, m.y) < R)
						{     
							R = dis(map[i][j].x, map[i][j].y, m.x, m.y);
							temp.x = i;
							temp.y = j;	
						}
					}
				}
				setlinecolor(BLACK);//(黑白棋边框都为黑)边框黑色
				if (!vis[temp.x][temp.y])//是否下子(去重)
				{   
					
					vis[temp.x][temp.y] = 1;
				//	if (opp & 1)// opp 为 判断该谁下棋
				//	{
						/*setfillcolor(WHITE);
						fillcircle(map[temp.x][temp.y].x, map[temp.x][temp.y].y, chess_r *2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请黑方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[temp.x][temp.y] = 0;
						if (JudgeChess(temp.x, temp.y))
						{  
							int gg=-1*100-1;
							send(s2,(const char *)&gg,sizeof(gg),0);
							flag = false;
							flag1 = false;
							MessageBox(NULL, TEXT("白方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(0);
						}
						else
						{
							int gg=temp.x*100+temp.y;
			            	send(s2,(const char *)&gg,sizeof(gg),0);
						}					
				//	}
					else
					{
					*/
						setfillcolor(BLACK);
						fillcircle(map[temp.x][temp.y].x, map[temp.x][temp.y].y, chess_r*2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请白方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[temp.x][temp.y] = 0;
						if (JudgeChess(temp.x, temp.y))
						{    
							flag = false;	
							int hh=-1*100-1;
							send(s2,(const char *)&hh,sizeof(hh),0);
							MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(1,1);
						}
					  int hh=temp.x*100+temp.y;
					  send(s2,(const char *)&hh,sizeof(hh),0); 
					      int len=-5,lenn=-5;
		       while(len==-5)
			     lenn=recv(s2,(char *)&len,sizeof(len),0);
		         int xx=len/100, yy=len%100;
		      if(xx==-1&&yy==-1)
	     	  {
		                  	flag = false;
							MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							int hh=-1*100-1;
						    send(s2,(const char *)&hh,sizeof(hh),0);
							Over(1,1);
		      }
			  if(xx==-2&&yy==-2)
			  {
			    flag = false;
				 int hh=-2*100-2;
				send(s2,(const char *)&hh,sizeof(hh),0);
				start();//重新开始游戏
			  }
			  if(xx==-3&&yy==-3)
			  {
		    	  flag = false;
				  break;
			  
			  }
			           Pos tempp;
					  tempp.x=xx,tempp.y=yy;
	                  	setfillcolor(WHITE);
						fillcircle(map[tempp.x][tempp.y].x, map[tempp.x][tempp.y].y, chess_r*2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请黑方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[tempp.x][tempp.y] = 1;  
						vis[tempp.x][tempp.y] = 1;
            	BeginBatchDraw();//暂停绘画指令
					}
				//	opp++;
			//	}
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断在开始游戏的矩形区域内 
			{
				flag = false;
				 int hh=-2*100-2;
				send(s2,(const char *)&hh,sizeof(hh),0);
				start();//重新开始游戏
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断结束游戏的矩形区域内
			{
				 int hh=-3*100-3;
				 send(s2,(const char *)&hh,sizeof(hh),0);
			  	flag = false;
			}
		case WM_MOUSEMOVE://监测鼠标移动
			EndBatchDraw();
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断鼠标在开始游戏的矩形区域内 然后变色
			{
				settextcolor(RGB(254, 67, 101));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断鼠标在结束游戏的矩形区域内 然后变色
			{
				settextcolor(RGB(254, 67, 101));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			//break;
	  }
	  }
}
void qi::start2()
{
	initgraph(998, 698);//画布大小
	loadimage(NULL, "1.jpg");//给画布插入背景图片
	settextcolor(RGB(254, 67, 101));//设计画笔颜色
	LOGFONT f;//字体类对象
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	f.lfHeight = 90;//字体高度
	strcpy_s(f.lfFaceName, "黑体");//字体类型
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);//设定字体风格
	getimage(&NowChessImage, 730, 40, 934, 80);//给 右边白色背景 复制一个图片
	RECT r2 = { 730, 40, 934, 100 };//截取 三个区域 就是下子 重开 还有结束 游戏
	RECT r3 = { 730, 120, 934, 180 };
	RECT r4 = { 730, 200, 934, 260 };
	RECT r5=  { 700, 1000, 630,695 };
	setlinestyle(PS_SOLID, 1);
	setlinecolor(BLACK);//字体黑色
	//给 重开还有结束游戏 画框
	rectangle(730, 120, 934, 180);//画重新开始的矩形边框
	rectangle(730, 200, 934, 260);
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	// 框里面的字
	f.lfHeight = 50;
	strcpy_s(f.lfFaceName, "微软雅黑");
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);
	settextcolor(RGB(77, 77, 77));
	drawtext("请黑方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	setlinestyle(PS_SOLID, 2);
	setlinecolor(BLACK);
	for (int x = 35; x <= 665; x += 45)//画线
	{
		line(35, x, 665, x);
	}
	for (int y = 35; y <= 665; y += 45)
	{
		line(y, 35, y, 665);
	}
	for(int i=700;i<1000;i++)//对话框的上线
		line(i,300,i-4,300);
	for(int i=700;i<1000;i++)//对话框的下线
		 line(i,630,i-4,630);
	for(int i=695;i<1000;i++)
		line(i,695,i+4,695); // 发送框的下线
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			map[i][j].x = 35 + 45 * j;//映射坐标
		}
	}
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			map[j][i].y = 35 + 45 * j;//映射坐标
		}
	}
	setlinecolor(BLACK);//黑点边框黑 
	setfillcolor(BLACK);//黑点填充黑
	fillrectangle(map[3][3].x - 3, map[3][3].y - 3, map[3][3].x + 3, map[3][3].y + 3);// 描画 棋盘上的黑点
	fillrectangle(map[3][11].x - 3, map[3][11].y - 3, map[3][11].x + 3, map[3][11].y + 3);
	fillrectangle(map[7][7].x - 3, map[7][7].y - 3, map[7][7].x + 3, map[7][7].y + 3);
	fillrectangle(map[11][3].x - 3, map[11][3].y - 3, map[11][3].x + 3, map[11][3].y + 3);
	fillrectangle(map[11][11].x - 3, map[11][11].y - 3, map[11][11].x + 3, map[11][11].y + 3);
	mem(vis, 0);
	mem(color, -1);
	bool flag = true;
	int opp = 0;
	MOUSEMSG m;
	while (flag)//运行过程
	{     
		int len=-5,lenn=-5;
			lenn=recv(s2,(char *)&len,sizeof(len),0);
		if(len!=-5)
		{   
			//  MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
		        int xx=len/100, yy=len%100;
		      if(xx==-1&&yy==-1)
	     	  {
		                  	flag = false;
							MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(2,1);
							break;
		      }
			  if(xx==-2&&yy==-2)
			  {
			    flag = false;
				int hh=-2*100-2;
			    send(s2,(const char *)&hh,sizeof(hh),0);
				MessageBox(NULL, TEXT("黑方要求重开游戏"), TEXT("提醒"), MB_ICONEXCLAMATION);
				start2();//重新开始游戏
			  }
			  if(xx==-3&&yy==-3)
			  {
		    	  flag = false;
				  MessageBox(NULL, TEXT("黑方要求结束游戏"), TEXT("提醒"), MB_ICONEXCLAMATION);
				  break;
			  
			  }
			            Pos tempp;
				    	tempp.x=xx,tempp.y=yy;
	                  	setfillcolor(BLACK);
						fillcircle(map[tempp.x][tempp.y].x, map[tempp.x][tempp.y].y, chess_r*2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请白方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[tempp.x][tempp.y] = 1;  
						vis[tempp.x][tempp.y] = 1;
     	           ;//暂停绘画指令
		             //获取一个鼠标信息
	 while(1)
	 {    
		 BeginBatchDraw(); 
	    m = GetMouseMsg();
		 bool kk=0;
	    switch (m.uMsg)
		{  		
		case WM_LBUTTONDOWN: 
			if (m.x >= 0 && m.x <= 698 && m.y >= 0 && m.y <= 698)//落入下子区域
			{   
				EndBatchDraw();//开始绘画
				Pos temp;
				temp.x = inf, temp.y = inf;
				double R = 10000000.0;
				for (int i = 0; i < 15; i++)
				{
					for (int j = 0; j < 15; j++)
					{
						if (dis(map[i][j].x, map[i][j].y, m.x, m.y) < R)
						{     
							R = dis(map[i][j].x, map[i][j].y, m.x, m.y);
							temp.x = i;
							temp.y = j;
							
						}
					}
				}
				setlinecolor(BLACK);//(黑白棋边框都为黑)边框黑色
				if (!vis[temp.x][temp.y])//是否下子(去重)
				{   
					kk=1;
					vis[temp.x][temp.y] = 1;
				//	if (opp & 1)// opp 为 判断该谁下棋
				//	{
						setfillcolor(WHITE);
						fillcircle(map[temp.x][temp.y].x, map[temp.x][temp.y].y, chess_r *2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请黑方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[temp.x][temp.y] = 0;
						if (JudgeChess(temp.x, temp.y))
						{  
							int gg=-1*100-1;
							send(s2,(const char *)&gg,sizeof(gg),0);
							flag = false;
							MessageBox(NULL, TEXT("白方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(2,0);
						}
						else
						{
							 int gg=temp.x*100+temp.y;
			            	 send(s2,(const char *)&gg,sizeof(gg),0);
						}					
				//	} 
				/*	else
					{

						setfillcolor(BLACK);
						fillcircle(map[temp.x][temp.y].x, map[temp.x][temp.y].y, chess_r*2/5);
						PlaySound(TEXT("chessmusic.wav"), 0, SND_FILENAME);
						putimage(730, 40, &NowChessImage);
						drawtext("请白方落子", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
						color[temp.x][temp.y] = 1;
						if (JudgeChess(temp.x, temp.y))
						{    
							flag = false;
							MessageBox(NULL, TEXT("黑方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
							Over(1);
						}
					}
					opp++;
				}*/
			}
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断在开始游戏的矩形区域内 
			{  

				 kk=1;
				flag = false;
				 int hh=-2*100-2;
				send(s2,(const char *)&hh,sizeof(hh),0);
                MessageBox(NULL, TEXT("白方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
				start2();//重新开始游戏
				break;
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断结束游戏的矩形区域内
			{  
     //     MessageBox(NULL, TEXT("白方胜"), TEXT("恭喜"), MB_ICONEXCLAMATION);
			 
				  kk=1;
				 int hh=-3*100-3;
				 send(s2,(const char *)&hh,sizeof(hh),0);
			   	flag = false;
				 break;
			}
		case WM_MOUSEMOVE://监测鼠标移动
			EndBatchDraw();
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断鼠标在开始游戏的矩形区域内 然后变色
			{    
				settextcolor(RGB(254, 67, 101));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断鼠标在结束游戏的矩形区域内 然后变色
			{
				settextcolor(RGB(254, 67, 101));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			//break;
		}
	   if(kk)
		   break;
	   
	 }
		
	}
	
		}
	
}
void qi::Over(int bb,int bob)
{
	settextcolor(RGB(254, 67, 101));
	LOGFONT f;//字体类对象
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	f.lfHeight = 90;
	strcpy_s(f.lfFaceName, "黑体");
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);
	//设置结束的字体范围
	RECT r1 = { 0, 0, 698, 698 }; 
	RECT r2 = { 730, 40, 934, 100 };
	RECT r3 = { 730, 120, 934, 180 };
	RECT r4 = { 730 ,200, 934, 260 };
	setlinecolor(BLACK);
	if (bob == 0)
	{
		drawtext("白 棋 获 胜", &r1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//文字居中,文字垂直居中,使文字显示在一行
	}
	else
	{
		drawtext("黑 棋 获 胜", &r1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//文字居中,文字垂直居中,使文字显示在一行
	}
	gettextstyle(&f);//获取当前字体设置
	f.lfHeight = 50;
	strcpy_s(f.lfFaceName, "微软雅黑");
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);
	putimage(730, 40, &NowChessImage);
	drawtext("游戏结束", &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	//设置矩形
	setlinestyle(PS_SOLID, 1);
	setlinecolor(BLACK);
	rectangle(730, 120, 934, 180);//画重新开始的矩形边框
	rectangle(730, 200, 934, 260);
	setbkmode(TRANSPARENT);//透明字体
	gettextstyle(&f);//获取当前字体设置
	f.lfHeight = 50;
	strcpy_s(f.lfFaceName, "微软雅黑");
	f.lfQuality = ANTIALIASED_QUALITY;//字体抗锯齿
	settextstyle(&f);
	settextcolor(RGB(77, 77, 77));
	drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	bool flag = true;
	MOUSEMSG m;//定义一个鼠标对象
	while (flag)
	{
		BeginBatchDraw();
		m = GetMouseMsg();//获取鼠标消息
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN://鼠标左键按下
			EndBatchDraw();
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断在开始游戏的矩形区域内
			{
				flag = false;
				if(bb==1)
				start();//重新开始游戏
				else
					start2();
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断在开始游戏的矩形区域内
			{
				flag = false;
			}
			//break;
		case WM_MOUSEMOVE://监测鼠标移动
			EndBatchDraw();
			if (m.x >= 730 && m.x <= 934 && m.y >= 120 && m.y <= 180)//判断鼠标在开始游戏的矩形区域内
			{
				settextcolor(RGB(254, 67, 101));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("重新开始", &r3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			if (m.x >= 730 && m.x <= 934 && m.y >= 200 && m.y <= 260)//判断鼠标在开始游戏的矩形区域内
			{
				settextcolor(RGB(254, 67, 101));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			else
			{
				settextcolor(RGB(77, 77, 77));
				drawtext("结束游戏", &r4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
			}
			//break;
		}
	}
}
int main()
{   
	 int xuanze=0;
	 printf("选择您要黑棋还是白棋,白棋是1,黑棋是2\n");
	 scanf("%d",&xuanze);
	 while(1)
	 {
	      if(xuanze==1||xuanze==2)
			    break;
		   printf("请重新输入!\n");
		    scanf("%d",&xuanze);
	 }
	 if(xuanze==2)
	 {
	 	tcp();
	  mciSendString("open beijing.mp3", NULL, 0, 0); //打开音乐
	  mciSendString("play beijing.mp3 repeat", NULL, 0, 0);//放音乐
 	  qi one;
	 one.start();
	 closegraph();
	 
	 }
	 else 
	 {
	     tcp2();
        mciSendString("open beijing.mp3", NULL, 0, 0); //打开音乐
	    mciSendString("play beijing.mp3 repeat", NULL, 0, 0);//放音乐
 	     qi one;
	     	 one.start2();
	 closegraph();
	 
	 }

	return 0;
}
#pragma once
class Pos
{
public:
	Pos();
	~Pos();
	int x;
	int y;
};

 

Python课程设计

先说一下这个 参考链接

https://www.cnblogs.com/qiu2013/p/6087627.html

最近太忙了 而且心情不是很好  我就直接根据别人的代码改了  以前C和C++ JAVA的代码我也想上传 但是 好像出了bug 代码放着放着也能出bug  也是醉了 然后我也懒上传了 然后   我这个增加了一个 排行榜 添加到数据库里面了

然后背景加了一个图片  然后 就这样

 

 

连接数据库成功后 会有一个 排行榜 这个排行榜就是 我们数据库里面的值

我是取出来在 python里面进行排行的

直接看代码把 感觉写的注释还挺清楚的

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import win32api,win32con
import pygame,sys,time,random
from pygame.locals import *
from tkinter import *
import pymysql
# 定义颜色变量
Color=[]
redColour = pygame.Color(255,0,0)
blackColour = pygame.Color(0,0,0)
whiteColour = pygame.Color(0,255,0)
greyColour = pygame.Color(150,150,150)
play_name=""#游戏名
fraction=0#积分
def takeSecond(elem):
	return elem[1]
#定义连接数据库的名单
def connectsql():
    db = pymysql.connect("localhost","root","","snake" )
    cursor = db.cursor()
    sql="select * from snake_play where name=\"{}\"".format(play_name)
    try:
        print(sql)
        cursor.execute(sql)
        results = cursor.fetchall()
        print(results)
        l=list(results)
        print(l)
        if(len(l)==0):
            sql="INSERT INTO  snake_play(name,fraction) VALUES(\"%s\",%d)"%(play_name,fraction)
            try:
                print(sql)
                cursor.execute(sql)
                db.commit()
            except:
                db.rollback()

        else:
            if(l[0][1]<fraction):
                sql="UPDATE snake_play set fraction=%d where name =\"%s\""%(fraction,play_name)
                try:
                    print(sql)
                    cursor.execute(sql)
                    db.commit()
                except:
                    db.rollback()

    except:
        db.rollback()
	#print(1)
    sql="""SELECT * FROM snake_play """
    print(sql)
    try:
        cursor.execute(sql)
        results = cursor.fetchall()
        print(results)
        sortsql(results)
    except:
        print(db.rollback())

#对数据库查询到的内容排序	
def sortsql(results):
	master=Tk()
	master.title("贪吃蛇排行榜")
	sb=Scrollbar(master)
	sb.pack(side=RIGHT,fill=Y)
	thelB=Listbox(master,yscrollcommand=sb.set,selectmode=EXTENDED,height=30,width=50)#2 设置可以多选 3 设置高度
	thelB.pack()
	l=list(results)
	print(l)
	l.sort(key=takeSecond)
	l=l[::-1]
	print(l,len(l))
	sum=1
	strs="名字"+" "*10+"分数"+" "*10+"排行"
	thelB.insert(END,strs)
	print(strs)
	for i in l:
		strs=str(i[0]).ljust(12," ")+str(i[1]).ljust(12," ")+str(sum).ljust(12," ")
		print(strs)
		sum+=1
		thelB.insert(END,strs)
	thelB.pack(side=LEFT,fill=BOTH)#控件向什么地方 向什么地方填充

	sb.config(command=thelB.yview)


	mainloop()


# 定义gameOver函数
def gameOver(playSurface):
	win32api.MessageBox(0, "游戏结束", "警告",win32con.MB_OK)
	gameOverFont = pygame.font.Font(None,72)
	gameOverSurf = gameOverFont.render('Game Over', True, greyColour)
	gameOverRect = gameOverSurf.get_rect()
	gameOverRect.midtop = (320, 100)
	playSurface.blit(gameOverSurf, gameOverRect)
	pygame.display.flip()
	connectsql()
	time.sleep(0.5)
	pygame.quit()
	sys.exit()

#定义判断游戏是否结束函数
def ordie(snakePosition,snakeSegments,playSurface):
	if snakePosition[0] > 620 or snakePosition[0] < 0:
		#print(snakePosition[0])
		gameOver(playSurface)
	if snakePosition[1] > 620 or snakePosition[1] < 0:
		#print(snakePosition[1])
		gameOver(playSurface)
	for snakeBody in snakeSegments[1:]:
		if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
			#print(snakePosition[0],snakePosition[1])
			gameOver(playSurface)
#判断是否吃掉了食物
def oreatfood(snakePosition,raspberryPosition,snakeSegments):
	raspberrySpawned=1	
	if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
	    raspberrySpawned = 0
	else:
	    snakeSegments.pop()
	# 如果吃掉食物,则重新生成食物
	if raspberrySpawned == 0:
	    x = random.randrange(1,32)
	    y = random.randrange(1,32)
	    raspberryPosition = [int(x*20),int(y*20)]
	    raspberrySpawned = 1
	return raspberryPosition

# 检测例如按键等pygame事件
def keydown(pygame,changeDirection,snakePosition,direction):
	for event in pygame.event.get():
		if event.type == QUIT:
		    pygame.quit()
		    sys.exit()
		elif event.type == KEYDOWN:
		    # 判断键盘事件
		    if event.key == K_RIGHT or event.key == ord('d'):
		        changeDirection = 'right'
		    if event.key == K_LEFT or event.key == ord('a'):
		        changeDirection = 'left'
		    if event.key == K_UP or event.key == ord('w'):
		        changeDirection = 'up'
		    if event.key == K_DOWN or event.key == ord('s'):
		        changeDirection = 'down'
		    if event.key == K_ESCAPE:
		        pygame.event.post(pygame.event.Event(QUIT))
        # 判断是否输入了反方向
		if changeDirection == 'right' and not direction == 'left':
		    direction = changeDirection
		if changeDirection == 'left' and not direction == 'right':
		    direction = changeDirection
		if changeDirection == 'up' and not direction == 'down':
		    direction = changeDirection
		if changeDirection == 'down' and not direction == 'up':
		    direction = changeDirection
		# 根据方向移动蛇头的坐标
	if direction == 'right':
	    snakePosition[0] += 20
	if direction == 'left':
	    snakePosition[0] -= 20
	if direction == 'up':
	    snakePosition[1] -= 20
	if direction == 'down':
	    snakePosition[1] += 20
	#print(snakePosition)
	return direction,snakePosition,changeDirection

# 定义main函数
def main():
    # 初始化pygame
    global play_name
    global fraction
    play_name=input("请输入你的名字:")
    pygame.init()
    fpsClock = pygame.time.Clock()
    # 创建pygame显示层
    screen=playSurface = pygame.display.set_mode((640,640))
    pygame.display.set_caption('pipixia Snake')
    # 初始化变量
    snakePosition = [100,100]
    snakeSegments = [[100,100],[80,100],[60,100]]
    raspberryPosition = [300,300]
    raspberrySpawned = 1
    direction = 'right'
    changeDirection = direction
    time_game=len(snakeSegments)
    background = pygame.image.load('background.jpg').convert()
    while True:
        screen.blit(background,(0,0))
        # 检测例如按键等pygame事件
        direction,snakePosition,changeDirection=keydown(pygame,changeDirection,snakePosition,direction)
        # 增加蛇的长度
        #print(direction,snakePosition)
        snakeSegments.insert(0,list(snakePosition))
        time_game=(len(snakeSegments)-4)/2+4
        fraction=(len(snakeSegments)-4)*100
        # 判断是否吃掉了食物
        raspberryPosition=oreatfood(snakePosition,raspberryPosition,snakeSegments)
        # 绘制pygame显示层
        #playSurface.fill(blackColour)
        for position in snakeSegments:
            pygame.draw.circle(playSurface,(random.randint(0,255),random.randint(0,255),random.randint(0,255)),position,10,0)
            pygame.draw.circle(playSurface,redColour,raspberryPosition,10,0)
        gameOverFont=pygame.font.Font(None,50)
        gameOverSurf = gameOverFont.render('fraction:'+str(fraction), True, greyColour)
       	gameOverRect = gameOverSurf.get_rect()
        gameOverRect.midtop =(320, 10)
        playSurface.blit(gameOverSurf, gameOverRect)
        # 刷新pygame显示层
        #screen.fill()
        # 判断是否死亡
        pygame.display.update()
        ordie(snakePosition,snakeSegments,playSurface)
        # 控制游戏速度
        fpsClock.tick(time_game)

if __name__ == "__main__":
    main()

 

 

软件工程 课程设计   :

这次本来想写一个 杀毒软件的,,,但是小组同学还是想让写一个图书管理系统  需求什么的 分析的应该还是可以的

然后小组成员建议用java ,,, 我java 一般    我java课设写了一个很简单的 安卓 计算器  。。。 代码还没了。。。。 

 

也有心锻炼一下java。。。。 然后我感觉我写了最垃圾课程设计 UI真的难看死

系统 需求分组  是小组内同学是根据我校的图书馆 调研出来的,,

这里没有实现的模块 就是借书 还书  还有学生的借书权限,,,

比较可惜,, 由于这段时间要打红帽和湖湘杯  写的都很粗糙 就用了三天 怎么简单怎么来的。。。

代码以后可能会添加未实现的功能==

这里我用到的 mysql  版本是   mysql 5.7.0.26

然后mysql 的建表是

mysql> show tables;
+-----------------------+
| Tables_in_bookmanager |
+-----------------------+
| admin                 |
| book                  |
| student               |
+-----------------------+
3 rows in set (0.00 sec)

mysql> desc  admin
    -> ;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ma_id     | varchar(100) | NO   | PRI | NULL    |       |
| ma_name   | varchar(20)  | NO   |     | NULL    |       |
| ma_pwd    | varchar(20)  | NO   |     | NULL    |       |
| telnmuber | varchar(40)  | NO   |     | NULL    |       |
| sex       | varchar(2)   | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
5 rows in set (0.13 sec)

mysql> desc  book;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| ISBN       | varchar(100) | NO   |     | NULL    |       |
| book_id    | varchar(20)  | NO   | PRI | NULL    |       |
| title      | varchar(20)  | NO   |     | NULL    |       |
| type       | varchar(100) | NO   |     | NULL    |       |
| author     | varchar(100) | NO   |     | NULL    |       |
| press      | varchar(100) | NO   |     | NULL    |       |
| press_time | varchar(100) | NO   |     | NULL    |       |
| price      | varchar(100) | NO   |     | NULL    |       |
| count      | varchar(100) | NO   |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
9 rows in set (0.14 sec)

mysql> desc  student;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| stu_id     | varchar(100) | NO   | PRI | NULL    |       |
| stu_pwd    | varchar(20)  | NO   |     | NULL    |       |
| stu_name   | varchar(20)  | NO   |     | NULL    |       |
| stu_sex    | varchar(20)  | NO   |     | NULL    |       |
| faculites  | varchar(40)  | NO   |     | NULL    |       |
| limit      | varchar(10)  | NO   |     | NULL    |       |
| stu_number | varchar(40)  | NO   |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
7 rows in set (0.15 sec)

这里表简单的很粗糙  都是 string。。

其实功能就是那么多

 

 然后

登录页面,输入账号密码后,后台数据库会判断是管理员还是学生(管理员限定5个,学生的信息属于后台直接导入),跳转到相应的页面,管理员有四大模块,图书信息的管理,学生信息的管理,管理员信息的修改,图书借还的管理。

图书信息管理:管理员可以方便快速的对图书进行的增删改查操作

学生信息管理:管理员对学生基本信息的增删改查操作,可以设置学生是否可以借书的权限

借还图书管理:设置图书借阅,图书续借,图书归还的确认的操作

管理员的信息的修改:只可以修改自己管理账号的信息,比如 姓名,密码,联系方式,账号不可以更改。

学生用户页面:

图书查询:学生对书目的组合信息查询,书名,ISBN,作者,出版社等采用模糊匹配的方式,只要给出条件的关键字,系统就会匹配找出所需要的书籍目录。

得到书籍的详细信息,以及储存量来判断是否可以借书

学生信息管理:学生只可以修改自己的登录密码,其他信息无法自己修改,可以查询自己的详细信息,例如借书权限,所有的借阅目录,未还图书目录

图书借还问题:学生在系统中只可以实现借阅和续借功能,无法实现还书功能,还书应当得到管理员的审核

安全问题:

学生密码,管理员账号,管理员密码,在数据库中使用md5加密保存,用户在输入时,自动转换为md5值 去与数据库进行比较

逾期还书:

逾期未还的如果是忘记归还的话不允许再借书,若是丢失书本则须自己购买相同的书本归还或者自费按原价购买本书,否则将影响学生毕业

程序部分页面

 

 

 

 

 

 

 

 代码 和具体分析 可以看github。。

https://github.com/9540611855/SoftwareEngineeringCourseDesign-

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值