2015-03-12
基本上是按上一篇博文中的思想,粗略的編寫了一個beta版,不足也是有的,一些判斷機智,程序的健壯性有待改進。
1 #include<iostream> 2 #include<time.h> 3 using namespace std; 4 typedef struct node{ 5 int num1; 6 int num2; 7 char ope; 8 struct node *next; 9 }node,*linknode; //定義三個操作數的數據結構,用於對產生數據的記錄 10 11 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu); //產生數據 12 void InitList(linknode &L); //鏈表初始化 13 void Insertlist(linknode &L,int one,int two,char thr); //插入數據 14 int Serchlist(linknode L,int one,int two,char thr); //查詢節點 15 void Printrecord(linknode &L,int hang); //輸出數據 16 void menu1(); //大要求的菜單選項 17 void choice(int *n); //對用戶的提供的選擇 18 void menu2(); //是否有乘除法,數值范圍,打印中每行的間隔可調整,除法有無余數, 19 void standerd(int *n,int *f,int *y,int *h); 20 21 void main() 22 { 23 int num=5; //出題數量 24 int chengchucan=0; 25 int fanweican=100; 26 int yushucan=0; 27 int hangcan=0; 28 linknode l; 29 InitList(l); 30 choice(&num); 31 standerd(&chengchucan,&fanweican,&yushucan,&hangcan); 32 Math(num,l,chengchucan,fanweican,yushucan); //調用函數,產生數據 33 Printrecord(l,hangcan); 34 } 35 36 void menu1() 37 { 38 cout<<"- - - - - - - - - - - 菜單- - - - - - -- - - - - - "<<endl; 39 cout<<" 1.定制出題數量 "<<endl; 40 cout<<" 2.定制打印 "<<endl; //附加功能?? 41 cout<<" 3.退出菜單 "<<endl; 42 cout<<" 4.使用說明 "<<endl; 43 cout<<"- - - - - - - ---------------二柱子- "<<endl; 44 } 45 46 void menu2() 47 { 48 cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~菜單~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"<<endl; 49 cout<<" 1.是否有乘除法 "<<endl; 50 cout<<" 2.數值范圍 "<<endl; 51 cout<<" 3.除法有無余數 "<<endl; 52 cout<<" 4.打印中每行的間隔可調整 "<<endl; 53 cout<<" 5.退出菜單 "<<endl; 54 cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~~ ~ ~ ~ ~ ~ ~ ~ 二柱子 ~"<<endl; 55 56 } 57 58 void choice(int *n) 59 { 60 int choi,number; 61 menu1(); 62 cout<<"請輸入選擇"<<endl; 63 cin>>choi; 64 while(choi!=3) 65 { 66 switch(choi) 67 { 68 case 1: 69 { 70 cout<<"請輸入題目數量"<<endl; 71 cin>>number; 72 *n=number; 73 menu1(); 74 cin>>choi; 75 break; 76 } 77 case 2: 78 { 79 cout<<"定制打印"<<endl; 80 menu1(); 81 cin>>choi; 82 break; 83 } 84 case 4: 85 { 86 cout<<" 使用說明書"<<endl; 87 menu1(); 88 cin>>choi; 89 break; 90 } 91 92 } 93 } 94 } 95 96 void standerd(int *chengchu,int *fanwei,int *yushu,int *hangjian) 97 { 98 int select,can1,can2,can3,can4; 99 menu2(); 100 cout<<"請輸入選擇"<<endl; 101 cin>>select; 102 while(select!=5) 103 { 104 switch(select) 105 { 106 case 1: //是否有乘除法 107 { 108 cout<<"請輸入選擇 0代表設定乘除法1代表不設定乘除法(程序默認擁有乘除法)"<<endl; 109 cin>>can1; 110 if(can1==1) 111 *chengchu=1; 112 menu2(); 113 cin>>select; 114 break; 115 } 116 case 2: //數值范圍 117 { 118 cout<<"請輸入 您想要的出題數值范圍(程序默認數值范圍為100以內)"<<endl; 119 cin>>can2; 120 *fanwei=can2; 121 menu2(); 122 cin>>select; 123 break; 124 } 125 case 3: //除法有無余數 126 { 127 cout<<"請輸入選擇 0代表設定允許余數1代表不允許除法有余數(程序默認會有余數)"<<endl; 128 cin>>can3; 129 *yushu=can3; 130 menu2(); 131 cin>>select; 132 break; 133 } 134 case 4: //打印中每行的間隔可調整 135 { 136 cout<<"請輸入 您想要的打印題目之間的間隔(程序默認打印題目之間的間隔為0)"<<endl; 137 cin>>can4; 138 *hangjian=can4; 139 menu2(); 140 cin>>select; 141 break; 142 } 143 } 144 } 145 146 } 147 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu) 148 { 149 srand(time(NULL)); 150 int a,b,c,rule; 151 char d; 152 int sancan=4; 153 int onecan=100; 154 if(chengchu==1) //對乘除參數進行判斷,為1時設置參數的改變 155 sancan=2; 156 157 onecan=fanwei; //對數值范圍的修改,默認為 158 for(int x=0;x<num;x++) 159 { 160 a=rand()%onecan; 161 b=rand()%onecan; 162 c=rand()%sancan; 163 //cout<<"連續輸入三個數"<<endl; //測試產生數據相同時的結構是否成立 164 //cin>>a>>b>>c; 165 rule=0; 166 switch(c) 167 { 168 case 0: 169 d='+'; 170 break; 171 case 1: 172 d='-'; 173 break; 174 case 2: 175 d='*'; 176 break; 177 case 3: 178 d='/'; 179 break; 180 } 181 rule=Serchlist(L,a,b,d); 182 if(rule==0) 183 { 184 x--; 185 //cout<<"ji zhi "<<endl; 186 } 187 else if(yushu==1&&c==3&&a%b!=0) 188 { 189 x--; 190 cout<<"余數設置規則"<<endl; 191 } 192 else 193 Insertlist(L,a,b,d); 194 195 } 196 } 197 198 void InitList(linknode &L) 199 { 200 L=new node; 201 L->next=NULL; 202 } 203 204 void Insertlist(linknode &L,int one,int two,char thr) 205 { 206 linknode p=L; 207 while(p->next!=NULL) 208 p=p->next; 209 node * s=NULL; 210 s = (node *) malloc (sizeof(node)); 211 s->num1=one; 212 s->num2=two; 213 s->ope=thr; 214 s->next=p->next; 215 p->next=s; 216 } 217 218 int Serchlist(linknode L,int one,int two,char thr) 219 { 220 if(L->next==NULL) 221 return 1; 222 linknode p=L->next; 223 while(p!=NULL) 224 { 225 if(p->num1==one&&p->num2==two&&p->ope==thr) 226 return 0; 227 p=p->next; 228 } 229 return 1; 230 } 231 232 void Printrecord(linknode &L,int hang) 233 { 234 int a=hang; 235 linknode p=L->next; 236 while(p !=NULL) 237 { 238 cout<<p->num1<<p->ope<<p->num2<<"="<<endl; 239 while(hang>0) 240 { 241 cout<<endl; 242 hang--; 243 } 244 hang=a; 245 p=p->next; 246 } 247 }



一、項目計划總結:
第二周活動總結表
姓名:趙小早 日期:3/10/2015
日期 任務 |
聽課 |
編寫程序 |
閱讀課本 |
准備考試 |
|
|
日總計 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
80 |
100 |
30 |
|
|
|
|
周三 |
80 |
60 |
|
|
|
|
|
周四 |
|
60 |
|
|
|
|
|
周五 |
|
|
|
|
|
|
|
周六 |
|
|
|
|
|
|
|
周總結 |
|
|
|
|
|
|
|
二、時間記錄表:
學生 趙小早 日期 3/10/2015
教師 王建民 課程 PSP
日期 |
開始時間 |
結束時間 |
中斷時間 |
凈時間 |
活動 |
備注 |
3/10 |
2:00 |
4:00 |
|
100 |
編程 |
|
3/11 |
2:00 |
4:00 |
|
|
上課 |
|
|
4:00 |
6:00 |
|
|
編程 |
|
3/15 |
3:00 |
4 :00 |
|
|
編程 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、缺陷記錄日志:
學生 趙小早
日期 3、10
教員 王建民
程序號
日期 |
編號 |
類型 |
引入階段 |
排除階段 |
修復時間 |
修復缺陷 |
3/10 |
20 |
傳入指針,操作指針 |
設計 |
編譯 |
5min |
|
對傳入指針,傳地址形式的操作參數,疏忽了加星號 |
||||||
|
40 |
鏈表創建 |
設計 |
編譯 |
5min |
|
創建鏈表時申請節點大小的空間(采用指針方式創建節點) |
||||||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|