提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
把过去摸鱼的那些自己写一遍
``
一、主要内容
设备信息管理系统
dev上浅浅运行过,基本上没有大问题。
(使用单链表实现数据统计、增加、修改)
二、具体代码
1.包含头文件
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
2.定义结构体
代码如下:
typedef struct Node //定义结点的结构体
{
long long ID; //编号
char Name[50]; //名称
char Price[20]; //价格
char Purchase_Date[10]; //采购日期
char Use_Date[10]; //使用期限
char State[20]; //状态
struct Node*next; //next指针
}Node,*LinkList;
3.函数声明
//函数声明
LinkList Add(LinkList L); //新建设备
void Fix(long long Find_ID); //修改设备状态
void Census(LinkList L); //设备分类统计
void Goodbye(); //退出程序
4.主界面设计
//主界面
void Welcome()
{
printf("************************************************************\n");
printf("********** 欢迎使用设备信息管理系统 **********\n");
printf("********** 1.新增设备 **********\n");
printf("********** 2.设备的分类统计 **********\n");
printf("********** 3.修改设备状态 **********\n");
printf("********** 0.退出系统 **********\n");
printf("************************************************************\n");
printf("\n");
printf("请输入您所需功能对应标号\n");
}
5.所有代码
//设备信息管理系统设计
//信息:编号、名称、价格、采购日期、使用期限、状态(使用中、报废)
//功能:新增设备、对设备进行分类统计、修改设备状态
//完成时间:2022.04.26 晚20:54
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
typedef struct Node //定义结点的结构体
{
long long ID; //编号
char Name[50]; //名称
char Price[20]; //价格
char Purchase_Date[10]; //采购日期
char Use_Date[10]; //使用期限
char State[20]; //状态
struct Node*next; //next指针
}Node,*LinkList;
//函数声明
LinkList Add(LinkList L); //新建设备
void Fix(long long Find_ID); //修改设备状态
void Census(LinkList L); //设备分类统计
void Goodbye(); //退出程序
//主界面
void Welcome()
{
printf("************************************************************\n");
printf("********** 欢迎使用设备信息管理系统 **********\n");
printf("********** 1.新增设备 **********\n");
printf("********** 2.设备的分类统计 **********\n");
printf("********** 3.修改设备状态 **********\n");
printf("********** 0.退出系统 **********\n");
printf("************************************************************\n");
printf("\n");
printf("请输入您所需功能对应标号\n");
}
//添加设备信息
LinkList Add(LinkList L)
{
int n;
LinkList r=NULL; //尾指针
while(L->next != NULL)
{
L=L->next;
}
//L->next=NULL; //节点初始化
r=L; //尾指针指向当前尾节点
printf("您需要新增多少台设备的信息?");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
LinkList p = (LinkList)malloc(sizeof(Node));
printf("第%d台设备的编号:\n",i+1);
scanf("%lld",&p->ID);
printf("第%d台设备的名称:\n",i+1);
scanf("%s",p->Name);
printf("第%d台设备的价格:\n",i+1);
scanf("%s",p->Price);
printf("第%d台设备的采购日期:\n",i+1);
scanf("%s",p->Purchase_Date);
printf("第%d台设备的使用期限:\n",i+1);
scanf("%s",p->Use_Date);
printf("第%d台设备的状态(on/off):\n",i+1);
scanf("%s",p->State);
p->next=NULL; //尾插后的节点next指向空
r->next=p; //倒数第二个节点的next指向新插入节点
r=p; //r指向当前新插入节点(链表尾部)
}
return L;
}
//设备分类统计
void Census(LinkList L)
{
LinkList p;
int on_num = 0,off_num = 0; //on_num:使用中设备数量 off_num:报废设备数量
p = L->next;
while(p!=NULL) //通过指针移动 循环向后寻找
{
if(strlen(p->State)==2) //如果当前设备状态为on,则状态State这个字符串长度为2
{
on_num++; //使用中设备数量加一
}
else
off_num++; //否则报废设备数量加一
p=p->next; //p指针向后移动一个节点,直到寻找到尾节点为止
}
printf("当前正在使用中的设备有%d台,报废的设备有%d台。\n",on_num,off_num);
}
//修改设备状态
void Fix(LinkList L,long long Find_ID)
{
LinkList p;
p=L;
int n;
while(L->next != NULL) //依靠指针 向后寻找
{
if(p->ID == Find_ID) //如果所查找设备编号与某个节点中的ID吻合 则找到该设备
{
printf("当前设备编号:%lld\n设备名称:%s\n设备价格:%s\n",p->ID,p->Name,p->Price);
printf("采购日期:%s\n使用期限:%s\n设备状态:%s\n",p->Purchase_Date,p->Use_Date,p->State);
printf("是否修改其状态?(yes: 1 no: 0)\n");
scanf("%d",&n);
if(n==1) //修改设备状态
{
if(p->State[0]=='o' && p->State[1]=='n')
{
p->State[1]='f';
p->State[2]='f';
p->State[3]='\0'; //末尾手动添加转义字符 空字符 保障输出时不出现乱码现象
}
else
{
p->State[1]='n';
p->State[2]='\0';
}
}
printf("编号为%lld设备状态已成功更改!\n",p->ID);
printf("当前设备编号:%lld\n设备名称:%s\n设备价格:%s\n",p->ID,p->Name,p->Price);
printf("采购日期:%s\n使用期限:%s\n设备状态:%s\n",p->Purchase_Date,p->Use_Date,p->State);
break;
}
p=p->next;
}
}
//退出程序
void Goodbye()
{
system("cls"); //清屏
printf("欢迎下次使用设备管理系统!\n");
exit(0);//结束程序
}
int main()
{
LinkList Head=(LinkList)malloc(sizeof(Node)); //创建链表头指针
Head->next = NULL; //初始化链表
int n = 0; //接收功能选项数字
while(1) //循环执行 直到
{
Welcome(); //显示菜单界面
scanf("%d",&n);
switch(n)
{
case 1: //添加设备信息
Add(Head);
break;
case 2: //分类统计设备
Census(Head);
break;
case 3: //修改设备状态
printf(("请输入需修改状态的设备编号:\n"));
long long F_ID;
scanf("%lld",&F_ID);
Fix(Head,F_ID);
break;
case 0:
Goodbye(); //退出程序
break;
}
printf("是否继续操作?(yes:1 no: 0)\n");
scanf("%d",&n);
if(n == 0)
{
Goodbye(); //退出程序
break;
}
Sleep(1000); //执行挂起一秒
system("cls"); //清屏
}
return 0;
}
三、 一些碎碎念
好多东西,只要一段时间不敲就都忘了。
小小链表,写了好几个小时。
以后要勤加练习,少摆烂。