C语言xx管理系统

汽车零件采购管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 //零件采购系统数据 结构体
typedef struct Data             
{
	char no[20];			    //零件编号
	char pname[20];				//零件名称
	int year,month,day;			//采购日期
	char name[20];				//采购员姓名
	int amount;					//采购数量
	float price;				//采购单价
	char place[30];				//供货单位
}Da;

//创建单链表 Node
typedef struct Node            //创建单链表
{
	Da data;					//数据域 			   
	struct Node *next;		    //指针域
}NO;

NO *list; //定义链表指针

//创建头结点
NO *createHead()//创建头结点
{
	NO *headNode = (NO *)malloc(sizeof(NO)); //申请堆空间(动态内存)
	if(headNode==NULL)
	{
		printf("申请内存失败..!!\n");
		return NULL;
	}
	headNode->next=NULL;   //初始化
	return headNode;
}

//创建结点传入用户数据
NO *createNode(Da data) //创建结点传入数据
{
	NO *newNode = (NO *)malloc(sizeof(NO));
	if(newNode==NULL)
	{
		printf("申请内存失败..!!\n");
		return NULL;
	}
	newNode->data=data;  //初始化 newNode->data 为用户传进来的数据
	newNode->next=NULL;  //初始化指针为空
	return newNode;      //返回新的结点
}

//数据插入函数  insertData
void insertData(NO *headNode,Da data) //插入数据到链表
{
	NO *newNode = createNode(data);   //创建新的结点
	newNode->next=headNode->next;    //新结点的next指向头结点的next
	headNode->next=newNode;			 //头结点的next指向新结点
}

//编号查找函数  chazhaoDatano
NO *chazhaoDatano(NO *headNode,const char *no)//根据编号查找数据
{
	NO *pmove=headNode->next;    //pmove指向头结点的下一个
	while(pmove!=NULL&&strcmp(pmove->data.no,no))
	{
		pmove=pmove->next; //pmove指向pmove的下一个,直到pmove的编号与用户查找编号的相同,结束循环
	}
	return pmove; //返回pmove
}

//零件名称查找函数 chazhaoDatapname
NO *chazhaoDatapname(NO *headNode,const char *pname)//根据零件名称查找数据
{
	NO *pmove=headNode->next;     //pmove指向头结点的下一个
	while(pmove!=NULL&&strcmp(pmove->data.pname,pname))
	{
		pmove=pmove->next;   //pmove指向pmove的下一个,直到pmove的零件名与用户查找的相同,结束循环
	}
	return pmove; // 返回pmove
}

//编号删除函数 deleteDatano
void deleteDatano(NO *headNode,const char *no)//根据编号删除数据
{
	NO *preNode=headNode;        //之前的结点等于头结点
	NO *curNode=headNode->next;  //当前结点等于头结点的下一个
	while(curNode!=NULL && strcmp(curNode->data.no,no))
	{
		preNode=curNode;            //之前结点指向当前结点
		curNode=preNode->next;		//当前结点指向之前结点的下一个
	}
	if(curNode==NULL)
	{
		printf("删除失败,没有找到指定数据..!\n");
	}else{
		preNode->next=curNode->next;       //之前结点的下一个指向当前结点下一个
		free(curNode);                     //释放当前结点内存
	}
}
//显示所有采购信息函数 printList
void printList(NO *headNode)
{
	NO *pmove=headNode->next; //pmove 指向头结点的next
	printf("编号\t零件名称\t采购日期\t采购员\t采购数量\t零件单价\t零件单价\n");
	while(pmove!=NULL)    //判断pmove是否指向最后一个NULL结点,如果不是则进入循环
	{
			printf("%s\t%s\t\t%d-%d-%d\t%s\t%d\t\t%f\t%s\n",
			pmove->data.no,
			pmove->data.pname,
			pmove->data.year,pmove->data.month,pmove->data.day,
			pmove->data.name,
			pmove->data.amount,
			pmove->data.price,
			pmove->data.place);
			pmove=pmove->next;  
	}
}

//菜单函数
void makeMenu()
{
	printf("*******************汽车零部件采购管理系统*************************\n\n");
	printf("\t\t【1】输入采购信息\n");
	printf("\t\t【2】根据采购编号显示采购的零部件信息\n");
	printf("\t\t【3】根据零部件名称显示该部件的所有采购信息\n");
	printf("\t\t【4】根据采购编号修改采购信息\n");
	printf("\t\t【5】根据采购编号删除采购信息\n");
	printf("\t\t【6】显示所有采购信息\n");
	printf("\t\t【0】退出系统\n");
	printf("******************************************************************\n");
	printf ("请输入(0 - 6)\n\n");
}

//菜单跳转函数
void keyDown()//菜单跳转
{
	int userkey=0;
	Da temp;   //用户输入 接收变量
	NO *result;//编号查找函数 接收变量
	NO *pnames;//名称查号函数 接收变量
	scanf("%d",&userkey);
	switch(userkey)
	{
	case 0:
		printf("******【退出模块】******\n");
		exit(0);
		break;
	case 1:
		printf("******【录入模块】******\n\n");
		printf("请输入零件编号:");
		scanf("%s",temp.no);
		printf("请输入零件名称:");
		scanf("%s",temp.pname);
		printf("请输入采购日期:");
		scanf("%d-%d-%d",&temp.year,&temp.month,&temp.day);
		printf("请输入采购员姓名:");
		scanf("%s",temp.name);
		printf("请输入采购数量:");
		scanf("%d",&temp.amount);
		printf("请输入零件单价:");
		scanf("%f",&temp.price);
		printf("请输入供货单位:");
		scanf("%s",temp.place);
		insertData(list,temp);
		break;
	case 2:
		printf("******【编号查找模块】******\n\n");
		printf("请输入要查找的零件编号\n");
		scanf("%s",temp.no);
		result=chazhaoDatano(list,temp.no);
		if(result==NULL)
		{
			printf("未找到结果...!");
		}else{
			printf("编号\t零件名称\t采购日期\t采购员\t采购数量\t零件单价\t零件单价\n");
			printf("%s\t%s\t\t%d-%d-%d\t%s\t%d\t\t%f\t%s\n",
			result->data.no,
			result->data.pname,
			result->data.year,result->data.month,result->data.day,
			result->data.name,
			result->data.amount,
			result->data.price,
			result->data.place);
		}
		break;
	case 3:
		printf("******【零件名称查找模块】******\n\n");
		printf("请输入要查找的零件名称\n");
		scanf("%s",temp.pname);
		pnames=chazhaoDatapname(list,temp.pname);
		if(pnames==NULL)
		{
			printf("未找到结果...!");
		}else{
			printf("编号\t零件名称\t采购日期\t采购员\t采购数量\t零件单价\t零件单价\n");
			printf("%s\t%s\t\t%d-%d-%d\t%s\t%d\t\t%f\t%s\n",
			pnames->data.no,
			pnames->data.pname,
			pnames->data.year,pnames->data.month,pnames->data.day,
			pnames->data.name,
			pnames->data.amount,
			pnames->data.price,
			pnames->data.place);
		}
		break;
	case 4:
		printf("******【根据编号修改模块】******\n\n");
		printf("请输入要修改的编号:\n");
		scanf("%s",temp.no);
		result=chazhaoDatano(list,temp.no);
		if(result==NULL)
		{
			printf("未找到结果...!");
		}else{
			printf("请输入新的零件编号:");
			scanf("%s",result->data.no);
			printf("请输入新的零件名称:");
			scanf("%s",result->data.pname);
			printf("请输入新的采购日期:");
			scanf("%d-%d-%d",&result->data.year,&result->data.month,&result->data.day);
			printf("请输入新的采购员姓名:");
			scanf("%s",result->data.name);
			printf("请输入新的采购数量:");
			scanf("%d",&result->data.amount);
			printf("请输入新的零件单价:");
			scanf("%f",&result->data.price);
			printf("请输入新的供货单位:");
			scanf("%s",result->data.place);
		}
		break;
	case 5:
		printf("******【根据编号删除模块】******\n\n");
		printf("请输入要删除的编号:\n");
		scanf("%s",temp.no);
		deleteDatano(list,temp.no);
		break;
	case 6:
		printf("******【显示所有信息模块】******\n\n");
		printList(list);
		break;
	default:
		printf("输入错误,请重新输入...!\n");
		break;
	}
}

//主函数
int main()   
{
	list=createHead(); //创建链表list
	while(1)
	{
		makeMenu();//调用菜单函数
		keyDown(); //调用菜单跳转函数
		system("pause");//暂停屏幕显示
		system("cls");//清屏
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duck不必︎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值