c 已经编好了 看不太懂 解释下部分功能 谢谢~
下面两个功能看不懂程序代码:
有的还没学到,能解释下吗?// 查询(编号) void query_data_no() { int i,k; char no[5]; printf("\n请输入要查询设备的编号:"); scanf("%s",no); k=-1; for(i=0;i<dd.count;i++) { if(strcmp(dd.she[i].no,no)==0) { k=i; printf("编号\t种类\t名称\t价格\t购入日期\t报废状态(0-报废,1-未报废)\t破损状态(0-破损,1-未破损)"); printf("\n-------------------------------------------------------------------\n"); printf("%s\t%s\t%s\t%.2f\t%s\t%d\t%d\n",dd.she[i].no,dd.she[i].kind,dd.she[i].name,dd.she[i].price,dd.she[i].time,dd.she[i].bao,dd.she[i].po); if(dd.she[i].bao==0)printf("该设备报废日期:%s\t",dd.she[i].time1); if(dd.she[i].po==0)printf("该设备破损花费:%.2f\t",dd.she[i].price1); if(dd.she[i].bao==0||dd.she[i].po==0)printf("该设备处理方式为:%s\n",dd.she[i].way); } } if(k==-1) { printf("\n\n没有找到该设备(编号-%s)!",no); } } //设备分类统计 void count_data() { char kind[10]; int i,s=0; printf("请输入要查询的设备种类: "); scanf("%s",kind); for(i=0;i<dd.count;i++) if(strcmp(dd.she[i].kind,kind)==0) s++; printf("统计结果:%s种类的设备有%d件。",kind,s); }
下面是整个程序= 实验设备管理系统
程序代码:
#include <stdio.h> #include <io.h> #include <stdlib.h> #include <string.h> #define MAX 300 struct shebei { char no[10]; //编号 char kind[10]; //设备种类 char name[10]; // 设备名称 float price; //价格 char time[10]; // 日期 int bao; //是否报废 char time1[10]; //报废日期 int po;//是否破损 float price1;//破损花费 char way[10]; //处理方式 }; struct data { int count; // 当前设备数组中设备的个数 struct shebei she[MAX]; // 设备数组 } dd; // 显示主菜单 void menu() { system("cls"); printf("\n"); printf("\t\t\t********************************\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 实验设备管理系统 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* [0] 退出 *\n"); printf("\t\t\t* [1] 查看所有设备信息 *\n"); printf("\t\t\t* [2] 输入设备记录 *\n"); printf("\t\t\t* [3] 编辑设备报废破损记录 *\n"); printf("\t\t\t* [4] 查询(编号) *\n"); printf("\t\t\t* [5] 设备统计 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t********************************\n"); } // 等待用户按回车后回到主菜单 void to_menu() { char c1,c2; printf("\n\n\n按回车键返回主菜单..."); scanf("%c%c",&c1,&c2); menu(); } // 查看所有设备信息 void view_data() { int i; printf("编号\t种类\t名称\t价格\t购入日期\t报废状态(0-报废,1-未报废)\t破损状态(0-破损,1-未破损)"); printf("\n-------------------------------------------------------------------\n"); for(i=0;i<dd.count;i++) { printf("%s\t%s\t%s\t%.2f\t%s\t%d\t%d\n",dd.she[i].no,dd.she[i].kind,dd.she[i].name,dd.she[i].price,dd.she[i].time,dd.she[i].bao,dd.she[i].po); if(dd.she[i].bao==0)printf("该设备报废日期:%s\t",dd.she[i].time1); if(dd.she[i].po==0)printf("该设备破损花费:%.2f\t",dd.she[i].price1); if(dd.she[i].bao==0||dd.she[i].po==0)printf("该设备处理方式为:%s\n",dd.she[i].way); } } // 将数据从结构体数组保存到文件中 void save_data() { FILE *fp; int i,k; k=dd.count; fp=fopen("c:/dada.dat","wb"); fwrite(&k,sizeof(int),1,fp); for(i=0;i<k;i++) fwrite(&dd.she[i],sizeof(struct shebei),1,fp); fclose(fp); } // 输入设备记录 void add_data() { struct shebei st; int b; int i,j,k; while(1) { j=0; printf("\n请输入设备信息:\n"); printf("编号\t种类\t名称\t价格\t购入日期\t"); printf("\n---------------------------------------------------------------\n"); scanf("%s%s%s%f%s",st.no,st.kind,st.name,&st.price,st.time); for(i=0;i<dd.count;i++) if(strcmp(dd.she[i].no,st.no)==0) { j=1; printf("输入的设备编号有重复,请重新输入!"); break; } if(j==1)continue; if(j==0) { k = dd.count; strcpy(dd.she[k].name,st.name); strcpy(dd.she[k].no,st.no); strcpy(dd.she[k].kind,st.kind); dd.she[k].price=st.price; strcpy(dd.she[k].time,st.time); dd.she[k].bao=1; dd.she[k].po=1; dd.count++; } printf("\n\n继续添加设备信息[1-yes 0-no]:"); scanf("%d",&b); if(b==0) break; } save_data(); } // 将数据从文件读到结构体数组中 void read_data() { FILE *fp; int i,k; struct shebei st; k=0; if(access("c:/dada.dat",0)==-1) // 如果文件不存在 { fp=fopen("c:/dada.dat","wb"); fwrite(&k,sizeof(int),1,fp); fclose(fp); } fp=fopen("c:/dada.dat","rb"); fread(&k,sizeof(int),1,fp); dd.count=k; for(i=0;i<k;i++) { fread(&st,sizeof(struct shebei),1,fp); strcpy(dd.she[i].name,st.name); strcpy(dd.she[i].no,st.no); strcpy(dd.she[i].kind,st.kind); dd.she[i].price=st.price; strcpy(dd.she[i].time,st.time); dd.she[i].bao=st.bao; dd.she[i].po=st.po; strcpy(dd.she[i].time1,st.time1); strcpy(dd.she[i].way,st.way); dd.she[i].price1=st.price1; } fclose(fp); } // 编辑设备报废与破损记录 void edit_data() { int i,k; char no[10],time1[10],way[10];int bao,po;float price1; printf("\n请输入要编辑设备的编号:"); scanf("%s",no); k=-1; for(i=0;i<dd.count;i++) { if(strcmp(dd.she[i].no,no)==0) { k=i; break; } } if(k==-1) { printf("\n\n没有找到该设备(编号-%s)!",no); } else { printf("\n名称:%s,编号:%s,种类:%s,价格:%.2f,购入日期:%s",dd.she[k].name,dd.she[k].no,dd.she[k].kind,dd.she[k].price,dd.she[k].time); printf("\n请修改设备报废与否记录:"); printf("\n设备状态(0-报废,1-未报废):"); scanf("%d",&bao); dd.she[k].bao=bao; if(bao==0) { printf("\n报废日期:"); scanf("%s",time1); strcpy(dd.she[k].time1,time1); } if(bao==1) { printf("\n设备破损状态:(0-破损,1-未破损) "); scanf("%d",&po); dd.she[k].po=po; if(po==0) { printf("\n破损耗费:"); scanf("%f",&price1); dd.she[k].price1=price1; } } if(bao==0||po==0) { printf("\n处理方式:"); scanf("%s",way); strcpy(dd.she[k].way,way); } save_data(); printf("\n\n编辑设备记录(编号-%s)成功!",no); } } // 查询(编号) void query_data_no() { int i,k; char no[5]; printf("\n请输入要查询设备的编号:"); scanf("%s",no); k=-1; for(i=0;i<dd.count;i++) { if(strcmp(dd.she[i].no,no)==0) { k=i; printf("编号\t种类\t名称\t价格\t购入日期\t报废状态(0-报废,1-未报废)\t破损状态(0-破损,1-未破损)"); printf("\n-------------------------------------------------------------------\n"); printf("%s\t%s\t%s\t%.2f\t%s\t%d\t%d\n",dd.she[i].no,dd.she[i].kind,dd.she[i].name,dd.she[i].price,dd.she[i].time,dd.she[i].bao,dd.she[i].po); if(dd.she[i].bao==0)printf("该设备报废日期:%s\t",dd.she[i].time1); if(dd.she[i].po==0)printf("该设备破损花费:%.2f\t",dd.she[i].price1); if(dd.she[i].bao==0||dd.she[i].po==0)printf("该设备处理方式为:%s\n",dd.she[i].way); } } if(k==-1) { printf("\n\n没有找到该设备(编号-%s)!",no); } } //设备分类统计 void count_data() { char kind[10]; int i,s=0; printf("请输入要查询的设备种类: "); scanf("%s",kind); for(i=0;i<dd.count;i++) if(strcmp(dd.she[i].kind,kind)==0) s++; printf("统计结果:%s种类的设备有%d件。",kind,s); } // 主函数 void main() { int fun; read_data(); menu(); while(1) { printf("请输入功能号[0-8]:",&fun); scanf("%d",&fun); switch(fun) { case 0: // 退出 break; case 1: // 查看所有设备信息 view_data(); break; case 2: // 输入设备记录 add_data(); break; case 3: // 编辑设备破损报废记录 edit_data(); break; case 4: // 查询(编号) query_data_no(); break; case 5: // 设备分类统计 count_data(); break; } if(fun==0) break; to_menu(); } }