zoukankan      html  css  js  c++  java
  • 数独+GUI界面

    1.基于第一次的数独作业添加额外的GUI界面

      a.生成任意数量的数独并能将数独在界面内依次显示,棋盘上总空格数大于30,小于60,每3*3小棋盘中挖空不少于2个。

      b.数独题目只有唯一一解

      c.用户可以在界面上通过编辑输入完成数独题目。

      d.用户完成数独题目后可以得到正确性反馈

      e.友好的使用说明。

    2.其他要求与第一次作业相同

    作业:应为自己对C++掌握不足,所以在此次作业中使用了其他的编程语言来实现。实验环境tomcat服务器、C++、html

    应为在这次的作业中无法将所有的功能全部用C++语言来实现,所以界面使用Html来编写、用Ajax来读取txt文件里面的数据(因为存在跨域的问题就使用tomcat作为服务器)

    C++的输出数组的txt文档命名方式也是用(0~n).txt来命名,方便ajax来取文档数据。

    C++代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include<windows.h>
    int main()
    {
        int a[9][9] = {
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0
        };
        int i,j,l;
        int n;
        int sudu(int i,int j,int a[9][9]);
        int find_next_empty(int a[9][9],int num, int *i, int *j);
        srand(time(0));
    
        printf("输入数独个数 
    ");
        //生成不重复的函数
        scanf("%d",&n);
        
        for(l=0;l<n;l++)
        {
            int a[9][9] = {
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0
            };
            int time1=rand()%10;
            printf("请等待.... 
    ");
            Sleep(time1*100);
            for(j=0;j<9;j++)
            {
                int flag=1;
                int random=time1+rand()%10;
                for(i=0;i<9;i++)
                {
                    if(random == a[0][i])
                    {
                        flag=0;
                    }
                }
                if(flag==1)
                {
                    a[0][j]=random;
                }
            }
    
            for(i=0;i<9;i++)
            {
                for(j=0;j<9;j++)
                {
                    //printf("%d ",a[i][j]);
                }
                //printf("
    ");
            }
    
            for(i=0;i<9;i++)
            {
                for(j=0;j<9;j++)
                {
                    sudu(i,j,a);
                    find_next_empty(a, 0, &i, &j);
                }
            }
    
            FILE *fpt;
            char s[100];
            sprintf(s,"%d",l);
            sprintf(s,"%s%s",s,".txt"); 
            fpt = fopen(s,"a+");//打开文档,写入
    
            for(i=0;i<9;i++)
            {
                for(j=0;j<9;j++)
                {
                    fprintf(fpt,"%d|",a[i][j]);
                    printf("%d ",a[i][j]);
                }
                //fprintf(fpt,"
    ");
                printf("
    ");
            }
    
            //fprintf(fpt,"--------
    ");
            printf("--------
    ");
    
            fclose(fpt);
        }
        
    
        return 0;
    }
    int sudu(int row,int col,int arr[9][9])
    {
        int count=0;
        int flag=1;
        int i,j;
        int next_row,next_col;
        int find_next_empty(int a[9][9], int num, int *i, int *j);
    
        //获取下一个元素的行和列
        /*for(i=row;i<9;i++)
        {
            for(j=col;j<9;j++)
            {
                if(arr[i][j]==0)
                {
                    nextRow=i;
                    nextCol=j;
                    break;
                }
            }    
        }*/
        tag:
        while(count<9)
        {
            count++;
            int i,j;
            //判断行重复
            for (j = 0; j < 9; j++) {
                if (arr[row][j] == count) {
                    goto tag;
                }
            }        
            // 判断列重复
            for (i = 0; i < 9; i++) {
                if (arr[i][col] == count) {
                    goto tag;
                }
            }        
            /* 判断3x3宫格重复*/
            int x = (row / 3) * 3;
            int y = (col / 3) * 3;
            for (i = x; i < x + 3; i++) {
                for (j = y; j < y + 3; j++)    {
                    if (arr[i][j] == count) {
                        goto tag;
                    }
                }
            }
            arr[row][col]=count;
    
            if (!find_next_empty(arr, row, &next_row, &next_col)) {
                return 1;
            }
            //否则继续填下一个未填充的格子
            if (!sudu(next_row, next_col,arr)) {
                arr[row][col] = 0;
                continue;
            } else {
                return 1;
            }
            return 0;
        }
        return 0;
    }
    // 寻找下一个未填充的单元
    int find_next_empty(int arr[9][9], int startrow, int *row, int *col)
    {
        int i, j;
        for (i = startrow; i < 9; i++) 
            for (j = 0; j < 9; j++) 
                if (arr[i][j] == 0) {
                    *row = i;
                    *col = j;
                    return 1;
                }
        return 0;
    }

    Html代码

    <!DOCTYPE html>
    <!--
        30<棋盘总空格数<60,3x3棋盘中最少挖空数>=3  ==>每个3X3棋盘都挖空4个  30<4*9<60
    -->
    <html>
    <head>
    <meta charset="UTF-8" />
    <link href="styles/style.css" type="text/css" rel="stylesheet">
    <script type="text/javascript" src="script/jquery.min.js"></script> 
    <script type="text/javascript" src="script/EdTable.js"></script> 
    <script>
        $(document).ready(function(){
            EdTable.initBindGridEvent();
        });
        var num=0;
        window.onload=function()
        {
            var xhr =new XMLHttpRequest()
            xhr.open("GET", num+".txt", true);//注意路径问题读取data.txt文件的内容。
            xhr.send(null);
            xhr.onreadystatechange = function() {
              if (xhr.readyState == 4) {
                if (xhr.status == 200||xhr.status==0) {//请求本地txt文件时状态码是0。
                    //alert(xhr.responseText);
                    for(var i=0;i<81;i++)
                    {
                        var result = xhr.responseText.split("|"); 
                    }
                    for(var j=0;j<81;j++)
                    {
                        //console.log(result[j]);
                    }
                    
                    //创建完整表格
                    var row1=9;//获取属性值
                    var col1=9;//获取属性值
                    var div1=document.getElementById("div1");
                    var tab="<table border='1' bordercolor='blue' width='400' height='100' class='editableTable' id='wanzheng' style='float:right;display:none'>";
                    //循环行
                    var flag=0;
                    for(var i=0;i<row1;i++)
                    {
                        tab+="<tr>";
                        //循环列
                        for(var j=0;j<col1;j++)
                        {
                            tab+="<td><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            flag=flag+1;
                        }
                        tab+="</tr>";
                    }
                    tab+="</table>";
                    
                    //缺失数组
                    tab+="<table border='1' bordercolor='blue' width='400' height='100' class='editableTable' id='queshi' style='float:left'>";
                    //循环行
                    var flag=0;
                    for(var i=0;i<row1;i++)
                    {
                        tab+="<tr>";
                        //循环列
                        for(var j=0;j<col1;j++)
                        {
                            //写死 每个3X3棋盘都挖空4个
                            if(flag =='0' || flag == '1' || flag == '10' || flag == '19')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='21' || flag == '13' || flag == '4' || flag == '5')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='7' || flag == '8' || flag == '15' || flag == '25')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='27' || flag == '37' || flag == '29' || flag == '38')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='39' || flag == '40' || flag == '41' || flag == '48')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='33' || flag == '42' || flag == '51' || flag == '43')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='54' || flag == '64' || flag == '74' || flag == '72')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='66' || flag == '67' || flag == '68' || flag == '75')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='60' || flag == '61' || flag == '62' || flag == '69')
                            {
                                result[flag]=" ";
                            }
                            if(result[flag]==" ")
                            {
                                tab+="<td style='background-color:yellow'><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            }
                            else
                            {
                                tab+="<td><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            }
                            flag=flag+1;
                        }
                        tab+="</tr>";
                    }
                    tab+="</table>";
                    div1.innerHTML=tab;                                                                        
                } else {
                  alert(xhr.status);
                }
              }
            }
        }
        function getTdValue()
        {
            var table = document.getElementById("queshi"); //获得整个表格对象
            var table1=document.getElementById("wanzheng");
            for (var i = 0; i < 9; i++) {
                //表格的第i行,第2列
                for (var j = 0; j < 9; j++) {
                    var value1=table.rows[i].cells[j].innerText;
                    var value2=table1.rows[i].cells[j].innerText;
                    if(value1 != value2)
                    {
                        table.rows[i].cells[j].style.backgroundColor="red";
                    }
                }
            }
        }
        function show()
        {
            document.getElementById("wanzheng").style.display="";
        }
        function creatshudu()
        {
            num=num+1;
            var xhr =new XMLHttpRequest()
            xhr.open("GET", num+".txt", true);//注意路径问题读取data.txt文件的内容。
            xhr.send(null);
            xhr.onreadystatechange = function() {
              if (xhr.readyState == 4) {
                if (xhr.status == 200||xhr.status==0) {//请求本地txt文件时状态码是0。
                    //alert(xhr.responseText);
                    for(var i=0;i<81;i++)
                    {
                        var result = xhr.responseText.split("|"); 
                    }
                    for(var j=0;j<81;j++)
                    {
                        //console.log(result[j]);
                    }
                    
                    //创建完整表格
                    var row1=9;//获取属性值
                    var col1=9;//获取属性值
                    var div1=document.getElementById("div1");
                    var tab="<table border='1' bordercolor='blue' width='400' height='100' class='editableTable' id='wanzheng' style='float:right;display:none'>";
                    //循环行
                    var flag=0;
                    for(var i=0;i<row1;i++)
                    {
                        tab+="<tr>";
                        //循环列
                        for(var j=0;j<col1;j++)
                        {
                            tab+="<td><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            flag=flag+1;
                        }
                        tab+="</tr>";
                    }
                    tab+="</table>";
                    
                    //缺失数组
                    tab+="<table border='1' bordercolor='blue' width='400' height='100' class='editableTable' id='queshi' style='float:left'>";
                    //循环行
                    var flag=0;
                    for(var i=0;i<row1;i++)
                    {
                        tab+="<tr>";
                        //循环列
                        for(var j=0;j<col1;j++)
                        {
                            //写死 每个3X3棋盘都挖空4个
                            if(flag =='0' || flag == '1' || flag == '10' || flag == '19')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='21' || flag == '13' || flag == '4' || flag == '5')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='7' || flag == '8' || flag == '15' || flag == '25')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='27' || flag == '37' || flag == '29' || flag == '38')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='39' || flag == '40' || flag == '41' || flag == '48')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='33' || flag == '42' || flag == '51' || flag == '43')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='54' || flag == '64' || flag == '74' || flag == '72')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='66' || flag == '67' || flag == '68' || flag == '75')
                            {
                                result[flag]=" ";
                            }
                            if(flag =='60' || flag == '61' || flag == '62' || flag == '69')
                            {
                                result[flag]=" ";
                            }
                            if(result[flag]==" ")
                            {
                                tab+="<td style='background-color:yellow'><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            }
                            else
                            {
                                tab+="<td><span contenteditable='true' class='studentname' id="+flag+">"+result[flag]+"</span></td>";
                            }
                            flag=flag+1;
                        }
                        tab+="</tr>";
                    }
                    tab+="</table>";
                    div1.innerHTML=tab;                                                                        
                } else {
                  alert(xhr.status);
                }
              }
            }
        }
    </script>
    <title>file upload</title>
    <style>
        .editableTable {
            width: 546px;
            height: 500px;
            22: ;
            padding: 10px;
            background-color: #DDEEF6;
            border: 1px solid #DDEEF6;
            -webkit-border-radius: 6px;
            -moz-border-radius: 6px;
        }
    </style>
    </head>
    <body>
        <input type="button" id="table" value="结果分析" onclick="getTdValue()">
        <input type="button" id="table" value="查看正确答案" onclick="show()">
        <input type="button" id="table" value="下一个数独" onclick="creatshudu()">
        <div id="div1">
        <div id="div2">
        </div>
    </body>
    </html>

    GUI界面

    心得:在本次作业中主要面对的有C++随机数,因为数组的产生需要随机两次,因为很难实现所以还是依旧随机一次。ajax读取txt文档时的数独数组之间的分离,第一次尝试将所有的数组都输出到一个文件里面,但是在ajax取得数据是发现很难拆分,因为当取得所有数据是需要切两下(1、多个数独数组分成单个的数独数组保存,之后单个的数独数组拆分,所以后面弄得有点混乱,代码量有点大,就干脆将C++输出的数独数组单个放在不同的txt文件中)

  • 相关阅读:
    【Java学习笔记】<集合框架>Iterator的子接口ListIterator
    【Java学习笔记】<集合框架>List特有的取出方式之一
    【Java学习笔记】集合框架Ⅱ
    【Java学习笔记】集合框架Ⅰ
    【PS】Ⅱ图像合成与渐变工具笔记
    【PS】Ⅰ基础及选框工具笔记
    [PS]简单的智能电视制作案例
    Spring中线程池的使用
    SpringBoot 多线程
    solr DIH 设置定时索引
  • 原文地址:https://www.cnblogs.com/godbee/p/9795856.html
Copyright © 2011-2022 走看看