简单的思路,简单的算法
题目简述:实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作。
结构体定义如下:
typedef struct equipmentInfo { char equipCode[10]; //设备编号 char equipType[20]; //设备总类 char equipName[20]; //设备名称 char equipPrice[20]; //设备价格 char buyDate[20]; //设备购入日期 int scrap; //是否报废,0表示没有报废,1表示报废 char scrapDate[20]; //报废日期 }EquInfo;
在此做了六个模块,分别是:实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块、实验设备查询模块。
函数定义如下:
int Scaninfor();//浏览设备信息 int Inputinformation();//设备信息输入模块 int Addinfor();//设备信息添加模块 int Modifyinfor();//设备信息修改模块 int Classifyinfor();//设备分类统计模块 int Searchinfor();//设备查询模块
设计思路:
1.主函数模块 int main() { 提供菜单栏选项; 用户选择(输入)相应标号进入相应模块; 通过函数返回的值判断是否结束程序; } 2.浏览模块 int Scaninfor() { 以r模式打开文件并按数据块读取; 输出读到的内容; } 3.输入模块 int Inputinformation() { 以w模式打开或创建文件(原有数据不保留); 用户输入内容; 按数据块将结构体数组写入文件; 用户返回是否愿意继续操作; } 4.追加模块 int Addinfor() { 以a模式打开文件并按数据块读取; 用户输入内容; fseek找到文件末尾; 按数据块将用户追加的结构体数组写入文件; 用户返回是否愿意继续操作; } 5.修改模块 int Modifyinfor() { 以r模式打开文件并按数据块读取; 用户输入需要修改信息的设备编码; 找到此编码,用户重新输入; 以w模式打开文件,重新写入整个结构体数组; 用户返回是否愿意继续操作; } 6.分类统计模块 int Classifyinfor() { 以r模式打开文件并按数据块读取; 菜单提供分类方式; 用户输入相应标号进入相应模块; 排序对应分类; 用户输入想要查找的内容; 查找并统计,输出总数; 用户返回是否愿意继续操作; } 7.查询模块 int Searchinfor() { 以r模式打开文件并按数据块读取; 菜单提供用户想要的查询方式; 选择相应标号进入相应模块; 用户输入查找内容; 遍历相应结构体数组变量; 若与用户内容相同,输出此条信息; 用户返回是否愿意继续操作; }
源代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #include <string.h> 5 #include <conio.h> 6 #define N 20 7 typedef struct equipmentInfo 8 { 9 char equipCode[10]; //设备编号 10 char equipType[20]; //设备总类 11 char equipName[20]; //设备名称 12 char equipPrice[20]; //设备价格 13 char buyDate[20]; //设备购入日期 14 int scrap; //是否报废,0表示没有报废,1表示报废 15 char scrapDate[20]; //报废日期 16 }EquInfo; 17 EquInfo equip[N]; 18 int Scaninfor();//浏览设备信息 19 int Inputinformation();//设备信息输入模块 20 int Addinfor();//设备信息添加模块 21 int Modifyinfor();//设备信息修改模块 22 int Classifyinfor();//设备分类统计模块 23 int Searchinfor();//设备查询模块 24 int i = 0; 25 int main() 26 { 27 printf("*************************************\n"); 28 printf("***** 输入对应数字标号选择菜单\t*****\n"); 29 printf("*****\t[0] 浏览实验设备信息\t*****\n"); 30 printf("*****\t[1] 输入实验设备信息\t*****\n"); 31 printf("*****\t[2] 添加实验设备信息\t*****\n"); 32 printf("*****\t[3] 修改实验设备信息\t*****\n"); 33 printf("*****\t[4] 设备信息分类统计\t*****\n"); 34 printf("*****\t[5] 查询实验设备信息\t*****\n"); 35 printf("*****\t[6] 退出 \t*****\n"); 36 printf("*************************************\n"); 37 int menu,t; 38 do 39 { 40 printf("请输入数字标号:\n"); 41 scanf("%d",&menu); 42 }while(menu < 0 || menu > 6); 43 switch(menu) 44 { 45 case 0: 46 t = Scaninfor();break; 47 case 1: 48 t = Inputinformation();break; 49 case 2: 50 t = Addinfor();break; 51 case 3: 52 t = Modifyinfor();break; 53 case 4: 54 t = Classifyinfor();break; 55 case 5: 56 t = Searchinfor();break; 57 case 6: 58 exit(0);break; 59 default: 60 printf("INPUT ERROR !"); 61 } 62 getchar(); 63 if(t == 48) 64 return 0; 65 else 66 main(); 67 } 68 int Scaninfor() 69 { 70 FILE *fp; 71 int j,k; 72 char a; 73 if((fp = fopen("equipInfor.txt","r")) == NULL) 74 { 75 printf("Failure to open equipInfor.txt!\n"); 76 exit(0); 77 } 78 for(k = 0;!feof(fp);k++) 79 { 80 fread(&equip[k], sizeof(EquInfo), 1, fp); 81 } 82 printf("code\ttype \tname\tprice\tbuydate \tscrap\tscrapdate\n\n\n"); 83 for(j = 0;j < k-1;j++) 84 { 85 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 86 } 87 fclose(fp); 88 printf("press 0 to exit or other key to return menu:\n"); 89 scanf(" %c",&a); 90 return a; 91 } 92 int Inputinformation() 93 { 94 int n; 95 char a; 96 printf("Please input the number of equipments:"); 97 scanf("%d",&n); 98 getchar(); 99 printf("Please input the equipCode, equipType, equipName,"); 100 printf(" equipPrice, buyDate, scrap(no 0 or yes 1), scrapDate:\n"); 101 do 102 { 103 printf("please input the information of %d:\n",i+1); 104 strcpy(equip[i].scrapDate, "no scrap"); 105 printf("please input the equipCode:\n"); 106 gets(equip[i].equipCode); 107 printf("please input the equipType:\n"); 108 gets(equip[i].equipType); 109 printf("please input the equipName:\n"); 110 gets(equip[i].equipName); 111 printf("please input the equipPrice:\n"); 112 gets(equip[i].equipPrice); 113 printf("please input the buyDate:\n"); 114 gets(equip[i].buyDate); 115 printf("please input is(1) or not(0) scrap:\n"); 116 scanf("%d",&equip[i].scrap); 117 getchar(); 118 if(equip[i].scrap == 1) 119 { 120 printf("please input the scrap date:\n"); 121 gets(equip[i].scrapDate); 122 } 123 i++; 124 }while(i < n); 125 FILE *fp; 126 if((fp = fopen("equipInfor.txt","w")) == NULL) 127 { 128 printf("Failure to open equipInfor.txt!\n"); 129 exit(0); 130 } 131 fwrite(equip, sizeof(EquInfo), n, fp); 132 fclose(fp); 133 printf("press 0 to exit or other key to return menu:\n"); 134 scanf(" %c",&a); 135 return a; 136 } 137 int Addinfor() 138 { 139 int k = 0,j; 140 FILE *fp; 141 if((fp = fopen("equipInfor.txt","a")) == NULL) 142 { 143 printf("Failure to open equipInfor.txt!\n"); 144 exit(0); 145 } 146 int n; 147 char a; 148 printf("Please input the number of the adding equipments:"); 149 scanf("%d",&n); 150 getchar(); 151 printf("Please input the equipCode,equipType,equipName,"); 152 printf("equipPrice,buyDate,scrap(no 0 or yes 1),scrapDate:\n"); 153 do 154 { 155 printf("please input the adding information of %d:\n",k+1); 156 strcpy(equip[k].scrapDate, "no scrap"); 157 printf("please input the equipCode:\n"); 158 gets(equip[k].equipCode); 159 printf("please input the equipType:\n"); 160 gets(equip[k].equipType); 161 printf("please input the equipName:\n"); 162 gets(equip[k].equipName); 163 printf("please input the equipPrice:\n"); 164 gets(equip[k].equipPrice); 165 printf("please input the buyDate:\n"); 166 gets(equip[k].buyDate); 167 printf("please input is(1) or not(0) scrap:\n"); 168 scanf("%d",&equip[k].scrap); 169 getchar(); 170 if(equip[k].scrap == 1) 171 { 172 printf("please input the scrap date:\n"); 173 gets(equip[k].scrapDate); 174 } 175 k++; 176 }while(k < n); 177 fseek(fp,0,SEEK_END); 178 for(j = 0;j<n;j++) 179 fwrite(&equip[j], sizeof(EquInfo), 1, fp); 180 fclose(fp); 181 printf("press 0 to exit or other key to return menu:\n"); 182 scanf(" %c",&a); 183 return a; 184 } 185 int Modifyinfor() 186 { 187 FILE *fp; 188 int k,j,a,b,l; 189 char c; 190 char code[20]; 191 getchar(); 192 printf("please input the equipCode of the equipment which you want to modify:\n"); 193 gets(code); 194 if((fp = fopen("equipInfor.txt","r")) == NULL) 195 { 196 printf("Failure to open equipInfor.txt!\n"); 197 exit(0); 198 } 199 for(k = 0;!feof(fp);k++) 200 { 201 fread(&equip[k], sizeof(EquInfo), 1, fp); 202 } 203 for(j = 0;j < k;j++) 204 { 205 a = strcmp(equip[j].equipCode,code); 206 if(a == 0) 207 { 208 printf("please modify(re-input) the information:\n"); 209 strcpy(equip[j].scrapDate, "no scrap"); 210 printf("please input the equipCode:\n"); 211 gets(equip[j].equipCode); 212 printf("please input the equipType:\n"); 213 gets(equip[j].equipType); 214 printf("please input the equipName:\n"); 215 gets(equip[j].equipName); 216 printf("please input the equipPrice:\n"); 217 gets(equip[j].equipPrice); 218 printf("please input the buyDate:\n"); 219 gets(equip[j].buyDate); 220 printf("please input is(1) or not(0) scrap:\n"); 221 scanf("%d",&equip[j].scrap); 222 getchar(); 223 if(equip[j].scrap == 1) 224 { 225 printf("please input the scrap date:\n"); 226 gets(equip[j].scrapDate); 227 } 228 //k = j; 229 break; 230 } 231 } 232 if(a) 233 printf("don‘t find the equipCode that you input\n"); 234 fclose(fp); 235 if((fp = fopen("equipInfor.txt","w")) == NULL) 236 { 237 printf("Failure to open equipInfor.txt!\n"); 238 exit(0); 239 } 240 for(l = 0;l < k-1;l++) 241 fwrite(&equip[l], sizeof(EquInfo), 1, fp); 242 fclose(fp); 243 printf("press 0 to exit or other key to return menu:\n"); 244 scanf(" %c",&c); 245 return a; 246 } 247 int Classifyinfor() 248 { 249 char a; 250 FILE *fp; 251 int q,count = 0,j,k; 252 int total; 253 char s[N],temp[N],*te; 254 printf("*****\t[1] 设备种类\t*****\n"); 255 printf("*****\t[2] 设备名称\t*****\n"); 256 printf("*****\t[3] 购买日期\t*****\n"); 257 printf("请输入你想要的分类方式:"); 258 scanf("%d",&q); 259 getchar(); 260 if((fp = fopen("equipInfor.txt","r")) == NULL) 261 { 262 printf("Failure to open equipInfor.txt!\n"); 263 exit(0); 264 } 265 for(total = 0;!feof(fp);total++) 266 { 267 fread(&equip[total], sizeof(EquInfo), 1, fp); 268 } 269 switch(q) 270 { 271 case 1: 272 printf("please input the equipType:\n"); 273 gets(s); 274 for(j = 0;j < total-1;j++) 275 { 276 for(k = 1;k < total;k++) 277 { 278 if(strcmp(equip[k].equipType,equip[j].equipType) < 0) 279 { 280 strcpy(temp, equip[k].equipType); 281 strcpy(equip[k].equipType, equip[j].equipType); 282 strcpy(equip[j].equipType, temp); 283 } 284 } 285 } 286 for(j = 0;j < total;j++) 287 { 288 if(strcmp(s,equip[j].equipType) == 0) 289 { 290 count++; 291 } 292 } 293 printf("%s类型的实验仪器有%d台\n",s,count); 294 break; 295 case 2: 296 printf("please input the equipName:\n"); 297 gets(s); 298 for(j = 0;j < total - 1;j++) 299 { 300 for(k = 1;k < total;k++) 301 { 302 if(strcmp(temp,equip[j].equipName) < 0) 303 { 304 strcpy(temp, equip[k].equipName); 305 strcpy(equip[k].equipName, equip[j].equipName); 306 strcpy(equip[j].equipName, temp); 307 } 308 } 309 } 310 for(j = 0;j < total;j++) 311 { 312 if(strcmp(s,equip[j].equipName) == 0) 313 { 314 count++; 315 } 316 } 317 printf("%s名称的仪器有%d台\n",s,count); 318 break; 319 case 3: 320 printf("please input the buyDate:\n"); 321 gets(s); 322 for(j = 0;j < total - 1;j++) 323 { 324 for(k = 1;k < total;k++) 325 { 326 if(strcmp(s, equip[j].buyDate) < 0) 327 { 328 strcpy(temp, equip[k].buyDate); 329 strcpy(equip[k].buyDate, equip[j].buyDate); 330 strcpy(equip[j].buyDate, temp); 331 } 332 } 333 } 334 for(j = 0;j < total;j++) 335 { 336 if(strcmp(s,equip[j].buyDate) == 0) 337 { 338 count++; 339 } 340 } 341 printf("%s日期购买的仪器有%d台\n",s,count); 342 break; 343 default: 344 printf("INPUT ERROR !\n"); 345 } 346 printf("press 0 to exit or other key to return menu:\n"); 347 scanf(" %c",&a); 348 return a; 349 } 350 int Searchinfor() 351 { 352 int n,m,k; 353 char a; 354 FILE *fp; 355 printf("*************************************\n"); 356 printf("*****\t[1] 按设备编号查询\t*****\n"); 357 printf("*****\t[2] 按设备种类查询\t*****\n"); 358 printf("*****\t[3] 按设备名称查询\t*****\n"); 359 printf("*****\t[4] 按设备购入日期查询\t*****\n"); 360 printf("*****\t[5] 按设备状态查询\t*****\n"); 361 printf("*************************************\n"); 362 printf("请输入所需要的查询方式:"); 363 scanf("%d",&n); 364 getchar(); 365 if((fp = fopen("equipInfor.txt","r")) == NULL) 366 { 367 printf("Failure to open equipInfor.txt!\n"); 368 exit(0); 369 } 370 for(k = 0;!feof(fp);k++) 371 { 372 fread(&equip[k], sizeof(EquInfo), 1, fp); 373 } 374 int j,flag,sc; 375 switch(n) 376 { 377 case 1: 378 flag = 0; 379 char code[N]; 380 printf("please input the equipCode:"); 381 gets(code); 382 for(j = 0;j < k-1;j++) 383 { 384 if(strcmp(equip[j].equipCode, code) == 0) 385 { 386 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 387 flag = 1; 388 } 389 } 390 if(!flag) 391 printf("not find !"); 392 break; 393 case 2: 394 flag = 0; 395 char type[N]; 396 printf("please input the equipType:"); 397 gets(type); 398 for(j = 0;j < k-1;j++) 399 { 400 if(strcmp(equip[j].equipType, type) == 0) 401 { 402 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 403 flag = 1; 404 } 405 } 406 if(!flag) 407 printf("not find !"); 408 break; 409 case 3: 410 flag = 0; 411 char name[N]; 412 printf("please input the equipName:"); 413 gets(name); 414 for(j = 0;j < k-1;j++) 415 { 416 if(strcmp(equip[j].equipName, name) == 0) 417 { 418 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 419 flag = 1; 420 } 421 } 422 if(!flag) 423 printf("not find !"); 424 break; 425 case 4: 426 flag = 0; 427 char date[N]; 428 printf("please input the buyDate:"); 429 gets(date); 430 for(j = 0;j < k-1;j++) 431 { 432 if(strcmp(equip[j].buyDate, date) == 0) 433 { 434 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 435 flag = 1; 436 } 437 } 438 if(!flag) 439 printf("not find !"); 440 break; 441 case 5: 442 flag = 0; 443 printf("please input the scrap:"); 444 scanf("%d",&sc); 445 for(j = 0;j < k-1;j++) 446 { 447 if(equip[j].scrap == sc) 448 { 449 printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\n",equip[j].equipCode, equip[j].equipType, equip[j].equipName, equip[j].equipPrice, equip[j].buyDate, equip[j].scrap, equip[j].scrapDate); 450 flag = 1; 451 } 452 } 453 if(!flag) 454 printf("not find !"); 455 break; 456 default: 457 printf("INPUT ERROR !"); 458 } 459 printf("press 0 to exit or other key to return menu\n"); 460 scanf(" %c",&a); 461 return a; 462 }
原文地址:https://www.cnblogs.com/zcl843264327/p/9240893.html
时间: 2024-10-11 00:05:34