计算机程序设计基础谌卫军大作业报告2.docx
《计算机程序设计基础谌卫军大作业报告2.docx》由会员分享,可在线阅读,更多相关《计算机程序设计基础谌卫军大作业报告2.docx(26页珍藏版)》请在冰豆网上搜索。
计算机程序设计基础谌卫军大作业报告2
一、题目及要求
“11.11光棍购物节”刚过,给物流配送带来了很大压力。
请编制一个物流管理程序,实现如下基本功能。
假设某网店有10种商品(商品内容自定)。
●对该10种商品的每一天入库情况列出入库清单,清单内容包括商品名称、单价、入库量、产地、序列号(自定一种序列号的标识)
●随着销售活动的进行,商品库存将发生变化。
请对商品数量的变化、单价的变化进行实时调整,并能显示10种商品中任意商品的库存情况;
●输出出库清单,包括产品名称、库存量、单价、出库量、折扣率,遇到无货或库存不够要有自动提示;
●能够对客户的无条件退货提供处理服务,并对退货后的仓储数据进行实时更新;
●能够对客户信息进行处理,包括客户网名、QQ号码、联系电话、邮寄地址、购买货物,如果有可能的话,可以对客户的感兴趣商品进行统计,以便及时推荐商品;
●进行当日交易额的统计,客户的支付可能用信用卡、借记卡(就是大家平时用的银行卡)或货到现金付款等方式,请提示交易额排在前三名的商品并对客户支付习惯进行分析,以便提供更方便的支付服务;
●根据产品数量进行库存量的排序,并显示排序结果;
●如果还有其它的功能,鼓励自行发挥。
要求使用的知识点:
1)变量、结构体或联合体;
2)循环控制、条件判断;
3)数组、函数;
4)排序与查找算法及其实现;
5)指针,用来操作字符串或其它特定内容;
6)指向函数的指针,用来调用某些功能函数;
7)文件,用来保存某些数据;
8)更多的功能使用,请根据自己程序的情况自由发挥。
二、案例描述及思路
仔细读题,与其说做一个物流管理程序,感觉更像网店信息管理程序。
功能模块有:
商品方面:
1、入库
2、销售
3、修改单价
4、退货
5、排序、查看库存量
6、排序、查看交易额
7、查看当日入库记录
8、查看当日出库记录及总结
9、查看商品获得的评价
客户方面:
1、新用户注册
2、查看基本信息
3、查看客户喜爱的商品、支付方式
针对上述功能模块进行设计各个函数,并将一些功能有机结合起来。
还要考虑,这个程序要长期使用,必然存在第一天首次使用和今后使用提取之前记录的问题。
三、各个函数功能简介
首先是两个结构体
inf1数组fruit[10]用来储存商品信息,包括名称、价格、最大价格(因为要算折扣率)、num1~4,1总入库量2总销售量3当前量4退货量,area产地,neva评价数量,eva字符串数组存评价
inf2数组cus[many]用来储存用户信息,包括用户名,qq,电话号码,地址,buy[10]储存买每种商品的数量,ret[10]每种商品的退货量,fb[3]记录三种支付方式分别使用过的次数
全局变量dayin入库数,dayout出库数,re退货数,maxcus当前用户总数,sr表示会有损失的退货商品记录,by[3]记录所有用户的三种支付方式使用过的次数,date表示这是第几天用
各个函数:
Call指向函数的指针所需
Bulid建立文件夹用
Show初始化界面用
Show1主菜单界面
Init1首次使用该程序的初始化界面
Init2再次使用,需要从目录文件中读取相关商品信息、用户信息
Create注册新用户
Pos计算某商品现在的评价总数
Table界面输出一个序列号和商品名称对应的表格,便于选择
Input入库并更新库存量
Sortout1库存量由高到低排序
Sortout2交易额由高到低排序
Change改价并记录最高价格
Find根据用户名查找该用户序号便于之后的操作
Sell增加销售记录,输入用户名时发现是新用户名即提示注册,购买商品数超过库存量会报错,且会记录下这次销售中客户的支付方式、评价等信息
Retu退货记录要退货的用户名输入错误、退货的商品信息与购买记录矛盾都会报错,会记录客户的退货理由,还会记录是否影响二次销售,影响则计入损失,不影响则入库
Dayinp统计当日入库情况并同时输出到屏幕和文件,每日的出库入库信息会保存在目录下的date文件中,不会删除之前的,而是增加,便于日后调阅。
如果发现某件商品已经库存很多就会提示积压严重请采取降价等措施
Dayoutp统计出库信息,还会有当日总销售量、总收入和退货损失等的统计。
同样某件商品库存不足或者无货会提示进货。
Clike了解客户信息包括0具体信息(qq,电话地址等),1客户支付习惯,包括所有用户中最喜欢的和某个特定用户中最喜欢的,2客户最爱商品,3了解商品的评价
Fwrite最终记录信息,将全部今后会用到信息(商品信息、客户信息等)记录到目录文件中
四、全部源代码
注:
鉴于函数功能简介已较清楚解释各个功能,此处不再具体解释每一个变量含义,可能会挑选一部分加以注释。
#defineten10\\运用define,前期调试时商品数量改为1,便于调试
#definemany100\\允许的最大用户数量
#include"stdio.h"
#include"string"
#include"stdlib.h"
structinf1
{
charname[10];
floatprize,maxprize;
intnum1,num2,num3,num4;
chararea[10];
intneva;
chareva[many][1000];
}fruit[10];
structinf2
{
charname[20],qq[11],tel[15],add[1000];
intbuy[10],ret[10],fb[3];
intmax,like;
}cus[many];
intdayin[10],dayout[10],re[10],maxcus=0,sr[10],by[3],date;
voidcall(void(*func)())
{
return((*func)());
}
voidbuild()
{
system("mdd:
\\system");
}
voidshow()
{
printf("\n");
printf("\n■■■■■■■■■■■■■■■■■■■■■■■■■■■");
printf("\n■☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆■");
printf("\n■☆■■■■■■■■■■■■■■■■■■■■■■■☆■");
printf("\n■☆■欢迎使用■☆■");
printf("\n■☆■------------------------------------------■☆■");
\\word排版问题,执行时不是这样
printf("\n■☆■超级威武霸气无敌网店信息管理系统■☆■");
printf("\n■☆■------------------------------------------■☆■");
printf("\n■☆■环33高一凡■☆■");
printf("\n■☆■■■■■■■■■■■■■■■■■■■■■■■☆■");
printf("\n■☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆■");
printf("\n■■■■■■■■■■■■■■■■■■■■■■■■■■■");
printf("\n");
printf("\n");
}
voidshow1()
{
printf("\n|----------------------------------------|");
printf("\n|█主菜单█|");
printf("\n|----------------------------------------|");
printf("\n|1入库|");
printf("\n|----------------------------------------|");
printf("\n|2增加销售纪录|");
printf("\n|----------------------------------------|");
printf("\n|3修改商品单价|");
printf("\n|----------------------------------------|");
printf("\n|4查看商品库存量|");
printf("\n|----------------------------------------|");
printf("\n|5查看今日交易额|");
printf("\n|----------------------------------------|");
printf("\n|6增加退货记录|");
printf("\n|----------------------------------------|");
printf("\n|7查看入库清单|");
printf("\n|----------------------------------------|");
printf("\n|8查看出库清单|");
printf("\n|----------------------------------------|");
printf("\n|9了解客户|");
printf("\n|----------------------------------------|");
printf("\n|0退出并保存文件|");
printf("\n|----------------------------------------|");
printf("\n|请您选择一个任务|");
printf("\n|----------------------------------------|\n\n\n");
}
voidshow2()\\word排版问题,执行时不是这样
{
printf("\n|----------------------------------------|");
printf("\n|█了解客户█|");
printf("\n|----------------------------------------|");
printf("\n|1客户信息|");
printf("\n|----------------------------------------|");
printf("\n|2支付习惯|");
printf("\n|----------------------------------------|");
printf("\n|3客户最爱商品|");
printf("\n|----------------------------------------|");
printf("\n|4商品销售排行榜|");
printf("\n|----------------------------------------|");
printf("\n|5商品退货排行榜|");
printf("\n|----------------------------------------|");
printf("\n|6商品评价|");
printf("\n|----------------------------------------|");
printf("\n|请您选择一个任务|");
printf("\n|----------------------------------------|\n\n\n");
}
voidinit1()
{
inti,j;
chars[10];
date=1;
build();
for(i=0;i{
printf("请依次输入第%d个商品的名称、单价、入库量、产地,以空格隔开:
\n",i+1);
scanf("%s%f%d%s",fruit[i].name,&fruit[i].prize,&fruit[i].num1,fruit[i].area);
fruit[i].num3=fruit[i].num1;
fruit[i].maxprize=fruit[i].prize;
for(j=0;jdayin[j]+=fruit[i].num1;
}
printf("商品初始化录入完毕!
\n\n");
}
voidinit2()
{
FILE*fp;
inti,j;
chart[1000],tt[1000];
if((fp=fopen("d:
\\system\\fruit.txt","r"))==NULL)
{
printf("打开商品记录失败!
\n");
}
else
{
fscanf(fp,"%d",&date);
date++;
for(i=0;i{
fscanf(fp,"%s%f%f%d%d%d%d%s%d",fruit[i].name,&fruit[i].prize,&fruit[i].maxprize,&fruit[i].num1,&fruit[i].num2,&fruit[i].num3,&fruit[i].num4,fruit[i].area,&fruit[i].neva);
for(j=0;jfscanf(fp,"%s",fruit[i].eva[j]);
}
fclose(fp);
printf("读入商品记录成功!
\n\n");
}
if((fp=fopen("d:
\\system\\customer.txt","r"))==NULL)
{
printf("打开客户记录失败!
\n");
}
else
{
fscanf(fp,"%d",&maxcus);
for(i=0;i<3;i++)
fscanf(fp,"%d",&by[i]);
for(i=0;i{
fscanf(fp,"%s%s%s%d%d",cus[i].name,cus[i].qq,cus[i].tel,&cus[i].max,&cus[i].like);
fscanf(fp,"%s",cus[i].add);
for(j=0;jfor(j=0;jfor(j=0;j<3;j++)fscanf(fp,"%d",&cus[i].fb[j]);
}
fclose(fp);
printf("读入客户记录成功!
\n\n");
}
}
voidcreate(intp,charstr[20])
{
chart[1000];
printf("新用户名!
需要注册登记!
\n");
strcpy(cus[p].name,str);
printf("请依次输入新用户的qq号码和手机号码,以空格隔开:
\n");
scanf("%s%s",cus[p].qq,cus[p].tel);
printf("请输入新用户的地址:
\n");
gets(t);
gets(cus[p].add);
maxcus+=1;
cus[p].max=0;
cus[p].like=-1;
printf("新用户注册成功!
\n\n");
}
intpos(intn)
{
inti;
for(i=0;;i++)
{
if(strcmp(fruit[n].eva[i],"\0")==0)break;
}
return(i);
}
voidtable()
{
inti;
printf("商品名称与序列号对照表:
\n");
printf("序列号商品名称\n");
for(i=0;iprintf("%d%s\n",i+1,fruit[i].name);
}
voidinput()
{
inti,j,n,p;
printf("请输入要入库的商品的种数\n");
scanf("%d",&n);
table();
for(i=0;i{
printf("请输入第%d个商品的序列号和入库量,以空格隔开\n",i+1);
scanf("%d%d",&j,&p);
j-=1;
dayin[j]+=p;
fruit[j].num1+=p;
fruit[j].num3+=p;
printf("入库成功!
商品“%s”目前库存量为:
%d\n\n",fruit[j].name,fruit[j].num3);
}
}
voidsortout1()
{
inti,j,t,found,tt;
inta[10],b[10];
for(i=0;i{
a[i]=fruit[i].num3;
b[i]=i;
}
for(i=0;i{
found=0;
for(j=0;jif(a[j]{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
tt=b[j];
b[j]=b[j+1];
b[j+1]=tt;
found=1;
}
if(found==0)break;
}
printf("库存量由高到低排序的结果为:
\n");
printf("商品名称库存量\n");
for(i=0;iprintf("%s%d\n",fruit[b[i]].name,a[i]);
printf("\n");
}
voidsortout2()
{
inti,j,t,found,tt;
inta[10],b[10];
for(i=0;i{
a[i]=dayout[i];
b[i]=i;
}
for(i=0;i{
found=0;
for(j=0;jif(a[j]{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
tt=b[j];
b[j]=b[j+1];
b[j+1]=tt;
found=1;
}
if(found==0)break;
}
printf("交易额由高到低排序的结果为:
\n");
printf("商品名称交易额\n");
for(i=0;iprintf("%s%d\n",fruit[b[i]].name,a[i]);
printf("\n");
}
voidsortout3()
{
inti,j,t,found,tt;
inta[10],b[10];
for(i=0;i{
a[i]=fruit[i].num2;
b[i]=i;
}
for(i=0;i{
found=0;
for(j=0;jif(a[j]{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
tt=b[j];
b[j]=b[j+1];
b[j+1]=tt;
found=1;
}
if(found==0)break;
}
printf("总销售量由高到低排序的结果为:
\n");
printf("商品名称总销售量\n");
for(i=0;iprintf("%s%d\n",fruit[b[i]].name,a[i]);
printf("\n");
}
voidsortout4()
{
inti,j,t,found,tt;
inta[10],b[10];
for(i=0;i{
a[i]=fruit[i].num4;
b[i]=i;
}
for(i=0;i{
found=0;
for(j=0;jif(a[j]{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
tt=b[j];
b[j]=b[j+1];
b[j+1]=tt;
found=1;
}
if(found==0)break;
}
printf("退货量由高到低排序的结果为:
\n");
printf("商品名称退货量\n");
for(i=0;iprintf("%s%d\n",fruit[b[i]].name,a[i]);
printf("\n");
}
voidchange()
{
inti,j,n;
floatp;
printf("请输入要修改单价的商品的种数\n");
scanf("%d",&n);
table();
for(i=0;i{
printf("请输入第%d个商品的序列号和新价格,以空格隔开\n",i+1);
scanf("%d%f",&j,&p);
j-=1;
if(fruit[j].maxprize
fruit[j].prize=p;
printf("单价修改成功!
商品“%s”目前单价为:
%0.2f\n",fruit[j].name,fruit[j].prize);
}
}
intfind(charstr[20])
{
inti;