C语言实训–非链表商店管理系统
新手作者的话
其实,我也是刚学习C语言的新手,原本是想用链表来完成我的管理系统,但是对链表的语法等的操作也不是很熟练,所以就用数组的方式完成,之所以不做学生管理系统,是因为我懒…,其实相对学生管理系统而言,商店 管理系统没有了学生排序和总分以及平均分的部分而已,更适合新手学习
##内容部分
首先是宏定义和头文件部分
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define DATA huo[i].num,huo[i].name,huo[i].price,huo[i].kucun //定义类型
#define LEN sizeof(struct huowu)//数据长度
#define FORMAT " %d %10s %.1lf %d\n"//输出格式
代码部分
结构体部分
struct huowu/*定义名为huowu的结构体*/
{
int num;/*定义商品编号*/
char name[15];/*商品的名字*/
float price;/*商品的价格*/
int kucun;/*商品的库存量*/
};
调用函数类型
主要是为了方便记得自己定义了哪些函数内容
同时为了方便,我也把函数名用拼音的方式记住(就是懒得写英语)
struct huowu huo[50];/*定义结构体数组*/
void caidan();/*菜单函数*/
void main();/*主函数*/
void luru();/*录入商品信息*/
void show();/*显示商品信息*/
void shanchu();/*删除商品信息*/
void xiugai();/*修改商品信息*/
void chazhao();/*查找信息*/
void charu();/*插入信息*/
这是我自己建立的菜单
void caidan()/*主菜单*/
{
system("color f");/*把菜单换成我想要的颜色(颜色代码为f)*/
printf("\t\t\t\v-----------欢迎━(*`?′*)ノ亻!使用商店管理系统-------\n");
printf("\t\t\t\v******************************************************\n");
printf("\t\t\t\v* 1.写入商品信息 2.删除商品信息 *\n");
printf("\t\t\t\v* 3.修改商品信息 4.显示当前所有货物 *\n");
printf("\t\t\t\v* 5.查找功能 6.插入商品信息 *\n");
printf("\t\t\t\v* 0.退出 *\n");
printf("\t\t\t\v******************************************************\n");
printf("请输入你要选择的功能(0-6):");
}
颜色代码在文章下方
接下来是主函数部分
void main()/*主函数*/
{
int x;
caidan();
scanf("%d",&x);
while(x)
{
switch(x)
{case 1:luru()/*对应上面定义的函数*/;break;
case 2:shanchu();break;
case 3:xiugai();break;
case 4:show();break;
case 5:chazhao();break;
case 6:charu();break;
case 0:return ;break;
default:break;
}
getch();
caidan();/*再次返回菜单*/
scanf("%d",&x);
}
录入函数部分
void luru()/*录入商品信息*/
{ int i,m=0;/*m是记录的条数*/
char ch[2];
FILE *fp;/*定义文件指针*/
if((fp=fopen("商品信息.txt","a+"))==NULL)/*打开指定文件*/
{
printf("打不开呢n\n");
return;
}
while(!feof(fp))
{
if(fread(&huo[m] ,LEN,1,fp)==1)
m++;/*统计当前记录条数*/
}
fclose(fp);
if(m==0)
printf("没有任何记录呢!\n");
else
{
system("cls");/*清屏*/
show();/*调用show函数,显示原有信息*/
}
if((fp=fopen("商品信息.txt","wb"))==NULL)
{
printf("打不开呢\n");
return;
}
for(i=0;i<m;i++)
fwrite(&huo[i] ,LEN,1,fp);/*向指定磁盘文件录入信息*/
printf("要录入信息吗(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/**/
{
printf("商品编号:");
scanf("%d",&huo[m].num);/*输入商品编号*/
for(i=0;i<m;i++)
if(huo[i].num==huo[m].num)
{
printf("这个编号已经有了,输入任意键继续!");
getch();
fclose(fp);
return;
}
printf("商品名:");
scanf("%s",huo[m].name);/*输入商品名*/
printf("商品价格:");
scanf("%f",&huo[m].price);/*输入商品价格*/
printf("商品库存:");
scanf("%d",&huo[m].kucun);/*输入商品库存*/
if(fwrite(&huo[m],LEN,1,fp)!=1)/**/
{
printf("保存不了啊!");
getch();
}
else
{
printf("%s 保存好了\n",huo[m].name);
m++;
}
printf("继续吗?(y/n):");/*询问是否继续*/
scanf("%s",ch);
}
fclose(fp);
printf("OK!\n");
}
显示函数部分
void show()
{ FILE *fp;
int i,m=0;
fp=fopen("商品信息.txt","rb");
while(!feof(fp))
{
if(fread(&huo[m] ,LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("|商品编号|商品名 |商品价格(元/斤)|库存(个)\t\n");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA);/*按照宏定义的顺序和类型依次进行输出*/
}
}
删除部分
void shanchu()/*删除函数*/
{FILE *fp;
int snum,i,j,m=0;
char ch[2];
if((fp=fopen("商品信息.txt","r+"))==NULL)
{ printf("打不开呢\n");return;}
while(!feof(fp))
if(fread(&huo[m],LEN,1,fp)==1) m++;
fclose(fp);
if(m==0)
{
printf("没有记录呢!\n");
return;
}
printf("请输入商品编号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==huo[i].num)
break;
printf("找到了,是不是要删呀(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要*/
for(j=i;j<m;j++)
huo[j]=huo[j+1];/*将后一个记录移到前一个*/
m--;/*总数减1*/
if((fp=fopen("商品信息.txt","wb"))==NULL)
{ printf("打不开呢\n");
return;
}
for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
if(fwrite(&huo[j] ,LEN,1,fp)!=1)
{ printf("不能保存啊!\n");
getch();
}
fclose(fp);
printf("删掉啦!\n");
}
修改部分
void xiugai()/*修改*/
{ FILE *fp;
int i,j,m=0,snum;
if((fp=fopen("商品信息.txt","r+"))==NULL)
{ printf("打不开文件嗯\n");return;}
while(!feof(fp))
if(fread(&huo[m],LEN,1,fp)==1) m++;
if(m==0) {printf("没有任何记录\n");
fclose(fp);
return;
}
show();
printf("请输入你要修改的商品编号!\n");
printf("商品编号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==huo[i].num)/*检索记录中是否有要修改的信息*/
break;
printf("找到了,你可以修改了!\n");
printf("商品名:");
scanf("%s",huo[i].name);/*输入商品名*/
printf("商品价格:");
scanf("%f",&huo[i].price);/*输入商品价格*/
printf("商品库存:");
scanf("%d",&huo[i].kucun);/*输入该商品的库存量*/
printf("修改成功啦");
if((fp=fopen("商品信息.txt","wb"))==NULL)
{ printf("打不开文件啊\n");return;}
for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/
if(fwrite(&huo[j] ,LEN,1,fp)!=1)
{ printf("保存不了啊!"); getch(); }
fclose(fp);
}
接下来是查找部分
void chazhao()/*查找*/
{ FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen("商品信息.txt","rb"))==NULL)
{ printf("文件打不开啊\n");return;}
while(!feof(fp))
if(fread(&huo[m],LEN,1,fp)==1) m++;
fclose(fp);
if(m==0) {printf("没有记录啊!\n");return;}
printf("请输入你要插入的编号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==huo[i].num)/*查找输入的商品编号是否在记录中*/
{ printf("找到你要的商品了,要显示它的具体信息吗?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("|商品编号 | 商品名 | 商品价格 | 库存\t\n");
printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
break;
}
}
if(i==m) printf("找不到这个商品啊!\n");/*未找到要查找的信息*/
}
最后是插入部分
void charu()/*插入*/
{ FILE *fp;
int i,j,k,m=0,snum;
if((fp=fopen("商品信息.txt","r+"))==NULL)
{ printf("打不开文件啊\n");return;}
while(!feof(fp))
if(fread(&huo[m],LEN,1,fp)==1) m++;
if(m==0) {printf("没有记录呢!\n");
fclose(fp);
return;
}
printf("请输入你要把新的商品号插入在哪?\n");
scanf("%d",&snum);/*输入要插入的位置*/
for(i=0;i<m;i++)
if(snum==huo[i].num)
break;
for(j=m-1;j>i;j--)
huo[j+1]=huo[j];/*从最后一条记录开始均向后移一位*/
printf("现在请输入新的商品信息\n");
printf("商品编号:");
scanf("%d",&huo[i+1].num);
for(k=0;k<m;k++)
if(huo[k].num==huo[i+1].num)
{
printf("这个编号已经存在了,请继续!");
getch();
fclose(fp);
return;
}
printf("商品名:");
scanf("%s",huo[i+1].name);
printf("商品价格:");
scanf("%f",&huo[i+1].price);
printf("该商品的库存:");
scanf("%d",&huo[i+1].kucun);
if((fp=fopen("商品信息.txt","wb"))==NULL)
{ printf("打不开文件啊\n");return;}
for(k=0;k<=m;k++)
if(fwrite(&huo[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
{ printf("保存不了呢!"); getch(); }
fclose(fp);
}
代码部分就到此结束了
运行结果
还有颜色代码分享给大家
颜色代码 | 相应颜色 |
---|---|
0 | 黑色 |
1 | 蓝色 |
2 | 绿色 |
3 | 浅绿色 |
4 | 红色 |
5 | 紫色 |
6 | 黄色 |
7 | 白色 |
8 | 灰色 |
9 | 淡蓝色 |
A | 淡绿色 |
B | 淡浅绿色 |
C | 淡红色 |
D | 淡紫色 |
E | 淡黄色 |
F | 亮白色 |
最后
如果喜欢或者觉得还可以的话就“一键三连”吧