商品月销售信息管理软件设计Word格式.docx
《商品月销售信息管理软件设计Word格式.docx》由会员分享,可在线阅读,更多相关《商品月销售信息管理软件设计Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
STEP5选择某一种功能
STEP6对于输入的字母编辑关于售出.进货.查找.统计功能的函数
STEP7如果输入的字母表示退出,退出系统
(2)系体模块结构图
(3)系统文件及函数组成、功能
源文件
函数或其他成分
功能
goods.c
main
总控函数
menu_select
菜单选择
handle_menu
菜单处理
quit
结束运行
add_display.c
showTable
输出表头
addRecord
在表尾追加信息
display
显示信息
sell_buy.c
decreaseNum
减少指定的商品数量
increaseNum
增加指定的商品数量
find_count.c
findRecord
查找指定的记录
queryInfo
查询指定商品的信息
sort
查询销售总金额最大的商品
sav_load.c
save
文件存储
load
文件读取
goods.h
常数
提供常数
结构声明
商品信息结构
库函数及函数原型声明
引用库函数及函数
3系统详细设计
(1)函数的描述
文件存储操作函数
函数原型:
intsaveRecords(void)
功能:
将记录存入默认文件goods_info或者指定文件。
参数:
void
返回值:
成功0,失败-1。
工作方式:
数组records被保存至指定文件。
要求:
报告是否有记录可存、是否能正常建立或打开文件、根据要求执行存入操作并报告存入记录的条数。
文件读取操作函数
intloadRecords(void)
将默认文件goods_info或者指定文件里的记录取入内存。
void。
records为从指定文件中读取出的记录。
报告是否有记录可存、是否能正常打开文件、是否覆盖已有记录以及读取记录的条数。
显示所有商品信息函数
voiddisplay(void)
显示内存的记录信息。
从头部开始逐个显示记录内容。
报告是否有记录及记录条数和内容。
增加信息函数
voidaddRecord(void)
增加记录。
从尾部开始逐个追加记录。
将新记录追加在记录尾部,并对记录进行计数。
输出表头函数
voidshowTable(void)
输出表头信息。
输出一行表头信息。
商品销售函数
voiddecreaseNum(void)
被售出之商品数量减x。
可以按照商品编号、商品名称、单价、生产地找到要销售的商品,确认后方可销售。
同时要求该商品本月当前销售总数量、本月当前销售总金额按实际增加。
商品进货函数
voidincreaseNum(void)
被购进之商品数量增x。
可以按照商品编号、商品名称、单价、生产地找到要销售的商品,确认后方可进货。
同时要求该商品本月当前销售总数量、本月当前销售总金额不变。
查找指定记录函数
voidfindRecord(char*,int,int)
查找指定的记录。
char*target:
欲查找记录的某一项与target相同。
inttargetType:
表明通过哪一项来查找,0为商品编号,1为商品名称,3为单价,4为生产地。
intfrom:
从第from个记录开始找。
int(找到的记录的序号),若找不到则返回-1。
根据给定的关键字,查找符合记录的序号。
找不到则返回-1。
查询指定商品信息函数
voidqueryInfo(void)
将一个文件的内容追加到另一个文件的尾部。
可以按照商品编号、商品名称、单价、生产地来查询。
打印查询到的学生的信息或给出相关信息。
统计销售函数
voidsort(void)
找出当前销售总金额最大的商品。
使用冒泡排序法排序,并显示当前销售总金额最大的商品信息。
只能按销售总金额最大来排序。
菜单处理函数
voidhandle_menu(void)
处理选择菜单命令。
根据命令,调用相应函数。
给出结束信息。
菜单选择函数
voidmenu_select(void)
接收用户选择的命令代码。
int。
返回命令代码的整数值。
只允许选择规定建,如果输入不合要求,则提醒用户重新输入。
结束程序运行函数
voidquit(ADDR*)
根据要求决定在退出之前是否将修改的记录存入文件。
结束运行之前,询问是否对修改的记录进行存储。
主函数
voidmain(void)
控制程序。
管理菜单命令并完成初始化。
声明函数原型,包含文件及自定义宏和数据结构。
报告是否能正常打开文件执行存入操作及存入记录的条数。
(2)主要函数流程图
进货时的流程图
售货时的流程图
(3)编码(附后)
4、系统测试
5、总结:
通这次实验,我收获颇多,也发现自己不足之处语言有些知识学得不够扎实,很多看不懂,需要老师指导。
在做这个实验的过程,自己编写函数方面能力也有点不足,而且不够有时候数据类型不对应,有时候甚至是字符错误。
不过也让我记住了出现错误的原因。
基础不扎实,导致一些错误。
通过这次我也懂得一个道理:
不懂之处最好要自己试着解决,不行再向他人请教,还要利用网络资源补充知识。
6、结束语
感谢老师的耐心解惑和指导,也感谢思慧同学、李佳同学以及蔡师兄的热情帮助,耐心且尽力解答我的问题。
参考文献
[1]刘振安,等.C语言程序设计[M].北京:
机械工业出版社,2007.
[2]刘振安,等.C程序设计课程设计[M].北京:
机械工业出版社,2004.
[3]刘振安,等.C/C++程序设计教程[M]北京:
机械工业出版社,2008.
[4]刘振安,等.C程序设计教程[M].北京:
[5]刘燕君,等.C程序设计实践教程[M]北京:
机械工业出版社,2009.
[6]SartajSahni.数据结构、算法与应用——C++语言描述[M].汪诗林,等译.北京:
机械工业出版社,2000.
[7]董兰芳,等。
UML课程设计[M].北京:
机械工业出版社,2005.
[8]裘宗燕.从问题到程序——程序设计与C语言引论[M].北京:
[9]刘振安,等.C语言程序设计[M].2版.北京:
清华大学出版社,2008.
[10]裘宗燕译.程序设计实践[M].北京:
[11]张龙祥.UML与系统分析设计[M].北京:
人民邮电出版社,2001.
[12]谭浩强.C程序设计[M].北京清华大学出版社,2001.
[13]LesHancock,MorrisKrieger.TheCPrimer[M].NewYork:
McGraw-Hill,1982.
[14]BrianWKernighan,DennisMRitchie.C程序设计语言[M].徐宝文,李志,译.2版,新版.北京:
附程序清单
#ifndefH_GOODS_HH
#defineH_GOODS_HH
#include<
stdio.h>
stdlib.h>
conio.h>
string.h>
#defineINITIAL_SIZE100//数组初始大小
#defineINCR_SIZE50//数组每次增加的大小
structgoods_info{
charnumber[15];
//商品编号
charname[20];
//商品名称
intamount;
//商品销售数量
floatprice;
//商品单价
charaddress[15];
//商品生产地
intrest;
//现库存量
floatsum;
//商品月总销售量
};
typedefstructgoods_infoGooInfo;
externintnum;
//记录的商品数
externGooInfo*records;
//记录商品信息的数组
externintarraySize;
//数组大小
externcharsavedTag;
//信息是否已保存的标志,0为已保存,1为未保存
voidhandle_menu(void);
intmenu_select(void);
voiddecreaseNum(void);
voidaddRecord(void);
voiddisplay(void);
voidqueryInfo(void);
voidincreaseNum(void);
voidsort(void);
intsaveRecords(void);
intloadRecords(void);
voidquit(void);
voidshowTable(void);
intfindRecord(char*target,inttargetType,intfrom);
voidcopyRecord(GooInfo*dest);
#endif
#include"
goods.h"
/****
初始化
****/
intnum=0;
GooInfo*records=NULL;
//记录商品的数组
charsavedTag=0;
intarraySize;
charstr[2];
charuser[10];
inti;
/***
***/
intmain()
{
system("
colorFD"
);
//修改软件背景颜色
//初始化数组
records=(GooInfo*)malloc(sizeof(GooInfo)*INITIAL_SIZE);
if(records==NULL)
{
printf("
memoryfail!
"
//内存不够,退出程序
exit(-1);
}
arraySize=INITIAL_SIZE;
printf("
\n"
*************************************************\n"
*******************************************\n"
**************************************\n"
*********************************\n"
**************************\n"
\n"
欢迎进入商品月销售管理系统\n"
\t※※※※※※※※※※※※※※※※※※※※※※※\n"
\t※13计算机1班50号※\n"
\t※设计者→_→朱冰※\n"
\t※指导老师→_→胡玉平※\n"
用户名:
gets(user);
O(∩_∩)O请输入密码:
for(i=0;
i<
2;
i++)
str[i]=getch();
*"
if(strcmp(user,"
ZB"
)==0&
&
strcmp(str,"
50"
)==0)
handle_menu();
}
for(;
;
){
switch(menu_select())
{
case1:
addRecord();
break;
case2:
increaseNum();
case3:
decreaseNum();
case4:
display();
case5:
queryInfo();
case6:
sort();
case7:
loadRecords();
case8:
quit();
}
intmenu_select()
chars[2];
intcn=0;
\t么么哒╭(╯3╰)╮\n"
\t1.输入商品信息\n"
\t2.进货功能\n"
\t3.售出功能\n"
\t4.显示商品信息\n"
\t5.查找功能\n"
\t6.统计功能\n"
\t7.读取保存的记录\n"
\t8.退出程序\n"
\n\t数字对应功能选择,请选择1-8:
)
gets(s);
cn=atoi(s);
if(cn<
1||cn>
8)printf("
\n\t输入错误,重选1-8:
elsebreak;
returncn;
voidquit(void)
charstr[5];
if(savedTag==1)
是否保存原来的记录呢?
(y/n)"
gets(str);
if(str[0]!
='
n'
str[0]!
N'
saveRecords();
free(records);
exit(0);
add_disp.c
/*****
*输出表头
{printf("
****************************************************************************\n"
编号\t名称\t生产地\t单价\t销售数量\t现库存量\t销售总额\n"
voiddisplay(void)
inti;
if(num==0)
没有可供选择的商品信息"
return;
showTable();
num;
%s\t%s\t%s\t%.2f\t%8d\t%8d\t%.2f\n"
records[i].number,records[i].name,records[i].address,records[i].price,records[i].amount,records[i].rest,records[i].sum);
*在当前表的末尾添加新的信息
*****/
charstr[15];
\n原来没有商品信息记录,现在建立新表\n"
else
下面在当前表的末尾增加新的信息\n"
while
(1)
{
你将要添加一组新的信息,确定么?
(y/n)\n"
if(str[0]=='
||str[0]=='
)
if(num>
=arraySize)
records=realloc(records,(arraySize+INCR_SIZE)*sizeof(GooInfo));
if(records==NULL)
{
printf("
memoryfailed!
exit(-1);
}
arraySize=arraySize+INCR_SIZE;
商品编号:
gets(records[num].number);
商品名称:
gets(records[num].name);
生产地:
gets(records[num].address);
单价:
scanf("
%f"
&
records[num].price);
当前销售总数量:
%d"
records[num].amount);
库存余量:
scanf("
records[num].rest);
records[num].sum=records[num].amount*records[num].price;
getchar();
num++;
现在共有%d条信息"
num);
savedTag=1;
save__load.c
intsaveRecords()
FILE*fp;
charfname[30];
没有记录可存!
return-1;
请输入要存入的文件名(直接回车选择文件goo_info)"
gets(fname);
if(strlen(fname)==0)
strcpy(fname,"
goo_info"
if((fp=fopen(fname,"
wb"
))==NULL)
不能存入文件\n"
return-1;
\n存文件...\n"
fwrite(records,sizeof(GooInfo)*num,1,fp);
fclose(fp);
%d条记录已经存入文件,请继续操作\n"
savedTag=0;
//更新是否已保存的标记
return0;
文件读取函数
FILE*fp;
if(num!
=0&
savedTag==0)
请选择您是要覆盖现有记录(y)还是要将"
读取的纪录添加到现有记录之后(n)?
直接回车则覆盖现有记录\n"
)//内存记