二柱子又遇到了老师新要求
可怜的二柱子,可怜的我们啊
#include<iostream>
#include<time.h>
using namespace std; ty
pedef struct node{
int num1; int num2; char ope; struct node *next; }node,*linknode; //定义三个操作数的数据结构,用于对产生数据的记录
void Math(int num,linknode &L,int chengchu,int fanwei,int yushu); //产生数据 void InitList(linknode &L); //链表初始化 void Insertlist(linknode &L,int one,int two,char thr); //插入数据 int Serchlist(linknode L,int one,int two,char thr); //查询节点 void Printrecord(linknode &L,int hang); //输出数据 void menu1(); //大要求的菜单选项 void choice(int *n); //对用户的提供的选择 void menu2(); //是否有乘除法,数值范围,打印中每行的间隔可调整,除法有无余数, void standerd(int *n,int *f,int *y,int *h);
void main() { int num=5; //出题数量 int chengchucan=0; int fanweican=100; int yushucan=0; int hangcan=0; linknode l; InitList(l); choice(&num); standerd(&chengchucan,&fanweican,&yushucan,&hangcan); Math(num,l,chengchucan,fanweican,yushucan); //调用函数,产生数据 Printrecord(l,hangcan); }
void menu1() { cout<<"- - - - - - - - - - - 菜单- - - - - - -- - - - - - "<<endl; cout<<" 1.定制出题数量 "<<endl; cout<<" 2.定制打印 "<<endl; //附加功能?? cout<<" 3.退出菜单 "<<endl; cout<<" 4.使用说明 "<<endl; cout<<"- - - - - - - ---------------二柱子- "<<endl; }
void menu2() { cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~菜单~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"<<endl; cout<<" 1.是否有乘除法 "<<endl; cout<<" 2.数值范围 "<<endl; cout<<" 3.除法有无余数 "<<endl; cout<<" 4.打印中每行的间隔可调整 "<<endl; cout<<" 5.退出菜单 "<<endl; cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~~ ~ ~ ~ ~ ~ ~ ~ 二柱子 ~"<<endl;
}
void choice(int *n) { int choi,number; menu1(); cout<<"请输入选择"<<endl; cin>>choi; while(choi!=3) { switch(choi) { case 1: { cout<<"请输入题目数量"<<endl; cin>>number; *n=number; menu1(); cin>>choi; break; } case 2: { cout<<"定制打印"<<endl; menu1(); cin>>choi; break; } case 4: { cout<<" 使用说明书"<<endl; menu1(); cin>>choi; break; } } } }
void standerd(int *chengchu,int *fanwei,int *yushu,int *hangjian) { int select,can1,can2,can3,can4; menu2(); cout<<"请输入选择"<<endl; cin>>select; while(select!=5) { switch(select) { case 1: //是否有乘除法 { cout<<"请输入选择 0代表设定乘除法1代表不设定乘除法(程序默认拥有乘除法)"<<endl; cin>>can1; if(can1==1) *chengchu=1; menu2(); cin>>select; break; } case 2: //数值范围 { cout<<"请输入 您想要的出题数值范围(程序默认数值范围为100以内)"<<endl; cin>>can2; *fanwei=can2; menu2(); cin>>select; break; } case 3: //除法有无余数 { cout<<"请输入选择 0代表设定允许余数1代表不允许除法有余数(程序默认会有余数)"<<endl; cin>>can3; *yushu=can3; menu2(); cin>>select; break; } case 4: //打印中每行的间隔可调整 { cout<<"请输入 您想要的打印题目之间的间隔(程序默认打印题目之间的间隔为0)"<<endl; cin>>can4; *hangjian=can4; menu2(); cin>>select; break; } } }
} void Math(int num,linknode &L,int chengchu,int fanwei,int yushu) { srand(time(NULL)); int a,b,c,rule; char d; int sancan=4; int onecan=100; if(chengchu==1) //对乘除参数进行判断,为1时设置参数的改变 sancan=2;
onecan=fanwei; //对数值范围的修改,默认为 for(int x=0;x<num;x++) { a=rand()%onecan; b=rand()%onecan; c=rand()%sancan; //cout<<"连续输入三个数"<<endl; //测试产生数据相同时的结构是否成立 //cin>>a>>b>>c; rule=0; switch(c) { case 0: d='+'; break; case 1: d='-'; break; case 2: d='*'; break; case 3: d='/'; break; } rule=Serchlist(L,a,b,d); if(rule==0) { x--; //cout<<"ji zhi "<<endl; } else if(yushu==1&&c==3&&a%b!=0) { x--; cout<<"余数设置规则"<<endl; } else Insertlist(L,a,b,d); } }
void InitList(linknode &L) { L=new node; L->next=NULL; }
void Insertlist(linknode &L,int one,int two,char thr) { linknode p=L; while(p->next!=NULL) p=p->next; node * s=NULL; s = (node *) malloc (sizeof(node)); s->num1=one; s->num2=two; s->ope=thr; s->next=p->next; p->next=s; }
int Serchlist(linknode L,int one,int two,char thr) { if(L->next==NULL) return 1; linknode p=L->next; while(p!=NULL) { if(p->num1==one&&p->num2==two&&p->ope==thr) return 0; p=p->next; } return 1; }
void Printrecord(linknode &L,int hang) { int a=hang; linknode p=L->next; while(p !=NULL) { cout<<p->num1<<p->ope<<p->num2<<"="<<endl; while(hang>0) { cout<<endl; hang--; } hang=a; p=p->next; } }