C语言 实验设备管理系统
实验设备信息管理系统
简单的思路,简单的算法
题目简述:实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作。
结构体定义如下:
typedef struct equipmentInfo
{
char equipCode[]; //设备编号
char equipType[]; //设备总类
char equipName[]; //设备名称
char equipPrice[]; //设备价格
char buyDate[]; //设备购入日期
int scrap; //是否报废,0表示没有报废,1表示报废
char scrapDate[]; //报废日期
}EquInfo;
在此做了七个模块,分别是:实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块、实验设备查询模块、删除模块。
函数定义如下:
int Scaninfor();//浏览设备信息
int Inputinformation();//设备信息输入模块
int Addinfor();//设备信息添加模块
int Modifyinfor();//设备信息修改模块
int Classifyinfor();//设备分类统计模块
int Searchinfor();//设备查询模块
int Deleteinfor();//删除模块
设计思路:
1.设备信息输入模块为新建文件,已存在的文件会被覆盖;
2.设备信息添加模块,向文件尾部添加信息;
3.修改信息模块,先选择需要修改的设备编号,再选择需要修改的内容;
4.统计模块,计数功能(源码中提供了排序的代码,但没有将排序后的写入文件);
5.查询模块,查到就会输出;
6.删除模块,暂时只提供了按照设备编码删除的功能;
7.浏览,任何时候都可以浏览文件内的信息;
8.由main函数提供菜单,用户选择功能,功能实现后,函数返回用户的按键的ASCII码,判断继续执行main函数or结束程序。
遇到的问题及解决办法:
1.信息输入%s用的市scanf(),如果在某一个字符串中输入空格,将会出错。所以改为gets(),注意若在scanf()后使用,需要提前getchar();
2.信息修改模块,一开始提供的修改是让用户重新输入所有信息,改为重新输入需要修改的相应信息更高效;
3.删除模块,最好可以实现分类删除,比如删除所有已经报废的设备信息,删除在某个日期之前或某个时间段购入的设备信息等;
4.函数返回值判断是否结束程序时,最早只能输入数字,输入别的会出错(因为最后用户输入的时候我用的是%d啦)。改为%c后可以按键盘的 any key 了;
5.输出格式问题,虽然我在printf()内使用了\t,但后来发现某项内容长度不一样(本身长度有的不到8个字节,有的超过了8个字节),这样会发生错位。输出格式%s可以改为%-15s(左对齐),这样就可以了。
6.欢迎提出问题继续改进~
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#define N 20
typedef struct equipmentInfo
{
char equipCode[]; //设备编号
char equipType[]; //设备总类
char equipName[]; //设备名称
char equipPrice[]; //设备价格
char buyDate[]; //设备购入日期
int scrap; //是否报废,0表示没有报废,1表示报废
char scrapDate[]; //报废日期
}EquInfo;
EquInfo equip[N];
int Scaninfor();//浏览设备信息
int Inputinformation();//设备信息输入模块
int Addinfor();//设备信息添加模块
int Modifyinfor();//设备信息修改模块
int Classifyinfor();//设备分类统计模块
int Searchinfor();//设备查询模块
int Deleteinfor();//删除模块
int i = ;
int main()
{
printf("*************************************\n");
printf("***** 输入对应数字标号选择菜单\t*****\n");
printf("*****\t[0] 浏览实验设备信息\t*****\n");
printf("*****\t[1] 输入实验设备信息\t*****\n");
printf("*****\t[2] 添加实验设备信息\t*****\n");
printf("*****\t[3] 修改实验设备信息\t*****\n");
printf("*****\t[4] 设备信息分类统计\t*****\n");
printf("*****\t[5] 查询实验设备信息\t*****\n");
printf("*****\t[6] 删除实验设备信息\t*****\n");
printf("*****\t[7] 退出 \t*****\n");
printf("*************************************\n");
int menu,t;
do
{
printf("请输入数字标号:\n");
scanf("%d",&menu);
}while(menu < || menu > );
switch(menu)
{
case :
t = Scaninfor();break;
case :
t = Inputinformation();break;
case :
t = Addinfor();break;
case :
t = Modifyinfor();break;
case :
t = Classifyinfor();break;
case :
t = Searchinfor();break;
case :
t = Deleteinfor();break;
case :
exit();break;
default:
printf("INPUT ERROR !");
}
getchar();
if(t == )
return ;
else
main();
}
int Scaninfor()
{
FILE *fp;
int j,k;
char a;
if((fp = fopen("equipInfor.txt","r")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(k = ;!feof(fp);k++)
{
fread(&equip[k], sizeof(EquInfo), , fp);
}
printf("code\ttype \t\tname\tprice\tbuydate \tscrap\tscrapdate\n\n\n");
for(j = ;j < k-;j++)
{
printf("%s\t%-15s\t%-7s\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);
}
fclose(fp);
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&a);
return a;
}
int Inputinformation()
{
int n;
char a;
printf("Please input the number of equipments:");
scanf("%d",&n);
getchar();
printf("Please input the equipCode, equipType, equipName,");
printf(" equipPrice, buyDate, scrap(no 0 or yes 1), scrapDate:\n");
do
{
printf("please input the information of %d:\n",i+);
strcpy(equip[i].scrapDate, "no scrap");
printf("please input the equipCode:\n");
gets(equip[i].equipCode);
printf("please input the equipType:\n");
gets(equip[i].equipType);
printf("please input the equipName:\n");
gets(equip[i].equipName);
printf("please input the equipPrice:\n");
gets(equip[i].equipPrice);
printf("please input the buyDate:\n");
gets(equip[i].buyDate);
printf("please input is(1) or not(0) scrap:\n");
scanf("%d",&equip[i].scrap);
getchar();
if(equip[i].scrap == )
{
printf("please input the scrap date:\n");
gets(equip[i].scrapDate);
}
i++;
}while(i < n);
FILE *fp;
if((fp = fopen("equipInfor.txt","w")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
fwrite(equip, sizeof(EquInfo), n, fp);
fclose(fp);
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&a);
return a;
}
int Addinfor()
{
int k = ,j;
FILE *fp;
if((fp = fopen("equipInfor.txt","a")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
int n;
char a;
printf("Please input the number of the adding equipments:");
scanf("%d",&n);
getchar();
printf("Please input the equipCode,equipType,equipName,");
printf("equipPrice,buyDate,scrap(no 0 or yes 1),scrapDate:\n");
do
{
printf("please input the adding information of %d:\n",k+);
strcpy(equip[k].scrapDate, "no scrap");
printf("please input the equipCode:\n");
gets(equip[k].equipCode);
printf("please input the equipType:\n");
gets(equip[k].equipType);
printf("please input the equipName:\n");
gets(equip[k].equipName);
printf("please input the equipPrice:\n");
gets(equip[k].equipPrice);
printf("please input the buyDate:\n");
gets(equip[k].buyDate);
printf("please input is(1) or not(0) scrap:\n");
scanf("%d",&equip[k].scrap);
getchar();
if(equip[k].scrap == )
{
printf("please input the scrap date:\n");
gets(equip[k].scrapDate);
}
k++;
}while(k < n);
fseek(fp,,SEEK_END);
for(j = ;j<n;j++)
fwrite(&equip[j], sizeof(EquInfo), , fp);
fclose(fp);
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&a);
return a;
}
int Modifyinfor()
{
FILE *fp;
int k,j,a,b,l;
char c;
char code[];
getchar();
printf("please input the equipCode of the equipment which you want to modify:\n");
gets(code);
if((fp = fopen("equipInfor.txt","r")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(k = ;!feof(fp);k++)
{
fread(&equip[k], sizeof(EquInfo), , fp);
}
for(j = ;j < k;j++)
{
a = strcmp(equip[j].equipCode,code);
if(a == )
{
printf("Which information do you want to modify?\n");
printf("***[1] equipcode\t***\n");
printf("***[2] equiptype\t***\n");
printf("***[3] equipname\t***\n");
printf("***[4] equipprice\t***\n");
printf("***[5] buydate \t***\n");
printf("***[6] scrap \t***\n");
printf("***[7] scrapdate\t***\n");
printf("please input the number:");
scanf("%d",&b);
getchar(); switch(b)
{
case :
printf("please input the equipCode:\n");
gets(equip[j].equipCode);
break;
case :
printf("please input the equipType:\n");
gets(equip[j].equipType);
break;
case :
printf("please input the equipName:\n");
gets(equip[j].equipName);
break;
case :
printf("please input the equipPrice:\n");
gets(equip[j].equipPrice);
break;
case :
printf("please input the buyDate:\n");
gets(equip[j].buyDate);
break;
case :
printf("please input is(1) or not(0) scrap:\n");
scanf("%d",&equip[j].scrap);
getchar();
if(equip[j].scrap == )
{
printf("please input the scrap date:\n");
gets(equip[j].scrapDate);
}
else
strcpy(equip[j].scrapDate, "no scrap");
break;
case :
printf("please input the scrap date:\n");
gets(equip[j].scrapDate);
break;
default:
printf("INPUT ERROR !\n");
}
break;
}
}
fclose(fp);
if(a)
printf("don't find the equipCode that you input\n");
else
{
if((fp = fopen("equipInfor.txt","w")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(l = ;l < k-;l++)
fwrite(&equip[l], sizeof(EquInfo), , fp);
fclose(fp);
printf("MODIFY SUCCESSFULLY !\n");
}
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&c);
return a;
}
int Classifyinfor()
{
char a;
FILE *fp;
int q,count = ,j,k;
int total;
char s[N],temp[N],*te;
printf("*****\t[1] 设备种类\t*****\n");
printf("*****\t[2] 设备名称\t*****\n");
printf("*****\t[3] 购买日期\t*****\n");
printf("请输入你想要的分类方式:");
scanf("%d",&q);
getchar();
if((fp = fopen("equipInfor.txt","r")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(total = ;!feof(fp);total++)
{
fread(&equip[total], sizeof(EquInfo), , fp);
}
switch(q)
{
case :
printf("please input the equipType:\n");
gets(s);
for(j = ;j < total-;j++)
{
for(k = ;k < total;k++)
{
if(strcmp(equip[k].equipType,equip[j].equipType) < )
{
strcpy(temp, equip[k].equipType);
strcpy(equip[k].equipType, equip[j].equipType);
strcpy(equip[j].equipType, temp);
}
}
}
for(j = ;j < total;j++)
{
if(strcmp(s,equip[j].equipType) == )
{
count++;
}
}
printf("%s类型的实验仪器有%d台\n",s,count);
break;
case :
printf("please input the equipName:\n");
gets(s);
for(j = ;j < total - ;j++)
{
for(k = ;k < total;k++)
{
if(strcmp(temp,equip[j].equipName) < )
{
strcpy(temp, equip[k].equipName);
strcpy(equip[k].equipName, equip[j].equipName);
strcpy(equip[j].equipName, temp);
}
}
}
for(j = ;j < total;j++)
{
if(strcmp(s,equip[j].equipName) == )
{
count++;
}
}
printf("%s名称的仪器有%d台\n",s,count);
break;
case :
printf("please input the buyDate:\n");
gets(s);
for(j = ;j < total - ;j++)
{
for(k = ;k < total;k++)
{
if(strcmp(s, equip[j].buyDate) < )
{
strcpy(temp, equip[k].buyDate);
strcpy(equip[k].buyDate, equip[j].buyDate);
strcpy(equip[j].buyDate, temp);
}
}
}
for(j = ;j < total;j++)
{
if(strcmp(s,equip[j].buyDate) == )
{
count++;
}
}
printf("%s日期购买的仪器有%d台\n",s,count);
break;
default:
printf("INPUT ERROR !\n");
}
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&a);
return a;
}
int Searchinfor()
{
int n,m,k;
char a;
FILE *fp;
printf("*************************************\n");
printf("*****\t[1] 按设备编号查询\t*****\n");
printf("*****\t[2] 按设备种类查询\t*****\n");
printf("*****\t[3] 按设备名称查询\t*****\n");
printf("*****\t[4] 按设备购入日期查询\t*****\n");
printf("*****\t[5] 按设备状态查询\t*****\n");
printf("*************************************\n");
printf("请输入所需要的查询方式:");
scanf("%d",&n);
getchar();
if((fp = fopen("equipInfor.txt","r")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(k = ;!feof(fp);k++)
{
fread(&equip[k], sizeof(EquInfo), , fp);
}
int j,flag,sc;
switch(n)
{
case :
flag = ;
char code[N];
printf("please input the equipCode:");
gets(code);
for(j = ;j < k-;j++)
{
if(strcmp(equip[j].equipCode, code) == )
{
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);
flag = ;
}
}
if(!flag)
printf("not find !");
break;
case :
flag = ;
char type[N];
printf("please input the equipType:");
gets(type);
for(j = ;j < k-;j++)
{
if(strcmp(equip[j].equipType, type) == )
{
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);
flag = ;
}
}
if(!flag)
printf("not find !");
break;
case :
flag = ;
char name[N];
printf("please input the equipName:");
gets(name);
for(j = ;j < k-;j++)
{
if(strcmp(equip[j].equipName, name) == )
{
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);
flag = ;
}
}
if(!flag)
printf("not find !");
break;
case :
flag = ;
char date[N];
printf("please input the buyDate:");
gets(date);
for(j = ;j < k-;j++)
{
if(strcmp(equip[j].buyDate, date) == )
{
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);
flag = ;
}
}
if(!flag)
printf("not find !");
break;
case :
flag = ;
printf("please input the scrap:");
scanf("%d",&sc);
for(j = ;j < k-;j++)
{
if(equip[j].scrap == sc)
{
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);
flag = ;
}
}
if(!flag)
printf("not find !\n");
break;
default:
printf("INPUT ERROR !");
}
printf("press 0 to exit or other key to return menu\n");
scanf(" %c",&a);
return a;
}
int Deleteinfor()
{
FILE *fp;
int k,j,a,b,l;
char c;
char code[];
getchar();
printf("please input the equipCode of the equipment which you want to delete:\n");
gets(code);
if((fp = fopen("equipInfor.txt","r")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(k = ;!feof(fp);k++)
{
fread(&equip[k], sizeof(EquInfo), , fp);
}
for(j = ;j < k;j++)
{
a = strcmp(equip[j].equipCode,code);
if(a == )
{
b = j;
break;
}
}
fclose(fp);
if(j == k)
{
printf("INPUT ERROR !\nDon't find the code !\n");
}
else
{
if((fp = fopen("equipInfor.txt","w")) == NULL)
{
printf("Failure to open equipInfor.txt!\n");
exit();
}
for(l = ;l < b;l++)
fwrite(&equip[l], sizeof(EquInfo), , fp);
for(l = b+;l < k-;l++)
fwrite(&equip[l], sizeof(EquInfo), , fp);
fclose(fp);
printf("DELETE SUCCESSFULLY !\n");
}
printf("press 0 to exit or other key to return menu:\n");
scanf(" %c",&c);
return a;
}
C语言 实验设备管理系统的更多相关文章
- 实验教学管理系统 c语言程序代写源码下载
问题描述:实验室基本业务活动包括:实验室.班级信息录入.查询与删除:实验室预定等.试设计一个实验教学管理系统,将上述业务活动借助计算机系统完成. 基本要求: 1.必须存储的信息 (1)实验室信息:编号 ...
- ytu 2002:C语言实验——单词统计(水题)
C语言实验——单词统计 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 61 Solved: 34[Submit][Status][Web Board] ...
- ytu 1998:C语言实验——删除指定字符(水题)
C语言实验——删除指定字符 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 327 Solved: 211[Submit][Status][Web Boa ...
- ytu 1985:C语言实验——保留字母(水题)
C语言实验——保留字母 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 136 Solved: 59[Submit][Status][Web Board] ...
- ytu 2029: C语言实验——温度转换(水题)
2029: C语言实验——温度转换 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 12 Solved: 10[Submit][Status][Web B ...
- ytu 2011: C语言实验——找中间数(水题)
2011: C语言实验——找中间数 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 212 Solved: 122[Submit][Status][Web ...
- 山东理工大学ACM平台题答案关于C语言 1181 C语言实验——最小公倍数和最大公约数
C语言实验——最小公倍数和最大公约数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 从键盘输入两个正整数,求这两个正整数的最小公 ...
- C语言实验——一元二次方程Ⅱ
C语言实验--一元二次方程Ⅱ Time Limit: 1 Sec Memory Limit: 64 MB Submit: 169 Solved: 131 [Submit][Status][Web ...
- vuejs、eggjs全栈式开发设备管理系统
vuejs.eggjs全栈式开发简单设备管理系统 业余时间用eggjs.vuejs开发了一个设备管理系统,通过mqtt协议上传设备数据至web端实时展现,包含设备参数分析.发送设备报警等模块.收获还是 ...
随机推荐
- 安卓ImageButton圆角按钮设置
首先图片要做成圆角的,使用美图秀秀,这个不多说. 之后使用设置了圆角的按钮,效果有缺陷,按钮会有灰色的边角. 类似这样: 去掉的方法是将layout的 android:src="@draw ...
- 【MVC 笔记】MVC 自定义 Attribute 属性中的猫腻
原想在 MVC Action 上加一个自定义 Attribute 来做一些控制操作,最先的做法是在自定 Attribute 中定义一个属性来做逻辑判断,可惜事与愿违,这个属性值居然会被缓存起来,于是于 ...
- MVC4使用SignalR出现$.connection is undefined错误备忘
SignalR使用过程中一定要注意js的引用顺序,否则就会出现$.connection is undefined脚本错误.
- 前端工程师应该都了解的16个最受欢迎的CSS框架
摘要: 今天给大家分享16个最受欢迎的CSS框架.这些是根据笔者的爱好以及相关查阅规整出来的.可能还有一些更棒的或者您更喜欢的没有列举出来.如果有,欢迎留言! Pure : CSS Framework ...
- QT5 屏幕旋转90度
主要思路是将所有项目界面加载到QGraphicsScene,再进行旋转操作.直接上代码#include <QApplication>#include <QGraphicsView&g ...
- 30255Java_5.5 GUI
GUI GUI的各种元素(如:窗口,按钮,文本框等)由Java类来实现 1.AWT 使用AWT所涉及的类一般在java.awt包及其子包中 AWT(Abstract Window Toolkit)包括 ...
- 使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
nodejs-koa2-mysql-sequelize-jwt 技术栈:nodejs, koa2, mysql, sequelize, jwt 项目数据层和操作层分明 使用koa2框架中间件,参数处理 ...
- SpringBoot从入门到精通一(idea优雅搭建SpringBoot项目)
前言 在没有SpringBoot之前,我们搭建的是SSM(SpingMVC+Spring+Mybatis)项目,在搭建SSM项目的时候,我们要经过一系列的繁琐配置,例如:application,web ...
- React躬行记(5)——React和DOM
React实现了一套与浏览器无关的DOM系统,包括元素渲染.节点查询.事件处理等机制. 一.ReactDOM 自React v0.14开始,官方将与DOM相关的操作从React中剥离,组成单独的rea ...
- 一文详解 LVS、Nginx 及 HAProxy 工作原理( 附大图 )
当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器 ...