#include<iostream>
#include<stdlibh>
#include<fstream>
#include<stdioh>
#include"StuInfoVech"
#include"StuInfoManangerh"
using namespace std;
/
功能:显示欢迎画面,并开始进行用户交互处理
/
void StuInfoManager::start()
{
cout<<"\n"
<<"\t^_^\n"
<<"\t 这是一个 \n"
<<"\t 学生成绩管理程序 \n"
<<"\t 可以对学生成绩进行管理 \n"
<<"\t 欢迎使用管理程序 \n"
<<"\t\n"
<<"\n";
menuSelect();
}
/
功能:显示成绩管理程序菜单,返回用户选择的选项
返回:用户选择的选项,是0~9之间的一个字符
/
char StuInfoManager::menuSelect()
{
cout<< "\n"
<< "\0 显示记录\n"
<< "1 查询记录\n"
<< "2 增加记录\n"
<< "3 删除记录\n"
<< "4 修改记录\n"
<< "5 记录排序\n"
<< "6 保存记录\n"
<< "7 读取记录\n"
<< "8 新建学生信息文件\n"
<< "9 结束运行\n"
<< "\n左边数字对应功能选择,请选0~9:";
string str;
char choice;
while(true)
{
cin>>str;
cinignore(); //从cin中将回车符提取出来
choice = str[0];
if(choice<'0' || choice>'9')
cout<< "\n输入错误-_=重选0~9:";
else
break;
}
return choice;
}
/
功能:根据用户选择 的项目调用相应的处理函数
/
void StuInfoManager::handleMenu()
{
while(true)
{
switch(menuSelect())
{
case '0':
displayRecords();
break;
case '1':
queryRecord();
break;
case '2':
addRecord();
break;
case '3':
removeRecord();
break;
case '4':
modifyRecord();
break;
case '5':
sortRecords();
break;
case '6':
saveRecords();
break;
case '7':
loadRecords();
break;
case '8':
clear();
addRecord();
break;
case '9':
quit();
}
}
}
/
功能:打印显示记录信息时的表头
/
void StuInfoManager::dispTable()
{
cout<< "学号\t姓名\t性别";
cout<<'\t'<<"高数";
cout<<'\t'<<"语文";
cout<<'\t'<<"英语";
cout<<'\t'<<"物理";
cout<<'\t'<<"体育";
cout<< "\t总分\t平均分\t名次\t删除标志\n";
}
/
功能:显示指定记录的信息
/
void StuInfoManager::dispRecord(Record rec)
{
cout<< rec->number << '\t' << rec->name << '\t' << rec->gender;
for (int j=0;j<NUM_SUBJECT;j++)
cout<< '\t' << rec->score[j];
coutprecision(3);
cout<< '\t' << rec->sum << '\t' << rec->average <<'\t' << rec->index;
if (rec->toBeDeleted)
cout<< "\t\n";
else
cout << '\n';
}
/
功能:显示所有记录信息
/
void StuInfoManager::displayRecords()
{
if (empty())
{
cout<< "没有记录可以显示-_=" <<endl;
return;
}
dispTable();
int num = size();
for (int i=0;i<num;i++)
{
dispRecord(recVec[i]);
//打印满20个记录后停下来
if (i%20==0&&i!=0)
{
cout<< "输入任一字符后继续\n";
cinget();
cout<<endl;
dispTable();
}
}
cout<< "一共有" << size() << "条记录\n" <<endl;
}
/
功能:首先检查记录是否已保存,然后清空当前所有记录
注意:该函数覆盖了基类中的函数
void StuInfoManager::clear()
{
char choi[5];
if (toRemvNodes != 0)
{
cout<< "现在还有被做了删除标记但还没有执行的记录,是否执行删除?(y/n)";
cingetline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
{
int num = removePerform();
toRemvNodes = 0;
cout<< "一共删除了" << num << "条记录\n"
<< "现在还剩下" << size() << "条记录" << endl;
if (num != 0)
isModified = true;
}
}
if (isModified) // 已改动,未保存
{
cout<< "学生信息已改动,是否保存?(y/n)";
cingetline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
saveRecords();
}
StuInfoVec::clear();
isModified = false;
}
/
功能:查询指定记录
/
void StuInfoManager::queryRecord()
{
if (empty())
{
cout<< "记录是空表,退出查询 *** 作-_=" <<endl;
return;
}
char choi[5];
int type;
char pattern[20];
while(true) {
cout<< "请输入查询的方式:(直接输入回车则结束)\n"
<< "1 按学号\n"
<< "2 按姓名\n"
<< "3 按名次\n";
cingetline(choi,5);
//直接输入加车则结束查询
if (choi[0] == '\0' ) break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询的学生的名次:";
type = 2;
}
cingetline(pattern,20);
int findCount = 0;
//找到匹配的记录
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
dispTable();
while (it != it_end)
{
findCount++;
dispRecord(it);
//取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
cout<<"一共找到了"<<findCount<<"条记录"<<endl;
}
/
找出总分为sum在当前所有记录中升序排序的位置
参数:sum,欲找位置的总分
返回:sum在当前所有记录中按升序排序的位置
结果:原有记录中"名次"项也会依需要相应改变
/
int StuInfoManager::getIndex(float sum)
{
int acount=0;//总分大于sum的人数
Iterator it;
Iterator it_end = pastEnd();
for (it=first(); it!=it_end; it++)
{
if ((it)->sum<sum)
{
(it)->index++;//总分小于sum的记录名次增1
} else if ((it)->sum>sum)
{
acount++;
}
}
int a=acount+1;
return a;
}
/
功能:向当前学生信息追加新的记录
该函数重载了基类中的函数
/
void StuInfoManager::addRecord()
{
if(empty())
cout<< "原来没有记录,现在建立新表" <<endl;
else
cout<< "下面在当前表的末尾增加新的信息" <<endl;
char choi[5];
char name[20]
Record rec;
float sum;
int j;
int ncount = 0;//记录增加了的记录数
while(true)
{
cout<< "您将要添加一组信息,确定吗?(y/n)";
cingetline(choi,5);
if (choi[0]=='n' || choi[0]=='N') //不再添加新的信息
break;
rec = new Record;
cout<< "请输入学号:" << flush;
cin>>rec->number;
ciningnore();
printf("请输入姓名:";);
cingetline(name,20);
rec->name=name;
printf("请输入性别(0为女,1为男):":);
cingetline(choi,5);
if (choi[0] == '0')
rec->gender = "女";
else
rec->gender = "男";
sum = 0;
cout<< "请输入" <<"高数"<< "成绩:";
cin>>rec->score[0];
sum+=rec->score[0];
cout<< "请输入" <<"语文"<< "成绩:";
cin>>rec->score[1];
sum+=rec->score[1];
cout<< "请输入" <<"英语"<< "成绩:";
cin>>rec->score[2];
sum+=rec->score[2];
cout<< "请输入" <<"物理"<< "成绩:";
cin>>rec->score[3];
sum+=rec->score[3];
cout<< "请输入" <<"体育"<< "成绩:";
cin>>rec->score[4];
sum+=rec->score[4];
cinignore();
rec->sum=sum;
rec->average=sum/NUM_SUBJECT;
rec->index=getIndex(sum);
StuInfoVec::addRecord(rec);
ncount++;
}
cout<< "一共新增了" << ncount << "条记录\n"
<< "现在一共有" << size() << "条记录" << endl;
if (ncount !=0)
isModified = true; // 记录已改动,未保存
}
/
功能:进入"删除记录"子菜单,选择执行相应的功能
注意:该函数重载了基类中的函数
/
void StuInfoManager::removeRecord()
{
if(empty())
{
cout<< "记录已空,退出删除 *** 作-_=" <<endl;
return;
}
cout<<"1 标记待删除的记录\n"
<<"2 执行标记\n"
<<"3 取消指定记录的删除标记\n"
<<"4 取消全部删除标记" <<endl;
string str;
do
{
cout<< "请选择您要进行的 *** 作(1~4):";
cin>>str;
}while (str[0]<'1' || str[0]>;'4');
cinignore();
switch (str[0])
{
case '1':
removeNote(true);
break;
case '2':
{
int num = removePerform();
toRemvNodes = 0;
cout<< "一共删除了" <<num <<"条记录\n"
<< "现在还剩下" <<size() <<"条记录" << endl;
if (num !=0)
isModified = true;
}
break;
case '3':
removeNote(false);
break;
case '4':
{
Iterator it;
Iterator it_end = pastEnd());
for (it=first(); it!=it_end; it++)
(it)->;toBeDeleted = false;
toRemvNodes = 0;
cout<< "所有删除标记已被取消" <<endl;
}
}
}
/
功能:标记指定记录为"待删除"或取消该标记
参数:isToRemove,为true表示标记指定记录为"待删除"
为false表示取消指定记录为"待删除"标记
/
void StuInfoManager::removeNote(bool isToRemove)
{
if(empty())
{
cout<< "当前没有任何记录-_=" <<endl;
return;
}
if (!isToRemove && toRemvNodes==0)
{
cout<< "当前没有被做了删除记录标记的项目-_=" <<endl;
return;
}
char choi[5];
char pattern[20];
int type;
while(true) {
cout<< "请输入如何找到欲更改标记的记录的方式:(直接输入回车则结束移除 *** 作)\n"
<<"1 按学号\n"
<<"2 按姓名\n"
<<"3 按名次\n"
cingetline(choi,5);
//直接输入回车则结束查询
if (choi[0] == '\0') break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询学生的名次:";
type = 2;
}
cingetline(pattern,20);
//找到匹配的记录
bool gotMatch = false;
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
while (it != it_end)
{
//如果要取消标记而当前记录没有被标记,或者是要做标记而
//当前记录已被标记,则继续下一条记录
if ((!isToRemove && !(it)->;toBeDeleted) ||
(isToRemove && (it)->;toBeDeleted))
{
it = findRecord(pattern,type,++it);
continue;
}
getMatch = true;
cout<< "找到一条匹配的记录:\n";
dispTable();
dispRecord(it);
cout<< "确定要改变这条记录的标记吗?[y/n]";
cingetline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
(it)->;toBeDeleted = !(it)->;toBeDeleted;
if (isToRemove)
toRemvNodes++;
else
toRemvNodes--;
//取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
if (!gotMatch)
cout<< "没有找到匹配的记录-_=" <<endl;
else
{
if (toRemvNodes != 0)
cout<< "当前有" << toRemvNodes
<< "条记录被做了删除标记" <<endl;
else
cout<< "现在已经没有被做了删除标记的记录了-_=\n";
}
}
}
/
功能:修改指定学生的信息
/
void StuInfoManager::modifyRecord()
{
if(empty())
{
cout<< "没有可供修改的记录-_=" <<endl;
return;
}
char choi[5];
char pattern[20];
char name[20];
int type;
string str;
while(true)
{
cout<< "请输入如何找到欲修改的记录的方式:(直接输入回车则结束移除 *** 作)\n"
<<"1 按学号\n"
<<"2 按姓名\n"
<<"3 按名次\n"
cingetline(choi,5);
//直接输入回车则结束查询
if (choi[0] == '\0') break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询学生的名次:";
type = 2;
}
cingetline(pattern,20);
//找到匹配的记录
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
if (it == it_end)
{
cout<< "没有匹配的记录-_=" <<end;
continue;
}
while (it != it_end)
{
cout<< "找到一条匹配的记录:\n";
dispTable();
dispRecord(it);
cout<< "确定要改变这条记录的标记吗?[y/n]";
cingetline(choi,5);
//修改该记录
if (choi[0]!='n' && choi[0]!='N')
{
int ncount = 0; // 总分大于sum的人数
int tmpi =(it)->;index; //记录当前修改的记录的名次
cout<< "下面请重新输入该学生的信息:\n";
cout<< "请输入学号:";
cin>>(it)->number;
cinignore();
cout<< "请输入姓名:";
cingetline(name,20);
(it)->name = name;
printf("请输入性别(0为女,1为男):";);
cin>>str;
cinignore();
if (str[0] == '0')
(it)->gender = "女";
else
(it)->gender = "男";
float sum=0;
for (j=0;j<NUM_SUBJECT; j++)
{
cout<< "请输入" <<subject_[j] << "成绩:";
cin>>(it)->score[j];
sum+=(it)->score[j];
}
cinignore();
(it)->;sum = sum;
(it)->;average = sum/NUM_SUBJECT;
//修改其他记录的名次、
//将原来名次排在被修改记录之后,而其sum大于等于
//修改后记录的sum的记录的名次减1,
//将原来名次排在被修改记录之前或相同,而其sum小于
//修改后记录的sum的记录的名次增1
ncount = 0;
Iterator it1;
for (it1=first(); it1!=it_end; it1++)
{
if (it1==it) continue;
if (it1)->index>;tmpi && (it1)->sum>=sum)
(it1)->index--;
else if ((it)->index<=tmpi && (it1)->sum<sum)
(it1)->index++;
if ((it1)->sum>sum)
ncount++;
}
//nocut是总分比当前学生的总分大的学生的个数
//当前学生的名次是nocunt+1
(it)->index=ncount+1;
isModified = true;
}
// 取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
cout<< "已找完所有的记录\n" <<endl;
}
}
/
功能:按照学号、姓名或名次对记录进行排序
结果:各个记录在数组中存储的位置会发生变化
/
void StuInfoManager::sortRecords()
{
if (empty())
{
cout<< "没有可供排序的方式!" <<endl;
return;
}
string str;
cout<< "请输入您希望进行排序的方式:\n"
<< "1 按学号进行升序排序\n"
<< "2 按学号进行降序排序\n"
<< "3 按姓名进行升序排序\n"
<< "4 按姓名进行降序排序\n"
<< "5 按名次进行升序排序\n"
<< "6 按名次进行降序排序\n"
<< "7 按错了,我并不想进行排序" <<endl;
cin>>str;
cinignore();
if (str[0]<'1' || str[0]>;'6') return;
//进行排序
int i,j;
int numStus=size();
for (i=0;i<numStus-1;i++)
{
for (j=i+1; j<numStus; j++)
{
if ((str[0]=='1' &&
recVec->;number>;recVec[j]->;number) ||
(str[0]=='2'&&
recVec->number<recVec[j]->number) ||
(str[0]=='3' && recVec->name>recVec[j]->name) ||
(str[0]=='4' && recVec->name<recVec[j]->name) ||
(str[0]=='5' && recVec->index>recVec[j]->index) ||
(str[0]=='6' && recVec->index<recVec[j]->index))
{
swap(recVec,recVec[j]); //这是STL的一个函数
}
}
}
cout<< "排序已经完成" <<endl;
isModified = true;
}
/
功能:将学生信息保存到指定文件
注意:该函数重载了基类中的函数
/
void StuInfoManager::saveRecords()
{
if (empty())
{
cout<< "没有记录可存-_=" <<endl;
return;
}
char name[40];
string fname;
cout<< "请输入要存入的文件名(直接回车选择文件sname):";
cingetline(name,40);
fname = name;
if (fnameempty())
fname = "sname";
ofstream of(fnamec_str(),ios_base:ut);
if (!of)
{
cout<< "不能存入文件-_=" <<endl;
return;
}
StuInfoVec::saveRecords(of);
ofclose();
cout << size() << "条记录已经存入文件,请继续 *** 作。" <<endl;
isModified = false;
}
/
功能:从指定文件读取记录追加到当前记录末尾
注意:该函数重载了基类中的函数
/
void StuInfoManager::loadRecords()
{
char choi[5];
if (!empty())
{
cout<< "请选择是要覆盖现有记录(y),还是要将读取的"
<<"记录添加到现有记录之后(n)?\n"
<<"直接回车则覆盖现有记录\n";
cingetline(choi,5);
if (choi[0]=='n' || choi[0]=='N')
{ //将读取的记录添加到现有记录之后
isModified = true;
}
else
{
clear();
}
}
string fname;
char fname1[40];
cout<< "请输入要读取的文件名(直接回车选择文件sname)";
cingetline(fname1,40);
fname = fname1;
if (fnameempty())
fname = "sname";
ifstream ifs(fnamec_str(),ios_base::in);
if (!ifs)
{
cout<< "打不开文件!请重新选择" <<endl;
return;
}
int num = StuInfoVec::loadRecords(ifs);
ifsclose();
cout<< "取入" << num <<"条记录。\n"
<< "现在一共有" << size() << "条记录" << endl;
}
void StuInfoManager::quit()
{
clear();
cout << "退出 *** 作,再见^_^" <<endl;
delete this;
exit(0);
}
TmaxSoft的SOA愿景 近来,SOA(Service-Oriented Architecture)成为在IT行业乃至企业界倍受重视的一个话题。SOA为什么会受到如此的关注?其原因是: 作为一个创新的IT架构,SOA通过标准化的接口方式和d性业务服务的开发与革新,力求实现“可重复使用性”、“整合性”、“敏捷性”和“维护便利性”,从而有利于结合现有的IT环境,保证生成服务的敏捷性。
正是基于以上SOA的理念,TmaxSoft提出了自己的SOA思想,一方面通过采用迅速妥善应对经营环境变化的d性经营模式,另一方面利用架构提供系统的简单化、虚拟化及抽象化,为引导持续的流程再造的适应性提供软件基础,从而实现业务部门和IT部门的紧密协作。此外,通过在企业内部和外部进行持续的业务流程改善,把经营活动所生成的信息实时向负责人传达,使得业务延迟最小化,决策速度最大化,同时确保企业敏捷性,提高顾客的满意度,实现流程的高效性和服务的可重组,最终帮助企业成就RTE(Real-Time Enterprise)。
TmaxSoft的SOA解决方案――SOAware
SOAware 是TmaxSoft公司基于SOA思想的解决方案。在广泛的产业领域应用后,SOAware的效率已经得到了验证,它高效地实现了SOA所追求的“敏捷性”、“可重复使用性”及“整合性”,帮助企业完成“实时企业”的战略转变。
从基础管理服务层到客户服务层,SOAware提供完整的产品组合解决方案:
● 下一代数据库解决方案-Tibero;
● 遵守国际标准的大容量传输处理中间件-JEUS/Tmax;
● 确保服务可重复使用性的应用框架解决方案-ProFrame;
● 基于规则的业务流程管理解决方案-BizMaster;
● 业务规则引擎解决方案-ProRule;
● 提供用户便利性的整合开发工具-ProWeb;
● 系统间有机整合、多渠道整合解决方案-AnyLink;
● 应用性能管理和安全解决方案-SysMaster/SysKeeper。
TmaxSoft的SOA战略
TmaxSoft的SOA战略是企业业务部门与IT部门之间紧密合作的基础,提供支撑3S(Single-Entry Point、Simplification、Strength)的Hands-on Tools的灵活框架。TmaxSoft把SOA定义为“把服务之间的关系由基于标准的基础框架转变成服务/规则组件的结合,成为以流程为中心的服务化导向架构”,TmaxSoft的SOA战略旨在切实实现基于SOA的应用程序整合的框架,提供单一运营环境(Single-Entry Point),支持简单、直观的开发环境(Simplification),提供强有力的管理环境(Strength Management、Successful Competitiveness)基础,从而实现适合企业环境的因地制宜的SOA服务。
此外,TmaxSoft通过框架的概念集合成SOAware,并且提供部分基于服务的应用程序,为了解决IT领域共同的问题,又精心设计了通用的、可重复使用的模型框架(基于规则的服务及组件模型),这种框架可以实现易整合性、扩展性、灵活性、维护便利性以及高效的开发优势。
TmaxSoft SOAware基于SOA的框架,把业务流程中可重复使用的服务组件和业务逻辑规则组合成业务服务,并构建了以流程为中心的、由可重复执行的分析、设计、实现、测试及 *** 作等阶段为组成部分的服务生命周期。
为了实现灵活应对经营变化的、以SOA为基础的未来导向型体系架构,TmaxSoft以与SOA基本概念有关的各种技术及解决方案为基础,对业务流程中所需部分进行诊断,并提供解决方法,从而为客户创造实际业务价值,并降低总体拥有成本TCO,提高投资回报率ROI。
TmaxSoft SOAIF框架
TmaxSoft拥有All-in-One Platform的SOA实现框架――SOAIF(SOA Implementation Framework)。SOAIF提供遵守国际标准接口的相关技术,有利于保护现有IT资产的投资,并可以对不同系统之间的服务进行方便的整合。通过使用IT系统可以对企业政策变化迅速做出响应,并且对经营风险进行预测,从而达到企业的RTE目标。
TmaxSoft的SOAIF框架具有如下优点:
1灵活应对变化的体系架构
外部环境的各种变化常常会导致企业IT环境的急剧变化,形成外部环境变化――>经营环境变化――>经营流程变化――>IT结构变化的连环反应。SOAIF具有能够迅速应对这些变化的灵活架构。
2具有反射机制的体系架构
● 建模
随着产业的高速发展和多元化,为了适应日益复杂的经营环境,IT角色变得越发重要,企业希望因业务变化而引起的IT变化更加直观,为了将业务变化直接反映成IT变化,IT系统要通过建模反映经营方案,以便业务负责人易于理解。SOAIF提供了服务、规则、业务流程建模等多种工具,并通过建模应对变化,实现业务观点和IT观点的一元化。
● 简单化
当业务发生变化时,利用建模工具通过拖拽的方式设计流程,设定相应的策略并实时部署,可以简便有效地应对外界的变化。通过协作视图(Collaboration View), 可以方便地掌握流程之间的相互关系,从而降低业务的复杂度。并且通过建模使IT观点变得形象易懂,让决策者和业务分析人员共享,从而确保企业业务的透明性。
● 业务服务的组合和热部署
基于TmaxSoft的技术,通过业务服务的组合/组装和基于规则的编程,而不是编码对业务重新开发,支持对性能影响最小化的“编译后热部署(Compiled Hot-Deploy)”,从而不会出现业务系统的服务中断,并且能够实时变更和部署服务,解决企业实现RTE的IT技术难题。
● 端到端的可视化
向业务负责人提供实时信息监控的可视化工具――仪表盘,使企业的流程和管理变得更加透明。
● 有效整合
SOAIF以CBD开发方法论为原型,包含了基于规则的框架开发方法论,实现基于SOA的从核心服务到界面服务的整体应用解决方案,从而把具有不同架构的系统组建成基于SOA的整合平台,以便包容新的技术架构,使灵活应对变化成为可能。
TmaxSoft SOAware技术路线
TmaxSoft集成SOA的各种丰富技术并且遵守相关的国际标准来实施自己的技术路线。为了优化企业的业务目标,TmaxSoft在解决方案的路线中,尽量做到把全公司范围内的IT资源与现有标准加以管理,最终实现基于SOA的企业应用框架。此外,为了在基于SOA的企业架构中实现全公司的整合,TmaxSoft在技术路线中从多种角度对以下特性提供强有力的支持:
1服务设计角度
● 支持设计直观、易于理解的服务整合的建模工具;
● 提高分析/设计的精确度,提高业务经验及分析/设计模型的重复使用性;
● 通过工具扩展服务的生成管理功能,提高服务品质及生产性、
2框架角度
● 应用EA(Enterprise Architecture)标准架构,提供优化的全公司范围内整合平台的构建环境;
● 遵守国际标准,利用存储库整合管理元数据;
● 应用不同功能独立层,提供独立性和面向编码的标准化和最少化;
● 确保解决方案的生命周期。
3方法论角度
● 通过SOA方法论,支持服务整体生命周期;
● 通过对特定业务的模拟,早期发现危险要素的管理功能;
● 通过重复的服务诊断、设计、开发流程支持,提高服务品质。
4服务角度
● 通过工具支持服务的组合,提高重复使用性;
● 通过热部署的实时服务切换功能,实现及时敏捷地应对市场;
● 通过基于规则的服务逻辑变更,无需编码,由业务负责人进行服务管理。
5开发角度
● 通过现有服务的重复使用,提高生产率,提供公共服务;
● 使因外部系统等变更而导致的影响最小化,实时变更及替换服务;
● 对外部多种协议和消息的统一管理及自动整合转换;
● 内置已被验证的中间件,保证服务的扩展性和整合的稳定性。
正常电流频率为50HZ,根据功率公式,通过改变频率可以改变电机的输出转速或功率。
变频技术是应无级调速的需要而诞生的
20世纪60年代后半期开始,电力电子器件从SCR(晶闸管)、GTO(门极可关断晶闸管)、BJT(双极型功率晶体管)、MOSFET(金属氧化物场效应管)、SIT(静电感应晶体管)、SITH(静电感应晶闸管)、MGT(MOS控制晶体管)、MCT(MOS控制品闸管)发展到今天的IGBT(绝缘栅双极型晶体管)、HVIGBT(耐高压绝缘栅双极型晶闸管),器件的更新促使电力变换技术的不断发展。20世纪70年代开始,脉宽调制变压变频(PWM—VVVF)调速研究引起了人们的高度重视。20世纪80年代,作为变频技术核心的PWM模式优化问题吸引着人们的浓厚兴趣,并得出诸多优化模式,其中以鞍形波PWM模式效果最佳。20世纪80年代后半期开始,美、日、德、英等发达国家的VVVF变频器已投入市场并广泛应用。
变频器一般是利用电力半导体器件的通断作用将工频电源变换为另一频率的电能控制装置。
VVVF变频器的控制相对简单,机械特性硬度也较好,能够满足一般传动的平滑调速要求,已在产业的各个领域得到广泛应用。但是,这种控制方式在低频时,由于输出电压较小,受定子电阻压降的影响比较显著,故造成输出最大转矩减小。另外,其机械特性终究没有直流电动机硬,动态转矩能力和静态调速性能都还不尽如人意,因此人们又研究出矢量控制变频调速。
矢量控制变频调速的做法
矢量控制变频调速的做法是:将异步电动机在三相坐标系下的定子交流电流Ia、Ib、Ic、通过三相—二相变换,等效成两相静止坐标系下的交流电流Ia1Ib1,再通过按转子磁场定向旋转变换,等效成同步旋转坐标系下的直流电流Im1、It1(Im1相当于直流电动机的励磁电流;It1相当于与转矩成正比的电枢电流),然后模仿直流电动机的控制方法,求得直流电动机的控制量,经过相应的坐标反变换,实现对异步电动机的控制。
矢量控制方法的提出具有划时代的意义。然而在实际应用中,由于转子磁链难以准确观测,系统特性受电动机参数的影响较大,且在等效直流电动机控制过程中所用矢量旋转变换较复杂,使得实际的控制效果难以达到理想分析的结果。
1985年,德国鲁尔大学的DePenbrock教授首次提出了直接转矩控制变频技术。该技术在很大程度上解决了上述矢量控制的不足,并以新颖的控制思想、简洁明了的系统结构、优良的动静态性能得到了迅速发展。目前,该技术已成功地应用在电力机车牵引的大功率交流传动上。并且变频技术所应用到的行业越来越广泛,和能源相关的行业都能用到 举例:生活中空调,冰箱,洗衣机等等,工业:起重机等等
直接转矩控制直接在定子坐标系下分析交流电动机的数学模型,控制电动机的磁链和转矩。它不需要将交流电动机化成等效直流电动机,因而省去了矢量旋转变换中的许多复杂计算;它不需要模仿直流电动机的控制,也不需要为解耦而简化交流电动机的数学模型。
VVVF变频、矢量控制变频、直接转矩控制变频都是交—直—交变频中的一种。其共同缺点是输入功率因数低,谐波电流大,直流回路需要大的储能电容,再生能量又不能反馈回电网,即不能进行四象限运行。为此,矩阵式交—交变频应运而生。由于矩阵式交—交变频省去了中间直流环节,从而省去了体积大、价格贵的电解电容。它能实现功率因数为l,输入电流为正弦且能四象限运行,系统的功率密度大。该技术目前虽尚未成熟,但仍吸引着众多的学者深入研究。
以上就是关于C++做一个简单的学生信息管理系统全部的内容,包括:C++做一个简单的学生信息管理系统、it的战略作用是什么【未来经营的IT战略】、1):什么叫变频等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)