课程设计报告王玮鸿.docx
《课程设计报告王玮鸿.docx》由会员分享,可在线阅读,更多相关《课程设计报告王玮鸿.docx(27页珍藏版)》请在冰豆网上搜索。
课程设计报告王玮鸿
重庆科技学院
《C语言程序设计》
课程设计报告
院(系):
_电气与信息工程学院_班级:
电自专2010-02班
学生姓名:
王玮鸿学号:
2010630144
设计地点:
___计算机基础自主学习中心___________
设计题目:
________商品销售管理系统______________
完成日期:
2011年12月23日
指导教师评语:
_______________________________________
______________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________
教师签名:
_________________________
课程设计任务书
设计题目五:
商品销售管理系统
学生姓名
王玮鸿
学号
2010630144
课程名称
C语言程序设计课程设计
专业班级
电自专2010级
地点
计算机自主学习中心
起止时间
2011年12月12日~12月23日
设计内容及要求
在计算机中建立相应的结构体数组,利用程序实现商品销售信息的导入、查询、增、删、改、统计、浏览、保存等操作。
理解和运用结构化程序设计的思想和方法,提高利用C语言进行程序设计的能力,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的基本方法;学会利用流程图表示算法。
根据题目要求,运用所学知识,完成课程设计所要求的任务。
程序书写风格:
锯齿型(缩进式)书写格式,各功能模块、函数、主要语句块,以及变量等必须有文字注释说明,并按照科技论文的书写规范,撰写课程设计报告。
设计参数
该程序主要分为以下8个模块组成:
(1).数据导入…………导入已存在的文本文件中记录数据;
(2).数据输入…………新建文件和追加记录
(3).浏览………………能按分类中的数据进行多种条件的浏览
(4).汇总………………按多种指定的条件汇总
(5).修改………………一个或多个字段
(6).删除………………一条或全部记录
(7).保存………………保存和另存为
(8).退出………………退出通讯录管理系统
商品销售信息包括:
商品编号、商品类别、商品名称、商品型号、生产厂商、商品单价、销售数量、总金额、销售部门、销售日期。
注:
总金额=单价×数量;
汇总模块要求能够分别按商品名称、生产厂商、销售部门、销售日期等字段对销售数量、总金额进行汇总。
进度
要求
第16周周一
布置任务,学生分组,领会设计内容
第16周周二
查阅相关资料,实现总体设计
第16周周三
详细设计,编写程序代码
第16周周四
程序调试
第16周周五
程序调试
第17周周一
程序调试
第17周周二
程序调试
第17周周三
程序调试
第17周周四
撰写课程设计报告
第17周周五
系统验收,学生答辩,收取报告
参考资料
[1]谭浩强.《C程序设计》(第三版).清华大学出版社.2010.5
[2]何钦铭颜晖.《C语言程序设计》.高等教育出版社.2008年
[3]崔武子.《C程序设计教程》.清华大学出版社,2009.8
其它
成绩评定:
平时表现成绩20%、程序质量40%、答辩20%、课程设计报告20%。
其中平时考勤缺勤次数达到1/4者,或者抄袭别人成果者直接判定为不及格。
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:
指导教师:
周力王成敏
摘要
本程序设计是针对商品销售管理系统,主要包括了九个模块,有载入记录、新建记录、浏览记录、排序记录、添加记录、修改记录、查询记录、删除记录、保存和退出。
主要运用了结构体和一维数组来实现。
每种商品的信息包括商品编号、商品类别、商品名称、商品型号、生产厂商、商品单价、销售数量、销售部门、销售日期、销售总金额。
通过本次课程设计,综合运用所学过的C语言基础知识,掌握结构化程序设计的基本思路、方法和技能,提高自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题的能力,加深对所学知识的理解与掌握。
基本设计步骤包括:
1、根据课题题目描述,设计数据结构类型和存储方式;
2、分析系统功能,划分功能模块,确定各模块函数名称;
3、主程序算法设计和各模块算法设计,绘制程序流程图;
4、编程实现;
5、调试和测试;
6、完成课程设计报告。
关键字:
结构体、数组、商品销售管理系统
目录
第1章软件需求分析5
第2章系统分析与设计6
2.1软件界面设计6
2.2软件的数据结构设计7
2.2.1结构体7
2.2.2一维数组8
2.3软件的算法设计8
2.3.1主函数:
main()8
2.3.2数据导入:
Load()8
2.3.3新建记录9
2.3.4浏览记录11
2.3.5排序记录12
2.3.6添加记录13
2.3.7查询记录15
2.3.8删除记录17
2.3.9修改记录17
2.3.10保存记录19
第3章软件测试21
3.1初始界面测试21
3.2载入功能测试21
3.3新建功能测试22
3.4浏览功能测试22
3.5排序功能测试23
3.6添加功能测试24
3.7删除功能测试25
3.8修改功能测试26
3.9查询功能测试26
3.10保存功能测试27
致谢28
第1章软件需求分析
本商品销售管理系统主要实现九个功能,分别为载入记录、新建记录、浏览记录、排序记录、添加记录、修改记录、查询记录、删除记录、保存和退出。
每种商品的基本信息包括商品编号、商品类别、商品名称、商品型号、生产厂商、商品单价、销售数量、销售部门、销售日期、销售总金额。
导入的数据必须运用文本形式先列下来并保存,数据使用结构体数据处理、利用数据文件保存数据。
同时可以对其进行新建、浏览、排序、添加、修改、查询、删除、保存等基本操作。
新建信息时按商品编号、商品类别、商品名称、商品型号、生产厂商、商品单价、销售数量、销售部门、销售日期等顺序新建。
浏览数据时,数据中应包含每种商品的基本信息。
排序信息时可以按照商品单价、销售数量和销售总金额等三种方法。
添加新信息时按商品编号、商品类别、商品名称、商品型号、生产厂商、商品单价、销售数量、销售部门、销售日期等顺序进行添加。
在修改模块中,数据应该逐个修改并且数据间互不影响。
查询信息时可以按照商品编号、商品类别、商品名称和生产厂商等四种方法进行。
在删除模块中,数据可以进行两种删除,即可以逐个删除又可以全部删除,且互不影响。
保存时应注明保存路径。
第2章系统分析与设计
2.1软件界面设计
商品销售管理系统的总体流程图如图2.1所示。
图2.1总体流程图
2.2软件的数据结构设计
2.2.1结构体
定义一个商品信息的结构体structgoods
structgoods
{
charno[10];//商品编号
intmodel;//商品型号
intamount;//销售数量
charsort[10];//商品类别
charname[10];//商品名称
charaddress[10];//生产厂商
chardepartment[10];//销售部门
doubleprice;//商品单价
doublesum;//总金额
structdateD;//销售日期
};
定义了一个日期的结构体structdate
structdate
{
intyear;
intmonth;
intday;
};
其次,在主函数中应用switch语句实现多分枝选择机构,在后面的程序中,运用了多个循环语句。
2.2.2一维数组
要定义数组时必须在程序中先定义数组,即由哪些数据组成数组,数组中有多少元素,属于哪个数据类型。
一般形式为:
类型符数组名【常量表达式】
2.3软件的算法设计
2.3.1主函数:
main()
显示系统工作菜单,罗列该系统所有功能。
先声明所有将会调用到的函数名。
再运用选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。
2.3.2数据导入:
Load()
首先判断fopen"只读"打开“wor.txt”是否成功,若其返回值不为零,继续下面操作。
用for循环通过fscanf语句将文件中的商品信息取出放到结构数组里面,最后关闭文件。
可以用伪代码来实现。
voidLoad()//读入文件中的数据
{
FILE*fp;
inti;
charfilepath[20];
printf("输入要读入的文件路径:
");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!
\n",filepath);
system("pause");
exit(0);
}
now_no=0;
for(i=0;ifeof(fp);i++)
{
fscanf(fp,"\t%s\t%s\t%s\t%d\t%s\t%lf\t%d\t%s\t%d,%d,%d\t\t\n"
&god[i].no,&god[i].sort,&god[i].name,&god[i].model,&god[i].address
&god[i].price,&god[i].amount,&god[i].department,&god[i].D.year,&god[i].D.month,&god[i].D.day);
god[i].sum=god[i].price*god[i].amount;
now_no++;
}
fclose(fp);
printf("保存的在文件%s中的所有信息已经读入!
\n",filepath);
system("pause");
system("cls");
return;
}
2.3.3新建记录
输入一些数据,其中包括了每种商品的各项基本信息。
此部分可用伪代码来实现。
voidInput()//原始数据录入模块
{
inti=0;
charch;
do
{
printf("\t\t\t\t1.录入商品信息\n输入第%d个商品的信息\n",i+1);
printf("\n输入商品编号:
");
fflush(stdin);
gets(god[i].no);
printf("\n输入商品类别:
");
fflush(stdin);
gets(god[i].sort);
printf("\n输入商品名称:
");
fflush(stdin);
gets(god[i].name);
printf("\n输入商品型号:
");
fflush(stdin);
scanf("%d",&god[i].model);
printf("\n输入生产厂商:
");
fflush(stdin);
gets(god[i].address);
printf("\n输入商品单价:
");
fflush(stdin);
scanf("%lf",&god[i].price);
printf("\n输入销售数量:
");
fflush(stdin);
scanf("%d",&god[i].amount);
printf("\n输入销售部门:
");
fflush(stdin);
gets(god[i].department);
printf("\n输入销售日期:
");
fflush(stdin);
scanf("%d,%d,%d",&god[i].D.year,&god[i].D.month,&god[i].D.day);
printf("\n\n");
i++;
now_no=i;
while
(1)
{
printf("是否继续输入记录?
(Y/N)");
fflush(stdin);
ch=toupper(getchar());
if(ch=='N'||ch=='Y')
break;
}
system("cls");
}while(ch!
='n'&&ch!
='N');
system("cls");
return;
}
2.3.4浏览记录
不管是导入的数据或者是原始的输入数据,我们都要通过浏览来检验程序是否正确。
通过调用load函数后,用for循环输出每个职工的各种信息。
这一部分用伪代码实现。
voidBrowse()//显示数据模块
{
inti;
charas;
Sumrage();
do
{
printf("\t\t\t商品销售信息列表\t\t\t\n");
printf("\t编号\t类别\t名称\t型号\t厂商\t单价\t销量\t销部\t日期\t\t总金额\n");
for(i=0;iprintf("\t%s\t%s\t%s\t%d\t%s\t%.2f\t%d\t%s\t%d,%d,%d\t%.2f\n",god[i].no,god[i].sort,god[i].name,god[i].model,god[i].address,god[i].price,god[i].amount,god[i].department,god[i].D.year,god[i].D.month,god[i].D.day,god[i].sum);
printf("\n\t按任意键返回主菜单.");
fflush(stdin);
as=getch();
}while(!
as);
system("cls");
return;
}
2.3.5排序记录
对导入的商品信息和输入的商品信息进行排序时,就要用到排序这一模块,在此用流程图来表示,如图
图2.3.5排序流程图
2.3.6添加记录
在已有商品的基础上进行添加,这一部分用伪代码实现。
voidAdd()//添加数据模块
{
charch;
do
{
printf("\n\t\t当前已有%d个商品的信息\n",now_no);
printf("\n\t\t请输入新商品的信息\n");
printf("\n输入商品编号:
");
fflush(stdin);
gets(god[now_no].no);
printf("\n输入商品类别:
");
fflush(stdin);
gets(god[now_no].sort);
printf("\n输入商品名称:
");
fflush(stdin);
gets(god[now_no].name);
printf("\n输入商品型号:
");
fflush(stdin);
scanf("%d",&god[now_no].model);
printf("\n输入生产厂商:
");
fflush(stdin);
gets(god[now_no].address);
printf("\n输入商品单价:
");
fflush(stdin);
scanf("%lf",&god[now_no].price);
printf("\n输入销售数量:
");
fflush(stdin);
scanf("%d",&god[now_no].amount);
printf("\n输入销售部门:
");
fflush(stdin);
gets(god[now_no].department);
printf("\n输入销售日期:
");
fflush(stdin);
scanf("%d,%d,%d",&god[now_no].D.year,&god[now_no].D.month,&god[now_no].D.day);
printf("\n\n");
now_no=now_no+1;
Sort();
while
(1)
{
printf("是否继续添加记录?
(Y/N)");
fflush(stdin);
ch=toupper(getchar());
if(ch=='N'||ch=='Y')
break;
}
system("cls");
}while(ch!
='n'&&ch!
='N');
return;
}
2.3.7查询记录
图2.3.7查询记录
2.3.8删除记录
对商品的信息进行删除,此处用流程图表示。
如图
图2.3.8删除记录
2.3.9修改记录
在这一板块中主要实现的是商品基本信息的修改,用伪代码实现。
voidModify()//修改数据模块
{
inti;
charstr[20];
printf("输入要修改的商品名称:
");
fflush(stdin);
gets(str);
for(i=0;iif(!
strcmp(god[i].name,str))
{
system("cls");
printf("\n\t\t输入新插入商品的信息\n");
printf("\n输入商品编号:
");
fflush(stdin);
gets(god[i].no);
printf("\n输入商品类别:
");
fflush(stdin);
gets(god[i].sort);
printf("\n输入商品名称:
");
fflush(stdin);
gets(god[i].name);
printf("\n输入商品型号:
");
fflush(stdin);
scanf("%d",&god[i].model);
printf("\n输入生产厂商:
");
fflush(stdin);
gets(god[i].address);
printf("\n输入商品单价:
");
fflush(stdin);
scanf("%lf",&god[i].price);
printf("\n输入商品销售数量:
");
fflush(stdin);
scanf("%d",&god[i].amount);
printf("\n输入商品销售部门:
");
fflush(stdin);
gets(god[i].department);
printf("\n输入商品销售日期:
");
fflush(stdin);
scanf("%d,%d,%d",&god[i].D.year,&god[i].D.month,&god[i].D.day);
printf("\n\n");
break;
}
system("cls");
return;
}
2.3.10保存记录
voidSave()//保存数据模块
{
FILE*fp;
inti;
charfilepath[20];
printf("输入要保存的文件路径:
");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!
");
exit(0);
}
for(i=0;i{
fprintf(fp,"\t%s\t%s\t%s\t%d\t%s\t%.2f\t%d\t%s\t%d,%d,%d\n"
god[i].no,god[i].sort,god[i].name,god[i].model,god[i].address
god[i].price,god[i].amount,god[i].department,god[i].D.year,god[i].D.month,god[i].D.day);
}
fclose(fp);
printf("商品信息已保存在%s中!
\n",filepath);
system("pause");
system("cls");
return;
}
第3章软件测试
3.1初始界面测试
1.运行程序,显示商品信息管理系统主菜单
在这一部分遇到的问题是,当定义主函数里数据为整型时,选择功能时,选择1-9进入各个模块,但是选择字符时也可进入。
修正方法是把整型改为字符型,如图3.1所示。
图3.1主菜单
2.用fscanf语句时,漏写地址符。
调试和链接都没问题,但点击运行后,总出现一个提示出错的蓝色小窗口。
经老师提时候发现了错误所在。
解决:
在wor[i].name等之前加上地址符。
3.浏览函数display()遇到的问题虽然不大,但解决起来很麻烦。
理想的运行结果是美观整齐。
即下面的职工信息分别与第一个printf输出的中文项目提示对齐。
解决方法:
不断修改空格个数,不断运行察看效果。
3.2载入功能测试
载入新数据时,输入保存在文件中的路径,如图3.2所示
图3.1载入模块
3.3新建功能测试
新建时输入商品的基本信息如图3.3所示
如图3.3新建模块
3.4浏览功能测试
商品信息录入后如图3.4所示
图3.4浏览模块
3.5排序功能测试
商品信息录入后,可按如下功能排序,如图3.5所示
图3.5排序模块
3.6添加功能测试
在原有商品的基础上,可以继续添加商品信息,如图3.6所示
图3.6添加模块
3.7删除功能测试
删除时可按逐条删除和全部删除两种方法,如图3.7.1所示
图3.7.1删除模块
商品信息删除后可按3种功能进行排序,如图3.7.2所示
图3.7.2删除模块
3.8修改功能测试
在已录入的商品信息的的基础上,可对其进行修改,如图3.8所示
图3.8修改模块
3.9