1、显示商品信息,包括:商品名称、商品种类(休闲食品、奶品水饮、生鲜水果)、商品价格、商品保质期、商品生产日期;
2、从文件中导入数据、显示、排序、查询的功能。(由于顾客没有更改信息的需要所以没设置修改、添加等功能,注:必须先导入数据);
3、系统提供按照不同方式查询的功能,如按照商品名称或类型查询;
4、系统能将商品信息排序之后顺序输出(排序可以有多种选择);
1、显示商品信息(同查询系统)
2、首先输入密码,若输入错误3次则退出系统。密码存储在文件中并可在进入系统后修改密码(密码为字符串)
3、从文件中导入数据、显示、添加、修改、删除、查询、排序、导出、修改密码;(注:必须先导入)
#include
#include
#include
#include
typedef struct _goods//商品结构体
{
char name[20];
int category;
float prize;
int shelf_life;
char time[15];
}goods;
goods b[20];
int N;
int switch_num;
int return_num;
char password1[20];
int num_star;
int input(goods b[],int N);//从系统中导入数据
void display(goods b[],int N);//显示信息
void change(goods b[],int N);//修改信息
void _search(goods b[],int N);//查找信息
int _insert(goods b[],int N);//添加信息
int _delete(goods b[],int N);//删除信息
void _sort(goods b[],int N);//排序信息
void save(goods b[],int N);//保存信息
void menu_customer();//顾客系统界面
void menu_manager();//管理员系统界面
void system_manager();//顾客系统
void password();//密码函数
void modify_password();//更改密码函数
//导入函数已完善
int input(goods b[],int N)
{
N=0;
FILE *fp;//打开文件
fp=fopen("data.txt","r+");
if(fp==NULL)//判断文件是否为空
{
printf("can't open this file");
exit(0);
}
while(!feof(fp))//导入
{
fscanf(fp,"%s%d%f%d%s",b[N].name,&b[N].category,&b[N].prize,&b[N].shelf_life,b[N].time);
N++;
}
Sleep(100);
printf("恭");
Sleep(50);
printf("喜");
Sleep(50);
printf("您");
Sleep(50);
printf("导");
Sleep(50);
printf("入");
Sleep(50);
printf("成");
Sleep(50);
printf("功");
Sleep(50);
fclose(fp);
return N-1;//商品数目
}
//显示函数已完善
void display(goods b[],int N)
{
int i;
for(num_star=0;num_star<18;num_star++)//显示*符号
{
printf("*");
Sleep(5);
}
printf("商");
Sleep(50);
printf("品");
Sleep(50);
printf("信");
Sleep(50);
printf("息");
Sleep(50);
printf("如");
Sleep(50);
printf("下");
Sleep(50);
for(num_star=0;num_star<18;num_star++){
printf("*");
Sleep(5);
}
printf("\n\n");
printf("商品名称 类别 价格 保质期 生产日期\n");
for(i=0;i<N;i++){
printf("%-8s\t%4d\t%.2f\t%4d\t%4s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);//显示信息
}
printf("\n【注;类别1.休闲食品 2.奶品水饮 3.生鲜水果】\n\n");
for(num_star=0;num_star<48;num_star++)//显示*符号
{
printf("*");
Sleep(5);
}
printf("\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);
if(return_num==1)//返回主界面
{
system("cls");
return;
}
}
//修改函数已完善
void change(goods b[],int N)
{
int i,n;
char a[10];
for(num_star=0;num_star<18;num_star++)
{
printf("*");
Sleep(10);
}
printf("欢");
Sleep(50);
printf("迎");
Sleep(50);
printf("进");
Sleep(50);
printf("入");
Sleep(50);
printf("修");
Sleep(50);
printf("改");
Sleep(50);
printf("系");
Sleep(50);
printf("统");
Sleep(50);
for(num_star=0;num_star<18;num_star++){
printf("*");
Sleep(5);
}
printf("\n\n");
printf("-1-请输入需要修改的商品的名称\n ");//需要修改的名称
loop:
scanf("%s",a);
for(i=0;i<N;i++)//比较是哪个商品
{
if(!strcmp(b[i].name,a))
break;
}
if(i==N)
{
printf("\n-1-对不起找不到该商品,请重新输入\n ");
goto loop;
}
else
printf("\n-2-您需要的修改的商品信息如下:\n (1)商品名称(2)类别 (3)价格 (4)保质期 (5)生产日期\n %-9s\t%-3d\t%.2f\t%5d\t%10s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);//输出并左右对齐
printf("\n-3-请输入需要修改的商品信息编号\n ");
loop2:
scanf("%d",&n);
switch(n)//选择修改什么信息
{
case 1:
printf("\n-4-请输入该商品的名称\n ");
scanf("%s",b[i].name);
break;
case 2:
printf("\n-4-请选择商品类别*1.休闲食品2.奶品水饮3.生鲜水果\n ");
scanf("%d",&b[i].category);
break;
case 3:
printf("\n-4-请输入该商品的价格\n ");
scanf("%f",&b[i].prize);
break;
case 4:
printf("\n-4-请输入该商品的保质期*按月计(即输入1-12之间的整数)\n ");
scanf("%d",&b[i].shelf_life);
break;
case 5:
printf("\n-4-请输入该商品的生产日期*例如20170920\n ");
scanf("%s",b[i].time);
break;
default:
printf("\n-3-你输入的信息有误请重新输入:\n ");
goto loop2;
}
printf("\n-5-修改成功\n\n");
for(num_star=0;num_star<52;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);//返回主界面
if(return_num==1)
{
system("cls");
return;
}
}
//搜索程序已完善
void _search(goods b[],int N)
{
int i,n;
for(num_star=0;num_star<17;num_star++)
{
printf("*");
Sleep(5);
}
printf("欢");
Sleep(50);
printf("迎");
Sleep(50);
printf("进");
Sleep(50);
printf("入");
Sleep(50);
printf("搜");
Sleep(50);
printf("索");
Sleep(50);
printf("系");
Sleep(50);
printf("统");
Sleep(50);
for(num_star=0;num_star<17;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n");
printf("-1-请输入需要查询的内容*1.按名称查询2.按类型查询\n ");
scanf("%d",&switch_num);
switch(switch_num)//查询内容
{
case 1:
char a[10];
loop:
printf("\n-2-请输入需要查询的商品的名称:\n ");
scanf("%s",a);
for(i=0;i<N;i++)//逐个比较商品名称
{
if(!strcmp(b[i].name,a))
{
break;
}
}
if(i==N)
{
printf("\n-2-对不起找不到该商品*1.返回主菜单2.继续查询\n ");
scanf("%d",&switch_num);
if(switch_num==1)
{
goto loop7;
}
else goto loop;
}
else
{
printf("\n-3-您查询的商品信息如下:\n 商品名称 类别 价格 保质期 生产日期\n %-7s\t%4d\t%.2f\t%4d\t%4s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);
break;
}
case 2:
int kind,_count=0;
printf("\n-2-请输入商品的类别*1.休闲食品2.奶品水饮3.生鲜水果\n ");
loop3:
scanf("%d",&kind);
printf("\n-3-您查询的商品信息如下:\n 商品名称 类别 价格 保质期 生产日期\n");
for(i=0;i<N;i++)
{
if(b[i].category==kind)
{
printf(" %-7s\t%4d\t%.2f\t%4d\t%4s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);
_count++;
}
}
if(_count==0)//记录类别商品的数量
{
Sleep(100);
printf("\n-3-对不起找不到该类别信息请重新输入\n ");
goto loop3;
}
}
loop7:
printf("\n");
for(num_star=0;num_star<50;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);
if(return_num==1)
{
system("cls");
return;
}
}
//添加函数已完善
int _insert(goods b[],int N)
{
int n,i=1,t;
for(num_star=0;num_star<17;num_star++)
{
printf("*");
Sleep(5);
}
printf("欢");
Sleep(50);
printf("迎");
Sleep(50);
printf("进");
Sleep(50);
printf("入");
Sleep(50);
printf("添");
Sleep(50);
printf("加");
Sleep(50);
printf("系");
Sleep(50);
printf("统");
Sleep(50);
for(num_star=0;num_star<17;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n-1-请输入需要添加的商品的个数:\n ");
scanf("%d",&n);
t=n;
while(n)
{
printf("\n-%d-输入第%d条商品信息:\n",i+1,i);
printf(" 1.名称:");scanf("%s",b[N+i-1].name);
printf("\n 2.类别*1.休闲食品2.奶品水饮3.生鲜水果:");scanf("%d",&b[N+i-1].category);
printf("\n 3.价格:");scanf("%f",&b[N+i-1].prize);
printf("\n 4.保质期*按月计(即输入1-12之间的整数):");scanf("%d",&b[N+i-1].shelf_life);
printf("\n 5.生产日期*例如20170920:");scanf("%s",b[N+i-1].time);
n--;
i++;
}
printf("\n-%d-添加成功\n\n",i+1);
for(num_star=0;num_star<50;num_star++)
{
printf("*");
Sleep(10);
}
printf("\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);
if(return_num==1)
{
system("cls");
return N+t;
}
}
//删除函数已完善
int _delete(goods b[],int N)
{
int i,q;
char c[10];
for(num_star=0;num_star<16;num_star++)
{
printf("*");
Sleep(5);
}
printf("欢");
Sleep(50);
printf("迎");
Sleep(50);
printf("进");
Sleep(50);
printf("入");
Sleep(50);
printf("删");
Sleep(50);
printf("除");
Sleep(50);
printf("系");
Sleep(50);
printf("统");
Sleep(50);
for(num_star=0;num_star<16;num_star++)
{
printf("*");
Sleep(10);
}
printf("\n\n-1-请输入需要删除的商品的名称\n ");
loop4:
scanf("%s",c);
for(i=0;i<N;i++)//寻找商品信息
{
if(!strcmp(b[i].name,c))
break;
}
if(i==N)
{
printf("\n-1-对不起找不到该商品,请重新输入\n ");
goto loop4;
}
else
printf("\n-1-您删除的商品信息如下:\n 商品名称 类别 价格 保质期 生产日期\n %-7s\t%4d\t%.2f\t%4d\t%4s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);
printf("\n-2-确认删除?*1.确认2.取消\n ");
loop5:
scanf("%d",&q);
if(q!=2&&q!=1)
{
printf("错误请重新输入");
goto loop5;
}
else if(q==1)
{
while(i<N-1)
{
b[i]=b[i+1];
i++;
}
printf("\n-3-删除成功\n\n");
for(num_star=0;num_star<48;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);
if(return_num==1)
{
system("cls");
return N-1;
}
}
else
printf("\n");
for(num_star=0;num_star<50;num_star++){
printf("*");
Sleep(5);
}
printf("\n\n\n");
printf("按1后回车返回");
scanf("%d",&return_num);
if(return_num==1)
{
system("cls");
return N;
}
}
//保存信息已完善
void save(goods b[],int N)
{
int i;
FILE *point;
point=fopen("data.txt","w");
if(point==NULL)
{
printf("can't find the file");
exit(0);
}
for(i=0;i<N;i++)
fprintf(point,"%-8s\t%4d\t%.2f\t%4d\t%4s\n",b[i].name,b[i].category,b[i].prize,b[i].shelf_life,b[i].time);
printf("恭");
Sleep(50);
printf("喜");
Sleep(50);
printf("您");
Sleep(50);
printf("导");
Sleep(50);
printf("入");
Sleep(50);
printf("成");
Sleep(50);
printf("功");
Sleep(50);
fclose(point);
}
//排序函数已完善
void _sort(goods b[],int N)
{
goods temp;
int n,i,j;
for(num_star=0;num_star<16;num_star++)
{
printf("*");
Sleep(5);
}
printf("欢");
Sleep(50);
printf("迎");
Sleep(50);
printf("进");
Sleep(50);
printf("入");
Sleep(50);
printf("排");
Sleep(50);
printf("序");
Sleep(50);
printf("系");
Sleep(50);
printf("统");
Sleep(50);
for(num_star=0;num_star<16;num_star++)
{
printf("*");
Sleep(5);
}
printf("\n\n-1-请问您需要按什么排序【1价格 2生产日期】\n ");//选择排序类型
scanf("%d",&switch_num);
switch(switch_num)
{
case 1:
printf("\n-2-请选择排序类型【1.价格从高到低排序2.从低到高】\n ");
loop5:
scanf("%d",&switch_num);
if(switch_num==1)//降序排列
{
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(b[j].prize<b[j+1].prize)
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
}
else if(switch_num==2)//升序排列
{
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(b[j].prize>b[j+1].prize)
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
}
else{
printf("输入错误请重新输入:\n");
goto loop5;
}
break;
case 2:
{
printf("\n-2-请选择排序类型【1.生产日期从早到晚2.从晚到早】\n ");
loop6:
scanf("%d",&switch_num);
if(switch_num==1)//升序排列
{
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(strcmp(b[j].time,b[j+1].time)>0)
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
}
我们参照日常生活中密码功能,密码为字符串,保存在password的文件中,若修改密码在管理员系统的修改密码程序下进行,修改过程中两次输入的新密码需一致才能成功,修改完成的密码保存在文件中。另外,我们将输入密码错误上限设为三次,输错三次自动退出系统,和现实生活很相似。
简单的静态界面十分枯燥,所以我们用Sleep和system(“cls”)完成了进入系统的渐进画面。
Sleep(1000);
system(“cls”);
printf(“请稍等.”);
Sleep(200);
system(“cls”);
printf(“请稍等…”);
Sleep(200);
system(“cls”);
printf(“请稍等…”);
Sleep(700);
system(“cls”);
printf(“欢”);
Sleep(50);
printf(“迎”);
Sleep(50);
printf(“进”);
Sleep(50);
printf(“入”);
Sleep(50);
printf(“密”);
Sleep(50);
printf(“码”);
Sleep(50);
printf(“修”);
Sleep(50);
printf(“改”);
Sleep(50);
printf(“系”);
Sleep(50);
printf(“统”);
Sleep(50);
我们在每个单独的功能界面通过序号的使用使界面更加简洁
我们在界面的顶部和底部都使用了大量的*使得界面凸显出强烈的层次感,也给使用者更加舒适的使用环境。
q:969060742 文档、完整代码、程序资源