面向对象化程序
要做的工作
1.参数判别
2.生成并输出数独终局
(1)参数n;
(2)模板数独;
(3)衍生数独;
(4)创建衍生数独
(5)输出数独终局
考虑设计那些对象呢?
1.参数识别对象:ArgCheck
变量
(1)参数判别变量checkResualt
-----表明用户参数的合法与否,辨别用户想要做那种操作。
方法
(1)构造函数ArgCheck(int arc = 0, char** argv = NULL)构建对象
(2) check()函数;对参数的合法性以及参数进行判断,结果存入变量checkResualt
(3)getResualt();提供checkResualt
代码如下:
class ArgCheck{
int argc;
char** argv;
int checkResult;//表明用户参数的合法与否,辨别用户想要做那种操作
public:
//一些标志变量
static const int INVALID = 0;//参数不合法
static const int FORC = 1;//生成数独终局
static const int FORS = 2;//求解数独
public:
ArgCheck(int m_argc = 0, char** m_argv = NULL):checkResult(INVALID){
argc = m_argc;
argv = m_argv;
}
//提供checkResualt
int getResult() {
return checkResult;
}
//对参数的合法性以及参数进行判断,结果存入变量checkResualt并返回
int check();
};
int check()实现如下:
//对参数的合法性以及参数进行判断,结果存入变量checkResualt并返回
int ArgCheck::check() {
//申明
bool isPurenumber(char* s);
//验证传入参数的合法性
if (argc != 3) {//数量
cout << "参数数量过少或过多" << endl;
return checkResult = INVALID;
}
if (strcmp("-c", argv[1]) != 0 && strcmp("-s", argv[1]) != 0)//-s和-c检查
{
cout << "请输入-c或-s" << endl;
return checkResult = INVALID;
}
if (strcmp("-c", argv[1]) == 0) {//生成终局
if (!isPurenumber(argv[2])) {//生成终局数必须为数字
cout << "生成终局数必须为数字" << endl;
return checkResult = INVALID;
}
return checkResult = FORC;
}
else {//求解数独
return checkResult = FORS;
}
}
//判断输入是否问纯数字
bool isPurenumber(char* s) {
int n = strlen(s);
for (int i = 0; i < n; i++)
if (s[i] > '9' || s[i] < '0')
return false;
return true;
}
3数独生成对象SudokuFactory
功能描述:检查剩余需求量,生成新的数独。
声明代码
class SudokuFactory {
static const int N = 9;
int need;//剩余需求量
int firstR[N];
int model[N][N];//模板
string sudokuStore;//保存终局
public:
SudokuFactory(int m_need = 0 ) {
need = m_need;
createFirstModel();//自动生成第一个模板
}
// 检查剩余需求量
bool isEnough() {
if (need > 0)return false;
return true;
}
//生成第一个模板
void createFirstModel();
//更新模板
void refreshModel();
//在原始阵列基础上进行变换并输出36个排列
void newFromModel();
//生成终局文件
string createSudokuFile();
string getsudokuStore() { return sudokuStore; }
};
具体实现查看项目sudoko.cpp文件。
生成数独终局原型基本完成,进入优化阶段。