📄 超市库存货品信息管理系统设计.txt
字号:
//主程序
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
typedef struct com
{
long int num;
char name[10];
int count;
struct com *next;
}COM;
#define LEN sizeof(COM)
#define PRINT "%-15ld%-15s%-15ld\n",ptr1->num,ptr1->name,ptr1->count
#define CHECK_COUNT ptr1->count<0
#define CHECK_COUNT2 ptr3->count<0
COM *input();
void print_perf();
COM *openfile();
COM *insert_perf();
COM *del_perf();
void search();
COM *revise_perf();
COM *pass();
vid save(COM *head);
FILE *fp;
COM *head=NULL;
COM *ptr1=NULL,*ptr2=NULL;
char filename1[20];
char filename2[]={".dat"};
void main()
{
char message[]={"超市货品库存管理系统使用说明 \n",
"本系统是一个超市货品库存信息管理系统,您可以在本 \n",
"系统中输入多类货品信息,系统将以您输入的货品类名作为 \n",
"文件名保存. \n",
"本系统对已保存的货品信息可调出后进行插入,删除,修改 \n",
"等操作,然后重新保存,同时系统还具有分别按货品号和货品名 \n",
"进行排序和查找功能. \n",
"欢迎您使用货品库存管理系统!"
};
char menu[]= {"*1.输入货品信息 \n",
"*2.输出全部货品信息 \n",
"*3.插入货品信息 \n",
"*4.删除货品信息 \n",
"*5.修改货品信息 \n",
"*6.综合排序 \n",
"*7.综合查找 \n",
"*8.存盘 \n",
"*9.退出 \n"
};
int sel;
textbackground(BLUE);
textcolor(YELLOW);
clrscr();
gotoxy(4,9);
printf("%s",message);
gotoxy(10,22);
printf("按任意键进入主菜单:");
getch();
do
{
clrscr();
gotoxy(1,9);
printf("%s",menu);
gotoxy(10,20);
printf("请在0-8中选择:");
scanf("%d",&sel);
switch(sel)
{
case 1: head=input();break;
case 2: print_perf();break;
case 3: head=insert_perf();break;
case 4: head=del_perf();break;
case 5: /*head=revise_perf();*/
printf("省略编写,按任意键返回\n");getch();break;
case 6: /*head=pass();*/
printf("省略编写,按任意键返回\n");getch();break;
case 7: search(); break;
case 8: save(head);break;
case 0: break;
}
}while(sel!=0);
}
//输入模块
COM *input()
{
char string1[]={"货品号"};
char string2[]={"货品名"};
char string3[]={"货品量"};
int n=1,i=0;
if((ptr1=(COM *)malloc(LEN))==NULL)
{
printf("内存不足,链表创建失败!");
getch();
}
clrscr();
printf("请依次按提示输入(货品号为0结束输入):\n");
do
{
printf("请输入第%d个货品的货品号%s:\n",n,string1);
scanf("%ld",&ptr1->num);flushall();
if(ptr1->num==0)
{
printf("按任意键回上层菜单:");
getch();
free(ptr1);
return(0);
}
printf("请输入第%d个货品的货品名%s:\n",n,string2);
scanf("%s",ptr1->name);flushall();
printf("请输入第%d个货品的货品量%s:\n",n,string3);
scanf("%s",&ptr1->count);flushall();
if(CHECK_COUNT) printf("请输入有效的货品量!\n");
}while(CHECK_COUNT);
while(ptr1!=NULL)
{
if(n==1)head=ptr1;
else ptr2->next=ptr1;
n++;
ptr2=ptr1;
if((ptr1=(COM *)malloc(LEN))==NULL)
{
printf("内存不足,链表创建失败!");
getch();
}
do
{
printf("请输入第%d个货品的货品号%s:\n",n,string1);
scanf("%ld",&ptr1->num);flushall();
if(ptr1->num==0)
{
ptr1=NULL;
break;
}
printf("请输入第%d个货品的货品名%s:\n",n,string2);
scanf("%s",ptr1->name);flushall();
printf("请输入第%d个货品的货品量%s:\n",n,string3);
scanf("%s",&ptr1->count);flushall();
if(CHECK_COUNT) printf("请输入有效的货品量!\n");
}while(CHECK_COUNT);
}
ptr2->next=NULL;
gotoxy(10,24);
printf("已完成货品信息输入,按任意键回上层菜单,请存盘:");
getch();
return head;
}
//插入模块
COM * insert_perf()
{
COM *ptr3=NULL;
char string1[]={"货品号"};
char string2[]={"货品名"};
char string3[]={"货品量"};
char sell[10];
clrscr();
gotoxy(25,10);
printf("请输入要插入的货品类名称:");
head=openfile();
if(head==NULL) return NULL;
else
{
do
{
clrscr();
printf("请输入插入货品的信息:\n");
if((ptr3=(COM *)malloc(LEN))==NULL)
{
printf("内存不足,链表创建失败!");
getch();
}
do
{
printf("请依次按提示输入:\n");
printf("请输入货品的货品号%s(大于0):\n",string1);
scanf("%ld",&ptr3->num);flushall();
if(ptr3->num<=0)
{
printf("输入错误,请重新选择插入选项\n");
getch();return ;
}
printf("请输入货品的货品名%s:\n",string2);
scanf("%s",ptr3->name);flushall();
printf("请输入货品的货品量%s:\n",string3);
scanf("%s",&ptr3->count);flushall();
if(CHECK_COUNT2) printf("请输入有效的货品量(大于0)!\n");
}while("CHECK_COUNT2");
ptr1=head;
while(ptr1!=NULL)
{
ptr2=ptr1;
ptr1=ptr1->next;
}
ptr2->next=ptr3;
ptr3->next=NULL;
printf("\n插入成功,是否继续请键入yes 或 no: ");
scanf("%s",sell);
clrscr();
}while(!strcmp(sell,"yes"));
gotoxy(10,10);
printf("已插入成功,按任意键返回上层菜单后,请存盘:");
getch();
return head;
}
//删除模块
COM *del_perf()
{
char name[10];
char sell[10];
int sel;
int del_num;
clrscr();
gotoxy(25,10);
printf("请输入要删除的货品类名称:");
head=openfile();
clrscr();
if(head==NULL) return NULL;
else
do
{
do
{
clrscr();
gotoxy(5,4);
printf("请选择输入货品信息:");
gotoxy(1,9);
printf(" *1.按货品号删除\n");
gotoxy(1,10);
printf(" *2.按货品名删除\n");
gotoxy(10,22);
printf("请在1-2中选择:");
scanf("%d",&sel);
switch(sel)
{
case 1:clrscr();
gotoxy(6,6);
printf("请输入货品号:");
scanf("%d",&del_num);break;
case 2:clrscr();
gotoxy(6,6);
printf("请输入货品名:");
scanf("%d",&name);break;
}
}while(sel!=1&&sel!=2);
ptr1=head;
if(ptr1->num==del_num||(strcmp(ptr1->name,name)==0)
{
head=ptr1->next;
printf("删除货品信息成功!\n");
}
else
{
while(ptr1!=NULL&&ptr1->num!=del_num&&strcmp(ptr1->name,name)!=0)
{
ptr2=ptr1;
ptr1=ptr1->next;
}
if(ptr1->num==del_num||(strcmp(ptr1->name,name)==0)
{
ptr2->next=ptr1->next;
free(ptr1);
printf("删除货品信息成功!\n");
}
else printf("\n未找到这个货品的信息!\n\n");
}
printf("是否继续进行删除,请键入yes 或no : ");
scanf("%s",sell);
}while(!strcmp(sell,"yes"));
clrscr();
gotoxy(10,10);
printf("已删除成功,按任意键回上层菜单后,请存盘:");
getch();
return head;
}
//查找模块
void search()
{
char name[10];
char sell[10];
int sel;
long int sel_num;
clrscr();
gotoxy(30,10);
printf("请输入要查找的货品类名称:");
head=openfile();
if(head==NULL)return;
else
do
{
do
{
clrscr();
gotoxy(5,4);
printf("请选择查找方式:");
gotoxy(1,9);
printf(" *1.按货品号查找\n");
gotoxy(1,10);
printf(" *2.按货品名查找\n");
gotoxy(10,22);
printf("请在1-2中选择:");
scanf("%d",&sel);
switch(sel)
{
case 1:clrscr();
gotoxy(6,6);
printf("请输入货品号:");
scanf("%d",&del_num);break;
case 2:clrscr();
gotoxy(6,6);
printf("请输入货品名:");
scanf("%d",&name);break;
}
}while(sel!=1&&sel!=2);
ptr1=head;
while(ptr1!=NULL && ptr1->num!=sel_num && strcmp(ptr1->name,name)!=0)
ptr1=ptr1->next;
if(ptr1->num==del_num||(strcmp(ptr1->name,name)==0)
{
printf("\n查找货品信息成功!\n\n");
printf("货品号 货品名 货品量\n");
printf(PRINT);
}
else
printf("\n未找到这个货品的信息!\n\n");
printf("\n是否继续查找,请键入yes 或no :");
scanf("%s",sell);
}while(!strcmp(sell,"yes"));
gotoxy(10,24);
printf("按任意键回上层菜单:");
getch();
}
//输出模块
void print_perf()
{
int i=1;
clrscr();
gotoxy(25,10);
printf("请输入要输出的货品类名称:");
head=openfile();
if(head==NULL) return ;
else clrscr();
printf("输出结果如下:\n");
printf("货品号 货品名 货品量\n\n");
ptr1=head;
do
{
printf(PRINT);
ptr1=ptr1->next;
if(i/10==1)
{
i=0;
printf("按任意键换页:");
getch();
clrscr();
gotoxy(0,6);
printf("货品号 货品名 货品量\n\n");
}
i++;
}while(ptr1!=NULL);
gotoxy(10,24);
printf("按任意键回上层菜单:");
getch();
}
//保存模块
void save(COM *head)
{
clrscr();
gotoxy(13,13);
printf("请输入将要存盘的货品类名称(仅限字母与数字):");
scanf("%s",filename1);
if((fp=fopen(strcat(filename1,filename2),"wb"))==NULL)
{
printf("创建文件失败!");
getch();
return;
}
ptr1=ptr2=head;
while(ptr1!=NULL)
{
if(fwrite(ptr1,sizeof(COM),1,fp)!=1)
{
printf("向文件输出数据失败!");
getch();
return ;
}
ptr1=ptr1->next;
}
fclose(fp);
gotoxy(10,24);
printf("已存盘,按任意键回上层菜单:");
getch();
}
//截入模块
COM *openfile()
{
int n=1;
clrscr();
scanf("%s",filename1);
if((fp=fopen(strcat(filename1,filename2),"rb"))==NULL)
{
gotoxy(15,13);
printf("无此名称的货品类,请检查其是否存在,按任意键返回主菜单");
getch();
return NULL;
}
if((ptr1=ptr2=(COM *)malloc(LEN))==NULL)
{
printf("内存不足,链表创建失败! \n按任意键返回主菜单\n");
getch();
return NULL;
}
if(fread(ptr1,sizeof(COM),1,fp)!=1)
{
printf("从文件输入数据失败!\n按任意键返回主菜单\n");
getch();
return NULL;
}
if(ptr1->next==NULL)head=ptr1;
else
{
do
{
if(n==1)head=ptr1;
else ptr2->next=ptr1;
n++;
ptr2=ptr1;
if( (ptr1=(COM *)malloc(LEN))==NULL)
{
printf("内存不足,链表创建失败! \n按任意键返回主菜单\n");
etch();
return NULL;
}
if(fread(ptr1,sizeof(COM),1,fp)!=1)
{
printf("从文件输入数据失败!\n按任意键返回主菜单\n");
getch();
return NULL;
}
}while(ptr1->next!=NULL);
ptr2->next=ptr1;
}
fclose(fp);
return head;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -