C语言:设备管理系统
2021/11/11 23:14:32
本文主要是介绍C语言:设备管理系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { int year; int month; int day; }date; typedef struct { int num; char type[15]; char name[15]; double price; date grrq;//购入日期 char baofei;//是否报废 date bfrq;//报废日期 }device; #define LEN sizeof(device) #define Filename "d:\\123.txt" device *Dev;//动态数组,就是元素数可变的数组 int count;//动态数组的元素数(设备数) void loadfile() {//读取文件 device d; FILE *fp; int i; count = 0; fp = fopen(Filename, "r+"); Dev = (device*)malloc(LEN);//分配内存 if (fp == NULL) { fp = fopen(Filename, "w");//如果文件d:\123.txt不存在就创建一个 fclose(fp); return; } i = fscanf(fp, "%d %s %s %lf %d %d %d %c %d %d %d", &d.num, d.type, d.name, &d.price, &d.grrq.year, &d.grrq.month, &d.grrq.day, &d.baofei, &d.bfrq.year, &d.bfrq.month, &d.bfrq.day); while (i != -1) {//fscanf读取到最后一行会返回-1 Dev[count] = d; count++; Dev = (device*)realloc((void*)Dev, (count + 1)*LEN);//扩展元素数(重新分配内存) i = fscanf(fp, "%d %s %s %lf %d %d %d %c %d %d %d", &d.num, d.type, d.name, &d.price, &d.grrq.year, &d.grrq.month, &d.grrq.day, &d.baofei, &d.bfrq.year, &d.bfrq.month, &d.bfrq.day); } fclose(fp); } void search1() { int i, num; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备编号:"); scanf("%d", &num); for (i = 0; i<count; i++) { if (Dev[i].num == num) { printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); return; } } printf("\n该设备编号不存在\n\n"); } void search2() { int i, c = 0, bf = 0; char type[15]; double sum = 0; getchar();//去除scanf后缓冲区留下的回车 system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备种类:"); scanf("%s", type); for (i = 0; i<count; i++) { if (0 == strcmp(type, Dev[i].type)) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备种类为“%s”的设备\n\n", type); else printf("\n共有%d个设备种类为“%s”的设备,%d个已报废,总价格为%.2lf\n\n", c, type, bf, sum); } void search3() { int i, c = 0, bf = 0; char name[15]; double sum = 0; getchar();//去除scanf后缓冲区留下的回车 system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备名称:"); scanf("%s", name);//gets(name); for (i = 0; i<count; i++) { if (0 == strcmp(name, Dev[i].name)) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备名称为“%s”的设备\n\n", name); else printf("\n共有%d个设备名称为“%s”的设备,%d个已报废,总价格为%.2lf\n\n", c, name, bf, sum); } void search41() { int i, c = 0, bf = 0; double price, sum = 0; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备价格:"); scanf("%lf", &price); for (i = 0; i<count; i++) { if (Dev[i].price == price) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备价格为%.2lf的设备\n\n", price); else printf("\n共有%d个设备价格为%.2lf的设备,%d个已报废,总价格为%.2lf\n\n", c, price, bf, sum); } void search42() { int i, c = 0, bf = 0; double price, sum = 0; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备价格下限:"); scanf("%lf", &price); for (i = 0; i<count; i++) { if (Dev[i].price >= price) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备价格高于%.2lf的设备\n\n", price); else printf("\n共有%d个设备价格高于%.2lf的设备,%d个已报废,总价格为%.2lf\n\n", c, price, bf, sum); } void search43() { int i, c = 0, bf = 0; double price, sum = 0; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备价格上限:"); scanf("%lf", &price); for (i = 0; i<count; i++) { if (Dev[i].price <= price) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备价格低于%.2lf的设备\n\n", price); else printf("\n共有%d个设备价格低于%.2lf的设备,%d个已报废,总价格为%.2lf\n\n", c, price, bf, sum); } void search44() { int i, c = 0, bf = 0; double min, max, t, sum = 0; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要查询的设备价格下限:"); scanf("%lf", &min); printf("请输入要查询的设备价格上限:"); scanf("%lf", &max); if (min>max) { t = min; min = max; max = t; } for (i = 0; i<count; i++) { if (Dev[i].price >= min&&Dev[i].price <= max) { if (c == 0)printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); c++; sum += Dev[i].price; if ('Y' == Dev[i].baofei)bf++; printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); } } if (c == 0)printf("\n不存在设备价格高于%.2lf且低于%.2lf的设备\n\n", min, max); else printf("\n共有%d个设备价格高于%.2lf低于%.2lf的设备,%d个已报废,总价格为%.2lf\n\n", c, min, max, bf, sum); } void search4() { int i; while (1) { system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("1.查询价格为某一数值的设备\n2.查询价格高于某一数值的设备\n3.查询价格低于某一数值的设备\n4.查询价格在某一区间的设备\n0.返回上一层菜单\n\n"); printf("请选择:"); scanf("%d", &i); switch (i) { case 1:search41(); system("pause"); break; case 2:search42(); system("pause"); break; case 3:search43(); system("pause"); break; case 4:search44(); system("pause"); break; case 0:return; } } } void search() {//查询设备信息子菜单 int i; while (1) { system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("1.按设备编号查询\n2.按设备种类查询\n3.按设备名称查询\n4.按设备价格查询\n0.返回主菜单\n\n"); printf("请选择:"); scanf("%d", &i); switch (i) { case 1:search1(); system("pause"); break; case 2:search2(); system("pause"); break; case 3:search3(); system("pause"); break; case 4:search4(); break; case 0:return; } } } void sort() {//对设备编号选择排序(升序) int i, j, k; device t; for (i = 0; i<count - 1; i++) { k = i; for (j = i; j<count; j++)if (Dev[k].num>Dev[j].num)k = j; if (k != i) { t = Dev[k]; Dev[k] = Dev[i]; Dev[i] = t; } } } void writefile() {//将数组写入文件 FILE *fp; int i; fp = fopen(Filename, "w"); for (i = 0; i<count; i++) { fprintf(fp, "%d %s %s %.2lf %d %d %d %c %d %d %d\r\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); }//写进文件换行必须\r\n,只有\n不能换行 fclose(fp); } void add() {//添加设备信息 device d; int i; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("添加设备信息:\n"); printf("请输入设备编号:"); scanf("%d", &d.num); for (i = 0; i<count; i++) {//检查设备编号是否重复 if (d.num == Dev[i].num) { printf("\n该设备编号与已有设备编号重复,请重新输入\n\n"); system("pause"); return; } } getchar();//去掉scanf后留在缓冲区里的回车 printf("请输入设备种类:"); scanf("%s", d.type); printf("请输入设备名称:"); scanf("%s", d.name); printf("请输入设备价格:"); scanf("%lf", &d.price); printf("请输入购入日期(格式为年-月-日):"); scanf("%d-%d-%d", &d.grrq.year, &d.grrq.month, &d.grrq.day); getchar();//去掉scanf后留在缓冲区里的回车 printf("请输入是否报废(Y=已报废,N=未报废):"); scanf("%c", &d.baofei); printf("请输入报废日期(格式为年-月-日):"); scanf("%d-%d-%d", &d.bfrq.year, &d.bfrq.month, &d.bfrq.day); Dev = (device*)realloc((void*)Dev, (count + 1)*LEN);//扩展元素数 Dev[count] = d;//新增的设备加在数组最后 count++;//设备数+1 sort();//排序 writefile();//写入进文件 } void modify() {//修改设备信息 int i, j, num; device d; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要修改的设备编号:"); scanf("%d", &num); for (i = 0; i<count; i++) { if (Dev[i].num == num) { printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); break;//如果找到,拿出来处理,都搁在循环里太乱 } } if (i == count) { printf("\n该设备编号不存在\n\n"); system("pause"); return; } printf("请输入修改后的信息:\n"); printf("请输入设备编号:"); scanf("%d", &d.num); for (j = 0; j<count; j++) {//检查设备编号是否重复 if (i != j&&d.num == Dev[j].num) {//如果不修改设备编号,会提示设备编号重复,加入条件i!=j,即不判断修改后设备编号与修改前的是否相同 printf("\n该设备编号与已有设备编号重复,请重新输入\n\n"); system("pause"); return; } } getchar();//去掉scanf后留在缓冲区里的回车 printf("请输入设备种类:"); scanf("%s", d.type); printf("请输入设备名称:"); scanf("%s", d.name); printf("请输入设备价格:"); scanf("%lf", &d.price); printf("请输入购入日期(格式为年-月-日):"); scanf("%d-%d-%d", &d.grrq.year, &d.grrq.month, &d.grrq.day); getchar();//去掉scanf后留在缓冲区里的回车 printf("请输入是否报废(Y=已报废,N=未报废):"); scanf("%c", &d.baofei); printf("请输入报废日期(格式为年-月-日):"); scanf("%d-%d-%d", &d.bfrq.year, &d.bfrq.month, &d.bfrq.day); Dev[i] = d; sort();//排序 writefile();//写入文件 } void del() {//删除设备 int i, num; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("请输入要删除的设备编号:"); scanf("%d", &num); getchar();//去除scanf后缓冲区留下的回车 for (i = 0; i<count; i++) { if (Dev[i].num == num) { printf("\n设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); break;//如果找到,拿出来处理,都搁在循环里太乱 } } if (i == count) { printf("\n该设备编号不存在\n\n"); system("pause"); return; } printf("你确定要删除此设备的信息吗?(输入Y确定,输入其他返回主菜单)"); if ('Y' == getchar()) { for (; i<count - 1; i++) { Dev[i] = Dev[i + 1];//i之后的所有设备信息向前移动一个元素(没有下标为count的元素,所以不用循环至count-1) } count--;//设备数-1 writefile();//写入文件 } } void outputall() {//全部列出 int i; double pricewbf = 0, pricebf = 0;//未报废总价格,报废总价格 system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("全部设备信息:\n\n"); printf("设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); for (i = 0; i<count; i++) { printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); if (Dev[i].baofei == 'Y')pricebf += Dev[i].price;//计算总价格 else pricewbf += Dev[i].price; } printf("\n共有%d条设备信息\n所有设备总价格 %.2lf\n未报废设备总价格%.2lf\n报废设备总价格 %.2lf\n\n", count, pricewbf + pricebf, pricewbf, pricebf); system("pause");//按任意键继续(不会退出) } void outputbf() {//列出报废设备 int i, c = 0; double pricebf = 0; system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("报废设备信息:\n\n"); printf("设备编号 设备种类 设备名称 设备价格 购入日期 是否报废 报废日期\n"); for (i = 0; i<count; i++) { if (Dev[i].baofei == 'Y') { printf("%8d %-14s %-14s %9.2lf %04d-%02d-%02d %c %04d-%02d-%02d\n", Dev[i].num, Dev[i].type, Dev[i].name, Dev[i].price, Dev[i].grrq.year, Dev[i].grrq.month, Dev[i].grrq.day, Dev[i].baofei, Dev[i].bfrq.year, Dev[i].bfrq.month, Dev[i].bfrq.day); pricebf += Dev[i].price; c++; } } printf("\n共有%d个报废设备\n总价格%.2lf\n\n", c, pricebf); system("pause");//按任意键继续(不会退出) } int main() { int i; loadfile();//读取文件 while (1) { system("cls");//清屏 printf("----------------\n"); printf("设备资产管理系统\n"); printf("----------------\n\n"); printf("1.列出全部设备信息\n2.列出报废设备信息\n3.查询设备信息\n4.添加设备信息\n5.修改设备信息\n6.删除设备信息\n0.退出\n\n"); printf("请选择:"); scanf("%d", &i); switch (i) { case 1:outputall(); break; case 2:outputbf(); break; case 3:search(); break; case 4:add(); break; case 5:modify(); break; case 6:del(); break; case 0:return 0; } } return 0; }
这篇关于C语言:设备管理系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享