资源描述
西安郵電學院
软件设计课程设计报告
题 目: 超市商品管理系统
系部名称
:
电信系
专业名称
:
电子科学与技术
班 级
:
0701
学号
:
0507
学生姓名
:
胡立仁
指引教师
:
黄茹
时间
:
6月9日 至 6月20日
一、 课程设计目
1. 通过本课程设计,强化上机动手能力,使学生在理论和实践基本上进一步巩固《C语言程序设计》课程学习内容,掌握工程软件设计基本办法。
2. 学会将知识应用于实际办法,提高分析和解决问题能力,增长综合能力。
3. 为后续各门计算机课程学习打下坚实基本。
4. 为毕业设计和后来工作打下必要基本。
二、课程设计内容
1. 编写程序并进行调试运营。
2. 输入商品信息,并保存于文献。每个商品信息包括信息如:库存量、进价、售价、保质期、生产商等。
3. 对已存入商品信息进行更新操作,涉及添加一种商品信息、删除某个商品信息和修改某个商品信息。
4. 通过输入商品名、商品号、商品类型方式查询商品信息。
5. 最后输出商品信息,供需要时打印。
三、需求分析
1. 该程序可用于对商品基本信息存储、更新、查询、排序、输出等操作,以实现对商品信息管理。
2. 其中更新功能涉及:添加信息、删除信息、修改信息、可依照需要添加一种或各种商品信息,也可对个别商品信息进行恰当删除或修改。以便随时更新商品信息。
3. 程序中设计查询功能可依照需要从若干数据中查询某个商品信息,并且可依照三种不同办法查询:按商品号查询、按商品类型和按商品查询,以满足不同需要。
四、概要设计
1、 方案设计
对系统进行分析,给出构造图
分析:系统规定实现许多功能,因而遵循构造化程序设计思想来进行本系统设计—自顶向下、逐渐细化,将系统设计任务分解出许多子功能模块进行设计
构造图如下:
商品信息 管 理 系 统
输入模块
更新模块
查询模块
排行模块
输出模块
退出系统
添加信息
删除信息
修改信息
按商品号查询
按商品名查询
按商品类别查询
按库存量排行
2、模块功能阐明(对各个模块进行功能描述)
(1).输入模块:录入需要管理商品信息并将信息保存于文献中,以以便日后进行打印、读取、更新等操作。
(2).添加模块:可添加一种或各种商品信息,并将所添加商品信息保存,以便查找。
(3).删除模块:可对售完商品信息做删除解决。
(4).修改模块:可依照需要对各种商品信息进行修改,也可随时对个别项进行修改。
(5).查询模块:可对已建立商品信息进行查询,并且可依照需要选取按商品名查询或按商品号查询。
(6).保存模块:用于对信息进行保存。
(7).输出模块:将所有商品信息或想要查询商品信息显示于屏幕,用于打印商品信息或查找某些商品信息。
(8).退出系统:选取该项,自动退出该系统。
五、详细设计及运营成果
开始
输入i值
判断i值
退
出
系
统
排
序
模
块
查
询
模
块
更
新
模
块
输
出
模
块
输
入
模
块
输入i值
输入i值
判断i值
判断i值
按商品号查询
按商品名查询
按类别查询
返回主菜单
返回菜单
修改信息
删除信息
添加信息
与否继续
是
与否继续
是
否
否
保存数据
结束
输入模块: 输出模块:
输入模块
输入信息
与否继续
返回主菜单
输出模块
输出信息
返回主菜单
是
否
排行模块:
排行模块
输入i值
判断i值
按商品号排行输出
按商品类型排行输出
返
回
主
菜
单
返回主菜单
六、调试状况,设计技巧及体会
1、 对自己设计进行评价,指出合理和局限性之处,提出改进方案。
本次实践课编写是一种应用程序,相对于此前咱们见到程序,它要大得多,开始时,数据输出格式不太规范,并且各模块也浮现了某些小问题,在教师和同窗协助下,通过自己一次又一次进行调试和修改,最后运营成果基本上达到了预期目。
由于时间问题和考虑得不够周全,也许在某些功能上不是很完善,但是已有功能已能基本满足普通顾客需求,如果能通过不断实验和使用过程中所积累问题进行改进。如:数量,价格输入值为负值时,程序也能继续执行,这就给运用上带来某些不便或也许浮现某些莫名其妙错误。
但是总来说,对于自己初次可以自主完毕一种这样大程序来说,还是比较满意。
2、在设计过程中感受。
本次C 语言实习课让我对C 语言学习又有了更进一步理解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到知识远远超过了在课堂上十几周学到,学校组织这次实习让咱们这些实践知识较缺少大学生增添了许多实践经验,为咱们将来走上工作岗位其了不小铺垫作用。
本次实习中遇到了诸多此前没有遇到过问题,也曾想过要放弃,但看到自己普通写过大量程序,给了我继续信心。在教师和同窗协助下,我顺利完毕了本次实习,让我体会到了通过不懈努力,有过挫折有过坎坷,但最后实现目的后成就感,也让我充分感受到情谊和团结重要性。
七、参照文献
《C语言程序设计》 王曙燕 曹 锰
八、附录:
#include <stdio.h>
#include <math.h>
#include <string.h>#include<conio.h>
#include<stdio.h>
#include<string.h>
#define MAX 20
#define PRINT1 printf("---------------------------------------------------------\n")
#define PRINT2 printf("商品号--商品名称--商品种类--销售价格--生产日期(年-月-日)--保质期\n")
#define PRINT3 printf("%4d%8s%8s%8d%8d-%2d-%2d%4d\n",goods[i].num,goods[i].name,goods[i].kind,goods[i].out_price,goods[i].pro_time.year,goods[i].pro_time.month,goods[i].pro_time.day,goods[i].save_day)
int sum;
struct date
{
int year;
int month;
int day;
};
struct goods_type /*定义构造体*/
{
int num;
char name[10];
char kind[10];
int amount;
int in_price;
int out_price;
struct date pro_time;
int save_day;
int profit;
}goods[MAX];
Save_Message(int sum); /*函数声明*/
void Inquire_message(void);
void Inquire_goodskind(void);
void Inquire_goodsname(void);
int Read_Message(void);
void Renew_Messahe(void);
void Revise_Message(void);
void Delete_Message(void);
void Insert_Message();
void Show_Message(void);
int Input_Message(void);
void Count_Message();
long Count_Profit();
long Count_Amount();
void Sort_amount(void);
void Sort_Message(void);
void Sort_Message(void)
{
int choice;
do
{
clrscr();
printf("\n\n\n *******商品信息排行********\n\n");
printf(" 1:按库存量排行\n\n");
printf(" 0:返回主菜单\n\n");
printf(" 请选取(0-1): ");
scanf("%d",&choice);
switch(choice)
{
case 1:Sort_amount();break;
case 0:break;
}
}while(choice!=0);
}
void Sort_amount(void) /*库存量排序*/
{
struct goods_type *p,*q[MAX];
int i,j,k;
clrscr();
printf(" 库存排行");
PRINT1;
printf("\n\n排名 商品号 商品名称 商品类别 库存量\n\n");
p=goods;
for(i=0;i<sum;i++)
q[i]=p++;
for(i=0;i<sum;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(" %d ",i+1);
printf(" %d ",q[i]->num);
printf(" %s ",q[i]->name);
printf(" %s ",q[i]->kind);
printf(" %d \n ",q[i]->amount);
}
bioskey(0);
}
long Count_Amount() /*记录库存量*/
{
int i,j=0,choice,count_num,Amount;
char inquire_name[10];
clrscr();
printf("\n 请输入想要记录商品号: ");
scanf("%d",&count_num);
for(i=0;i<sum;i++)
if(goods[i].num==count_num)
{
Amount=goods[i].amount;
printf("-------------------------");
printf(" 商品号 库存量");
printf("\n%8d%8d",goods[i].num,Amount);
}
else
j++;
if(j==sum)
printf("该商品信息不存在!!!");
bioskey(0);
}
long Count_Profit() /*记录利润模块*/
{
int i,choice,j=0,count_num,profit;
clrscr();
printf("\n 请输入想要记录商品号: ");
scanf("%d",&count_num);
for(i=0;i<sum;i++)
if(goods[i].num==count_num)
{
profit=goods[i].out_price-goods[i].in_price;
printf("\n 商品利润");
printf("\n -------------------------------");
printf("\n 商品号 利润");
printf("\n %8d%8d\n",&goods[i].num,&profit);
}
else
j++;
if(j==sum)
printf("\n 该商品不存在!!!");
printf("\n 按任意键返回主菜单!!");
bioskey(0);
}
void Count_Message(void) /*记录模块*/
{
int choice;
do{
clrscr();
printf("**************记录商品信息*************\n\n\n");
printf("******* 1:记录库存量 ************\n\n\n");
printf("******* 2:记录利润 ************\n\n\n");
printf("******* 0:返回主菜单 ************\n\n\n");
printf("******* 请选取(0-2): ************\n\n\n");
scanf("%d",&choice);
switch(choice)
{
case 1:Count_Amount();break;
case 2:Count_Profit();break;
case 0:break;
}
}while(choice!=0);
}
int Input_Message(void) /*输入模块*/
{
int i=0,s=MAX;
char bd;
clrscr();
printf("开始输入商品信息.\n");
printf("\n\n 商品信息:(最多 %d) \n",s);
printf(" ===============================\n");
do
{
printf("\n 第 %d 商品",i+1);
printf("\n 商品号:");
scanf("%d",&goods[i].num);
if(goods[i].num==0) break;
printf("\n 商品名称:");
scanf ("%s",goods[i].name);
printf("\n 商品种类:");
scanf ("%s",goods[i].kind);
printf("\n 商品库存量:");
scanf ("%d",&goods[i].amount);
printf("\n 进货价格:");
scanf ("%d",&goods[i].in_price);
printf("\n 销售价格:");
scanf ("%d",&goods[i].out_price);
printf("\n 生产日期(yyyy-mm-dd):");
scanf ("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time.day);
printf("\n 保质期:");
scanf ("%d",&goods[i].save_day);
printf("继续输入信息,y or n ??");
fflush(stdin);
scanf("%c",&bd);
if(bd=='y')
i++;
else
break;
}while(i<MAX);
printf("\n--%d 所有商品录入完毕!--\n\n\n",i+1);
getch();
printf(" 按任意键返回主菜单.");
sum=i;
printf("输入回车返回主菜单!!!");
bioskey(0);
}
void Show_Message(void) /*显示输出模块*/
{
int i=0,j=0,count,page=7;
clrscr();
printf("\n\n --商品信息-- 在第 %d 页\n\n",page);
PRINT2;
PRINT1;
do
{
if(goods[i].num!=0)
{
j++;
if(j%page!=0)
{
PRINT3;
PRINT1;
}
else
{
PRINT3;
PRINT1;
if(goods[i+1].num!=0)
{
printf("按任意键继续!");
bioskey(0);
clrscr();
printf("\n\n --------商品信息--------在第 %d 页\n\n",++page);
PRINT2;
PRINT1;
}
}
}
i++;
}while(goods[i].num!=0);
printf("按任意键返回主菜单!!!!!");
bioskey(0);
}
void Insert_Message(void)/*添加商品信息模块*/
{
int i=sum,j,flag=0;
char choice;
clrscr();
printf("\n\n 添加一种新商品\n\n ");
printf("\n-------------------------------------------------\n");
do
{
goods[i].num=++sum;
printf("\n 新商品号:%d",goods[i].num);
printf("\n 新商品名:");
scanf("%s",goods[i].name);
printf("\n 新商品种类:");
scanf("%s",goods[i].kind);
printf("\n 新商品数量:");
scanf("%d",&goods[i].amount);
printf("\n 进价:");
scanf("%d",&goods[i].in_price);
printf("\n 售价:");
scanf("%d",&goods[i].out_price);
printf("\n 生产日期(yyyy-mm-dd):");
scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time.day);
printf("\n 保质期:");
scanf("%d",&goods[i].save_day);
i++;
printf("\n\n 想继续添加商品吗?(Y/N)");
fflush(stdin);
choice=getch();
if(choice=='y'||choice=='Y')
{
printf("继续");
flag=1;
}
else
flag=0;
}while(flag==1);
printf("\n\n\n 按任意键返回主菜单.........");
bioskey(0);
}
void Delete_Message(void)/*删除商品信息模块*/
{
int i,j,numberkey,flag=0;
char choice;
printf("开始删除......\n\n");
do
{
clrscr();
printf("请输入你要删除商品号: \n");
scanf("%d",&numberkey);
for(i=0;i<sum;i++)
{
if(goods[i].num==numberkey)
{
for(j=i;j<sum;j++)
goods[j]=goods[j+1];
sum--;
flag=1;
printf("删除成功!!\n\n\n");
break;
}
}
if(flag==0)
{
printf("不存在该商品信息!!!");
bioskey(0);
}
printf("\n\n与否继续输入(y/n)?\n");
getchar();
scanf("%c",&choice);
}while(choice=='y'||choice=='Y');
printf("\n按任意键返回");
bioskey(0);
}
void Revise_Message(void)/*修改商品信息模块*/
{
int i,j,flag,choice,revise_num;
char ch;
do
{
clrscr();
printf("\n\n 开始修改...");
printf("\n\n 请输入你想输入商品号:\n");
scanf("%d",&revise_num);
for(i=0;i<sum;i++)
{
if(goods[i].num==revise_num)
{
printf("拟定修改此商品信息吗?(y/n)");
PRINT1;
PRINT2;
PRINT3;
getchar();
ch=getchar();
if(ch='y')
{
printf("\n\n\n修改商品信息哪一项?");
printf("\n\n 1:商品名称");
printf("\n\n 2:商品类型");
printf("\n\n 3:销售价格");
printf("\n\n 4:生产日期");
printf("\n\n 5:保质期");
printf("\n\n 请选取(0-5)\n");
scanf("\n %d",&choice);
switch(choice)
{
case 1:printf("请输入修改后商品名\n");
scanf("%s",&goods[i].name);break;
case 2:printf("请输入修改后商品类型\n");
scanf("%s",&goods[i].kind);break;
case 3:printf("请输入修改后商品销售价格\n");
scanf("%d",&goods[i].out_price);break;
case 4:printf("请输入修改后商品生产日期\n");
scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time.day);break;
case 5:printf("请输入修改后商品保质期\n");
scanf("%d",&goods[i].save_day);break;
case 0:break;
}
printf("修改商品信息:\n");
PRINT2;
PRINT3;
}
else
break;
}
else
j++;
if(j==sum)
printf("不存在该商品信息..");
}
printf("\n\n 继续修改商品信息吗(y/n)?");
getchar();
ch=getchar();
if(ch=='y')
{
printf("继续.\n");
flag=1;
}
else
flag=0;
}while(flag==1);
printf("修改完毕!!\n\n");
getch();
}
void Renew_Message(void) /*更新商品信息模块*/
{
int choice;
do
{
clrscr();
printf("\n\n*********更新商品信息*********");
printf("\n\n 1:添加商品信息.\n\n");
printf("\n\n 2:删除商品信息.\n\n");
printf("\n\n 3:修改商品信息.\n\n");
printf("\n\n 0:返回上一级.\n\n");
printf("\n\n 请选取(0-3): ");
scanf("%d",&choice);
switch(choice)
{
case 1:Insert_Message();break;
case 2:Delete_Message();break;
case 3:Revise_Message();break;
case 0:break;
}
}while(choice!=0);
}
int Read_Message(void) /*读取信息模块*/
{
FILE *fp;
int i=0;
if((fp=fopen("999.txt","rb"))==NULL)
{
printf("\n\t 当前还没有保存所有信息,按回车键回到主菜单输入商品信息!!");
printf("\n\t 按任意键返回!!!!\n");
getch();
return;
}
while(feof(fp)!=1)
{
fread(&goods[i],sizeof(struct goods_type),1,fp);
if(goods[i].num==0)
break;
else
i++;
}
fclose(fp);
return(i);
}
void Inquire_goodsname(void)/*按商品名称查询*/
{
int i,j,choice;
char namekey[10];
j=0;
printf("开始查询...");
printf("请输入你要查询商品号:\n");
scanf("%s",namekey);
for(i=0;i<sum;i++)
if(strcmp(goods[i].name,namekey)==0&&goods[i].num!=0)
{
printf(" ---商品信息----");
PRINT1;
PRINT2;
PRINT3;
}
else
j++;
if(j==sum)
printf("该商品不存在!");
printf("按任意键返回主菜单.");
getch();
}
void Inquire_goodskind(void)/*按商品类型查询*/
{
int i,j,choice;
char kindkey[10];
j=0;
printf("开始查询...");
printf("请输入你要查询商品种类:\n");
scanf("%s",kindkey);
for(i=0;i<sum;i++)
if(strcmp(goods[i].kind,kindkey)==0&&goods[i].num!=0)
{
printf(" --
展开阅读全文