首页 c 设备管理器程序码

c 设备管理器程序码

举报
开通vip

c 设备管理器程序码equipment.h #ifndef H_EQUIPMENT_HH //如果没有定义H_EQUIPMENT_HH,继续执行 #define H_EQUIPMENT_HH//定义H_EQUIPMENT_HH,可避免重复包含宏定义#include #include #include #include //头文件包含 #define INITIAL_SIZE 5//100 // 数组初始大小 #define INCR_SIZE 5//0 // 数组每次增加的大小 //可根椐系统使用需要的常量...

c  设备管理器程序码
equipment.h #ifndef H_EQUIPMENT_HH //如果没有定义H_EQUIPMENT_HH,继续执行 #define H_EQUIPMENT_HH//定义H_EQUIPMENT_HH,可避免重复包含宏定义#include #include #include #include //头文件包含 #define INITIAL_SIZE 5//100 // 数组初始大小 #define INCR_SIZE 5//0 // 数组每次增加的大小 //可根椐系统使用需要的常量定义 struct equipment_info { char number[20]; //设备编号 char name[20]; // 设备名称 char factory[20];//生产厂家 char year[20];//购进年代 float price; // 设备单价 int quantity;//数量 int useable;//可用数 }; typedef struct equipment_info QuipInfo;//定义一个类型名StuInfo代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 定义的结构体student_info extern int numEquip; // 记录的学生数 extern QuipInfo* records; // 记录学生信息的数组指针 extern char savedTag; // 信息是否已保存的标志,0为已保存,1为未保存extern int arraySize; // 数组大小 //共享的全局变量定义 void handle_menu(void); int menu_select(void); void addRecord(void); void modifyRecord(void); void display(void); void queryInfo(void); void removeRecord(void); void decRecord(); int saveRecords(void); int loadRecords(void); void quit(void); void showTable(void); int findRecord(char* target, int targetType, int from); void copyRecord(QuipInfo*src, QuipInfo*dest); //函数申明,注意()里必须包含对应函数形参类型 1 #endif // H_EQUIPMENT_HH equipment.c #include"equipment.h" /************************** * 初始化 **************************/ int numEquip=0; // 记录的设备数 char ch1[15],ch2[15]={"LIANGJIPEI"}; QuipInfo *records = NULL; // 记录设备信息的数组 char savedTag = 0; // 信息是否已保存的标志,1为未保存,0为已保存 int arraySize; // 数组大小 /************************** * 主函数 **************************/ int main() { // 初始化数组 records = (QuipInfo*)malloc(sizeof(QuipInfo)*INITIAL_SIZE); //给数组分配StuInfo分配INITIAL_SIZE个记录空间大小 if (records == NULL) { printf("memory fail!"); exit(-1); //如果内存空间不够分配,退出程序 } arraySize = INITIAL_SIZE; printf("\n"); printf("\t**************************************\n"); printf("\t*这是一个单位仪器设备基本信息管理系统*\n"); printf("\t*******可以对仪器设备进行管理*********\n"); printf("\t**********欢迎使用管理程序************\n"); printf("\t*********** O(∩_∩)O **************\n"); for(;;) {printf("\n\n进入系统的密码是:"); gets(ch1); if(strcmp(ch1,ch2)==0)break; else printf("\nSORRY!密码错误╮(╯_╰)╭请重新输入...."); } printf("\n\t\t欢迎使用设备管理系统! \\(^o^)/\n"); handle_menu(); } /************************** * 菜单处理函数 **************************/ void handle_menu(void) { for ( ; ; ) { switch(menu_select()) { case 1: addRecord(); break; case 2: decRecord(); break; case 3: queryInfo(); break; case 4: display(); break; case 5: removeRecord(); break; case 6: modifyRecord(); break; case 7: saveRecords(); break; case 8: loadRecords(); break; case 9: quit(); } } } /**************************** * 菜单选择函数menu_selected ****************************/ int menu_select( ) { char s[2]; int cn=0; printf("\n"); printf ( "\t1. 购入设备****\n" ); printf ( "\t2. 设备报废****\n" ); printf ( "\t3. 查询设备信息\n" ); printf ( "\t4. 统计设备信息\n" ); printf ( "\t5. 删除设备信息\n" ); printf ( "\t6. 修改设备信息\n" ); printf ( "\t7. 保存设备信息至记录文件\n" ); printf ( "\t8. 从记录文件读取设备信息\n" ); printf ( "\t9. 结束运行\n" ); printf ( "\n\t左边数字对应功能选择,请选择1-9:" ); //常用功能的提示应当放前面,对整个的功能排列作了对应调整 for(; ;) { gets(s); cn = atoi (s); if(cn<1|| cn>9 ) printf("\n\t输入错误,重选1-9:"); else {printf("\n");break;} } return cn; } /*************************************** *结束运行,退出* *参数量void ***************************************/ void quit(void) { char str[5]; if (savedTag==1) {printf("是否保存原来的记录?(Y/n)"); gets(str); if(str[0]!='n'&&str[0]!='N') saveRecords(); } free(records); printf("\n goodbye~\n\n"); exit(0); } add_disp.c #include"equipment.h" /******************** * 打印表头 ********************/ void showTable(void) { printf("编号\t名称\t单价\t购进年代\t生产厂家\t该设备数量\t可用数\n"); } /*********************** * 显示所有设备信息 ***********************/ void display(void) { int i; if (numEquip == 0) { printf("*****没有可供显示的记录*****\n"); return; } showTable(); for (i=0; i=arraySize) // 现在的数组空间不足,需要重新申请空间 { records = realloc(records,(arraySize+INCR_SIZE)*sizeof(QuipInfo));//新空间大小变为(arraySize+INCR_SIZE)记录//大小,即在原来基础上增加INCR_SIZE个记录大小 if (records == NULL) { printf("memory failed!"); exit(-1); } arraySize = arraySize+INCR_SIZE; //arraySize修改为新空间可保存的记录数 } printf("\n\n请输入设备名称:");gets(str); type=1;i=findRecord(str,type,0); if(i!=-1) { printf("已有该设备,请输入购入数量"); gets(str); quantity=(int)atof(str); records[i].quantity+=quantity; } else { strcpy(records[numEquip].name,str); printf("请输入设备编号:"); gets(records[numEquip].number); printf("请输入设备单价:"); gets(str); price=(float)atof(str); records[numEquip].price=price; printf("请输入购进年代:"); gets(records[numEquip].year); printf("请输入生产厂家:"); gets(records[numEquip].factory); printf("请输入购进设备数量:"); gets(str); quantity = (int)atof(str); records[numEquip].quantity=quantity; records[numEquip].useable=records[numEquip].quantity; numEquip++;printf("购入成功!!!\n"); count++; } } printf("\n现在一共有%d条设备信息\n",numEquip); savedTag = 1; } /******************************************************** * 设备报废 ********************************************************/ void decRecord(void) { char str[10]; int type,i,quantity; if(numEquip==0) { printf("*****没有任何设备的记录*****\n"); return; } while(1) { loop:printf("请输入如何找到欲报废设备的记录的方式:\n"); printf("1. 按设备编号\n"); printf("2. 按设备名称\n"); gets(str); if (str[0] == '1') { printf("\n请输入该设备的编号:"); gets(str); type = 0; } else if (str[0] == '2') { printf("请输入该设备的名称:"); gets(str); type = 1; } else { printf("输入错误,请重新输入\n");goto loop; } i=findRecord(str,type,0); if (i==-1) printf("没有符合条件的学生!\n"); if (i!=-1) {printf("请输入报废数量"); gets(str); quantity = (int)atof(str); records[i].useable-=quantity; }printf("\n是否继续报废设备?(Y/N)"); for(; ;) { gets(str); if(str[0]!='n'&&str[0]!='N'&&str[0]!='y'&&str[0]!='Y') printf("\n\t输入错误,请重新输入Y/N...."); else {printf("\n");break; } }if (str[0] == 'y'||str[0] == 'Y') goto loop;else break; } } que_remv_modi.c #include "equipment.h" /************************************************************** * 查找指定的记录 * 参数:target:欲查找记录的某一项与target相同 * targetType:表明通过哪一项来查找,0为学号,1为姓名,2为名次 * from:从第from个记录开始找 * 返回:找到的记录的序号,若找不到则返回-1 **************************************************************/ int findRecord(char* target, int targetType, int from) { int i; for (i=from; inumber,src->number); strcpy(dest->name,src->name); strcpy(dest->year,src->year); strcpy(dest->factory,src->factory); dest->price=src->price; dest->useable=src->useable; dest->quantity=src->quantity; } /************************* * 修改指定学生的信息 *************************/ void modifyRecord() { char str[10]; char target[20]; int type; int i; int quantity; float price; int count = 0; if(numEquip==0) { printf("\n没有可供修改的记录..."); return; } while(1) { printf("请输入如何找到欲修改的记录的方式:(直接输入回车则结束移除操作)\n"); printf("1. 按设备编号\n"); printf("2. 按设备名称\n"); gets(str); if (strlen(str) == 0) break; if (str[0] == '1') { printf("请输入该设备编号:"); gets(target); type = 0; } else if (str[0] == '2') { printf("请输入该设备名称:"); gets(target); type = 1; } else {printf("输入错误,结束");break; } i = findRecord(target,type,0); if (i==-1) printf("没有符合条件的学生!\n"); while(i != -1) { showTable(); printf("%s %s %.2f %s %s %d %d",records[i].number,records[i].name,records[i].price,records[i].year,records[i]. factory,records[i].quantity,records[i].useable); printf("\n确定要修改这个设备的信息吗?(y/N)"); gets(str); if (str[0]=='y' || str[0]=='Y') { printf("下面请重新输入该设备的信息:\n"); printf("请输入设备编号:"); gets(records[i].number); printf("请输入设备名称:"); gets(records[i].name); printf("请输入设备单价:"); gets(str); price=(float)atof(str); records[i].price=price; printf("请输入购进年代:"); gets(records[i].year); printf("请输入生产厂家:"); gets(records[i].factory); printf("\n 请输入设备数量:"); gets(str); quantity = (int)atof(str); records[i].quantity=quantity; i=findRecord(target,type,i+1); } else break; } }savedTag = 1;} sav_load.c #include "equipment.h" /********************************** * 文件存储操作函数 * 结果:数组records被保存至指定文件 * 返回:成功0,失败-1 **********************************/ int saveRecords() { FILE *fp; char fname[30]; if (numEquip == 0) { printf("没有记录可存!"); return -1; } printf("请输入要存入的文件名(直接回车选择文件equip_info):"); gets(fname); if (strlen(fname) == 0) strcpy(fname,"equip_info"); if ((fp=fopen(fname,"wb"))==NULL) { printf("不能存入文件!\n"); return -1; } printf("\n存文件...\n"); fwrite(records,sizeof(QuipInfo)*numEquip,1,fp); fclose(fp); printf("%d条记录已经存入文件,请继续操作。\n",numEquip); savedTag = 0; // 更新是否已保存的标记 return 0; } /******************************************* * 文件读取操作函数 * 结果:records将为从指定文件中读取出的记录 * 返回:成功0,失败-1 *******************************************/ int loadRecords(void) { FILE *fp; char fname[30]; char str[5]; if (numEquip!=0 && savedTag==0)//如果内存记录的学生数非0且已保存 { printf("请选择您是要覆盖现有记录(Y),还是要将读取的记录添加到现有记录之后(n)?\n"); printf("直接回车则覆盖现有记录\n"); gets(str); if (str[0]!='n' && str[0]!='N') numEquip = 0; } if (numEquip!=0&& savedTag==1) //如果内存记录的学生数非0且没有保存 { printf("读取文件将会更改原来的记录,是否保存原来的记录?(Y/n)"); printf("直接回车则保存原来记录\n"); gets(str); if (str[0]!='n' && str[0]!='N') saveRecords(); printf("请选择您是要覆盖现有记录(Y),还是要将读取的记录添加到现有记录之后(n)?\n"); printf("直接回车则覆盖现有记录\n"); gets(str); if (str[0]!='n' && str[0]!='N') numEquip = 0; } printf("请输入要读取的文件名(直接回车选择文件equip_info):"); gets(fname); if (strlen(fname) == 0) strcpy(fname,"equip_info"); if ((fp=fopen(fname,"rb"))==NULL) { printf("打不开文件!请重新选择\n"); return -1; } printf("\n取文件...\n"); while(!feof(fp)) { // 现在的数组空间不足,需要重新申请空间 if (numEquip >= arraySize) { records = realloc(records,(arraySize+INCR_SIZE)*sizeof(QuipInfo)); if (records == NULL) { printf("memory failed!"); exit(-1); } arraySize = arraySize+INCR_SIZE; } if(fread(&records[numEquip],sizeof(QuipInfo),1,fp) != 1) break; //读取一条新记录,保存到records[numEquip], numEquip++;//记录数加1 } fclose(fp); printf("现在共有%d条记录。",numEquip); return 0; } 16
本文档为【c 设备管理器程序码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_842972
暂无简介~
格式:doc
大小:69KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-27
浏览量:15