Jackson方法的小例子

今天软件工程讲的jackson的软件开发方法,给了一个小例子,虽然例子不太实际,但对于理解软件开发过程,及jackson程序设计的各种规范还是有些用的,下面回顾一下。

老师不让拷ppt,笔记在书记113页。主要是把数据库中的考生信息文件和考生成绩文件合并起来。

jackson方法:

1,数据结构的表示。

2,输入结构与输出结构的对应关系。

3,确定结构图。

4,列出分配所有的操作和条件。

操作:1,停止。1,打开两个文件。3,建立输出文件。4,从输入文件中各读一条记录。5,生成一条新记录。6,将新记录写入到文件中。7,关闭所有文件。

条件:I(1),文件结束。


跟据图写出伪代码

产生新文件 seq

         打开两个输入文件

         建立一个输出文件

         从输入文件各读一条记录

         分析考生记录         iter until   文件结束

                   分析考生记录         seq

                   产生准考证号

                   产生姓名

                   产生地址

                   产生考分

                   生成新记录

                   将新记录写入到输出文件

                  处理考生记录         end

         分析考生记录文件结束         end

         关闭全部文件

         停止

产生新文件     end

然后就是用源代码实现上面的伪代码了。

在这之前,说说自己的看法。

首先,这个例子的工作完全可以通过数据库的连接操作完成,敲几行SQL语句就可以实现。

再则,数据库中是用表存数据的,结构图中总是说打开文件呀,关闭文件呀,觉得有点不妥。

最后,结构图中第二层的4操作(从输入文件各读一条记录)完全是没有用的,直接放到下面的循环中更好。

下面是源代码。

已通过编译调试。

用的是access数据库。

程序可以正常运行的前提是数据库中有三张表,StudentInfo,StudentGrade,StudentCom,前两张记录了考生的基本信息,后一张为空。

StudentInfo中有Num,Name,Address字段,StudentGrade有Num,Grade字段。StudentCom中有Num,Name,Adrress,Grade字段。

正常的结果是,会把StudentInfo,StudentGrade的信息合并到StudentCom中。

#include 
#include 

//引入ADO库文件 注意C:\Program Files\Common Files\System\ado\msado15.dll这是指系统盘下,
//如果你的系统盘是D盘的话 那么应该是D:\Program Files\Common Files\System\ado\msado15.dll 
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
using namespace std;

void main()
{
	::CoInitialize(NULL);			//初始化OLE/COM库环境
	_ConnectionPtr pCon;			//申明Connection指针
	//申明Recordset指针
	_RecordsetPtr pRecSou1; //申明StudentInfo表的指针
	_RecordsetPtr pRecSou2; //申明StudentGrade表的指针
	_RecordsetPtr pRecDes; //申明StudentCom表指针
	pCon.CreateInstance(__uuidof(Connection));		//处始化Connection指针
	pRecSou1.CreateInstance(__uuidof(Recordset));		//处始化Recordset指针
	pRecSou2.CreateInstance(__uuidof(Recordset));		//处始化Recordset指针
	pRecDes.CreateInstance(__uuidof(Recordset));		//处始化Recordset指针
	try
	{
		//连接数据库
		pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=access.mdb","","",adModeUnknown);
	}
	catch(_com_error e)
	{
		cout<Open("SELECT * FROM StudentInfo",
			_variant_t((IDispatch*)pCon,true),
			adOpenStatic,
			adLockOptimistic,
			adCmdText);
		//adOpenStatic: 静态 adOpenDynamic:动态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句
		pRecSou2->Open("SELECT * FROM StudentGrade",
			_variant_t((IDispatch*)pCon,true),
			adOpenStatic,
			adLockOptimistic,
			adCmdText);
		pRecDes->Open("SELECT * FROM StudentCom",
			_variant_t((IDispatch*)pCon,true),
			adOpenStatic,
			adLockOptimistic,
			adCmdText);
	}
	catch(_com_error e)
	{
		cout<MoveFirst();
		pRecSou2->MoveFirst();
		_variant_t   ra;
		pCon->Execute("delete * from StudentCom",&ra,adCmdText);
		
		_bstr_t Info_Num;
		_bstr_t Name;
		_bstr_t Address;
		_bstr_t Com_Num;
		_bstr_t Grade;
		
		while (!pRecSou1->adoEOF && !pRecSou2->adoEOF)
		{
			Info_Num = pRecSou1->GetCollect("Num");
			Name = pRecSou1->GetCollect("Name");
			Address = pRecSou1->GetCollect("Address");
			
			Com_Num = pRecSou2->GetCollect("Num");
			Grade = pRecSou2->GetCollect("Grade");		
			if (strcmp((char*)Info_Num,(char*)Com_Num)==0)
			{
				pRecDes->AddNew();
				pRecDes->PutCollect("Num",Info_Num);
				pRecDes->PutCollect("Name",Name);
				pRecDes->PutCollect("Address",Address);
				pRecDes->PutCollect("Grade",Grade);
				
				pRecDes->Update();
				
				pRecSou1->MoveNext();
				pRecSou2->MoveNext();
				
			}
			else
			{
				cout<<"error"<Close();
		pRecSou1->Close();
		pRecSou2->Close();
		pCon->Close();
	}
	catch (_com_error e)
	{
		cout<

下面是用文件操作实现的代码

#include 
#include 
#include 
using namespace std;
int kmps(char *,char* ,int);
void main()
{
	fstream file1,file2,fileDes;
	char bufInfo[64];
	char bufGread[64];
	char bufCom[64];
	file1.open("studentInfo.txt");//存放学生信息的文件
	file2.open("studnetGrade.txt");//存放学生成绩的文件
	fileDes.open("studentCom.txt",ios::out);//合并后的文件

	while (!file1.eof() && !file2.eof())
	{
		file1.getline(bufInfo,64);
		file2.getline(bufGread,64);
		int index = kmps(bufGread,")",0);
		strcat(bufInfo,bufGread+index);
		sprintf(bufCom,"%s\n",bufInfo);
		fileDes.write(bufCom,strlen(bufCom));
		cout<=slen)
		return i-slen+1;
	else
		return 0;
}

在工程文件中有要有两个文件。StudentInfo.txt和StudentGrade.txt文件

StudentInfo.txt文件格式如(准考证号)(姓名)(地址)

StudentGrade.txt文件格式如(准号证号)(成绩)

每条记录一行。

你可能感兴趣的:(Software,Engineering,file,数据库,system,数据结构,delete,access)