大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
实验室设备管理系统
题目要求
实验设备管理系统设计
实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
主要功能:
(1)能够完成对设备的录入和修改
(2)对设备进行分类统计
(3)设备的破损耗费和遗损处理
(4)设备的查询
要求:使用文件方式存储数据。
源代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
#include<windows.h>
#include<conio.h>
/*定义存放仪器信息的结构体*/
typedef struct Information
{
char Name[20]; //仪器名称
char Sort[2]; //仪器种类
char ID[20]; //仪器编号
char Price[20]; //仪器价格
char Buydate[20]; //设备购买日期
char State[2]; //设备状态
char Donatedate[20]; //报废日期
struct Information* next;
} Information;
/*定义文件*/
FILE* fp;
/*读出文件信息*/
Information* Fscanf()
{
Information* head = (Information*)malloc(sizeof(Information));
head->next = NULL;
FILE* fp = fopen("Equipment.txt", "rt");
if (fp == NULL)
{
puts("文件打开失败");
exit(1); //程序异常退出
}
if (fscanf(fp, "%s %s %s %s %s %s %s", head->Name, head->Sort, head->ID, head->Buydate, head->Price, head->State, head->Donatedate) != EOF)
{
while (fgetc(fp) != EOF) //判断是否已经到文件尾部了
{
Information* cur = (Information*)malloc(sizeof(Information));
fscanf(fp, "%s %s %s %s %s %s %s", cur->Name, cur->Sort, cur->ID, cur->Buydate, cur->Price, cur->State, cur->Donatedate);
cur->next = head;
head = cur;
} //利用头插法将文件读入链表中
}
else
return NULL;
fclose(fp);
return head->next;
}
/*存入文件*/
void Fprintf(Information* head)
{
if ((fp = fopen("Equipment.txt", "w")) == NULL)
{
printf("\n\n文件打开失败!\n");
exit(1);
}
Information* cur = head;
while (cur)
{
fprintf(fp, "%s %s %s %s %s %s %s\n", cur->Name, cur->Sort, cur->ID, cur->Buydate, cur->Price, cur->State, cur->Donatedate);
cur = cur->next;
}
fclose(fp);
}
/*目录*/
Information* Addition(Information* head);//添加设备信息
Information* Query(Information* head);//查找设备信息
Information* Modify(Information* head);//修改仪器信息
Information* Delect(Information* head);//删除仪器信息
void Over();//结束系统
void Menu();//系统目录
/*添加设备信息*/
Information* Addition(Information* head)
{
int n, count = 0;
printf("\n请输入要添加的设备数量:"); //请输入要添加的设备数量
scanf("%d", &n);
system("cls"); //清屏操作
while (n--)
{
Information* cur = (Information*)malloc(sizeof(Information));
printf("*-------------请输入设备的信息------------*");
printf("\n");
printf(" %d.", ++count);
printf(" 名称: ");
scanf("%s", cur->Name);
fflush(stdin); //每一次输入完后清空缓存区
printf("\n");
printf(" 种类(1微机 2打印机 3扫描机): ");
scanf("%s", cur->Sort);
fflush(stdin);
printf("\n");
printf(" 编号: ");
scanf("%s", cur->ID);
fflush(stdin);
printf("\n");
printf(" 购买日期: ");
scanf("%s", cur->Buydate);
fflush(stdin);
printf("\n");
printf(" 价格: ");
scanf("%s", cur->Price);
fflush(stdin);
printf("\n");
printf(" 是否报废(未报废 0 报废 1): ");
scanf("%s", cur->State);
fflush(stdin);
printf("\n");
printf(" 报废日期: ");
scanf("%s", cur->Donatedate);
fflush(stdin);
system("cls"); //清屏
cur->next = head->next;
head->next = cur;
}
return head;
}
/*查询仪器信息*/
Information* Query(Information* head)
{
system("cls");
char choice;
printf("***************************************\n");
printf("**--------1.按仪器名称查询-----------**\n");
printf("**--------2.按仪器编号查询-----------**\n");
printf("**--------3.按仪器种类查询-----------**\n");
printf("**--------4.返回菜单----------——---**\n");
printf("***************************************\n");
choice = _getch();
fflush(stdin); //清空缓存区
system("cls");
switch (choice) //以三种方式查询
{
case '1':
{
printf("\n请输入仪器名称:"); //请输入仪器名称
char name[20];
gets_s(name);
fflush(stdin);
system("cls");
Information* cur = head->next;
while (cur && strcmp(cur->Name, name) != 0) cur = cur->next;
if (cur == NULL)
{
printf("\n未找到该仪器信息!"); //未找到该仪器信息
}
else //打印找出的信息
{
printf("\n\t\t --仪器信息-- \n\n");
printf("\t---------------------------------------------------------------------------------------------------------\n");
printf("\t---名称---种类(1微机2打印机3扫描机)----编号-----价格-----购买日期------状态(0未报废 1报废)------报废日期\n");
printf("\t %s %s %s %s %s %s %s\n", cur->Name, cur->Sort, cur->ID, cur->Price, cur->Buydate, cur->State, cur->Donatedate);
cur = cur->next;
}
printf("\n\t\t按任意键返回."); //按任意键返回
_getch();
break;
}
case '2':
{
printf("\n请输入仪器编号:"); //请输入仪器编号
char id[20];
gets_s(id);
fflush(stdin);
Information* pcur = head->next;
while (pcur && strcmp(pcur->ID, id) != 0) pcur = pcur->next;
if (pcur == NULL) printf("未找到该仪器信息!"); //未找到该仪器信息
else //打印找出的信息
{
printf("\n\t\t --仪器信息-- \n\n");
printf("\t---------------------------------------------------------------------------------------------------------\n");
printf("\t---名称---种类(1微机2打印机3扫描机)----编号-----价格-----购买日期------状态(0未报废 1报废)------报废日期\n");
printf("\t %s %s %s %s %s %s %s\n", pcur->Name, pcur->Sort, pcur->ID, pcur->Price, pcur->Buydate, pcur->State, pcur->Donatedate);
pcur = pcur->next;
}
printf("\t\t按任意键返回."); //按任意键返回
_getch();
break;
}
case '3':
{
printf("\n请输入仪器种类:"); //请输入仪器种类
int a = 0;
char sort[2];
gets_s(sort);
fflush(stdin);
Information* pcur = head->next;
printf("\n\t\t --仪器信息-- \n\n");
printf("\t---------------------------------------------------------------------------------------------------------\n");
printf("\t---名称---种类(1微机2打印机3扫描机)----编号-----价格-----购买日期------状态(0未报废 1报废)------报废日期\n");
while (pcur != 0)
{
while (pcur && strcmp(pcur->Sort, sort) != 0) pcur = pcur->next;
if (pcur != NULL)
{
printf("\t %s %s %s %s %s %s %s\n", pcur->Name, pcur->Sort, pcur->ID, pcur->Price, pcur->Buydate, pcur->State, pcur->Donatedate);
pcur = pcur->next;
a++;
}
if (a == 0)
{
printf("未找到该种类信息!"); //未找到该仪器信息
}
}
printf("\t\t按任意键返回."); //按任意键返回
_getch();
break;
}
case '4':
{
Menu(); //返回主菜单
break;
}
default:
{
printf("输入错误!"); //输入错误
break;
}
}
return head;
}
/*修改仪器信息*/
Information* Modify(Information* head)
{
system("cls");
printf("\n请输入仪器名称:"); //请输入仪器名称
char name[20];
gets_s(name);
fflush(stdin);
Information* cur = head;
while (cur && strcmp(cur->Name, name) != 0) cur = cur->next;
if (!cur)
{
printf("\n未找到该仪器信息!"); //未找到该仪器信息
printf("\n\n\t\t按任意键返回."); //按任意键返回
_getch();
}
else //输入修改后信息
{
system("cls");
printf("*-------------输入修改后信息------------*");
printf("\n");
printf(" 名称: ");
scanf("%s", cur->Name);
fflush(stdin);
printf("\n");
printf(" 种类(1微机 2打印机 3扫描机): ");
scanf("%s", cur->Sort);
fflush(stdin);
printf("\n");
printf(" 编号: ");
scanf("%s", cur->ID);
fflush(stdin);
printf("\n");
printf(" 价格: ");
scanf("%s", cur->Price);
fflush(stdin);
printf("\n");
printf(" 购买日期: ");
scanf("%s", cur->Buydate);
fflush(stdin);
printf("\n");
printf(" 状态: ");
scanf("%s", cur->State);
fflush(stdin);
printf(" 报废日期: ");
scanf("%s", cur->Donatedate);
fflush(stdin);
printf("\n");
system("cls");
//修改完后打印这条信息
printf("\n\t\t --仪器信息-- \n\n");
printf("\t---------------------------------------------------------------------------------------------------------\n");
printf("\t---名称---种类(1微机2打印机3扫描机)----编号-----价格-----购买日期------状态(0未报废 1报废)------报废日期\n");
printf("\t %s %s %s %s %s %s %s\n", cur->Name, cur->Sort, cur->ID, cur->Price, cur->Buydate, cur->State, cur->Donatedate);
printf("\n\n\t\t按任意键继续.");
_getch();
}
system("cls");
return head;
}
Information* Delect(Information* head)
{
system("cls");
char choice;
printf("***************************************\n");
printf("**--------1.删除某个仪器信息---------**\n");
printf("**--------2.删除全部仪器信息---------**\n");
printf("**--------3.返回菜单-----------------**\n");
printf("***************************************\n");
choice = _getch();
fflush(stdin);
system("cls");
switch (choice)
{
case '1':
{
printf("\n输入要删除的仪器名称:"); //输入要删除的仪器名称
char name[20];
gets_s(name);
Information* pre = head;
while (pre->next && strcmp(pre->next->Name, name) != 0) pre = pre->next;
if (!pre->next)
{
printf("\n没有找到该仪器信息!");
printf("\n\n\t\t按任意键返回.");
_getch();
}
else
{
system("cls");
Information* cur = pre->next;
pre->next = pre->next->next;
free(cur);
printf("\n\t\t删除成功!"); //已删除成功
printf("\n");
printf("\n\t\t按任意键返回.");
_getch();
}
return head;
}
case'2':
{
system("cls");
Information* pre = head;
pre->next = NULL;
printf("\n\t\t\t删除成功 !\n");
printf("\n\t\t按任意键返回.");
_getch();
return head;
}
case '3':
{
Menu();
break;
}
default:
{
printf("输入错误!");
break;
}
return head;
}
}
/*退出系统*/
void Over(Information* head)
{
char t;
printf("***********************************");
printf("| 1.是 2.否 |");
printf("***********************************");
while (1)
{
t = _getch(); //输入t并且不回显
switch (t)
{
case '1':
{
Fprintf(head->next);
system("cls");
printf("Exiting....");
Sleep(1000); //暂停1秒
system("cls");
printf("退出成功");
exit(0); break; //终止程序
}
case '2':
{
Menu(); //调用函数,进入菜单
break;
}
default:break;
}
}
}
/*主菜单*/
void Menu()
{
Information* head = (Information*)malloc(sizeof(Information));
head->next = Fscanf();
do
{
system("cls");
char t;
printf(" ******************************\n");
printf(" -------实验设备管理系统------\n");
printf(" | 1.录入仪器信息 |\n");
printf(" | 2.查询仪器信息 |\n");
printf(" | 3.修改指定仪器信息 |\n");
printf(" | 4.仪器删除 |\n");
printf(" | 5.退出程序 |\n");
printf(" ******************************");
t = _getch(); //不回显函数
system("cls");
switch (t)
{
case '1':head = Addition(head); break;
case '2':head = Query(head); break;
case '3':head = Modify(head); break;
case '4':head = Delect(head); break;
case '5':Over(head); break;
default:
printf("输入错误,请重新输入!"); break;
}
} while (1);
}
int main(void)
{
Information* createlist = (Information*)malloc(sizeof(Information));
Menu();
return 0;
}
运行结果
(1)信息录入功能(2)数据查询功能
(3)分类统计功能
(4)修改功能
鉴于我不明白老师给的题目中设备的破损耗费和遗损处理是什么意思,便只做了记录破损情况处理,代码中还有许多不足的地方,如有不当之处请指出。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182379.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...