版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
商品销售管理
《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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时尚纺织服装行业市场趋势分析
- 2026上海同济大学附属东方医院临床护理岗位招录考试模拟试题及答案详解
- ICU管道护理的重要性
- 2026年吉林省事业单位人员招聘笔试模拟试题及答案详解
- 警惕溺水隐患生命至上四年级主题班会课件
- 2026年伊春市汤旺河区事业单位人员招聘考试备考题库及答案详解
- 2026中国航空油料集团有限公司招聘3人笔试备考题库及答案详解
- 警惕网络欺凌友善相处小学主题班会课件
- 热爱祖国争做栋梁-小学主题班会课件
- 2026四川内江市隆昌市图书馆招聘2人考试备考试题及答案详解
- 本溪市(2025年)辅警考试真题及答案
- 2024年南京理工大学马克思主义基本原理概论期末考试题及答案1套
- 软件系统部署实施方案范本
- 雨课堂学堂在线学堂云《明-园境赏析:明代四大胜园 》单元测试考核答案
- JAK抑制剂停药中的药物剂量递减方案
- 2025年江苏护理省市统考题目及答案
- 考驾照科目一试题100题科科目一到科目四
- 2024~2025学年上海市闵行区统编版五年级下册期末考试语文试卷
- 2024-2025学年人教版七年级数学上册期末试卷【附答案】
- 监狱舆情应急预案
- 优生优育与母婴保健专业知识考试题库含答案
评论
0/150
提交评论