商品信息管理系统实习报告
C 程序课程设计 实习报告
学院:测绘工程学院 班级:学号:课程设计名称:商品信息管理系统 指导老师: 日期:
目 录
一、 设计目的…………………………………………………………………………………………. ……..3
二、 设计任务书..................................................................................................... 3
2.1课程设计内容.................................................................................................. …3
2.2系统设计功能需求分析.....................................................................................3
2.3数据结构设计..................................................................................................... 4
三、 课题技术路线与方法...................................................................................4
3.1总体设计.............................................................................................................. 4
3.2详细设计.............................................................................................................. 5
3.2.1界面设计........................................................................................................... 5
3.2.2各功能模块的设计........................................................................................... 6
四、总结................................................................................................................... 10
五、附录..................................................................................................................... 11
5.1源程序.................................................................................................................... 11
5.2 参考书目............................................................................................................... 20
一、 设计目的
本程序旨在训练基本编程能力,了解管理信息系统的开发流程,熟悉C 语言的各种基本操作。本程序中涉及了结构体等方面的知识,通过本程序的训练能对C 语言的各项基本操作有一个更加深刻的了解,为进一步开发出高质量的信息管理系统打下坚实的基础。
二、 设计任务书
2.1 课程设计内容
商品信息管理系统
2.2 系统设计功能需求分析
本系统应具有以下功能: 1、 文件操作功能
文件操作:可建立、打开、保存、关闭数据文件。如果是新建的文件,可输入商品信息数据:数据包括商品编号、商品名、商品类别、商品数量、商品价格等。 2、 数据输入功能
输入进货信息:输入商品编号、数量完成进货操作。
输入销售信息:输入商品编号、数量完成销售操作,注意当销售数量大于商品数量时,应出现错误提示。 3、 数据添加、修改、删除功能
添加:添加一种或多种新商品,并能输入其商品信息。
修改:修改商品信息,可包括商品编号、名称、种类、数量和单价。 删除:删除一类或多类商品的所有信息。 4、 计算功能
可通过查询商品信息功能,自动计算并输出需要进货的商品信息。 5、 查询功能
可分别按商品编号、名称、类别和需要进货的商品进行查询。 6、 排序功能
可分别按商品编号、名称、类别等进行排序。
2.3 数据结构设计
struct goods /*商品结构体*/ { long int num; /*商品编号*/ char name[20]; /*商品名称*/ char sort[20]; /*商品类别*/ long int count; /*商品库存量*/ long int price; /*商品单价*/
}goods[200]; /*最多200个商品*/
三、 课题设计路线与方法
3.1 总体设计
按系统分析的功能要求将系统划分为以下几个主要功能模块: 一、文件管理
文件打开、关闭:对于刚输入或进行操作后的商品信息,在建立新的商品库存量后,可以把其保存在一个文件中,并对该文件可进行打开和关闭操作。 二、进出货管理
商品进货: 输入数据后商品信息能自动更新进行添加 商品销售: 输入数据后商品信息能自动更新进行减少 。 三、商品数据管理
增加/删除商品: 添加或删除某条商品的信息 修改商品信息: 对某条商品的信息进行修改。 四、浏览商品信息管理
查询商品信息:可分别按商品编号、名称、类别或需要进货商品查询
排序商品信息: 可按商品编号、名称、类别分别排序 (可用图形描述功能模块划分,类似下图)
3.2.1 界面设计
菜单设计:
3.2.2 各功能模块的设计
根据划分的功能模块,定义以下函数实现各功能:(这部分应介绍各函数的原型,各功能模块实现所用的算法,可用流程图描述)
1、主函数main()
定义主函数为空类型(void);利用选择结构(switch)实现在在主函数中的调用各个子函数,利用goto 和子函数中的return 语句实现返回主菜单的循环。
设计思路:
声明各个主函数——>输出欢迎界面——>输出主菜单功能选择界面界面——>利用switch 语句实现功能选择——>清屏,返回主界面。 2、子函数
(1) void input(): 设计思路:
确定新的库存量n ——>用for 循环语句实现输入这n 个商品的信息——>结束输入——> 返回主界面。 其运行界面如下:
(2) void sequence():
对已有的商品进行排序,可按商品编号、名称、类别用冒泡法进行排序;以下是按编号由小到大排序的代码:
for(k=0;kgoods[i+1].num) /*按编号由小到大排序*/ { temp=goods[i].num; goods[i].num=goods[i+1].num; goods[i+1].num=temp;
}
strcpy(goods[i].name,goods[i+1].name); strcpy(goods[i+1].name,p1); strcpy(p2,goods[i].sort);
strcpy(goods[i].sort,goods[i+1].sort); strcpy(goods[i+1].sort,p2);
其运行界面如下:
(3) void purchase():
进货函数主要是针对已有库存的商品,在原来的商品数量再增加。 设计思路:
输入进货商品的编号goods[i].num——>输入进货数量j ——>用循环语句寻找商品的编号goods[i].num——>增加该商品的数量goods[i].count=goods[i].count+j ——>用循环语句输出所有的信息——>返回主界面。
其运行界面如下:
(4) void sale():
要求用户输入所销售的编号,系统用for 循环查询该商品是否存在,不存在要求再进行输入,直到输入正确,输出销售商品: 设计思路:(该功能的设计思路与进货函数类似,只是在修改商品数量之前要判断销售数量是否大于库存数量,否则,输出错误提示)
输入进货商品的编号goods[i].num——>输入进货数量j ——>用循环语句寻找商品的编号goods[i].num——>判断销售数量是否大于库存数量,否则,输出错误提示——>修改商品的数量goods[i].count=goods[i].count-j——>用循环语句输出所有的信息——>返回主界面。
其运行界面如下:
5) void edit(): 需要区别进货与销售函数,进货与销售函数实现的是对已有商品数量的增加或减少,而本模块函数主要实现对新商品的所有信息的添加或对旧商品的所有信息的删除,并自动处理数据,用选择语句switch 进行两者操作的选择。 设计思路:
声明子函数add 和dele ,——>用switch 语句实现功能选择——>定义子函数——
>
1. add 函数:用printf 和scanf 实现新商品信息的添加(与输入功能函数类似) 2. dele 函数:
输入要删除的商品的编号temp ——>用for 循环语句寻找商品编号——>用for 循环语句把temp 以后的编号依次加1实现删除商品temp 信息的功能——>商品总库存量减1。
其运行界面如下:
(6) void correct():
对有错误信息商品进行修改,输入需要修改的商品编号,用for 循环与if 语句找到此商品,重新输入该商品的新信息,并输出。 设计思路:
输入需要修改的商品的编号temp ——>用for 循环语句寻找商品编号temp ——>用for 循环语句实现对该商品所有信息的重新输入(既修改)——>用for 循环语句输出所有的商品信息。
其行界面如下:
(7) void search():
用switch(k)语句可分别按商品编号、名称、类别或需要进货商品查询;每个case 选择中均用for 语句查找要查询的商品,并输出查询结果。 设计思路:
输出所有的查询方式——>用switch 语句实现对查询方式的选择——>用for 语句和if 语句寻找查询对象——>输出查询结果。
四、总结与体会
这次程序设计是我第一次做的一个完整的系统,当然,它实现的功能很少,但它却是我对这一个学期学习c 语言的总结。在开始设计的时候,我对一个完整的系统很迷茫,但是经过我去图书馆查阅资料和在网上查阅资料之后,我对一个完整的系统设计有了大概的了解,在确定了我的设计题目之后,我先通过查阅资料理解了别人的设计案例,然后模仿着相应的功能模块开始设计自己的代码,在设计过程中遇到了很多困难,出现了好多的错误,但通过请教同学和查阅资料之后,这些问题都被解决了。在运行程序出现错误的时候,根据系统的错误提示进行更改了很多次,程序才得以运行,我深深的明白了细心对一个程序员来说是多麽的重要。
我认为这个系统最难的模块就是排序和查询两个功能,排序函数中关键是要会用冒泡排序法进行排序,查询函数中关键是要会用switch 语句实现多种查询方式的选择。当然,一个商品销售管理系统还需要有其他的一些功能,比如商品信息的不同方式的浏览功能等等。 通过这次课程设计,让我对程序设计过程有了更加深入的理解,程序设计就有如解决一实际问题,从解决实际问题的角度,它主要分为几个步骤,首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么; 其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。
我认为对于这么个函数功能比较大的系统设计,在设计前老师可以给一个较类似的模板给我们看看其主要架构,这样,在刚开始设计时我们就不会对整个设计的过程的理解过于模糊,导致我们花了较多的时间去弄懂其架构的问题。当然更可以使我们从一开始设计起来就更有效率,以便用更短的时间去完成课程设计。
五、附录
5.1源程序:
#include #include
#include
#include
struct goods
{
long int num;
char name[20];
char sort[20];
long int count;
long int price;
}goods[200];
int k,n,i;
void main ()
{
void input();/*输入商品信息*/
void sequence(); /*排序商品信息*/
void purchase(); /*进货商品信息*/
void sell(); /*销售商品信息*/
void edit(); /*添加或删除商品信息*/
void correct(); /*修改商品信息*/
void search(); /*查询商品信息*/
void quit(); /*退出系统*/
printf("\n
******************************************************************\n
*\t\t\t\t\t\t\t\t *\n");
printf(" *
**************************************************** *");
printf("\n *\t\t\t\t\t\t\t\t *\n * 您好: \t\t\t\t\t\t
*\n *\t\t\t\t\t\t\t\t *\n");
printf(" *\t\t 欢迎进入 ....\t\t\t\t * ");
printf("\n *\t\t\t\t\t\t\t\t *\n");
printf(" * ----商品信息管理系统
*\n *\t\t\t\t\t\t\t\t *\n ");
printf(" *
**************************************************** *\n");
printf(" *\t\t\t\t\t\t\t\t *\n
******************************************************************");
printf(" ");
printf(" \t\t\t\t\t\t\t\t \n\n\n -----系统编者:张少晴\n\n\n\n");
printf("\n\n 请 按 任 意 键 继 续:");
getch(); system("cls");
lp: for(i=0;i
printf("\n\n -----------------------------------------------------------------------------\n");
printf("\n\t\t\t 商品信息管理系统\t\n\n");
printf("\t 1 →输入商品信息");
printf("\t\t 2 →排序商品信息\n\n");
printf("\t 3 →输入进货信息");
printf("\t\t 4 →输入销售信息\n\n");
printf("\t 5 →增加/删除商品");
printf("\t\t 6 →修改商品信息\n\n");
printf("\t 7 →查询商品信息\n\n");
printf(" -----------------------------------------------------------------------------");/*菜单选择界面*/
printf("\n\n");
printf("\n\n\t请选择您所要的操作(或选择(0)退出):"); scanf("%d",&k); system("cls"); switch(k) /*用switch 语句实现功能选择*/ { case 1: input();break; case 2: sequence();break; case 3: purchase();break; case 4: sell();break; case 5: edit();break; case 6: correct();break; case 7: search();break;
case 0: printf("\n\n\n\n\n\n\n\n\n\n\n\t\t************ ^_^ 感谢您的使用 ^_^ ************\n\n\n\n\n\n\n"); exit(0); /*退出系统*/
default: puts("输入错误, 请按任意健返回主菜单:\n"); break;}
system("cls"); /*清屏*/
goto lp; /*返回主界面*/
}
void input() /*功能1:输入商品信息*/
{
printf("\n 请输入需要建立新库存的商品种类数量:");
scanf("%d",&n);
system("cls");
printf("\n …………………………………………………………………………………………………\n");
for(i=0;i
printf("\n …………………………………………………………………………………………………\n"); }
printf("\t请 按 任 意 键 返 回 功 能 选 择 界 面 :");
getch(); return; /*返回主界面*/
}
void sequence() /*功能2:排序商品信息*/
{
long temp;
char p1[30],p2[30];
for(k=0;k
for(i=0;i
if(goods[i].num>goods[i+1].num) /*按编号由小到大排序*/
{
temp=goods[i].num;
goods[i].num=goods[i+1].num;
goods[i+1].num=temp;
strcpy(p1,goods[i].name);
strcpy(goods[i].name,goods[i+1].name);
strcpy(goods[i+1].name,p1);
strcpy(p2,goods[i].sort);
strcpy(goods[i].sort,goods[i+1].sort);
strcpy(goods[i+1].sort,p2);
}
printf("--------------------------------------------------------------------------------"); printf("\n\n\t\t按商品编号排序后的商品信息\n\n");
printf("\t商品编号 商品名称 商品类别 商品数量 商品单价\n"); /*输出排序后商品信息*/
for(i=0;i
printf("\t %5ld %5s %5s %5ld %5ld\n",goods[i].num,goods[i].name,goods[i].sort,goods[i].count,goods[i].price);
for(k=0;k
for(i=0;i
if(strcmp(goods[i].name,goods[i+1].name)>0)
{
strcpy(p1,goods[i].name);
strcpy(goods[i].name,goods[i+1].name);
strcpy(goods[i+1].name,p1);
temp=goods[i].num;
goods[i].num=goods[i+1].num;
goods[i+1].num=temp;
strcpy(p2,goods[i].sort);
strcpy(goods[i].sort,goods[i+1].sort);
strcpy(goods[i+1].sort,p2);
}
printf("--------------------------------------------------------------------------------");
printf("\n\t\t按商品名称排序后的商品信息\n");
printf("\n\t商品名称 商品编号 商品类别 商品数量 商品单价\n"); /*输出排序后商品信息*/
for(i=0;i
printf("\t %5s %5ld %5s %5ld %5ld\n",goods[i].name,goods[i].num,goods[i].sort,goods[i].count,goods[i].price);
for(k=0;k
for(i=0;i
if(strcmp(goods[i].sort,goods[i+1].sort)>0)
{
strcpy(p2,goods[i].sort);
strcpy(goods[i].sort,goods[i+1].sort);
strcpy(goods[i+1].sort,p2);
temp=goods[i].num;
goods[i].num=goods[i+1].num;
goods[i+1].num=temp;
strcpy(p1,goods[i].name);
strcpy(goods[i].name,goods[i+1].name); strcpy(goods[i+1].name,p1);
}
printf("--------------------------------------------------------------------------------");
printf("\n\t\t按商品类别排序后的商品信息\n\n"); printf("\t商品类别 商品编号 商品名称 商品数量 商品单价\n"); /*输出排序后商品信息*/
for(i=0;i
printf("\t %5s %5ld %5s %5ld %5ld\n",goods[i].sort,goods[i].num,goods[i].name,goods[i].count,goods[i].price);
printf("--------------------------------------------------------------------------------");
printf("请 按 任 意 键 返 回 功 能 选 择 界 面 :");
getch();
return; /*返回主界面*/
}
void purchase() /*功能3:进货商品信息*/
{
long temp; /*定义临时变量表示刚进货的商品编号*/
int j;
printf("\n\t*请输入刚进货的商品编号:"); scanf("%ld",&temp); printf("\n\t*请输入刚进货的商品数量:"); scanf("%d",&j);
printf("\n\t输出进货后的商品信息:");
for(i=0;i
if(temp==goods[i].num)
goods[i].count=goods[i].count+j; /*自动更改商品数量*/
printf("\n\t商品编号 商品名 商品类别 商品数量 商品价格");
for(i=0;i
printf("\n\t %4ld %4s %4s %ld %4ld",goods[i].num,goods
[i].name,goods[i].sort,goods[i].count,goods[i].price);
printf ("\n\n\t\t请 按 任 意 键 返 回 功 能 选 择 界 面 :"); getch(); /*返回功能选择界面*/
return;
}
void sell() /*功能4:销售商品信息*/
{
long temp; /*定义临时变量temp 表示刚销售的商品编号*/ int j; printf("\n\t*请输入刚销售的商品编号:"); scanf("%ld",&temp);
printf("\n\t*请输入刚销售的商品数量:");
scanf("%d",&j);
for(i=0;i
{
if(temp==goods[i].num)
{ for(;j>goods[i].count;) /*如果销售额大于库存量,则出现错误提示*/
{ printf("\n\t售出数量大于商品原有数量,出现错误,请重新输入:");
scanf("%d",&j); }
goods[i].count=goods[i].count-j; /*完成自动更改商品数量的功能*/ }
}
printf("\n\t请 按 任 意 键 继 续:");
printf("\n\n *销售后商品信息:\n\t商品类别 商品编号 商品名称 商品数量 商品单价\n");
for(i=0;i
printf("\t %4s %4ld %4s %4ld %4ld\n",goods[i].sort,goods[i].num,goods[i].name,goods[i].count,goods[i].price);
printf("\n\t请 按 任 意 键 返 回 主 菜 单:");
getch(); return; /*返回功能选择界面*/
}
void edit() /*功能5:添加或删除商品信息*/
{
void add(); /*声明子函数*/
void dele();
printf("\n\n\n\n\n\n\n\t\t\t请选择:1. 添加商品信息;\n\n\t\t\t 2. 删除商品信息;\n");
printf("\n\n\n\t\t\t请输入 1或2 继续:");
scanf("%d",&k);
switch(k) /*用switch 语句实现功能选择*/
{ case 1: add();break;
case 2: dele();break; }
getch(); return; /*返回主菜单*/
}
void add() /*添加商品信息*/
{ /*定义子函数*/
printf("\n\n\t\t*请输入所添加商品的商品编号:");
scanf("%ld",&goods[n].num);
printf("\n\t\t请输入所添加商品的名称:");
scanf("%s",goods[n].name);
printf("\n\t\t请输入所添加商品的类别:");
scanf("%s",goods[n].sort);
printf("\n\t\t请输入所添加商品的数量:");
scanf("%d",&goods[n].count);
printf("\n\t\t请输入所添加商品的价格:");
scanf("%d",&goods[n].price);
n=n+1;
}
void dele() /*删除商品信息*/
{ /*定义子函数*/
int temp,j; /*定义局部变量*/
for(i=0;i
{
printf("\n\t商品编号 商品名 商品类别
格");
printf("\n\t %5ld %5s %5s %5ld
oods[i].name,goods[i].sort,goods[i].count,goods[i].price);
printf("\n");
}
printf("\n\n*请输入要删除的商品编号:");
scanf("%ld",&temp);
商品数量 商品价 %5ld",goods[i].num,g
printf("\n\n"); for(i=0;i
{ printf("\n\t删除后的商品信息如下:");
printf("\n\n\t商品编号 商品名 商品类别 商品数量 商品价格"); /*输出删除后的商品信息*/
printf("\n\t %5ld %5s %5s %5ld %5ld",goods[i].num,goods[i].name,goods[i].sort,goods[i].count,goods[i].price);
}
printf("\n\n请 按 任 意 键 返 回 功 能 选 择 界 面 :");
getch(); return; /*返回主界面*/
}
void correct() /*功能6:修改商品信息*/ {
long temp; /*定义局部变量*/
printf("\n\t请输入要修改的商品的编号:");
scanf("%ld",&temp); /*输入新的商品信息*/
for(i=0;i
{
if(temp==goods[i].num)
{
printf("\n\t请输入一个新的的商品编号:");
scanf("%ld",&goods[i].num);
printf("\n\t请输入新的商品的名称:");
scanf("%s",goods[i].name);
printf("\n\t请输入新的商品的类别:");
scanf("%s",goods[i].sort);
printf("\n\t请输入新的商品的数量:");
scanf("%d",&goods[i].count);
printf("\n\t请输入新的商品价格:");
scanf("%d",&goods[i].price);
}
}
for(i=0;i
{
printf("\n\n\t新的商品名称 商品编号 商品类别 商品数量 商品单价\n");
printf("\t %4s %4ld %4s %4ld %4ld",goods[i].name,goods[i].num,goods[i].sort,goods[i].count,goods[i].price);
}
printf("\n\n\n请 按 任 意 键 返 回 功 能 选 择 界 面 :"); /*返回功能选择界面*/
getch(); return; /*返回主菜单*/
}
void search() /*功能7:查询商品信息*/
{
int k; /*定义局部变量*/
long temp1;
char temp2[30],temp3[20];
printf("\n\n\n\n\n\t*按商品编号查询, 请按1\n\n\t*按商品名查询, 请按
2\n\n\t*按商品类别查询, 请按3\n\n\t*查需要进货的商品, 请按4\n\n\n\n\t请输入数字确定查询方式:");
scanf("%d",&k);
printf("\n\n\n请 按 任 意 键 继 续:"); getch(); system("cls"); switch(k) /*实现查询方式的选择*/ { case 1:
{ printf("\n\n\n\n\n\t\t请输入要查询的商品的编号:"); /*按商品编号查询*/
scanf("%ld",&temp1);
system("cls"); /*清屏*/
for(i=0;i
{ if(temp1==goods[i].num)
{ printf("\n\n\t商品编号 商品名 商品类别 商品数量 商品价格");
printf("\n\t %5ld %5s %5s %5ld %5ld",goods[i].num,goods
[i].name,goods[i].sort,goods[i].count,goods[i].price);
} } }break; /*跳出switch 语句*/
case 2:
{printf("\n\n\n\n\n\t\t请输入要查询的商品名:"); /*按商品名查询数据
*/
scanf("%s",temp2); system("cls"); for(i=0;i
{ printf("\n\n\t商品编号 商品名 商品类别 商品数量 商品价格");
printf("\n\t %5ld %5s %5s %5ld %5ld",goods[i].num,goods
[i].name,goods[i].sort,goods[i].count,goods[i].price);
} } }break; /*跳出switch 语句*/ case 3:
{ printf("\n\n\n\n\n\t\t请输入要查询的商品类别:"); /*按商品类别查询数据*/
scanf("%s",temp3);
system("cls");
for(i=0;i
{
if(strcmp(temp3,goods[i].sort)==0)
{ printf("\n\n\t商品编号 商品名 商品类别 商品数量 商品价格");
printf("\n\t %5ld %5s %5s %5ld %5ld",goods[i].num,goods
[i].name,goods[i].sort,goods[i].count,goods[i].price);
} } }break; /*跳出switch 语句*/ case 4: { int a=20; for(i=0;iprintf("\n\t\t需要进货的商品名:%s 现有库存
量:%ld\n",goods[i].name,goods[i].count);
else
printf("\n\n\n\n\n\n\t\t暂时没有需要进货的商品!");
} }break; /*跳出switch 语句*/
}
printf("\n\n\n\n\n\n\t\t请 按 任 意 键 返 回 功 能 选 择 界 面 :"); getch(); return; /*返回主界面*/
}
void quit() /*退出系统*/
{
exit(0);
}
5.2参考书目:
《C 程序设计(第四版)》 、《C 语言程序设计与应用案例分析(第二版)》 、 《C 语言课程设计 案例精编(第二版)》