写一个无用的程序
借練習(xí)冊上的題目,寫一個(gè)沒有實(shí)際用途的學(xué)生成績管理系統(tǒng)。
記一下在寫代碼事的感受吧。
發(fā)現(xiàn)的問題:
1.寫代碼沒有自己的風(fēng)格
2.對環(huán)境熟練程度不夠
3.寫代碼之前缺少整體的構(gòu)思,導(dǎo)致編寫完成的代碼重復(fù)部分多,結(jié)構(gòu)冗雜
解決措施:
1.工欲善其事必先利其器,選擇一個(gè)好的開發(fā)環(huán)境,多加練習(xí)
2.應(yīng)該將時(shí)間用在程序設(shè)計(jì)上而不是花大量的時(shí)間在敲代碼
發(fā)現(xiàn)的優(yōu)點(diǎn):
1.變量名逐漸形成了自己的特色
2.發(fā)現(xiàn)能夠借助程序框圖理清思路
3.程序編寫趨向模塊化,對某一模塊把握較清楚
程序本身無實(shí)用性的原因:
1.程序采用讀入文件中的所有數(shù)據(jù)到內(nèi)存當(dāng)中,當(dāng)文件包含大量數(shù)據(jù)時(shí)不能實(shí)現(xiàn);
2.沒有排序功能;
3.數(shù)據(jù)文件無加密,程序運(yùn)行無權(quán)限限制;
4.程序一次僅執(zhí)行一次操作,效率低。
日后有時(shí)間再來整理優(yōu)化完善程序
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<fcntl.h> 4 #include<unistd.h> 5 #include<errno.h> 6 #include<string.h> 7 #include<strings.h> 8 struct student//學(xué)生數(shù)據(jù)結(jié)構(gòu)體 9 { 10 long int num; 11 char name[10]; 12 int sex; 13 int age; 14 float cscore; 15 struct student * next; 16 }*head,*on,*nt; 17 int main() 18 { 19 20 21 22 23 24 25 26 27 28 29 /*---開始從文件讀入數(shù)據(jù)---*/ 30 int fd,pre,total=0; 31 fd=open("stu.dat",O_RDONLY);//打開文件 32 if(fd==EOF)//如果文件打開錯(cuò)誤輸出錯(cuò)誤信息 33 perror(""); 34 pre=dup(0);//保存原標(biāo)準(zhǔn)輸入 35 dup2(fd,0);//設(shè)置文件為標(biāo)準(zhǔn)輸入 36 head=(struct student *)malloc(sizeof(struct student)); 37 on=head; 38 if(1+scanf("%ld",&(*on).num)) 39 { 40 total++; 41 scanf("%s %d %d %f",(*on).name,&(*on).sex,&(*on).age,&(*on).cscore); 42 nt=(struct student *)malloc(sizeof(struct student)); 43 while(1+scanf("%ld",&(*nt).num)) 44 { 45 total++; 46 scanf(" %s %d %d %f",(*nt).name,&(*nt).sex,&(*nt).age,&(*nt).cscore); 47 (*on).next=nt; 48 on=nt; 49 nt=(struct student *)malloc(sizeof(struct student)); 50 } 51 (*on).next=NULL; 52 } 53 close(fd);//關(guān)閉文件 54 dup2(pre,0);//重置標(biāo)準(zhǔn)輸入 55 /*---結(jié)束從文件讀入數(shù)據(jù)---*/ 56 57 58 59 60 61 62 63 64 65 66 /*---測試打印鏈表--- 67 struct student * print_on,* find_next; 68 print_on=head; 69 do 70 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*print_on).num,(*print_on).name,(*print_on).sex,(*print_on).age,(*print_on).cscore); 71 while((print_on=(*print_on).next)!=NULL); 72 ---打印鏈表完成---*/ 73 74 75 76 77 78 79 80 81 82 83 /*---查找數(shù)據(jù)并將指針存入數(shù)組---*/ 84 struct student * find[100],* find_on,* insert,* bef_delete; 85 int func,find_x,find_total=0,change_x; 86 long int find_num; 87 char find_name[10],*name; 88 int find_sex; 89 int find_age; 90 float find_cscore1,find_cscore2; 91 find_on=head; 92 printf("1.查看數(shù)據(jù)內(nèi)容\n2.查找數(shù)據(jù)并在數(shù)據(jù)后插入數(shù)據(jù)\n3.查找數(shù)據(jù)并修改數(shù)據(jù)\n4.刪除數(shù)據(jù)\n"); 93 scanf("%d",&func); 94 printf("1.按學(xué)號(hào)查找\n2.按姓名查找\n3.按性別查找\n4.按年齡查找\n5.按C成績范圍查找\n\n"); 95 scanf("%d",&find_x); 96 switch(find_x) 97 { 98 case 1: 99 { 100 printf("請輸入學(xué)號(hào):\n"); 101 scanf("%ld",&find_num); 102 do 103 if((*find_on).num==find_num) 104 find[find_total++]=find_on; 105 while((find_on=(*find_on).next)!=NULL); 106 break; 107 } 108 case 2: 109 { 110 printf("請輸入姓名:\n"); 111 scanf("%s",find_name); 112 name=find_name; 113 do 114 if(!bcmp(find_name,&((*find_on).name),sizeof(name))) 115 find[find_total++]=find_on; 116 while((find_on=(*find_on).next)!=NULL); 117 break; 118 } 119 case 3: 120 { 121 printf("請輸入性別(0=女,1=男):\n"); 122 scanf("%d",&find_sex); 123 do 124 if((*find_on).sex==find_sex) 125 find[find_total++]=find_on; 126 while((find_on=(*find_on).next)!=NULL); 127 break; 128 } 129 case 4: 130 { 131 printf("請輸入年齡:\n"); 132 scanf("%d",&find_age); 133 do 134 if((*find_on).age==find_age) 135 find[find_total++]=find_on; 136 while((find_on=(*find_on).next)!=NULL); 137 break; 138 } 139 case 5: 140 { 141 printf("請輸入C成績范圍(兩個(gè)數(shù)值中間用空格隔開):\n"); 142 scanf("%f%f",&find_cscore1,&find_cscore2); 143 do 144 if((*find_on).cscore>=find_cscore1&&(*find_on).cscore<=find_cscore2||(*find_on).cscore<=find_cscore1&&(*find_on).cscore>=find_cscore2) 145 find[find_total++]=find_on; 146 while((find_on=(*find_on).next)!=NULL); 147 break; 148 } 149 default :break; 150 } 151 /*---指針存入數(shù)組完成---*/ 152 153 154 155 156 157 158 159 160 161 162 /*---功能實(shí)現(xiàn)---*/ 163 int find_total_tem=find_total-1; 164 int i,m; 165 int pfind=0; 166 switch(func) 167 { 168 case 1: 169 { 170 for(;pfind<find_total;pfind++) 171 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore); 172 break; 173 } 174 case 2: 175 { 176 while(find_total_tem>=1) 177 { 178 for(;pfind<find_total;pfind++) 179 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore); 180 printf("找到以上多個(gè)數(shù)據(jù),請繼續(xù)輸入篩選條件:\n"); 181 182 printf("1.按學(xué)號(hào)查找\n2.按姓名查找\n\n"); 183 scanf("%d",&find_x); 184 switch(find_x) 185 { 186 case 1: 187 { 188 printf("請輸入學(xué)號(hào):\n"); 189 scanf("%ld",&find_num); 190 for(i=0;i<find_total;i++) 191 if((*find[i]).num==find_num) 192 find[0]=find[i]; 193 else find[i]=NULL; 194 find_total_tem=0; 195 break; 196 197 } 198 case 2: 199 { 200 find_total_tem=0; 201 printf("請輸入姓名:\n"); 202 scanf("%s",find_name); 203 name=find_name; 204 for(i=0;i<find_total;i++) 205 if(!bcmp((*find[i]).name,find_name,sizeof((name)))) 206 find[find_total_tem++]=find[i]; 207 else find[i]=NULL; 208 find_total_tem--; 209 break; 210 }}} 211 insert=(struct student *)malloc(sizeof(struct student)); 212 printf("請輸入待添加學(xué)生的學(xué)號(hào):\n"); 213 scanf("%ld",&(*insert).num); 214 printf("請輸入待添加學(xué)生的姓名:\n"); 215 scanf("%s",(*insert).name); 216 printf("請輸入待添加學(xué)生的性別(0=女,1=男):\n"); 217 scanf("%d",&(*insert).sex); 218 printf("請輸入待添加學(xué)生的年齡:\n"); 219 scanf("%d",&(*insert).age); 220 printf("請輸入待添加學(xué)生C語言成績:\n"); 221 scanf("%f",&(*insert).cscore); 222 (*insert).next=(*find[0]).next; 223 (*find[0]).next=insert; 224 fd=open("stu.dat",O_RDWR|O_TRUNC);//打開文件 225 if(fd==EOF)//如果文件打開錯(cuò)誤輸出錯(cuò)誤信息 226 perror(""); 227 pre=dup(1);//保存原標(biāo)準(zhǔn)輸出的值 228 dup2(fd,1);//設(shè)置文件為標(biāo)準(zhǔn)輸出 229 on=head; 230 do printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore); 231 while((on=(*on).next)!=NULL); 232 close(fd);//關(guān)閉文件 233 dup2(pre,1);//重置標(biāo)準(zhǔn)輸出 234 printf("添加并保存數(shù)據(jù)完成\n"); 235 break; 236 } 237 case 3: 238 { 239 while(find_total_tem>=1) 240 { 241 for(;pfind<find_total;pfind++) 242 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore); 243 printf("找到多個(gè)數(shù)據(jù),請繼續(xù)輸入篩選條件:\n"); 244 printf("1.按學(xué)號(hào)查找\n2.按姓名查找\n\n"); 245 scanf("%d",&find_x); 246 switch(find_x) 247 { 248 case 1: 249 { 250 printf("請輸入學(xué)號(hào):\n"); 251 scanf("%ld",&find_num); 252 for(i=0;i<find_total;i++) 253 if((*find[i]).num==find_num) 254 find[0]=find[i]; 255 else find[i]=NULL; 256 find_total_tem=0; 257 break; 258 } 259 case 2: 260 { 261 find_total_tem=0; 262 printf("請輸入姓名:\n"); 263 scanf("%s",find_name); 264 name=find_name; 265 for(i=0;i<find_total;i++) 266 if(!bcmp((*find[i]).name,find_name,sizeof((name)))) 267 find[find_total_tem++]=find[i]; 268 else find[i]=NULL; 269 find_total_tem--; 270 break; 271 }}} 272 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[0]).num,(*find[0]).name,(*find[0]).sex,(*find[0]).age,(*find[0]).cscore); 273 printf("請輸入要修改的內(nèi)容:\n"); 274 printf("1.學(xué)號(hào) 2.姓名 3.性別 4.年齡 5.成績\n"); 275 scanf("%d",&change_x); 276 switch(change_x) 277 { 278 case 1: 279 { 280 printf("請輸入學(xué)號(hào):\n"); 281 scanf("%ld",&(*find[0]).num); 282 break; 283 } 284 case 2: 285 { 286 printf("請輸入姓名\n"); 287 scanf("%s",(*find[0]).name); 288 break; 289 } 290 case 3: 291 { 292 printf("請輸入性別(0=女,1=男):\n"); 293 scanf("%d",&(*find[0]).sex); 294 break; 295 } 296 case 4: 297 { 298 printf("請輸入年齡:\n"); 299 scanf("%d",&(*find[0]).age); 300 break; 301 } 302 case 5: 303 { 304 printf("請輸入C成績:\n"); 305 scanf("%f",&(*find[0]).cscore); 306 break; 307 } 308 default:break; 309 } 310 fd=open("stu.dat",O_RDWR|O_TRUNC);//打開文件 311 if(fd==EOF)//如果文件打開錯(cuò)誤輸出錯(cuò)誤信息 312 perror(""); 313 pre=dup(1);//保存原標(biāo)準(zhǔn)輸出 314 dup2(fd,1);//設(shè)置文件為標(biāo)準(zhǔn)輸出 315 on=head; 316 do 317 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore); 318 while((on=(*on).next)!=NULL); 319 close(fd);//關(guān)閉文件 320 dup2(pre,1);//重置標(biāo)準(zhǔn)輸出 321 printf("修改并保存數(shù)據(jù)完成\n"); 322 break; 323 } 324 case 4: 325 { 326 while(find_total_tem>=1) 327 { 328 for(;pfind<find_total;pfind++) 329 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore); 330 printf("找到多個(gè)數(shù)據(jù),請繼續(xù)輸入篩選條件:\n"); 331 printf("1.按學(xué)號(hào)查找\n2.按姓名查找\n\n"); 332 scanf("%d",&find_x); 333 switch(find_x) 334 { 335 case 1: 336 { 337 printf("請輸入學(xué)號(hào):\n"); 338 scanf("%ld",&find_num); 339 for(i=0;i<find_total;i++) 340 if((*find[i]).num==find_num) 341 find[0]=find[i]; 342 else find[i]=NULL; 343 find_total_tem=0; 344 break; 345 } 346 case 2: 347 { 348 find_total_tem=0; 349 printf("請輸入姓名:\n"); 350 scanf("%s",find_name); 351 name=find_name; 352 for(m=0;m<find_total;i++) 353 if(!bcmp((*find[i]).name,find_name,sizeof((name)))) 354 find[find_total_tem++]=find[i]; 355 else find[i]=NULL; 356 find_total_tem--; 357 break; 358 }}} 359 bef_delete=head; 360 if(head==find[0]) 361 head=(*head).next; 362 else 363 { 364 while((*bef_delete).next!=find[0]) 365 bef_delete=(*bef_delete).next; 366 (*bef_delete).next=(*find[0]).next; 367 } 368 fd=open("stu.dat",O_RDWR|O_TRUNC);//打開文件 369 if(fd==EOF)//如果文件打開錯(cuò)誤輸出錯(cuò)誤信息 370 perror(""); 371 pre=dup(1);//保存原標(biāo)準(zhǔn)輸出的值 372 dup2(fd,1);//設(shè)置文件為標(biāo)準(zhǔn)輸出 373 on=head; 374 do 375 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore); 376 while((on=(*on).next)!=NULL); 377 close(fd);//關(guān)閉文件 378 dup2(pre,1);//重置標(biāo)準(zhǔn)輸出 379 printf("刪除數(shù)據(jù)完成\n"); 380 } 381 default :break; 382 } 383 /*---功能結(jié)束---*/ 384 385 386 387 388 389 390 391 392 return 0; 393 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/Bird-Xu/p/6937751.html
總結(jié)
- 上一篇: 冲刺二阶段-个人总结03
- 下一篇: 怎样让你的安卓手机瞬间变Firefox