帮帮忙吧

sunshy2 2009-06-03 09:18:40
头文件:
template<class T>
class Linear_list
{
private:
T *list;
int Maxsize;
int size;
public:
Linear_list();
void ClearList();
int LenthList();
bool EmptyList();
T GetList(int pos);
void TraverseList();
bool FindList(T &item);
bool UpdateList(const T &item);
bool Insert(T &item,int pos);//pos==0时,要实现有序表的插入;pos==-1时,要实现插入表尾;1<=pos<sizes
//时,实现插入到第pos个元素的位置。
bool DeleteList(T &item,int pos);
void SortList();
};
函数实现:
#include<iostream.h>
#include"线性表的操作.h"

template<class T>
Linear_list<T>::Linear_list()
{
Maxsize=10;
list=new T [Maxsize];
if(list==NULL)
{
cout<<"动态可分配的存储空间用完,推出运行!"<<endl;
exit(1);
}
size=0;
}

template<class T>
void Linear_list<T>::ClearList()
{
if(list!=NULL)
{
delete [] list;
list=NULL;
}
size=0;
}

template<class T>
int Linear_list<T>::LenthList()
{
return size;
}

template<class T>
bool Linear_list<T>::EmptyList()
{
return (size==0);
}

template<class T>
T Linear_list<T>::GetList(int pos)
{
if(pos<1||pos>size)
{
cerr<<"pos is out range!"<<endl;
exit(1);
}
return list[pos-1];
}

template<class T>
void Linear_list<T>::TraverseList()
{
for(int i=0;i<size;i++)
cout<<list[i]<<endl;
cout<<endl;
}

template<class T>
bool Linear_list<T>::FindList(T &item)
{
for(int i=0;i<size;i++)
if(list[i]==item)
{
item=list[i];
return true;
}
return false;
}

template<class T>
bool Linear_list<T>::UpdateList(const T &item)
{
for(int i=0;i<size;i++)
if(list[i]==item)
{
list[i]=item;
return true;
}
return false;
}

template<class T>
bool Linear_list<T>::Insert(T &item,int pos)
{
if(pos<-1||pos>size+1)
{
cerr<<"pos值无效!"<<endl;
return false;
}
if(pos==0)
{
for(int i=0;i<size;i++)
if(item<list[i])
break;
pos=i+1;
}
else if(pos==-1)
pos=size+1;
if(size=Maxsize)
{
int k=sizeof(T);
list=(T *)realloc(list,2*Maxsize*k);
if(list==NULL)
{
cout<<"动态可分配的存储空间用完,退出运行!"<<endl;
exit(1);
}
Maxsize=2*Maxsize;
}
for(int i=size-1;i>=pos-1;i--)
list[i+1]=list[i];
list[pos-1]=item;
size++;
return true;
}

template<class T>
bool Linear_list<T>::DeleteList(T &item,int pos)
{
if(size==0)
{
cout<<"线性表为空,删除无效!"<<endl;
return false;
}
if(pos<-1||pos>size)
{
cout<<"pos无效!"<<endl;
return false;
}
if(pos==0)
{
for(int i=0;i<size;i++)
if(item==list[i])
break;
if(i==size)
return false;
pos=i+1;
}
else if(pos==-1)
pos=size;
item=list[pos-1];
for(int i=pos;i<size;i++)
list[i-1]=list[i];
size--;
return true;
}

template<class T>
void Linear_list<T>::SortList()
{
T x;
for(int i=1;i<size;i++)
{
x=list[i];
for(int j=i-1;j>=0;j--)
{
if(x<list[j])
list[j+1]=list[j];
else break;
}
list[j+1]=x;
}
}

主文件种:
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<string.h>
#include"线性表操作.cpp"
struct Goods
{
char code[5];
char name[15];
int minq;
int curq;
};

void SetupGoodsFile(char *fname)
{
ofstream outfile(fname);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
char a[40];
cout<<"输入数据:"<<endl;
for(int i=0;i<6;i++)
{
cin.getline(a,40);
outfile<<a<<endl;
}
outfile.close();
}

void SetGoodsList(Linear_list<Goods> &L,char *fname)
{
ifstream infile(*fname);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
Goods g;
int i=1;
while(infile>>g.code)
{
infile>>g.name>>g.minq>>g.curq;
L.Insert(g,i++);
}
}

void WriteGoodsFile(char *fname,Linear_list<Goods> &L)
{
ofstream outfile(fname);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
Goods g;
int n=L.LenthList();
for(int i=1;i<=n;i++)
{
g=L.GetList(i);
outfile<<g.code<<' '<<g.name<<' '<<g.minq<<' '<<g.curq<<endl;
}
outfile.close();
}

bool operator==(const Goods &t1,const Goods &t2)
{
return (strcmp(t1.code,t2.code)==0);
}

bool operator<(const Goods &t1,const Goods &t2)
{
return (strcmp(t1.code,t2.code)==-1);
}

ostream& operator<<(ostream &output,const Goods &t)
{
output.setf(ios::left);
output<<setw(6)<<t.code<<setw(12)<<t.name;
output<<setw(4)<<t.minq<<setw(4)<<t.curq<<endl;
return output;
}

void main()
{
//SetupGoodsFile("goods.txt");
Linear_list<Goods> list;
SetGoodsList(list,"goods.txt");
int i,flag=1;
while(flag)
{
cout<<"1 打印整个库存表"<<endl;
cout<<"2 修改库存表中的记录"<<endl;
cout<<"3 删除库存表中的记录"<<endl;
cout<<"4 对库存表排序"<<endl;
cout<<"5 结束处理过程"<<endl;
cout<<"输入你的选择(1-5):";
cin>>i;
while(i<1||i>5)
{
cout<<"请重新输入:";
cin>>i;
}
cout<<endl;
switch(i)
{
case 1:
list.TraverseList();
break;
case 2:
Goods g;
int x;
cout<<"输入待修改的商品代号:";
cin>>g.code;
if(list.FindList(g))
{
cout<<"输入该商品修正量:";
cin>>x;
g.curq+=x;
if(list.UpdateList(g))
cout<<"更新完成!"<<endl;
}
else
{
cout<<"输入新商品记录的其他字段内容:"<<endl;
cin>>g.name>>g.minq>>g.curq;
list.Insert(g,-1);
cout<<"新记录已经插入到表尾!"<<endl;
}
break;
case 3:
cout<<"请输入待删除商品的商品代号:";
cin>>g.code;
if(list.DeleteList(g,0))
cout<<"代号为"<<g.code<<"的记录被删除!"<<endl;
else cout<<"代号为"<<g.code<<"的记录不存在!"<<endl;
break;
case 4:
list.SortList();
cout<<"已经排序!"<<endl;
break;
case 5:
cout<<"处理结束"<<endl;
flag=0;
}
}
WriteGoodsFile("goods.txt",list);

}

结果能运行,但是函数SetGoodsList(list,"goods.txt");调用过程中好像有问题,希望大家帮帮忙啊~谢谢了
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengde007 2009-06-04
  • 打赏
  • 举报
回复

ifstream infile(fname); //
//另外那个Goods g;你这个g好像没初始化吧;其成员赋值了吗;那不都写空内容吗;
aaaa3105563 2009-06-04
  • 打赏
  • 举报
回复
帮顶·
lingyin55 2009-06-03
  • 打赏
  • 举报
回复
这里if(size=Maxsize) 应该是==号吧
  • 打赏
  • 举报
回复
好长。。帮顶
goodname 2009-06-03
  • 打赏
  • 举报
回复
发了2个贴阿

if(size=Maxsize)//==??
{
int k=sizeof(T);
list=(T *)realloc(list,2*Maxsize*k);

没运行代码,只是看了看,确实是否为==?
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧