商品销售管理_第1页
商品销售管理_第2页
商品销售管理_第3页
商品销售管理_第4页
商品销售管理_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

商品销售管理

《C语言程序设计》

课设报告

项目:商品销售管理

班级:__________________

姓名:__________________

成绩:__________________

一、需求分析

1、问题

根据需求,该系统所应包含的信息有下列一些:

商品的基本信息:

商品编号,商品名称,商品产地,商品库存。

顾客的基本信息:

顾客代码,购买数量,销售日期

根据需求,该系统所应实现的功能有下列一些:

各类基木数据的录入。如:销售基木信息录入。

基于各类数据的查询。比如输入张三姓名,查询顾客张三的销售信息。

数据导出:将销售中信息导出到指定文件。

2、系统

使用C语言实现,开发环境为VC,能够运行在操作系统windows98及以上皆

可。

3、运行要求

能不受限制的录入销售信息

界面友好,操作方便,比如删除前需要提示用户是否删除

容错性强,比如数据导出时,假如文件不存在需要提示用户。

二、总体设计

1、系统流程设计

根据系统要求,设计如下的系统流程

退出

2、系统模块设计

根据系统的功能设计,如下模块

销售系统

主界面模块:完成系统菜单的显示

功能选择模块:根据用户的选择,完成其相应的功能。

商品信息录入:完成用户从文件读入库存信息。

销售信息录入:完成用户从界面输入销售信息。

根据编号查询历史:完成用户从界面输入商品编号,在系统查询符合条件的

销售信息,并在界面上显示的功能。

根据顾客查询历史:完成用户从界面输入顾客姓名,查询该客户的购买历史。

显示顾客姓名:完成用户从界面查看所有顾客姓名。

三、全面设计

1、数据结构设计

根据系统要求,系统中需要储存的数据有商品,销售与顾客的信息,其结构

如下:

数据项名称数据项系统表示数据类型数据长度备注

产品编号num整型4

产品名称name字符串20

产品价格price浮点型4

产品产地prodplace字符串40

产品库存amount整型4初始1000

由于明白商品有10种,则使用结构体数组来储存商品信息

使用C语言创建的结构体(与结构体数组)如下:

structproductionlist{

intnum;

charname[20];

floatprice;

charprodplacer401;

intamount;

}production[10]:

为了能实现不受限制的储存与查看销售信息,使用链表的结构储存销售的信

息,在增加销售的基本信息时,创建一个销售的节点,将其插入到链表中,其数

据结构如下:

数据项名称数据项系统表示数据类型数据长度备注

顾客代码num整型4

顾客姓名name字符型10

产品名称proname字符图20

销售数量amount整型4

销售日期time字符型10

使用C语言创建的结构体如下:

structsell_information(

intnum;

charname[10];

charpronanip[20]:

intamount;

chartine[10];

structsellinformation*next;

};

2、界面设计

主界面:

根据系统要求,设计一个字符界面,显示系统的菜单,为了表达友好性,将

在每个菜单前显示该菜单项对应的数字

用户输入菜单项前面的数字,主菜单消失,进入该模块的相应界面,进行相

应的操作,完成后,回到主界面。

读入产品信息界面:

在光标下输入销售的信息,用空格将信息隔开

销售界面:

输入销售信息,储存在链表中。

根据产品编号查询产品销售历史界面:

计算各个时段的销售额界面:

输入起始时间与终止时间计算销售额

根据顾客姓名杳询购买历史界面:

输入顾客姓名,即导出顾客购买信息。

顾客姓名显示:

选择该功能将显示所有顾客姓名

3、模块实现

主界面实现:

主函数中用

prinlf(〃\l\l*******x*******T1023-9徐孟玲*******************\i\i");

printf(〃\t\t*******x*******T[023-9徐孟玲*林****************\t\t");

printfC\t\t*\tl.读入产品当前库存信息并显示*\n\n〃)

printf(〃\t\t*\t2.键盘输入顾客购买产品的信息并储存*\n\n〃)

printf(〃\t\t*\t3.根据产品编号查询产品销售历史*\n\n〃)

printf(〃\t\t*\t4.计算各时间段产品销售总额*\n\n〃)

printf(〃\t\t*\t5.根据顾客姓名查询购买历史*\n\n〃)

printfC\t\t*\t6.显示所有顾客姓名*\n\n〃)

printf(,z\t\t*\t7.显示当前仓库信息*\n\n")

printf(〃\t\t*\tO.退出查询系统*\n\n〃)

printf(〃\t\t*******x**********************x****************\n〃);

printf(〃\n\n〃);

printfC\t\t请输入你的选择:〃);

实现。

scanf&choice);

switch(choice){

case1:system(〃cls〃);Readdata();break;

case2:system(〃cls〃);head=sell(head);break;

case3:system(〃cls〃);getshopingdata(head);break;

case4:system(〃cls〃);sell_total(head);break;

case5:system(,,cls,/);getnamedata(head);break;

case6:system(〃cls〃);list_custonie(head;;break;

case7:system(〃cls〃);1iststore();break;

进行功能选择。

模块流程:

对应函数:voidnain()

读入产品当前库存模块实现:

模块说明:从文件中读取已经写好的产品信息,存入数组productionflO]

模块流程:

对应函数:voidRcaddata()

键盘输入顾客购买产品的信息模块实现:

模块说明:从键盘按提示输入销售信息,同时存入链表中,在输入的时候调用推

断函数来推断输入数据的合法性,以确保数据存储的正确性。

模块流程:

对应函数:structsellinformation*sell(structsellinformation*head)

推断输入信息模块实现:

模块说明:对输入的数据进行合法性推断,若不合法,提示用户重新饰入

模块流程:

对应函数:intDateAmountProname(structsell_information*p)

推断编号模块:

模块说明:对销售功能中输入的编号与productin[10].num进行对比,假如存在,

返回1,不存在则返回0。

模块流程:

对应函数:intjudge_proname(char*p)

推断库存量模块:

模块说明:对当期仓库信息进行推断,若超出库存量返回0,否则返回1。

回主菜单

对应函数:intjugde_amount(intamount,char*p)

推断日期模块:

模块说明:把日期的年月日进行分别推断,还有对每个月,与闰年对二月的影响

等做出相应的推断。

对应函数:intJudge_date(char*p)

intNumberDay(intComplete_year,intCompletejnonth,intComplete_day)

intIsleapyear(intyear)

根据产品编号查询产品销售历史模块:

模块说明:输入产品编号,查看该产品销售的历史信息,若商品存在会显示相应

信息,若不存在则会提示出错。

模块流程:

打印产品信息

返回主菜单

对应函数:voidgetshopingdata(structsell_information*head)

根据顾客姓名查询购买历史模块:

模块说明:输入产顾客姓名,查看该顾客的购买历史信息,若鼓了存在会显示相

应信息,若不存在则会提示出错。

模块流程:

对应函数:voidgetnamedata(structsell_information*head)

计算各时间段产品销售总额模块:

模块说明:输入需要查询总额的时间起始点与终止点,计算这段时间销售的总额。

模块流程:

对应函数:voidgetnamedata(structsell_information*head)

显示所有顾客姓名模块:

四、测试结果

1、录入销售测试

测试数据:

输入小样湖北汽车工业学院8241470

测试结果:

程序运行出现错误,如下

原因电话输入的长度超过了电话表示的长度

测试数据:

输入张吴波湖北汽车工业学院/p>

测试结果:

程序运行正常,正确的插入到链表的最后位置

测试数据:

输入:张吴波湖北汽车工业学院8241470425

测试结果:

程序运行不正常,能够将张吴波湖北汽车工业学院,8241470插入到链表的

最后位置,但是425不能储存

原因:使用了scanf("%s”),将空格作为截止符

2、修改销售测试

测试数据:在系统中存在4个名称之li的销售

测试结果:输入修改的姓名H,显示了第一个姓名为li的销售信息,输入

修改后的信息:张吴波湖北汽车工业学第一个姓名为li的

销售修改成功

测试数据:在系统中不存在名称之张三的销售,输入后,提示姓名不存在,如下

3、导入销售测试

测试数据:输入C:\dd.tst路径(系统中不存在该文件)

测试结果:提示不能打开文件,不能导入

C',F:\教学资料\C语言课程建设'整理\Debug\实该模板案例.exe,□X

斗笠通

T系充

十f

0录

1息

2信

3修

4录

>:息

5通

6息

?录

退

•i

**W2f”4f-*

、一茜地入。-7之间的数选择需要的操作:5

请输入文件路在:

C:\dd.tst

不能打开文件,请检查文件路径

Pressanykeytocontinue

回]车后程序结束

原因:不能打开文件文件使用了exit函数

测试数据:输入C:\data.txt路径(系统中该文件,格式符合程序要求)

测试结果:提示能将文件中的数据正确导入

c:,F:\教学资料\C语言课程建设'整理\Debug\实训模板案例.exe,

学生通讯录

0录

1查

示1

2显1

3修^

4录

>:信

5息

6息

7录

退

X*2fi24E2

入0-7之间的数选择需要的操作:5

请输入文件路径:

C:\data.txt

成功丛文件中读取12条数据?”

请按住意鞋继续.....

d

data,txt的文件内容如下:

12

lixing88888

zhangXXX1222

zhouyi88999

lixing88888

zhangXXX1222

zhouyi88999

lixing88888

zhangXXX1222

zhouyi88999

lixing88888

zhangXXX1222

测试数据:输入C:\dataLtxt路径(系统中该文件,格式不符合程序要求)

测试结果:提示能将文件中的数据正确导入,但导入的数据不正确

大教学资料\C语言课程建设'整理\Debug\实训模板案例.exe"□lx

Wx.xxxxxxxxx.Aii学生通讯隶

人通

讯信

0录

询通

讯信

1查

示通

讯信

2显

讯信

3修

讯信

4删

讯信

5导

讯信

6息

?出

退

请输入。-7之间的数选择需要的操作:

路修

5读

atal.&txt中8

・■

d

查询结果,数据未正确导入

datal.txt文件内容如下:

lixing

zhangXXX

1222

zhouyi

杳询模块测试:

删除模块测试

五、实训总结:

实训感想

对系彳亲发的总结(设计亮点,存在的不足,需要改进的地方)

(略)

六、附录

程序源代码

〃头文件

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

structproduction_list

(

intnum;

charname[20];

floatprice;

charprodplace[40];

intamount;

}production[10];

structtime

(

intyear;

intmonth;

intday;

}ymd;

structsellinformation(

charname[10];

charpro_name[20];

intamount;

chartime[10];/*(2009-01-02)*/

structsell_information*next;/*链表指针指向下一个*/

);

voidReaddata();

structsell_information*sell(structsell_information*head);

voidgetnamedata(structsell_information*head);

voidgetshopingdata^structsellinformation*head);

intn[10]={1000,1000,1000,1000,1000,1000,1000,1000,1000,1000);

intDateAmountPronane(structsei1information*p);

/*1.读入货物当前库存信息并显示*/

voidRcaddata0

(

FILE*fp;

inti=0;

if((fp=fopen(''productionsinformation.txt〃,〃r"))==NULL)

(

printf(〃文件打开错误!\n〃);

exit(0);

while(i<10)

fscanf(fp,〃%6d%s%f%s%d〃,&production[i].num,production[i].name,&pr

oductionti].price,production[i].prodplace,&production[i].amount);

,,,,

printf(%6d\t\t%s\t\t%6.2f\t\t%s\t\t%6d\n,productionEi].num,prod

uction[i].name,production[i].price,production[i].prodplace,production

[i].amount);

i++;

};

printf("\n〃);

if(fclose(fp))

(

printf(〃八n");

exit(0);

}

)

/*2.键盘输入顾客购买货物的信息并储存*/

structsellinformation*sell(structseilinformation*head)

(一一

structsell_information*pl,*p2,*p3;

intn;

intm;

do{

if(head->next!=NULL)

(

pl=(structsell_information^)malloc(sizeof(struct

sell_information));

p3=head->next;

head->next=pl;

pl->next=p3;

)

else

(

p3=pl=p2=(structsell_informaticn*)malloc(sizeof(struct

sellinformation));

head->next=pl;

p2->next=NULL;

)

do

(

printf(〃\t\t\t\t请输入顾客信息:\n");

******************\n〃);

printf(〃请输入顾客姓名\t:〃);

scanf(〃%s〃,&pl->name);

printf(〃请输入顾客所购货物名称\t:〃);

scanf(〃%s〃,pl->pro_name);

printf(〃请输入顾客购物数量:〃);

scanf(〃%d〃,&pl->amount);

printf(〃请输入顾客购物时间:〃);

scanf(/z%s/z,pl->time);

printf(〃\n");

if(DatcAmountPronamc(pl))

printf(〃输入正确!请按。继续下面的步骤!\n〃);

scanf&n);

else

printf(〃输入错误!请重新输入!〃);

if(n==0)

break;

}while(l);

।4

II*T*xj**TXXT*XT%*T*^r**T**TV*?**T^^7*d、*1*^卜*T、*1**TXZj»*?**1**T*^T*Zj**T**7*XT**T**T*^7*Zj**1、*7**1、

*******************x**\n");

printf(〃假如想停止向买,请按0,假如要继续入库,请按其它数字键

\n");

scanf(〃%d〃,&n);

if(m==0)

break;

}while(l);

returnhead;

}

/*推断输入信息是否正确*/

intDate/XmountPronane(structseil_information*p)

intJudge_date(char*p);

intjudgeproname(char*p);

intjugde_amount(amount,pro_name);

if(Judge_date(p->tine)&&judge_proname(p->pro_name)&&jugde_amount(p->a

mount,p->pro_name))

return1;

else

return0;

)

/*推断编号*/

intjudge_proname(char*p)

inti=0,flag;

chara[10];

while(*p)

a[i++]=*p++;

a[i]=O;

for(i=0;i<10;i+-)

(

if(strcmp(a,production[i].name)==0;

(

flag=l;

break;

}

}

if(i==10)

flag=0;

returnflag;

}

intjugdeamount(intamount,char*p)

{"

inti=0;

intflag;

chara[10j;

while(*p)

a[i++]=*p++;

a[i]=0;

for(i=0;i<10;i++)

if(strcmp(a,production^],name)==0)

(

flag」;

n[i]-=amount;

break;

}

if(n[i]>0)

return1;

else

return0;

}

/*推断日期是否合法*/

intJudgedate(char*p)

inti=0;

chars[5];

charin[3];

charn⑶;

intNumberDay(intComplete_year,intComplete_month.int

Completeday);

intall_year;

intal1month;

intall_day;

chardate[10];

while(*p)

date[i++]=*p-+;

date[i]=0;

if(i==10&&date[4]==,->&&date[7]==,)

(

for(i=0;i<4;i++)

{

s[i]=date[i];

)

s[i]=0;

all_5^ear=atoi(s);/*把前4位储存

到年里*/

for(i=5;i<7;i++)

{

m[i-5]=date[i];

}

m[i-5]=0;

all_month=atoi(m);/*把第5-7位

转化储存到百成员中*/

for(i=8;i<:0;i++)

(

n[i-8]=date[i];

)

n[i-8]=0;

allday=atoi(n);/*把后两位

储存到H成员中*/

}

else

(

printf(〃日期格式有误请从新输入!!!\n");

return0;

if(NumberDay(all_year,all_month,all_day))

return1;

else

(

printf(〃输入的天数或者年份或者月份有误请从来!!!\n〃);

return0;

)

}

/*功能:推断每月的天数是否合法*/

intNumberDay(intCompleteyear,intCompletemonth,intCompleteday)

(-

intTsleapyear(intyear);/*推断闰年函数*/

intt[13]=(0,31,28,31,30,31,30,31,31,30,31,30,31};/*定义

数组*/

if(Islcapycar(Completc_ycar))

(

if(Completenonth!=2)

(-

if(Completemonth<=12&&Completeday<=t[Completemonth])

return1;

else

return0;

}

else

(

if(Completemonth<=12&&Completeday<=t[Completemonth]+1)

return1;

else

return0;

}

)

else

(

if(Complete_nonth<=12&&Complete_day<=t[Complete_month])

return1;

else

return0;

)

)

/*功能:推断闰年*/

intIsleapyear(intyear)

intleap;

leap=((year%4==0&&year%100!=0)||year%400=0);/*闰年条件*/

returnleap:

)

A3.根据产品编号查询货物销售历史*/

voidgetshopingdata^structseil_information*head)

intnumber;

chars[20];

charpro_name[20]=//a,/;

char*b=proname;

intJudge_proname(intp,char*);

structsellinformation*pl=head;

printf(”请输入产品编号:〃);

scanf(〃%d〃,&.number);

if(Judgeproname(number,b))

strcpy(s,proname);

printf(〃该代号产品的名称是:%s〃,s);

pl->next;

)

else

printf(〃产品代号不存在!〃);

while(pl!=NULL)/*链表的遍历过程*/

if(strcmp(s,pl->pro_name)==0)

printf(〃********^*********************^^**************\n〃);

printfC\t\t\t\t顾客购买信息为\n〃);

printf(〃顾客姓名:产品名称:购物数量:购物时间:\n〃);

printfC%-10s%-20s%-10d%-10s\nz/,pl->name,p»pro_name,pl->amount,pl->

time);

printf(〃**********************************************\n〃);

else

printf(〃产品未出售,没有销售记录!〃);

pl=pl->next;

)

intJudge_proname(intp,char*b)

(

inti;

intflag=0;

for(i=0;i<10;i+-)

(

if(production[i].num==p)

{

flag=l;

strcpy(b,production[i].name);

break;

returnflag;

)

/*4.计算各时间段产品销售总额*/

voidsell_total(structsellinformation*head)

(一"

structsell_information*pl=head;

ints_year,s_month,s_day,e_year,emonth,eday,i,j;

chars[5];

charm[3];

charn[3];

intall_year;

intall_month;

intall_day;

chardate[10];

floatsum=0;

printf(〃请输入起始日期:〃);

scanf(z,%d-%d-%d/z,&s_year,&s_month,&s_day);

printf(〃请输入终止日期:〃);

scanf(〃%dTd-%d〃,&e_year,&c_month,&c_day);

while(pl!=NULL)/*链表的遍历过程*/

(

for(i=0;i<10;i++)

date[i]=p1->time[i];

for(i=0;i<4;i++)

{

s[i]=date[i];

)

s[i]=0;

all_5^ear=atoi(s);/*把前4位储存

到年里*/

for(i=5;i<7;i++)

(

m[i-5]=date[i];

}

m[i-5]=0;

all_month=atoi(m);/*把第5-7位

转化储存到月成员中*/

for(i=8;i<10;i++)

(

n[i-8]=date[i];

}

n[i-8]=0;

all_day=atoi(n);/*把后两位储

存到日成员中*/

if(all_year>s_ycar&&all_year<e_year||all_ycar<s_ycar&&all_year==e

_year&.&all_month<e_nonth||all_year==s_year&&all_year<e_year&&alInont

h>smonthIIallyear-syear&&al1year-eyear&&allmonth>smonth&&all

_month<e_month||all_year==s_year&&all_year==e_year&&all_month<e_month

&&al1month-s_month&&allday>sday||al1year-syear&&al1year-eye

ar&&all_month==e_month&&all_month>s_month&&all_day<e_day|all_year==s

year&&allyear-evear&&allmonth==emonth&&allmonth-smonth&&all

day>=s_day&&al1day<=eday

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论