C语言超市管理系统(学校课设,我想知道我那写错了)

zhangyujia 发布于 2015/07/14 22:23
阅读 2K+
收藏 4

各位啊 我要是一点就透 我就不用发到网上问你们了 可否指出具体问题或写出那句具体如何修改(我是小白啊)

我是学信息管理与信息系统的,最近学校课设,让设计这个,但是我写到现在有很多BUG......

要求如下:


C语言课程设计》任务书 

一、设计题目

超市管理系统设计与实现

二、设计目标

加深巩固《C语言程序设计》课程的基本理论知识,理论联系实际,结合企业的实践项目,以企业实际岗位需求为指导,以提高学生实际操作能力和实际运用知识能力的培养为目标;注重学生综合应用能力的训练,注重学生技术应用和实践能力的培养,进一步提高学生的实践能力和创新创业能力。

具体要求如下:

1、  编写程序并进行调试运行。

2、  输入商品资料,并保存于文件。每件商品包含信息如:商品号、商品名、商品类别、商品库存量、商品上限和下限、商品价格、进货日期、生产日期、保质期等。

3、  对已存入的商品信息进行更新操作,包括添加、删除和修改某件商品信息。

4、通过按商品名、商品种类、商品进货量的方式查询商品信息。

5、输入某商品号后对其利润进行统计。

6、  对商品的库存量和利润进行排序。

7、  最后输出商品信息,供需要时打印。

 

三、需求分析

1、该程序可用于对商品的基本信息的存储、更新、查询、输出、统计、排序等操作,以实现管理者对商品的管理和消费者对商品的了解。

2、其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个商品信息,也可对个别商品信息进行适当的删除或修改。以便随时更新商品信息。

3、程序中设计的查询功能可根据需要从若干数据中查询某件商品信息,并且可根据三种不同的方法查询:按商品名查询、按商品种类查询和按商品进货量查询。以满足不同的需要。

四、总体设计

1、方案设计

对系统进行分析,给出整个系统流程图如图1所示

分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计—自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计。并在界面、功能和健壮性方面进行一些创新设计。


2、系统功能

功能模块说明:对各个模块进行功能的描述

(1)输入模块:

录入需要管理的商品信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。

(2)添加模块:

可添加一件或多件商品信息,并将所添加商品信息保存,方便查找。

(3)删除模块:

可对过期的商品做删除处理。

(4)修改模块:

可根据需要对多件商品信息进行修改,也可随时对个别项进行修改。

(5)查询模块:

可对已建立的商品信息进行查询,并且可根据需要选择按商品名查询或按商品种类查询或按商品进货量查询。

(6)保存模块:

用于对信息进行保存。

(7)输出模块:

将所有商品信息或想要查询的商品信息显示于屏幕,用于打印商品信息或查找某些商品信息。

(8)排序模块:

根据商品的利润和库存量进行排序。

(9)统计模块:

根据商品的利润进行分类统计。

(10)退出系统:

选择该项,自动退出该系统。

五、设计内容

1、设计系统的功能结构框图(参考图1

2、设计程序流程图(对于编写的功能函数模块,要画出相应的程序流程图,功能相同模块可选择画一个函数模块流程图)

3、编写下列功能模块源程序代码

1)按照商品类别查询商品信息

2)按照进货量查询商品信息

3)统计第二类商品利润大于等于200元小于500元信息

4)统计第三类商品利润小于200元信息

5)按商品库存量排序

6)按库存量和利润排序商品信息子菜单

六、设计要求

1、基本要求 

(1)掌握面向过程程序设计的基本思想和方法;

(2)要求利用自顶向下,逐步求精的思想来完成系统的设计;

(3)要求在设计的过程中,功能模块划分要清晰、合理;

(4)在编写代码过程中,代码简单明了,书写层次清晰;

(5)无论是变量名还是函数名,都能见名知意。

2、创新要求 

完成基本设计后,可在界面及功能上进行一些创新设计。

我写的代码如下:


#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 20
#define PAGE 5
#define PRINTF1 printf("---------------------------------------\n")
#define PRINTF2 printf("num---name---kind---in_num---pro_time(year-month-day)---save_time\n");
#define PRINTF3 printf("%d%8s %7s %8s   %5d-%2d-%2d     %10d\n",\
goods[i].num,goods[i].name,goods[i].kind,goods[i].in_num,goods[i].pro_time.year,goods[i].pro_time.month,goods[i].pro_time.day,goods[i].save_day);
int sum;
/*data struct kind*/
struct data
{ int year;
int month;
int day;
};
/*goods struct kind*/
struct goods
{
	int num; //商品号
char name[10];  //商品名
char kind[10];  //商品类别
int amount;  //商品库存量
int goods_up;  //商品上限
int goods_down;  //商品下限
int in_price;  //商品进货价格
int out_price;  //商品出售价格
int in_num;  //进货量
struct data in_time;  //进货日期
struct data pro_time;  //生产日期
char factory[10];  //生产厂商
int save_day;  //保质期
float profit;  //利润
}goods[MAX];
/*save message*/
save_message(int sum)
{

	FILE*fp;
	int i;
	if((fp=fopen("goods.dat","wb"))==NULL)
	{
		printf("read the file error!\n");
		return 0;
	}
	for(i=0;i<sum;i++)
		if(fwrite(&goods[i],sizeof(struct goods),1,fp)!=1)
			printf("write the file error!\n");
		fclose(fp);
		return 0;
}

/*input message*/
input_message()
{
	int i=0,s=MAX;
	system("cls");
	printf("\n\n    input goods   message the most%d\n\n",s);
	do
	{printf("\n di%dgoods",i+1);
	printf("\n num:");
	scanf("%d",&goods[i].num);
	if(goods[i].num==0)break;
	printf("\n name:");
	scanf("%s",goods[i].name);
	printf("\n kind:");
	scanf("%s",goods[i].kind);
	printf("\n amount:");
	scanf("%d",&goods[i].amount);
	printf("\n goods_up:");
	scanf("%d",&goods[i].goods_up);
	printf("\n goods_down:");
	scanf("%d",&goods[i].goods_down);
	printf("\n in_price:");
	scanf("%d",&goods[i].in_price);
	printf("\n out_price:");
	fflush(stdin);
	 
	scanf("%d",&goods[i].out_price);
	printf("\n in_num:");
	scanf("%d",&goods[i].in_num);
	printf("\n in_time:");
	scanf("%d-%d-%d",&goods[i].in_time.year,&goods[i].in_time.month,&goods[i].in_time.day);
	printf("\n pro_time:");
	scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time.day);
	printf("\n factory:");
	scanf("%s",goods[i].factory);
	printf("\n save_time:");
	scanf("%d",&goods[i].save_day);
	i++;
}while(i<MAX);
printf("\n**** %dgoods message input over!--\n",i);sum=i;
printf("\n press any key to return!");
getch();
}

/*read message*/
int read_message()
{
	FILE*fp;
	int i=0;
	if((fp=fopen("goods.dat","rb"))==NULL)
	{
		printf("\n\n  ******there is no any message,press any key to return!******\n");
		return 0;
	}
	while (feof(fp)!=1)
	{
		fread(&goods[i],sizeof(struct goods),1,fp);
		if(goods[i].num==0)
			break;
		else
			i++;
	}
	fclose(fp);
	return (i);
}



/*output message*/
output_message()
{
	int i=0,j=0,page=1;
	system("cls");
	printf("\n\n    --goods message,di %dpage\n\n",page);
	PRINTF2;
	PRINTF1;
	do
	{
		if(goods[i].num!=0)
		{
			j++;
			if(j%PAGE!=0)
			{
				PRINTF3;
				PRINTF1;
			}
			else
			{
				PRINTF3;
				PRINTF1;
				if(goods[i+1].num!=0)
				{
					printf("press any key to return!");
					getch();
					system("cls");
					printf("\n\n    --goods message,di%d page\n\n",++page);
					PRINTF2;
					PRINTF1;
				}
			}
		}
	 i++;

	}while(i<sum);
	printf("press any key return!");
	getch();
}

/*insert  goods message*/
insert_message()
{
int i=sum,flag=0;
char choice;
system("cls");
printf("\n\n    insert a  new  goods\n");printf("      --------------------\n");
do
{goods[i].num=++sum;
printf("\n             new num:");        scanf("%d.&goods[i].num");
printf("\n             new name:");        scanf("%s.&goods[i].name");
printf("\n             new kind:");        scanf("%s.&goods[i].kind");
printf("\n             new amount:");        scanf("%d.&goods[i].amount");
printf("\n             new goods_up:");        scanf("%d.&goods[i].goods_up");
printf("\n             new goods_down:");        scanf("%d.&goods[i].goods_down");
printf("\n             new in_price:");        scanf("%d.&goods[i].in_price");
printf("\n             new out_price:");        scanf("%d.&goods[i].out_price");
printf("\n             new in_num:");        scanf("%d.&goods[i].in_num");
printf("\n             new in_time:"); 
scanf("%d-%d-%d",&goods[i].in_time.year, &goods[i].in_time.month,&goods[i].in_time.day); 
printf("\n               new pro_time:");
scanf("%d-%d-%d",&goods[i].pro_time.year,    &goods[i].pro_time.month,&goods[i].pro_time.day);
printf("\n               new factory:  ");
scanf("%s ",goods[i].factory);
printf("\n               new save_time:  ");
scanf("%d ",&goods[i].save_day);
printf ("\n              go on or not?(Y/N)");
choice=getch();
if(choice=='Y'||choice=='y')
{printf("\n        go on!\n");i++;flag=1;}
else flag=0;
}while(flag==1); 
printf ("\n   press any key return!");
getch();}


/*del goods message*/
del_message()
{ int i=0,del_num,flag=0,k;
char choice,choice1;
do {
system("cls");
printf("\n --please input the del goods num:--\n");
scanf("%d",&del_num);
printf("\n --really  del the goods?(Y/N)");
choice1=getch();
if(choice1=='Y'||choice1=='y')   printf("\n  --continue!--\n");
for(i=0;i<sum;i++)
if(goods[i].num==del_num)
{flag=1;printf("\n -goods message--\n");
PRINTF1;
PRINTF2;
PRINTF3;
for(k=i;k<sum-1;k++)
goods[k]=goods[k+1];sum--;
}
if(i==sum)
{printf("\n  --the goods is not exist!--\n");
getch();}
printf("\n\n -go on or not?Y/N--\n");
choice=getch();
if(choice=='Y'||choice=='y')
{flag=1;printf("\n -go on--\n");}
else flag=0;
}while(flag==1);

printf("\n  --press any key return--\n");
getch();
}

/*revise  goods  message*/
revise_message()
{  int i=0,choice,revise_num,flag;char choice1;
do  {system("cls");
printf("\n    please input the revise goods num:");scanf("%d",&revise_num);
for(i=0;i<sum;)
{if(goods[i].num==revise_num)
{	printf("\n   ----goods message----\n");PRINTF1;PRINTF2;PRINTF3;
	printf("\n   which item you want to revise?\n      ");
	printf("\n        1:name\n");
	printf("\n        2:kind\n");
	printf("\n        3:out_price\n");
	printf("\n        4:pro_time\n");
	printf("\n        5:save_day\n");
	printf("\n        please choose(1-5)");
scanf("%d",&choice);
switch(choice)
{case 1:printf("\n after revise name:  ");
	scanf("%s",goods[i].name);break;
	case 2:printf("\n after revise kind:  ");
	scanf("%s",goods[i].kind);break;
case 3:printf("\n after revise out_price:");
	scanf("%d",&goods[i].out_price);break;
case 4:printf("\n after revise pro_time: ");
	scanf("%d-%d-%d",&goods[i].pro_time.year,    &goods[i].pro_time.month,&goods[i].pro_time.day);break;
case 5:printf("\n after revise save_time:");
	scanf("%d",&goods[i].save_day);break;}
PRINTF1;PRINTF2;PRINTF3;break;}
else i++;}
printf("\n\n  continue revise?(Y/N)");choice1=getchar();
if(choice1=='Y'||choice1=='y')  {flag=1;printf("\n  continue!\n");}
else flag=0;
}while(flag==1);
printf("\n   press any key return\n");getch();}
/*renew  goods message*/
renew_message()
{
int choice;
do
{  system("cls");
printf("\n\n\n     *******renew goods message*******\n\n");
printf("             1:插入商品信息\n\n");
printf("             2:删除商品信息\n\n");
printf("             3:修改商品信息\n\n");
printf("             0:返回\n\n");
printf("             请选择(0-3):");
scanf("%d",&choice);
switch(choice)
{
case 1:insert_message();
break;
case 2:del_message();
break;
case 3:revise_message();
break;
case 0:   break;

}
}while(choice!=0);
save_message(sum);
printf("\n the message is saved!-(filename;goods.dat)\n");}


/*inquire according to name*/
inquire_name()
{
int i,j=0;
char inquire_name[10];
system("cls");
printf("\n  input the inquire goods name:");
scanf("%s",inquire_name);
for(i=0;i<sum;i++)

if(strcmp(goods[i].name,inquire_name)==0&&goods[i].num!=0)
{
printf("\n    --goods message-- \n");
PRINTF1;
PRINTF2;
PRINTF3;
}
else j++;
if(j==sum)
printf("\n   the good is not exist!");
getch();
}

/*  inquire according to  kind 此函数学生编写*/
inquire_kind()
{
int i,j=0;
char inquire_kind[10];
system("cls");
printf("\n  input the inquire goods name:");
scanf("%s",inquire_kind);
for(i=0;i<sum;i++)

if(strcmp(goods[i].kind,inquire_kind)==0&&goods[i].num!=0)
{
printf("\n    --goods message-- \n");
PRINTF1;
PRINTF2;
PRINTF3;
}
else j++;
if(j==sum)
printf("\n   the good is not exist!");
getch();
}


/*inquire according to in_num 此函数学生编写*/
inquire_count()
{
int i,j=0;
char inquire_in_num[10];
system("cls");
printf("\n  input the inquire goods name:");
scanf("%s",inquire_in_num);
for(i=0;i<sum;i++)

if(strcmp(goods[i].in_num,inquire_in_num)==0&&goods[i].num!=0)
{
printf("\n    --goods message-- \n");
PRINTF1;
PRINTF2;
PRINTF3;
}
else j++;
if(j==sum)
printf("\n   the good is not exist!");
getch();
}

/*inquire goods message*/
inquire_message()
{
int choice;
do
{
system("cls");
printf("\n\n          **********inquire goods message**********\n\n");
printf("                 1:按照姓名查询商品信息\n\n");
printf("                 2:按照商品类别查询商品信息\n\n");
printf("                 3:按照进货量查询商品信息\n\n"); 
printf("                 0:返回\n\n");
printf("                 请选择(0-3):");
scanf("%d",&choice);
switch(choice)
{
case 1:inquire_name();
break;
case 2:inquire_kind();
break;
case 3:inquire_count();
break;
case 0: break;

}
}while(choice!=0);
}

/*count goods ji bie*/
count_first_goods()
{int i,profit[MAX],j;
system("cls");
for(i=0;i<sum;i++)
profit[i]=(goods[i].in_num-goods[i].amount)*(goods[i].out_price-goods[i].in_price);
printf("\n       the first kind of goods:     \n");
for(i=0;i<sum;i++)
if(profit[i]>=500)
{
PRINTF1;
PRINTF2;
PRINTF3;}
else j++;
if(j==sum) printf("\n  the goods is not exist!\n");
printf("\n      press any key to return!\n");
getch();
}

/*count goods ji bie 统计第二类商品利润大于等于200元小于500元的信息 此函数学生编写*/
count_secend_goods()
{int i,profit[MAX],j;
system("cls");
for(i=0;i<sum;i++)
profit[i]=(goods[i].in_num-goods[i].amount)*(goods[i].out_price-goods[i].in_price);
printf("\n       the secend kind of goods:     \n");
for(i=0;i<sum;i++)
if(profit[i]>=200&&profit[i]<500)
{
PRINTF1;
PRINTF2;
PRINTF3;}
else j++;
if(j==sum) printf("\n  the goods is not exist!\n");
printf("\n      press any key to return!\n");
getch();
}


/*count goods ji bie 统计第三类商品利润小于200元的信息 此函数学生编写*/
count_third_goods()
{int i,profit[MAX],j;
system("cls");
for(i=0;i<sum;i++)
profit[i]=(goods[i].in_num-goods[i].amount)*(goods[i].out_price-goods[i].in_price);
printf("\n       the third kind of goods:     \n");
for(i=0;i<sum;i++)
if(profit[i]<200)
{
PRINTF1;
PRINTF2;
PRINTF3;}
else j++;
if(j==sum) printf("\n  the goods is not exist!\n");
printf("\n      press any key to return!\n");
getch();
}

/*count goods message*/
count_message()
{
int choice;
do
{
system("cls");
printf("\n\n          **********count goods message**********\n\n");
printf("                 1:统计第一类商品\n\n");
printf("                 2:统计第二类商品\n\n");
printf("                 3:统计第三类商品\n\n"); 
printf("                 0:返回\n\n");
printf("                 请选择(0-3):");
scanf("%d",&choice);
switch(choice)
{
case 1:count_first_goods();
break;
case 2: count_secend_goods();
break;
case 3: count_third_goods();
break;
case 0: break;

}
}while(choice!=0);
}

/*sort amount 按库存量排序 此函数学生编写*/
sort_amount()
{struct goods *p,*q[MAX];
int i,j,k;
system("cls");
printf("/n            按库存量排序 \n");
printf("     ------------------------------------------------------\n");
printf("\n      rank     num     name     kind     amount\n");
p=goods;
for(i=0;i<sum;i++)
q[i]=p++;
for(i=0;i<sum-1;i++)
{k=i;
for(j=i+1;j<sum;j++)
if((q[k]->amount)<(q[j]->amount))  k=j;
if(k!=i)
{p=q[i];q[i]=q[k];q[k]=p;}}
for(i=0;i<sum;i++)
printf("\n   %6d     %6d     %8s     %8s     %5d\n",i+1,q[i]->num,q[i]->kind,q[i]->out_price-q[i]->in_price);
getch();
}

/*sort profit*/
sort_profit()
{struct goods *p,*q[MAX];
int i,j,k;
system("cls");
printf("/n            按利润排序 \n");
printf("     ------------------------------------------------------\n");
printf("\n      rank    num    name    kind    profit\n");
p=goods;
for(i=0;i<sum;i++)
q[i]=p++;
for(i=0;i<sum-1;i++)
{k=i;
for(j=i+1;j<sum;j++)
if((q[k]->out_price-q[k]->in_price)<(q[i]->out_price-q[j]->in_price))  k=j;
if(k!=i)
{p=q[i];q[i]=q[k];q[k]=p;}}
for(i=0;i<sum;i++)
printf("\n   %6d     %6d     %8s     %8s     %5d\n",i+1,q[i]->num,q[i]->kind,q[i]->out_price-q[i]->in_price);
getch();
}

/*sort goods message 按库存量和利润排序商品信息子菜单 此函数学生编写*/
sort_message()
{
int choice;
do
{
system("cls");
printf("\n\n          **********sort goods message**********\n\n");
printf("                 1:按库存排序\n\n");
printf("                 2:按利润排序\n\n"); 
printf("                 0:返回\n\n");
printf("                 请选择(0-2):");
scanf("%d",&choice);
switch(choice)
{
case 1:sort_amount();
break;
case 2:sort_profit();
break;
case 0: break;
}
}while(choice!=0);
}

main()
{
int choice;
char ch1;
sum=read_message();
do{
system("cls");
printf("\n\n***************欢迎进入超市管理系统***************\n\n");
printf("              请选择操作类型!\n\n");
printf("                                                                         ***********************************************************************\n\n");
printf("            1:欢迎进入超市管理者系统\n");
printf("                                                                         ***********************************************************************\n\n");
printf("            2:欢迎进入消费者系统\n\n");
printf("                                                                         ***********************************************************************\n\n");
printf("            0:退出\n\n");
printf("                                                                         ***********************************************************************\n\n");
printf("            请选择(0-2)");
ch1=getch();
switch(ch1)
{ case '1':{do
{
system("cls");
printf("\n\n\n       ***************管理者系统***************\n");
printf("\n\n\n                *****欢迎进入系统*****\n\n");
printf("                            1.输入商品信息\n\n");
printf("                            2.输出商品信息\n\n");
printf("                            3.更新商品信息\n\n");
printf("                            4.查询商品信息\n\n");
printf("                            5.统计商品信息\n\n");
printf("                            6.排序商品信息\n\n");
printf("                            0.返回\n\n");
printf("                            请选择(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1:input_message();
break;
case 2:output_message();
break;
case 3:renew_message();
break;
case 4:inquire_message();
break;
case 5:count_message();
break;
case 6:sort_message();
break;
case 0: break;}
}while(choice!=0);}break;
case '2':{do
{system("cls");
printf(" \n\n\n    ***************消费者系统***************\n\n");
printf("                  ******欢迎进入系统******\n\n");
printf("                          1:查询商品信息\n\n");
printf("                          2:排序商品信息\n\n");
printf("                          0:返回\n\n");
printf("                          请选择(0-2):");
scanf("%d",&choice);
switch(choice)
{case 1:inquire_message();break;
case 2:sort_message();break;
case 0:break;}
}while(choice!=0);   }break;
case '0':break;}
}while(ch1!='0');
save_message(sum);
printf("\n the message is saved!-(filename:goods.dat)\n");}



注:带“此函数学生编写”全是我自己写的,其他部分都是老师给出的框架


我的疑问:有俩报警,我弄得输入商品信息的时候,正常,输出商品信息时候程序崩溃,请问我该如何修改呢(我是本科大一信息管理与信息系统的小白)

附:报警图

程序崩溃图

请各位大神具体指出我错在哪,用什么语句改(最好具体写出语句),谢谢了!

加载中
1
店长强力推荐
店长强力推荐
我只想吐槽国内的大学教育。
zhangyujia
zhangyujia
是啊 把咱都弄死得了
1
店长强力推荐
店长强力推荐
错误的给学生传递 C 语言使用的正确姿势。
0
m
magiclogy
你先让编译器不给你报警告再说好不好吧。。。
0
gnr163
gnr163
debug,一步一步执行 
zhangyujia
zhangyujia
能不能帮我调试一下啊 我都快疯了 我文字源码都给出了
0
十舍我再来
十舍我再来
如果是Linux,执行时如果有core产生,直接看下,就能找到,win下不了解
zhangyujia
zhangyujia
好吧 谢谢你!
0
battyman
battyman

错在哪儿?你说输出的时候崩掉,就去找那个输出的函数啊,打个断点看看是哪个变量引起的问题

程序出现BUG就去调试定位解决问题,我带大一学生上机实验的时候,基本上都不会去调试程序,但很明显这个技能是必须要掌握的

zhangyujia
zhangyujia
关键是我也打断点了 就是不会改啊 你能不能跑一下我的代码看看错在哪啊 我都快疯了
0
cret
cret
你先把warning搞到0再说啊
zhangyujia
zhangyujia
我就是想问我咋搞到0啊 我是大一小白 我都快改疯了呜呜呜~~~~~~~(>_<)~~~~
0
旁友约不啦
旁友约不啦
x想起了自己的大学额
0
notreami
notreami

老师给出的框架。。。。。。。。。

zhangyujia
zhangyujia
对啊 要是自己写 可能就不那么束缚了(现在自己还没有这水平)
0
N
Nocodo

打断点单步看下哪一句死的

返回顶部
顶部