111

//写入头文件
#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(n
1) {
​​​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(p
NULL) {
​​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(x
p->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(p
NULL) {
​​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(numberplus
p->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(priceplus
p->price) {
​​​​​printf(“请输入新的货物价格:\n”);
​​​​​scanf("%f",&p->price);
​​​​​break;
​​​​}
​​​​p=p->next;
​​​}
​​​printf(“修改货物价格成功”);
​​​break;
​​case 4:
​​​printf(“请输入要修改的货物数量:\n”);
​​​scanf("%d",&countplus);
​​​while(p!=NULL) {
​​​​if(countplus
p->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(numberplusplus
p->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(m
1) {
​​​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;
}

上一篇:算法提高 最长滑雪道 java实现


下一篇:DOM的查找与修改