课程设计.docx
- 文档编号:3347987
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:13
- 大小:17.77KB
课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计
/*
课程设计要求:
1.用模板方式实现对float,double和int三种数据类型的操作
2.数据成员为type*element,intnumber;其中type为float,double和int之一,
number表示元素的个数
3.类的名称改为set,要求从文件读入数据进行初始化。
4.要求提供菜单,让用户选择使用哪种数据类型,以及进行哪种操作,操作包括:
//清空该集合
//判断集合是否为空
//判断某个数是否在该集合内
//增加一个数到集合中
//从集合中删除一个元素
//判断两个集合是否相等
//求两个集合的交集
//求两个集合的并集
//显示该集合的所有元素
*/
/*思路就是先建三个文件”INT.txt”、“FLOAT.txt”、“DOUBLE.txt”,分别放三种数据,然后根据用户选择,读取数据到相应数组去处理,
如:
用户选择了int型,就把”INT.txt”里的数据读到a[A-SIZE]和b[B-SIZE]里去处理。
“INT.txt”里的数据:
A234578121423262930313539
A4247587397204347911198819891991
B4691534576897122145156
B20423334646678991112541497
B18831886199019911992200820112012
“FLOAT.txt”里的数据:
A2.4F3.122F4.5F9.93F24.6F
A34.5F56.0F59.0F
A67.48F77.77F
B5.64F9.93F56.6F77.77F98.0F
B99.345F106.44F
“DOUBLE.txt”里的数据:
A1.22.44.89.619.257.34267.45
A77.888124.444133.856346.4
B2.22.49.643.55677.888112.334
B133.856456.55789.444
*/
#include
#include
#include
#include
usingnamespacestd;
#defineN200
#defineA_SIZE100
#defineB_SIZE100
template
classset
{
private:
type*element;
intnumber;
public:
typea[A_SIZE],b[B_SIZE];
set()//默认构造函数
{
for(inti=0;i element[i]=0; number=-1; } set(typea[],ints)//构造函数,要求a数组中的元素互不相同 { inti; if(s>=200) number=199; else number=s-1; for(i=0;i<=number;i++) element[i]=a[i]; for(i=s;i element[i]=0; } voidClearMuster(set&Set);//清空集合 boolIsEmpty(set&Set);//判断集合是否为空 boolIsInMuster(set&Set);//判断某个数是否在该集合内 voidAddto(set&Set);//添加一个数到集合中 voidClearElementFrom(set&Set);//从集合中删除一个元素 boolIsEqual(set&Set);//判断两个集合是否相等 voidShowAll(set&Set);//显示集合中的所有元素 setIntersection(set&Set)//求两个集合的交集 { inta[N],k=0,i,j; for(i=0;i<=number;i++)//扫描当前集合中所有元素 for(j=0;j<=Set.number;j++) if(element[i]==Set.element[j])//将属于两个集合的元素放在a数组中 { a[k++]=element[i]; break; } returnset(a,k);//调用构造函数产生一个无名对象返回 } setUnion(set&Set)//求两个集合的并集 { inta[N],i,k; for(i=0;i<=number;i++)//先将当前集合元素放入a数组中 a[i]=element[i]; k=number+1; for(i=0;i<=Set.number;i++)//将集合Set中不在当前集合中的元素放入a数组中 if(member(Set.element[i])) continue; else { if(k==N-1)break; a[k++]=Set.element[i]; } returnset(a,k);//调用构造函数产生一个无名对象返回 } }; //------------------------------------------------------------------------------------------------------------------ template voidset : ClearMuster(set&Set)//清空集合 { for(inti=0;i element[i]=0; number=-1; cout<<"已清空该集合! "< } //------------------------------------------------------------------------------------------------------------------ template boolset : IsEmpty(set&Set)//判断集合是否为空 { if(number==-1) { cout<<"该集合为空"< returntrue; } else {cout<<"该集合不为空"< returnfalse;} } //------------------------------------------------------------------------------------------------------------------ template boolset : IsInMuster(set&Set)//判断某个数是否在该集合内 { typem; cout<<"输入需要查找的元素: "< cin>>m; for(inti=0;i<=number;i++) { if(element[i]==m) { cout< "< returntrue; } } returnfalse; } //------------------------------------------------------------------------------------------------------------------ template voidset : Addto(set&Set)//添加一个数到集合中 { typem; cout<<"输入需要添加的元素: "< cin>>m; if(IsInMuster(m))//判断m是否已在集合中 { cout< 请重新输入: "< cin>>m; } if(number==N-1)//判断集合是否已满 {cout<<"集合已满! 不能再添加! "< number++; element[number]=m; cout<<"已将"< "< } //------------------------------------------------------------------------------------------------------------------ template voidset : ClearElementFrom(set&Set)//从集合中删除一个元素 { typem; cout<<"输入需要删除的元素: "< cin>>m; if(! IsInMuster(set&Set)) cout< "< inti,p; for(i=0;i if(element[i]==m) {p=i;break;} for(i=p;i element[i]=element[i+1]; number--;//删除m后集合元素个数减一 cout<<"已将"< "< } //------------------------------------------------------------------------------------------------------------------ template boolset : IsEqual(set&Set)//判断两个集合是否相等 { if(number! =Set.number) {cout<<"集合A与集合B不相等! "< for(i=0,i<=number,i++) { if(! Set.IsInMuster(set&Set)) {cout<<"集合A与集合B不相等! "< } cout<<"集合A与集合B相等! "< returntrue; } //------------------------------------------------------------------------------------------------------------------ template voidset : ShowAll(set&Set)//显示集合中的所有元素 { cout<<"该集合中所有元素为: "< for(i=0,i<=number,i++) {cout< cout< } //------------------------------------------------------------------------------------------------------------------ voidTypeChoice();//根据用户选择的数据类型从相应文件读取数据 intmenu();//提供菜单的函数 voidReadtoArray();//从文件读取数据到数组 //------------------------------------------------------------------------------------------------------------------ //****************************************************************************************************************** intmain() { TypeChoice(); setA(a,A_SIZE),B(b,B_SIZE); boolexit=false;//默认选择不退出菜单 for(;;) { intchoice=menu(); switch(choice) { case1: cout<<"清空集合A还是B? 键入A或B选择: ";//选择清空集合A或B charMusterChoice=cin.get(); if(MusterChoice=='A') A.ClearMuster(); elseif(MusterChoice=='B') B.ClearMuster(); else cout<<"输入有误! "< break; case2: cout<<"需要判断哪个集合为空? 键入A或B选择: ";//判断集合A或B是否为空 charMusterChoice=cin.get(); if(MusterChoice=='A') A.IsEmpty(); elseif(MusterChoice=='B') B.IsEmpty(); else cout<<"输入有误! "< break; case3: cout<<"键入A或B选择一个集合: ";//判断某个数是否在集合A或B内 charMusterChoice=cin.get(); if(MusterChoice=='A') A.IsInMuster(); elseif(MusterChoice=='B') B.IsInMuster(); else cout<<"输入有误! "< break; case4: cout<<"选择要添加到的集合(键入A或B选择): ";//添加一个数到集合A或B中 charMusterChoice=cin.get(); if(MusterChoice=='A') A.Addto(); elseif(MusterChoice=='B') B.Addto(); else cout<<"输入有误! "< break; case5: cout<<"键入A或B选择一个集合: ";//从集合A或B中删除一个元素 charMusterChoice=cin.get(); if(MusterChoice=='A') A.ClearElementFrom(); elseif(MusterChoice=='B') B.ClearElementFrom(); else cout<<"输入有误! "< break; case6: A.IsEqual();break; case7: A.Intersection();break; case8: A.Union();break; case9: cout<<"选择要显示所有元素的集合(键入A或B选择): ";//显示集合A或B的所有元素 charMusterChoice=cin.get(); if(MusterChoice=='A') A.ShowAll(); elseif(MusterChoice=='B') B.ShowAll(); else cout<<"输入有误! "< break; case0: exit=true; cout<<"您已退出菜单! 欢迎再次使用本系统! "< break; default: cout<<"无该数字对应的功能! (请选择数字0~9)"< } if(exit)break; } return0; } //****************************************************************************************************************** //------------------------------------------------------------------------------------------------------------------ voidTypeChoice() { stringDataType="Unknown"; cout<<"选择数据类型: "<<'\n'<<"f: float型"<<'\n'<<"d: double型"<<'\n'<<"i: int型"< chars=cin.get(); if(s=='i') { DataType="INT"; ReadtoArray(); } elseif(s=='f') { DataType="FLOAT"; ReadtoArray(); } elseif(s=='d') { DataType="DOUBLE"; ReadtoArray(); } else { cout<<"输入有误! (请选择f、d或i)"< return; } } //------------------------------------------------------------------------------------------------------------------ intmenu() { intchoice; cout<<"***************************菜单***************************"< cout<<"1: 清空该集合"< 判断集合是否为空"< 判断某个数是否在该集合内"< cout<<"4: 增加一个数到集合中"< 从集合中删除一个元素"< cout<<"6: 判断两个集合是否相等"< 求两个集合的交集"< cout<<"8: 求两个集合的并集"< 显示该集合的所有元素"< 退出"< cout<<"**************************************************************"< cout<<"Yourchoiceis: "; cin>>choice; returnchoice; } //------------------------------------------------------------------------------------------------------------------ voidReadtoArray() { stringline; chartag; inti; intindex_a=0,index_b=0; fstreamfs("DataType.txt"); while(getline(fs,line)) { istringstreamis(line); if(is>>tag) { if(tag=='A') { while(is>>a[index_a])index_a++; } elseif(tag=='B') { while(is>>b[index_b])index_b++; } else { cout<<"Unknownline: "< } } } fs.close(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计