//写入头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void page() { //页面开始
system(“color 3E”);
printf("\t\t\t**********************************\n");
printf("\t\t\t\t欢迎进入仓库货物管理系统\n");
printf("\t\t\t**********************************\n");
printf("\n");
printf("\t\t\t\t按enter键继续\n");
}
void menu() { //目录
printf("\t\t\t|--------------------|-------------------|\n");
printf("\t\t\t|__基本信息|\n");
printf("\t\t\t|1.创建货物信息|2.保存货物信息|\n");
printf("\t\t\t|3.查找货物信息|4.修改货物信息|\n");
printf("\t\t\t|5.删除货物信息|6.输出货物信息|\n");
printf("\t\t\t|7.退出系统 |8.添加货物信息|\n");
printf("\t\t\t|--------------------|-------------------|");
printf("\n\t\t\t请输入你的操作代号(1–8):\n");
}
//定义结构体
typedef struct object {
int number;
char name[100];
float price;
int count;
struct object * next;
} a1; //用a1代替结构体名object
a1 * head;//定义头指针
a1 * creat() { //1.创建信息功能
a1 po=NULL;
a1 p=NULL;//先让指针p指向空
po=head=(a1)malloc(sizeof(a1));//开辟一个新单元
int n;
while(1) {
p=(a1)malloc(sizeof(a1));//开辟动态存储区,把起始地址赋给p
printf(“请输入货物的编号、名称、价格、数量:\n”);
printf(“编号:”);
scanf("%d",&p->number);
printf(“名称:”);
scanf("%s",&p->name);
printf(“价格:”);
scanf("%f",&p->price);
printf(“数量:”);
scanf("%d",&p->count);
printf("\n");
po->next=p;
po=p;
printf("===========================================\n");
printf(“是否退出创建货物信息 退出: 输入1 继续: 输入2\n”);
scanf("%d",&n);
if(n1) {
po->next=NULL;
p=NULL;
return (head);
}
printf("\n");
if(n>2) {
printf(“输入错误!\n”);
system(“pause”);//
}
}
po->next=NULL;
free§;
p=NULL;
return (head);
}
//保存信息功能
void baocun(a1 *head) { //从头指针开始
int m;
m=0;
a1 *p=NULL;
FILE *z;//文件指针
p=head->next;
if(pNULL) {
printf(“无法创建头结点”);
} else if(p!=NULL) {
p=head->next;//p从头结点开始
if((z=fopen(“货物信息.txt”,“w”))==NULL) { //打开货物信息文件
printf(“无法打开此货物文件\n”);
exit(0);//若空,终止
}
while(p!=NULL) {
fprintf(z,“编号:%d\t”,p->number);
fprintf(z,“名称:%s\t”,p->name);
fprintf(z,“价格:%f\t”,p->price);
fprintf(z,“数量:%d\n”,p->count);
p=p->next;//p后移
m++;//标记作用
}
printf(“保存成功! 共保存%d个货物信息”,m);
fclose(z);//关闭文件;
}
}
//查找功能
void search(a1 *head) {
a1 *p=NULL;
char name0[100];
printf("\t\t\t请选择查找方式\n");//查找方式
printf("\t\t\t1.通过货物编号查找 2.通过货物名称查找\n");
p=head->next;
int n;
int x;
if(pNULL) {
printf(“无此货物信息,因为未保存货物信息\n”);
}
printf("\n");
printf(“请输入查找方式:1或2\n”);
scanf("%d",&n);
switch(n) {
case 1:
printf(“请输入查找的货物编号:\n”);
scanf("%d",&x);
while(p!=NULL) {
if(xp->number) {
printf(“要查找的货物的信息为:\n”);
printf(“编号: %d\n”,p->number);
printf(“名称: %s\n”,p->name);
printf(“价格: %f\n”,p->price);
printf(“数量: %d\n”,p->count);
break;
printf("\n");
p=p->next;
printf(“查找成功\n”);
break;
}
else if(x!=p->number)
{
break;
}
printf("\n");
printf(“无此货物信息!\n”);
printf(“查找失败”);
}
break;
case 2:
printf(“请输入要查找的货物名称:\n”);
scanf("%s",&name0);
while(p!=NULL) {
if(strcmp(name0,p->name)0) {
printf(“要查找的货物信息为:\n”);
printf(“编号: %d\n”,p->number);
printf(“名称: %s\n”,p->name);
printf(“价格: %f\n”,p->price);
printf(“数量: %d\n”,p->count);
break;
printf("\n");
p=p->next;
printf(“查找成功!\n”);
break;
}
else if(strcmp(name0,p->name)!=0)
{
break;
}
printf("\n");
printf(“无此货物信息!\n”);
printf(“查找失败”);
}
break;
default:
printf(“查找方式有误!\n”);
}
}
//添加信息功能
void add(a1 *head) {
a1 *p=NULL;
a1 p1=NULL;
p=head;//p 头指针
while(p->next!=NULL) {
p=p->next;
}
p1=(a1)malloc(sizeof(a1));//把p1变为a1的一个新的结构体变量
printf(“请输入要添加的货物信息:\n”);
printf(“编号:”);
scanf("%d",&p1->number);
printf(“名称:”);
scanf("%s",&p1->name);
printf(“价格:”);
scanf("%f",&p1->price);
printf(“数量:”);
scanf("%d",&p1->count);
p->next=p1;//让p的下一个结点为p1
p1->next=NULL;//p1为尾结点
baocun(head);
}
//修改信息功能
void correct(a1 *head) {
a1 *p;
p=NULL;
char nameplus[100];//定义新变量名,存放修改的数据
int numberplus;
float priceplus;
int countplus;
int v;//下面用到的修改方式
p=head->next;//p从第一个结点开始往后移
if(pNULL) {
printf(“无此货物信息,因为没有保存该货物信息\n”);
}
printf("\t\t\t\t请输入要修改的内容:\n");
printf("\t\t\t\t1.修改编号 2.修改名称\n");
printf("\t\t\t\t3.修改价格 4.修改数量\n");
printf(“请选择一种修改方式:\n”);
scanf("%d",&v);
switch(v) {
case 1:
printf(“请输入要修改的货物编号:\n”);
scanf("%d",&numberplus);
while(p!=NULL) {
if(numberplusp->number) {
printf(“请输入新的编号:\n”);
scanf("%d",&p->number);
break;
}
p=p->next;//p后移
}
printf(“修改编号成功”);
break;
case 2:
printf(“请输入要修改的货物名称:\n”);
scanf("%s",&nameplus);
while(p!=NULL) {
if(strcmp(nameplus,p->name)0) {
printf(“请输入新的货物名:\n”);
scanf("%s",&p->name);
break;
}
p=p->next;//p后移
}
printf(“修改货物名称成功”);
break;
case 3:
printf(“请输入要修改的价格:\n”);
scanf("%f",&priceplus);
while(p!=NULL) {
if(priceplusp->price) {
printf(“请输入新的货物价格:\n”);
scanf("%f",&p->price);
break;
}
p=p->next;
}
printf(“修改货物价格成功”);
break;
case 4:
printf(“请输入要修改的货物数量:\n”);
scanf("%d",&countplus);
while(p!=NULL) {
if(countplusp->count) {
printf(“请输入新的货物数量:\n”);
scanf("%d",&p->count);
break;
}
p=p->next;
}
printf(“修改货物数量成功”);
break;
default :
printf(“修改数据有误\n”);
}
printf("\n");
}
//删除信息功能
void cut(a1 *head) {
a1 *p=NULL;
a1 *q=NULL;
p=q=head->next;
printf("\t\t请选择删除的方式:");
printf("\t\t1.按编号删除 2.按名称删除\n");
printf("\t\t你的选择是:\t");
char nameplusplus[100];
int numberplusplus;
int t;
scanf("%d",&t);
switch(t) {
case 1: {
printf(“请输入你要删除的货物编号:\n”);
scanf("%d",&numberplusplus);
break;
}
case 2: {
printf(“请输入你要删除的货物名称:\n”);
scanf("%s",&nameplusplus);
break;
}
default: {
printf(“删除方式错误!\n”);
break;
}
}
while(p!=NULL) {
if(numberplusplusp->number) {
q->next=p->next;//删除p结点
free§;
p=NULL;//重新指向空
printf(“删除成功!”);
break;
}
else if(numberplusplus!=p->number) {
printf(“无此货物信息!\n”);
printf(“删除失败!”);
break;
}
else if(strcmp(nameplusplus,p->name)0) {
q->next=p->next;
free§;
p=NULL;
printf(“删除成功!”);
break;
}
else if(strcmp(nameplusplus,p->name)!=0) {
printf(“无此货物信息!”);
printf(“删除失败!”);
break;
}
q=p;
p=p->next;//p后移
}
}
//显示信息功能
void out(a1 *head) {
a1 *p=NULL;
p=head->next;
while(p!=NULL) {
printf("____________________________\n");
printf("|编号\t|名称\t|价格\t\t|数量\t |\n");
printf("|========|\n");
printf("|%d\t|%s\t|%f\t|%d\t |\n",p->number, p->name,p->price,p->count);
printf("|||_______||\n");
p=p->next;//开始多次输出
}
}
//读取功能
a1 *in() {
FILE *z;
a1 *head,*p,*w;
if((z=fopen(“货物信息.txt”,“r”)) == NULL) { //打开文件
printf(“不能打开文件!\n”);
}
head=(a1 *)malloc(sizeof(a1)); //申请空间
head->next=NULL;
p=(a1 *)malloc(sizeof(a1));
int m=0;
while(fread(p,sizeof(a1),1,z)1) { //读取文件信息。fread函数若执行成功,那么返回值为count(数据项的个数)
m=m+1;
p->next=NULL;
printf(“编号:%d\t名称:%s\t价格%f\t数量:%d\t\n”,p->number, p->name,p->price,p->count);
getchar();
if(m1) {
head->next=p;
} else {
w->next=p;
}
w=p;
p=(a1 *)malloc(sizeof(a1));
}
fclose(z);
return head;
}
//主函数开始
int main() {
FILE *z;//文件指针
int m,n;
page();//调用页面函数
getchar();//按enter下一步
if((z=fopen(“货物信息.txt”,“r”))!=NULL) {
head=in();//读入
} else {
printf(“文件中没有保存货物信息!\n”);
}
while(1) {
system(“cls”);//清屏
menu();//调用目录函数
scanf("%d",&n);
switch(n) {
case 1 :
head=creat();
break;
case 2 :
baocun(head);
break;
case 3 :
search(head);
break;
case 4 :
correct(head);
out(head);
break;
case 5:
cut(head);
break;
case 6 :
out(head);
break;
case 7:
break;
case 8:
add(head);
break;
default:
printf(“选择功能错误!\n”);
}
printf("\n");
printf("------------------------------------------------------------\n");
printf(“是否继续对该货物信息的操作,如果继续操作 输:1 退出输: 2 \n”);
printf("-—————————————————————————————-\n");
scanf("%d",&m);
getchar();
if(m==2) {
break;
}
}
return 0;
}