99网
您的当前位置:首页商店商品管理信息系统

商店商品管理信息系统

来源:99网
C语言程序设计实训

北京联合大学

课 程 设 计 报 告

课程名称: C语言程序设计实训 项目名称: 商店商品管理信息 学 院: 管理学院 专 业:信息管理与信息系统 姓 名: 学 号:

指导教师: 成 绩:

2009年7月 7 日

- 1 -

C语言程序设计实训

目 录

第一部分 课程设计题目与要求„„„„„„„„„„„„„„„„„ 1. 问题提出„„„„„„„„„„„„„„„„„„„„„„„„„ 2.功能要求„„„„„„„„„„„„„„„„„„„„„„„„„„ 3任务分工„„„„„„„„„„„„„„„„„„„„„„„„„„

第二部分 设计实训题目功能„„„„„„„„„„„„„„„„„„ 1. 总体设计„„„„„„„„„„„„„„„„„„„„„„„„„„ 2. 算法设计„„„„„„„„„„„„„„„„„„„„„„„„„„ 3. 数据结构„„„„„„„„„„„„„„„„„„„„„„„„„„ 4. 程序代码设计„„„„„„„„„„„„„„„„„„„„„„„„ 5. 测试与调试„„„„„„„„„„„„„„„„„„„„„„„„„

第三部分 课程设计总结„„„„„„„„„„„„„„„„„„„„ 1. 个人总结„„„„„„„„„„„„„„„„„„„„„„„„„„ 2. 结束语„„„„„„„„„„„„„„„„„„„„„„„„„„

附录A 程序清单„„„„„„„„„„„„„„„„„„„„„„„„ 附录B 用户使用说明书„„„„„„„„„„„„„„„„„„„„„ 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„

- 2 -

C语言程序设计实训

第1部分 实训题目与要求

1. 问题提出:

某商店每天有进货、售货、统计销售额、计算毛利率、查看商品剩余量等

业务,所以人工管理是一件非常繁琐的事情,为了快速有效的管理,该商店提出要编制一个计算机管理软件。

2. 功能要求:

在主菜单中选择:

1. 创建商品档案。每一个商品的信息包括编号、品名、进价、售价、进货

量、销售量、销售额、剩余数、毛利。

2. 进入子菜单,并编辑商品信息。例如,向商品档案添加新商品,删除原

有商品,处理员有商品的新进货量、新销售量、报废量。在子菜单中选择4,返回主菜单;选择0,退出整个系统。

3. 统计销售额情况。在此项中统计每种商品的销售额、剩余数、毛利(毛

利=销售额-进价×销售量)。

4. 进入子菜单,并查询商品信息。如根据品名、剩余数(小于5大于20)

进行查询。在子菜单中选择3,返回主菜单;选择0,退出整个系统。 5. 进入子菜单,并显示商品信息。显示方式有3 种,即按原来商品顺序

显示、按销售额从高到低的顺序显示、按毛利从高到低的顺序显示,由于商品较多,所以要求分屏显示。在子菜单选择4,返回主菜单;选择0,退出整个系统。

6. 创新功能——给商品分类。

7. 主菜单中选择0:显示结束信息(如“感谢使用本软件!已正常退出,

按任意键结束。”),按任意键后,退出本系统。

3. 任务分工:

(1)田莉: 编辑商品信息;

创新功能:给商品分类的主函数、给商品分类中的按生活用品分。 (2)郭欣桐:创建商品档案、查询商品信息;

创新功能:给商品分类中的按食品分。 (3)胡岩松:统计销售情况、显示商品信息;

创新功能:给商品分类中的按学习用品分。 注:流程图与实训报告由三个人共同分担完成。

- 3 -

C语言程序设计实训

第2部分 设计实训题目功能

1.总体设计:

(1)模块设计:

如下图菜单:

------------------------------- | 请输入选项编号(0-6) | ------------------------------- | 1——创建商品档案 | | 2——编辑商品信息 | | 3——统计销售情况 | | 4——查询商品信息 | | 5——显示商品信息 | | 6——创新功能 | | 0——退出系统 | -------------------------------- **************************************** | 请输入选项编号(0-4) | **************************************** | 1——添加新商品 | | 2——删除原有商品 | | 3——修改原有商品信息 | | 4——返回 | | 0——退出系统 | **************************************** ***************************************** | 请输入选项编号(0-3) | ***************************************** | 1——按品名查询 | | 2——按剩余数查询 | | 3——返回 | | 0——退出系统 | ***************************************** ***************************************** | 请输入选项编号(0-4) | ***************************************** | 1——按原来顺序显示 | | 2——按销售额高低显示 | | 3——按毛利高低显示 | | 4——返回 | | 0——退出系统 | *****************************************

- 4 -

C语言程序设计实训

(2)定义各函数的主要功能: ①主函数:将需要的函数都放在主函数中,当需要不同的函数的时候便可用主函数调用不同的函数,运用主函数可以方便调用其它函数。

②创建商品档案函数:向原有商品档案中添加新的商品以及有关信息。

③编辑商品信息函数:可以添加新商品、删除原有商品、修改原有商品信息。 ④统计销售情况函数:可以统计每种商品的销售额、剩余数、毛利。

⑤查询商品信息函数:可以查询商品信息,分为按品名查询、按剩余数查询。 ⑥显示商品信息函数:可以显示出商品信息,按原来顺序显示、按销售额高低显示、按毛利高低显示。

⑦创新功能函数:给商品分类——可以将商品分为3类,按生活用品分类、按食品分类、按学习用品分类。

(3)程序模块图:

主模块 创建商品档案 编辑商品信息 统计销售情况 查询商品信息显示商品信息给商品分类添加新商品删除原有商品修改原有商品信息按品名查询按剩余数查询按原来顺序显示按销售额高低显示按毛利显示食高低显品示显示日常生活用品2.算法设计:

(1)显示子菜单。用printf函数将菜单项一项项地打印到屏幕上,界面中的边框可以通过多个printf语句输出的“|”和“-”拼接起来。

(2)菜单项的选择。菜单应根据用户的选择做出不同的反应,因此需要使用分支结构实现选择选项的功能。鉴于目前仅仅是做主菜单,还不能实现各菜单项的具体功能,因此该程序中暂时根据用户的选择,输出对应菜单的编号。根据题意,主菜单含有7个菜单项,属于多分支条件判断,使用带break的switch语句最为合适。需要注意的是,还要处理当用户输入错误时的情况。

(3)重复显示主菜单。因为本实例具有重复选择主菜单的功能,因此需要使用循环结构。在本实例中主菜单至少显示一次,然后才判断是否继续选择主菜单,所以使用do-while循环比较好,因为do-while循环是先执行循环体,然后在判断表达式。

- 5 -

C语言程序设计实训

作为菜单,应该给用户一个正常的出口,即满足一定条件时退出程序。为了给用户提供方便,我们采用人机对话形式,当用户选择某一菜单项后,系统立即完成相应的功能,然后询问用户是否需要继续选择,只要用户选择继续(输入y或Y),主菜单就在屏幕上反复出现,只有单用户选择不再继续(输入n或N)时,才可以退出主菜单。除此之外,为了使用方便,在主菜单中还特设0选项,选择它也能正常退出程序。

为了实现上述功能,有关语句都应放在do-while循环体中。 设计算法时应考虑如何时程序具有容错能力。例如,当用户在应答是否继续时,如果输入的是合法数据(即y、Y、n或N),则程序继续下一步操作;如果输入的是非法数据(即y、Y、n或N以外的字符),则应让用户重新输入,这时需要在是否继续的问题上加一个循环判断,这种功能常用do-while实现。 (4)流程图(如下图所示):

开始调用myprint函数输入choose的值choose=?调用mycreate函数调用myedit函数调用mycountt函数调用mysearch函数调用mydisplay函数调用mysort函数调用mysort函数输入yes_no假yes_no=n或N或y或Y 真真yes_no=y或Y假结束

主模块流程图

- 6 -

C语言程序设计实训

入口打开文件假 打开成功?结束输入商品信息假 合法记录?真 将记录写入文件记录数n增1输入商品信息关闭文件出口

创建商品档案模块的流程图

- 7 -

C语言程序设计实训

入口输入按哪种方式编辑真 假 添加新商品真调用添加新商品函数调用删除原有商品函数假删除原有商品真修改原有商品信息假调用修改原有商品信息函数输出非法字符出口

编辑商品信息模块的流程图

- 8 -

C语言程序设计实训

入口打开文件假打开成功结束真P指向结构体数组record真文件结束假从文件中读出一条记录指针向下移动记录数增1关闭文件输入新商品品名、数量假P添加新商品模块的流程图

- 9 -

C语言程序设计实训

入口打开文件假打开成功?结束真P指针结构体数组record真文件结束?假 从文件读出一条记录指针向下移动记录数增1关闭文件输入要删除商品假K- 10 -

C语言程序设计实训

入口打开文件假打开成功?真结束P指向结构体数组record真文件结束?假从文件读出一条记录指针向下移动记录数n增1关闭文件真n==0?假输入要修改的编号文件中无记录假p- 11 -

C语言程序设计实训

入口打开文件假 打开成功?结束真文件结束?假从文件读商品信息计算毛利输出销售额、剩余数、毛利记录数n增1n==0?文件中无记录文件中有n个记录关闭文件出口 统计销售情况的流程图

- 12 -

C语言程序设计实训

入口输入按哪种方式查询真按品名?真假假按剩余数?调用按品名查询函数调用按剩余数查询函数输出非法字符出口

查询商品信息的流程图

- 13 -

C语言程序设计实训

入口打开文件打开成功?真输入待查询商品真文件结束?假从文件中读出一条记录假假品名相等?真Flag=0?真输出编号、品名、进价、售价、进货量、销售量、毛利Flag=1输出该条记录记录数n增1真n==0?假假flag==0真文件中无记录无此商品文件关闭

按品名查询流程图

- 14 -

C语言程序设计实训

入口打开文件打开成功?真输入待查询剩余数 真文件结束?假从文件中读出一条记录假假剩余数相等?真Flag==0?真输出编号、品名、进价、售价、进货量、销售量、毛利Flag=1输出该条记录记录数n增1真n==0?假假flag==0?真文件中无记录文件中无此商品文件关闭出口 按剩余数查询流程图

- 15 -

C语言程序设计实训

入口输入按哪种方式显示真按原来顺序显示?假调用原来顺序显示函数真按销售额高低显示?调用按销售额高低显示函数真假按毛利高低显示?假调用按毛利高低显示函数输出非法字符出口

显示商品信息流程图

- 16 -

C语言程序设计实训

入口

打开文件假打开成功真结束真文件结束假从文件中读商品信息输出商品信息记录数n增1真n==0假文件中无记录文件中有n个记录关闭文件出口

按原来顺序显示模块的流程图

- 17 -

C语言程序设计实训

入口打开文件假打开成功?真 p指向结构体record结束真文件结束?假从文件中读出一条记录指针向下移动记录数n增1关闭文件输入升序还是降序升序真 假调用按升序显示降序商品信息函数调用按降序显示商品信息函数打开文件?打开成功?假结束真全部记录写入文件关闭文件出口

升序?真i=0ixse>(p+j)->xse真k=j*(p+k)与*(p+i)交换

- 18 -

C语言程序设计实训

按销售额高低显示的流程图

入口打开文件假打开成功?真 p指向结构体record结束真文件结束?假从文件中读出一条记录指针向下移动记录数n增1关闭文件输入升序还是降序升序真 假调用按升序显示商品信息函数降序调用按降序显示商品信息函数打开文件?打开成功?假结束真全部记录写入文件关闭文件出口

- 19 -

C语言程序设计实训

按毛利高低显示的模块

入口调用给商品分类函数真显示生活用品真假假调用显示生活用品函数显示食品真调用显示食品函数显示学习用品假调用显示学习用品函数输出非法字符出口 创新功能流程图

- 20 -

C语言程序设计实训

入口

真打开文件打开成功?

真文件结束?假从文件读出一条记录

编号第2位为1?真输出生活用品信息输出该条记录

记录数n增1真n==0?假

flag==0?真文件中无此商品文件中无记录假

关闭文件

出口

按生活用品分类流程图

- 21 -

C语言程序设计实训

注:按食品和学习用品分类似

3.数据结构:

struct goods { char bh[10]; char pm[30]; float jj; float sj; int jhl; int xsl; float xse; int sys; float ml; };

此结构体为存放商品信息,编号bh[10],商品名pm[30],进价jj,售价sj,进货量jhl,销售量xsl,销售额xse,剩余数sys,毛利ml.

4.程序代码设计:

void mycreate() { int i=1;

float x,y,z,t;

struct goods temp={0}; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件夹失败!\\n\");return;} system(\"cls\");

printf(\"\\n 请输入第1个记录:\\n\"); printf(\" 编号(用#结束输入):\"); do

{ gets(temp.bh);

} while(strcmp(temp.bh,\"\")==0); printf(\" 品名(用#结束输入):\"); gets(temp.pm);

printf(\" 进价(用#结束输入):\"); scanf(\"%femp.jj=x;

printf(\" 售价(用#结束输入):\"); scanf(\"%f\

- 22 -

C语言程序设计实训

temp.sj=y;

printf(\" 进货量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售额(用#结束输入):\"); scanf(\"%femp.xse=z;

printf(\" 剩余数(用#结束输入):\"); scanf(\"%d\

printf(\" 毛利(用#结束输入):\"); scanf(\"%f\ temp.ml=t;

while(temp.bh[0]!='#'&&temp.pm[0]!='#')

{ fprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\h,temp.pm,

temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml); i++;

printf(\"\\n 请输入第%d个记录:\\n\ printf(\" 编号(用#结束输入):\"); do

{ gets(temp.bh);

}while(strcmp(temp.bh,\"\")==0); printf(\" 品名(用#结束输入):\"); gets(temp.pm);

printf(\" 进价(用#结束输入):\"); scanf(\"%f\ temp.jj=x;

printf(\" 售价(用#结束输入):\"); scanf(\"%f\ temp.sj=y;

printf(\" 进货量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售额(用#结束输入):\"); scanf(\"%f\ temp.xse=z;

printf(\" 剩余数(用#结束输入):\"); scanf(\"%d\

printf(\" 毛利(用#结束输入):\");

- 23 -

C语言程序设计实训

scanf(\"%f\ temp.ml=t; }

fclose(fp); }

void myedit()

{ char choose='\\0',yes_no='\\0'; do {

myprint1();

choose=getch();

switch(choose)

{ case '1': myadd(); break; case '2': mydelete(); break; case '3': mymodify(); break; case '4': return; case '0': exit(0); default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\"); do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' yes_no!='n');

} while(yes_no=='Y' || yes_no=='y'); }

void myadd() {

char c='\\0'; int n=0;

float x,y,z,t;

struct goods temp={0},record[N]={0},*p=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

- 24 -

&& C语言程序设计实训

{ printf(\"\\n 打开文件失败!\\n\");return;} p=record;

printf(\"原有商品信息为:\\n\"); while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\y,p->jhl,p->xsl,z,p->sys,t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++;

getchar(); }

fclose(fp);

do

{

printf(\"\\n 请输入新记录的编号:\"); do

{ gets(temp.bh);

}while(strcmp(temp.bh ,\"\")==0); printf(\" 请输入新记录的品名:\"); gets(temp.pm );

printf(\" 请输入新记录的进价:\"); scanf(\"%f\

printf(\" 请输入新记录的售价:\"); scanf(\"%f\

printf(\" 请输入新记录的进货量:\"); scanf(\"%d\

printf(\" 请输入新记录的销售量:\"); scanf(\"%d\

printf(\" 请输入新记录的销售额:\"); scanf(\"%f\

printf(\" 请输入新记录的剩余数:\"); scanf(\"%d\

printf(\" 请输入新记录的毛利:\"); scanf(\"%f\

for(p=record;pbh )==0)

{ printf(\" 编号重复,要重新输入吗(Y/N)?\"); do

- 25 -

C语言程序设计实训

{ c=getche();

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('/n'); break; }

if(p==record+n) {*p=temp;break;} }while(c=='y'||c=='Y');

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\"); return;} for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); }

void mydelete() {

char c='\\0';

printf(\"\\n 按商品编号删除(b),还是按品名删除(p)?\"); c=getche();

if(c=='b'||c=='B') del_bh(); else if(c=='p'||c=='P') del_pm();

else printf(\"\\n 非法字符!\\n\"); }

void del_bh() {

char tempbh[10]=\"\"; int n=0;

float x,y,z,t;

struct goods record[N]={0},*p=NULL,*k=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;} p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

- 26 -

C语言程序设计实训

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\ x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; }

fclose(fp);

printf(\"\\n 请输入要删除的商品编号:\"); gets(tempbh);

for(k=record;kif(strcmp(tempbh,k->bh)==0) break; if(k{ for(p=k;pfp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp);} else

{ printf(\"\\n 无此商品!\\n\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp); } }

- 27 -

C语言程序设计实训

void del_pm() {

char temppm[10]=\"\"; int n=0;

float x,y,z,t;

struct goods record[N]={0},*p=NULL,*k=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL) ,

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\\n\ x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; }

fclose(fp);

printf(\"\\n 请输入要删除的商品名:\"); gets(temppm);

for(k=record;kpm)==0) break; if(k{ for(p=k;pfp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

- 28 -

C语言程序设计实训

fclose(fp);} else

{ printf(\"\\n 无此商品!\\n\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\"); return; }

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); } }

void mymodify() {

char c='\\0'; int n=0;

float x,y,z,t;

struct goods record[N]={0},temp={0},*p=NULL,*find=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL) ,

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\\n\ x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++;

- 29 -

C语言程序设计实训

}

fclose(fp); if(fp==0)

{ printf(\"\\n 文件中无记录!\\n\"); return; }

printf(\"\\n 请输入需要修改的商品编号:\"); gets(temp.bh);

for(p=record;pbh)==0) {find=p; break;} if(p==record+n)

{printf(\"\\n 无此物!\\n\");return;} do {

printf(\" 请输入正确的商品编号:\"); do

{gets(temp.bh);

}while(strcmp(temp.bh,\"\")==0); printf(\" 请输入正确的品名:\"); gets(temp.pm);

printf(\" 请输入正确的进价:\"); scanf(\"%f\

printf(\" 请输入正确的售价:\"); scanf(\"%f\

printf(\" 请输入正确的进货量:\"); scanf(\"%d\

printf(\" 请输入正确的销售量:\"); scanf(\"%d\

printf(\" 请输入正确的销售额:\"); scanf(\"%f\

printf(\" 请输入正确的剩余数:\"); scanf(\"%d\

printf(\" 请输入正确的毛利:\"); scanf(\"%f\

for(p=record;pif((strcmp(temp.bh,p->bh)==0)&&(p!=find))

{ printf(\"\\n 商品编号重复,要重新输入吗(Y/N)?\"); do

{ c=getche();

- 30 -

C语言程序设计实训

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('\\n'); break; }

if(p==record+n) { *find=temp; break; }

}while(c=='y'||c=='Y');

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); }

完整程序请参见附录A

5.测试与调试:

一个程序虽然经过多次的检查修改,编译连接甚至可以运行,但这时还不能断定该程序就是正确的,因为程序中可能存在逻辑错误,而这些错误往往很难用眼睛检查出来,因此需要进行测试与调试。

测试与调试的首要工作是,用适合的测试数据检查程序的正确性和完整性。按照题目的具体情况,在需要输入数据的地方,选定两大类的测试数据,一类为合法数据,用来测试程序的正确性和完整性;另一类为非法数据,用来测试程序的容错能力和健壮性。

测试与调试的下一个工作是,对找到的错误查出原因,并排除错误。由于这项工作一般很难,所以需要调试程序的技巧。 (1) 选定合适的调试用例; (2) 发现错误;

(3) 查出错误原因,并排除错误。

当调试比较长的程序时,经常将设置断点的方法将程序分为若干个部分,再逐步减少错误出现的程序范围,最后需要仔细检查的部分用单步执行的方法调试。

调试程序可用的方法:临时加打印语句,将所要观察的数据显示在屏幕上;用F8或F7键单步执行程序;用Ctrl+F8键设置断点;综合使用以上方法。

- 31 -

C语言程序设计实训

第3部分 实训总结

1. 个人总结: (1)

通过这次实训,我收获了很多,不仅巩固了这一学期所学到的内容,而且还学到了许多新的知识。如浮点型变量不能直接读取,需要一个中间变量才可以。 这次实训我们做的是商店商品管理系统,第一次做系统遇到了很多问题,在克服困难过程中,不仅增长了我的见识,关键煅炼了我的能力,自己分析问题和事件的能力;开发了我们活跃的思维,在老师的指导下,取得进步,使我在诸多方面得到了提升。通过我们的小组合作,在辛苦的付出后,我们也收获了丰硕的果实。

在实训的开始,我们盲目编程序,结果运行以后连续出错,后来我们又重新对照课本和实训书,并在老师和同学的帮助下才一一解决。其实我们犯错的地方经常把浮点型变量写成%d之类的错误,但是随着错误的解决,我们在不断进步,心中欣喜之余,也对C语言有了更加系统的了解。在画流程图的过程中,第一次接触,开始还十分新奇,之后才一点一点明白了其实并没有那么简单,一个很短的线条有时也需要画很多次,但我们并没有放弃,尽管有时会有些不耐烦,但我们还是坚持认真的完成。而且这次实训给了我们亲自动手实践的机会,大大增强了我对知识的应用能力。它使我们平时所学的理论切实应用到了实际。

这次实训还让我明白了一些道理,无论做什么,我们都应该作好充分准备,以端正的态度来对待,耐心的解决其中的难点,自己实在解决不了的地方应该及时虚心的向老师或其他同学请教,然后及时总结经验和教训。同时还让我明白了小组间团结与合作的重要。通过我们的共同努力,我们终于完成了这次实训。不敢说做的好,但我们确实尽力了。

有了这次实训的经验,相信我会在以后的学习中更加努力的。

(2)

通过C语言的实训,让我对C语言程序的用途有了更加广泛的了解。从本次实训中,我得到了很多的收获,浮点类型的变量不可以直接读取,必须要经过一个中间变量;在此之前,我对数组的学习不够深入,通过这一段时间的实训,让我加深了对数组这一部分的学习,使自己更加明白数组该如何更好的运用;以前对函数的运用不太熟练,现在使自己清晰了函数的定义,明白如何调用函数。在编写程序的过程中,我也遇到了很多困难,自己在编写程序的时候难免会因为自

- 32 -

C语言程序设计实训

己的一些知识欠缺,使自己编写的程序出现错误,在这样的时候,我就会自己看看教材,或者问问同学,尽量自己将遇到的困难解决,如若实在不会的,就会请我们组的田莉帮我检查问题的所在,并且将不懂的地方弄懂;也会出现在检测的时候没有错误,但是在运行的时候却无法运行出来,这样也就是说明自己的程序还是存在错误,要自己静下心来,好好的检查,尽量检查出自己的错误,或者请同学帮忙,让自己尽快发现原因的所在,并且及时地解决错误;在编写程序的时候也会由于自己的粗心,而出现一些很小的错误,例如少一个符号、没有在英文状态下输入等的错误,这样就必须在编写程序的时候要自己细心,认真地完成程序的编写。

通过本次的实训,也让自己明白了很多道理,在做事情的时候一定要认真对待,只要自己踏实认真地完成,就一定会有很大的收获,同时本次实训也很好的体现出了团队精神,一个小组的配合与分工是十分重要的,组员之间相互帮助相互协作,这样才可以很好的完成程序。在写实训报告时,相互配合完成实训报告,同时也学会如何用Visio画流程图,提升了自己的能力。

(3)

实训从画流程图开始,到编程,再到最后的汇总,报告的编排,都是以小组的形式进行的,小组即是一个团队,每个组员都是这个团队中不可缺少的一员,都有自己所负责的部分。而C语言程序是系统的严密的完整的,所以每个人在编写自己负责的那部分程序时都要为整体着想,这样才能在最后汇总的时候保证每一部分都衔接紧密,使程序运行流畅,减少错误的出现。

由于我的基本功并不是很扎实,所以在编程时遇到的困难很多,例如函数的调用、指针的使用,这使得我在编程中错误百出,还要请我们组学得好的同学来帮我检查改错。这还算好的时候,有时候甚至某部分根本编写不出来,这时就的边学边做了,这样就浪费了其他组员很多宝贵的时间。每到这时候我就会为自己给我们小组拉了后腿而自责。

题目是对于生活中的实际问题而设计的,在如何将实际问题用程序来表达这方面上,还需要所有组员来出谋划策。尤其是在程序的创新上,这部分是对我们真正实力的考验,创新功能没有例题可以参考,只能自己不断摸索,才能将自己的想法更完善的表现在程序上。

这期间同样少不了老师的指导,有时候出现的错误也许检查不出来,但就是运行不了,每到大家都束手无措的时候,就需要老师来帮忙,当问题解决时,大家才恍然大悟。

只有发现问题,我们才能意识到自己的不足,只有在解决了自己的不足后,我们才会进步,这就是这次实训给我最大的收获。

2. 结束语

在本次实训中,我们小组紧密相连,积极合作,一步步的完成了整个C语言 实训的制作,大家为这个程序都付出了自己的汗水。每天在老师的带领下我们克服了一个个的难题。由于大家的付出和老师的帮助,使这个任务得以。在此谢谢同学们热心的帮助,也感谢老师耐心的解答和教诲。

- 33 -

C语言程序设计实训

附录A 程序清单

#include #include #include #include #define N 100 struct goods

{ char bh[10]; char pm[30]; float jj; float sj; int jhl; int xsl; float xse;

int sys; float ml; };

void myprint(); void myprint1(); void myprint2(); void myprint3(); void myprint4(); void mycreate(); void myedit(); void myadd(); void mydelete(); void del_bh(); void del_pm(); void mymodify(); void mycount(); void mysearch(); void goo_pm(); void goo_sys(); void mydisplay(); void mydisplay_1(); void mydisplay_2(); void mydisplay_3(); void mysort();

- 34 -

C语言程序设计实训

void mysort_1(); void mysort_2(); void mysort_3(); main( )

{ char choose='\\0',yes_no='\\0'; do {

myprint();

choose=getch( );

switch(choose)

{ case '1': mycreate(); break; case '2': myedit(); break; case '3': mycount(); break; case '4': mysearch(); break; case '5': mydisplay(); break; case '6': mysort(); break; case '0': exit(0);

default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\"); do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');

} while(yes_no=='Y' || yes_no=='y'); }

void myprint()

{ system(\"cls\");

printf(\" |----------------------------------|\\n\");

printf(\" | 请输入选项编号(0-6): |\\n\");

printf(\" |----------------------------------|\\n\"); printf(\" | 1--创建商品档案 |\\n\"); printf(\" | 2--编辑商品信息 |\\n\"); printf(\" | 3--统计销售情况 |\\n\"); printf(\" | 4--查询商品信息 |\\n\"); printf(\" | 5--显示商品信息 |\\n\");

- 35 -

C语言程序设计实训

printf(\" | 6--创新功能 |\\n\"); printf(\" | 0--退出系统 |\\n\");

printf(\" |----------------------------------|\\n\"); printf(\" \"); }

void myprint1() {

system(\"cls\");

printf(\" ************************************\\n\");

printf(\" | 请输入选项编号(0-4): |\\n\");

printf(\" ************************************\\n\");

printf(\" | 1--添加新商品 |\\n\"); printf(\" | 2--删除原有商品 |\\n\"); printf(\" | 3--修改原有商品信息 |\\n\"); printf(\" | 4--返回 |\\n\"); printf(\" | 0--退出系统 |\\n\");

printf(\" ************************************\\n\"); printf(\" \"); }

void myprint2() {

system(\"cls\");

printf(\" ************************************\\n\");

printf(\" | 请输入选项编号(0-3): |\\n\");

printf(\" ************************************\\n\");

printf(\" | 1--按品名查询 |\\n\"); printf(\" | 2--按剩余数查询 |\\n\"); printf(\" | 3--返回 |\\n\"); printf(\" | 0--退出系统 |\\n\");

printf(\" ************************************\\n\"); printf(\" \"); }

void myprint3() {

system(\"cls\"); printf(\"

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

printf(\" | 请输入选项编号(0-4): |\\n\");

printf(\" ************************************\\n\"); printf(\" | 1--按原来顺序显示 |\\n\"); printf(\" | 2--按销售额高低显示 |\\n\");

- 36 -

C语言程序设计实训

printf(\" | 3--按毛利高低显示 |\\n\"); printf(\" | 4--返回 |\\n\"); printf(\" | 0--退出系统 |\\n\");

printf(\" ************************************\\n\"); printf(\" \"); }

void myprint4() {

system(\"cls\");

printf(\" ************************************\\n\");

printf(\" | 请输入选项编号(0-4): |\\n\");

printf(\" ************************************\\n\");

printf(\" | 1--调出所有生活用品 |\\n\"); printf(\" | 2--调出所有食品 |\\n\"); printf(\" | 3--调出所有学习用品 |\\n\"); printf(\" | 4--返回 |\\n\"); printf(\" | 0--退出系统 |\\n\");

printf(\" ************************************\\n\"); printf(\" \"); }

void mycreate() { int i=1;

float x,y,z,t;

struct goods temp={0}; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件夹失败!\\n\");return;} system(\"cls\");

printf(\"\\n 请输入第1个记录:\\n\"); printf(\" 编号(用#结束输入):\"); do

{ gets(temp.bh);

} while(strcmp(temp.bh,\"\")==0); printf(\" 品名(用#结束输入):\"); gets(temp.pm);

printf(\" 进价(用#结束输入):\"); scanf(\"%femp.jj=x;

- 37 -

C语言程序设计实训

printf(\" 售价(用#结束输入):\"); scanf(\"%f\ temp.sj=y;

printf(\" 进货量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售额(用#结束输入):\"); scanf(\"%femp.xse=z;

printf(\" 剩余数(用#结束输入):\"); scanf(\"%d\

printf(\" 毛利(用#结束输入):\"); scanf(\"%f\ temp.ml=t;

while(temp.bh[0]!='#'&&temp.pm[0]!='#')

{ fprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\nemp.pm,

temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml); i++;

printf(\"\\n 请输入第%d个记录:\\n\ printf(\" 编号(用#结束输入):\"); do

{ gets(temp.bh);

}while(strcmp(temp.bh,\"\")==0); printf(\" 品名(用#结束输入):\"); gets(temp.pm);

printf(\" 进价(用#结束输入):\"); scanf(\"%f\ temp.jj=x;

printf(\" 售价(用#结束输入):\"); scanf(\"%f\ temp.sj=y;

printf(\" 进货量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售量(用#结束输入):\"); scanf(\"%d\

printf(\" 销售额(用#结束输入):\"); scanf(\"%f\ temp.xse=z;

printf(\" 剩余数(用#结束输入):\");

- 38 -

C语言程序设计实训

scanf(\"%d\

printf(\" 毛利(用#结束输入):\"); scanf(\"%f\ temp.ml=t; }

fclose(fp); }

void myedit()

{ char choose='\\0',yes_no='\\0'; do {

myprint1();

choose=getch();

switch(choose)

{ case '1': myadd(); break; case '2': mydelete(); break; case '3': mymodify(); break; case '4': return; case '0': exit(0); default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\"); do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' yes_no!='n');

} while(yes_no=='Y' || yes_no=='y'); }

void myadd() {

char c='\\0'; int n=0;

float x,y,z,t;

struct goods temp={0},record[N]={0},*p=NULL; FILE *fp=NULL;

- 39 -

&& C语言程序设计实训

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;} p=record;

printf(\"原有商品信息为:\\n\"); while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\y,p->jhl,p->xsl,z,p->sys,t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++;

getchar(); }

fclose(fp);

do

{

printf(\"\\n 请输入新记录的编号:\"); do

{ gets(temp.bh);

}while(strcmp(temp.bh ,\"\")==0); printf(\" 请输入新记录的品名:\"); gets(temp.pm );

printf(\" 请输入新记录的进价:\"); scanf(\"%f\

printf(\" 请输入新记录的售价:\"); scanf(\"%f\

printf(\" 请输入新记录的进货量:\"); scanf(\"%d\

printf(\" 请输入新记录的销售量:\"); scanf(\"%d\

printf(\" 请输入新记录的销售额:\"); scanf(\"%f\

printf(\" 请输入新记录的剩余数:\"); scanf(\"%d\

printf(\" 请输入新记录的毛利:\"); scanf(\"%f\

for(p=record;pbh )==0)

- 40 -

C语言程序设计实训

{ printf(\" 编号重复,要重新输入吗(Y/N)?\"); do

{ c=getche();

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('/n'); break; }

if(p==record+n) {*p=temp;break;} }while(c=='y'||c=='Y');

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\"); return;} for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); }

void mydelete() {

char c='\\0';

printf(\"\\n 按商品编号删除(b),还是按品名删除(p)?\"); c=getche();

if(c=='b'||c=='B') del_bh(); else if(c=='p'||c=='P') del_pm();

else printf(\"\\n 非法字符!\\n\"); }

void del_bh() {

char tempbh[10]=\"\"; int n=0;

float x,y,z,t;

struct goods record[N]={0},*p=NULL,*k=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

- 41 -

C语言程序设计实训

p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\ x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; }

fclose(fp);

printf(\"\\n 请输入要删除的商品编号:\"); gets(tempbh);

for(k=record;kif(strcmp(tempbh,k->bh)==0) break; if(k{ for(p=k;pfp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp);} else

{ printf(\"\\n 无此商品!\\n\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp); }

- 42 -

C语言程序设计实训

}

void del_pm() {

char temppm[10]=\"\"; int n=0;

float x,y,z,t;

struct goods record[N]={0},*p=NULL,*k=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL) ,

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\\n\ x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; }

fclose(fp);

printf(\"\\n 请输入要删除的商品名:\"); gets(temppm);

for(k=record;kpm)==0) break; if(k{ for(p=k;pfp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

- 43 -

C语言程序设计实训

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp);} else

{ printf(\"\\n 无此商品!\\n\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\"); return; }

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); } }

void mymodify() {

char c='\\0'; int n=0;

float x,y,z,t;

struct goods record[N]={0},temp={0},*p=NULL,*find=NULL; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

printf(\"\\n\");

while(feof(fp)==0)

{ fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\\n\

- 44 -

C语言程序设计实训

,

x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; }

fclose(fp); if(fp==0)

{ printf(\"\\n 文件中无记录!\\n\"); return; }

printf(\"\\n 请输入需要修改的商品编号:\"); gets(temp.bh);

for(p=record;pbh)==0) {find=p; break;} if(p==record+n)

{printf(\"\\n 无此物!\\n\");return;} do {

printf(\" 请输入正确的商品编号:\"); do

{gets(temp.bh);

}while(strcmp(temp.bh,\"\")==0); printf(\" 请输入正确的品名:\"); gets(temp.pm);

printf(\" 请输入正确的进价:\"); scanf(\"%f\

printf(\" 请输入正确的售价:\"); scanf(\"%f\

printf(\" 请输入正确的进货量:\"); scanf(\"%d\

printf(\" 请输入正确的销售量:\"); scanf(\"%d\

printf(\" 请输入正确的销售额:\"); scanf(\"%f\

printf(\" 请输入正确的剩余数:\"); scanf(\"%d\

printf(\" 请输入正确的毛利:\"); scanf(\"%f\

for(p=record;p- 45 -

C语言程序设计实训

if((strcmp(temp.bh,p->bh)==0)&&(p!=find))

{ printf(\"\\n 商品编号重复,要重新输入吗(Y/N)?\"); do

{ c=getche();

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('\\n'); break; }

if(p==record+n) { *find=temp; break; }

}while(c=='y'||c=='Y');

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); }

void mycount() {

int i=0,n=0;

float x,y,z,t,a,b;

struct goods temp={0},record[N]={0},*p=NULL; FILE *fp=NULL;

system(\"cls\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

- 46 -

C语言程序设计实训

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++; }

fclose(fp);

for(p=record;psj*p->xsl; p->xse=a;

p->sys=p->jhl-p->xsl; b=a-(p->jj*p->xsl); p->ml=b; }

for(p=record;pprintf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\>jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

for(p=record;pfprintf(fp,\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\m,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml);

fclose(fp); }

void mysearch( )

{ char choose='\\0',yes_no='\\0'; do {

myprint2();

choose=getch( );

switch(choose)

{ case '1': goo_pm(); break; case '2': goo_sys(); break; case '3': return; case '0': exit(0);

- 47 -

C语言程序设计实训

default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\"); do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');

} while(yes_no=='Y' || yes_no=='y'); }

void goo_pm()

{ int flag=0,n=0; float x,y,z,t;

char temppm[30]=\"\"; struct goods temp={0}; FILE *fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\

if (fp==NULL)

{ printf(\"\\n 打开文件失败! \\n\");return;} printf(\"\\n请输入要查询商品记录的品名:\"); gets(temppm);

while (feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\\n\

&x,&y,&temp.jhl,&temp.xsl,&z,&temp.sys,&t); temp.jj=x;temp.sj=y;temp.xse=z;temp.ml=t; if (strcmp(temppm,temp.pm)==0) {

if(flag==0)

printf(\" 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利 \\n\");

printf(\"%4s%12s%8.1f%8.1f%8d%8d%10.1f%8d%8.1f\\n\pm,

temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml);

- 48 -

C语言程序设计实训

flag=1; } n++; }

if (n==0) printf(\"\\n 文件中无记录! \\n\"); else if (flag==0) printf(\"\\n 文件中无此物! \\n\"); fclose(fp); }

void goo_sys()

{ int flag=0,n=0;

float x,y,z,t,p=0,q=0; char tempsys='\\0';

struct goods temp={0}; FILE* fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\

if (fp==NULL)

{ printf(\"\\n 打开文件失败! \\n\");return;}

printf(\"\\n请输入要查询记录的商品剩余数p(小于5)或者是p(大于20):\"); scanf(\"%c\

if(tempsys=='p') while (feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\\n\ &x,&y,&temp.jhl,&temp.xsl,&z,&temp.sys,&t); temp.jj=x;temp.sj=y;temp.xse=z;temp.ml=t; if (temp.sys<5) {

if(flag==0)

printf(\" 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利 \\n\");

printf(\"%4s%12s%8.1f%8.1f%8d%8d%10.1f%8d%8.1f\\n\pm,

temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml); flag=1; } n++; }

- 49 -

C语言程序设计实训

if(tempsys=='q') while (feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\\n\ &x,&y,&temp.jhl,&temp.xsl,&z,&temp.sys,&t); temp.jj=x;temp.sj=y;temp.xse=z;temp.ml=t; if (temp.sys>20) {

if(flag==0)

printf(\" 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利 \\n\");

printf(\"%4s%12s%8.1f%8.1f%8d%8d%10.1f%8d%8.1f\\n\pm,

temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml); flag=1; } n++; }

if (n==0) printf(\"\\n 文件中无记录!\\n\"); else if (flag==0) printf(\"\\n 文件中无此物!\\n\"); fclose(fp); }

void mydisplay()

{ char choose='\\0',yes_no='\\0'; do {

myprint3();

choose=getch();

switch(choose)

{ case '1': mydisplay_1(); break; case '2': mydisplay_2(); break; case '3': mydisplay_3(); break; case '4': return; case '0': exit(0);

default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\");

- 50 -

C语言程序设计实训

do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');

} while(yes_no=='Y' || yes_no=='y'); }

void mydisplay_1() {

int n=0;

float x,y,z,t;

struct goods temp={0}; FILE* fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if (fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;} system(\"cls\");

printf(\" 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利 \\n \"); printf(\"\\n\");

while (feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\

&x,&y,&temp.jhl,&temp.xsl,&z,&temp.sys,&t); temp.jj=x,temp.sj=y,temp.xse=z;temp.ml=t;

printf(\"%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\\n\m,

x,y,temp.jhl,temp.xsl,z,temp.sys,t); n++;

//getchar(); }

if (n==0) printf(\"\\n 文件中无记录!\\n\"); else printf(\"\\n 文件有%d个记录!\\n\ fclose(fp); }

void mydisplay_2()

{ int i=0,j=0,k=0,n=0; char ch='\\0';

- 51 -

C语言程序设计实训

float x,y,z,t;

struct goods record[N]={0},*p=NULL,temp={0}; FILE * fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; printf(\"\\n\"); p++; n++; }

fclose(fp);

system(\"cls\");

printf(\"\\n按升序(s),还是降序(j)?\"); ch=getche(); p=record;

if(ch=='s'||ch=='S') for(i=0;ifor(j=i+1;jif((p+k)->xse>(p+j)->xse) k=j;

temp=*(p+k);*(p+k)=*(p+i);*(p+i)=temp; }

else if(ch=='j'||ch=='J') for(i=0;ifor(j=i+1;jif((p+k)->xse<(p+j)->xse) k=j;

temp=*(p+k);*(p+k)=*(p+i);*(p+i)=temp; } else

{ printf(\"\\n 非法字符!\\n\"); return;}

- 52 -

C语言程序设计实训

printf(\"\\n 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利\\n\");

for(p=record;pprintf(\"%4s%12s%8.1f%8.1f%8d%8d%10.1f%8d%8.1f\\n\ p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp); }

void mydisplay_3() { int i=0,j=0,k=0,n=0; float x,y,z,t; char c='\\0';

struct goods record[N]={0},*p=NULL,temp={0};

FILE * fp=NULL;

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; printf(\"\\n\"); p++; n++; }

fclose(fp); system(\"cls\");

printf(\"\\n按升序(s),还是降序(j)?\"); c=getche(); p=record;

if(c=='s'||c=='S') for(i=0;ifor(j=i+1;jif((p+k)->ml>(p+j)->ml) k=j;

temp=*(p+k);*(p+k)=*(p+i);*(p+i)=temp;

- 53 -

C语言程序设计实训

}

else if(c=='j'||c=='J') for(i=0;ifor(j=i+1;jif((p+k)->ml<(p+j)->ml) k=j;

temp=*(p+k);*(p+k)=*(p+i);*(p+i)=temp; } else

{ printf(\"\\n 非法字符!\\n\"); return;}

printf(\"\\n 编号 品名 进价 售价 进货量 销售量 销售额 剩余数 毛利\\n\");

for(p=record;pprintf(\"%4s%12s%8.1f%8.1f%8d%8d%10.1f%8d%8.1f\\n\ p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); }

void mysort()

{ char choose='\\0',yes_no='\\0'; do {

myprint4();

choose=getch();

switch(choose)

{ case '1': mysort_1(); break; case '2': mysort_2(); break; case '3': mysort_3(); break; case '4': return; case '0': exit(0);

default : printf(\"\\n %c为非法选项!\\n\ }

if(choose=='0') break;

printf(\"\\n 要继续选择吗(Y/N)?\\n\"); do {

yes_no=getche( );

} while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');

- 54 -

C语言程序设计实训

} while(yes_no=='Y' || yes_no=='y'); }

void mysort_1() { int i=0,n=0; float x,y,z,t;

struct goods record[N]={0},*p=NULL; FILE *fp=NULL;

system(\"cls\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++; }

fclose(fp);

for(p=record;pbh[1]=='1')

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\

p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); }

void mysort_2()

{ int i=0,n=0; float x,y,z,t;

struct goods record[N]={0},*p=NULL; FILE *fp=NULL;

system(\"cls\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

- 55 -

C语言程序设计实训

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++; }

fclose(fp);

for(p=record;pbh[1]=='2')

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\

p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); }

void mysort_3() { int i=0,n=0; float x,y,z,t;

struct goods record[N]={0},*p=NULL; FILE *fp=NULL;

system(\"cls\");

fp=fopen(\"d:\\\\cwz\\\\goods.txt\ if(fp==NULL)

{ printf(\"\\n 打开文件失败!\\n\");return;}

p=record;

while(feof(fp)==0) {

fscanf(fp,\"%s%s%f%f%d%d%f%d%f\sl,&z,&p->sys,&t);

p->jj=x;p->sj=y;p->xse=z;p->ml=t; p++; n++; }

fclose(fp);

for(p=record;pbh[1]=='3')

- 56 -

C语言程序设计实训

printf(\"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\\n\

p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); }

附录B 用户使用说明书

1. 在使用该程序时,请先确定商品文件是否建立,如果商品文件未建立,请先建立商品文件,否则程序会出现错误。 2. 本程序为商场更好管理商品而开发制作。 3. 可以储存商品记录并计算销售、盈利等情况。

参考文献:

【1】 崔武子、李青、李红豫 等.C程序设计辅导与实训(第2版).北京:

清华大学出版社,2009.

【2】 崔武子、赵重敏、李青.C程序设计教程(第2版).北京:清华大学

出版社,2007.

- 57 -

因篇幅问题不能全部显示,请点此查看更多更全内容