标签:key scan else cas rcm 算法 tchar tty 判断
简单的思路,简单的算法
题目简述:实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作。
结构体定义如下:
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 }
标签:key scan else cas rcm 算法 tchar tty 判断
原文地址:https://www.cnblogs.com/zcl843264327/p/9240893.html