课 程 设 计 报 告 书
班级:08051051
学号:20081433 姓名:杨毅 指导老师:陈磊 完成时间:2009年5月28日
1
教师评语:
2
目 录
一、课程设计概述 1.C语言概述
⑴、历史背景
⑵、C语言的特点以及发展过程 2.C语言数据类型以及常量和变量定义 3.C语言的运算符 4.C语言的程序结构设计 5.一维数组以及二维数组的应用 二、超市管理系统程序设计模块 1.说明该程序中有几个模块 2.程序的头文件(预处理命令) 3.超市物品添加模块 4.商品查询模块 5.购买商品清单模块 6.物品结帐模块 7.附件(程序清单) 三、自我评价与总结 四、参考文献
3
一、课程设计概述
1、C语言概述。 (1)、历史背景:
C语言是由D.M.Ritchie于1972年B语言的基础上设计的。主要用于编写UNIX操作系统。后来C语言进行了多次改进,1977年出现了可以移植C语言编译程序,使得C语言编写的UNIX操作系统可以在各种计算机上使用。随着UNIX的广泛应用,C语言得到了普及和推广,并最终独立于UNIX而成为世界上应用最广泛的计算机语言之一。
C语言是国际上广泛流行的、很有发展前途的计算机高级语言。它适合作为系统描述语言,既可以用来写系统软件,也可以用来写应用程序。
(2)、C语言的特点:
A、 语言简洁、紧凑,使用方便、灵活。 B、 运算符丰富,合适的范围广泛。
C、 数据结构丰富,具有现代化语言的各种数据结构。 D、 具有结构化的控制语句编程限制少,程序设计自由度
大。
E、 可直接对硬件操作。
F、 生成目标代码质量高,程序执行效率高。 G、 用c语言写的程序可移植性好。
(3)、C语言的发展过程:
4
20世纪60年代 1970年 1972年
长生BCPL语言 产生B语言 推出C语言
20世纪60年代产生的 1970年在继承和 1972年D.M.Ritc BCPL语言是计算机软件 发展BCPL语言的 hie进一步充实和 人员在开发系统时为记 特点基础上,提 完善了B语言,设 述语言使用的一种程序 出了一种计算机 计出一种新的程
语言。 语言——“B语言”。 序设计语言——C语言。
2.C语言数据类型以及常量和变量
(1).常量与变量
常量:指在程序运行的整个过程中其值始终不可改变的量。
变量:在程序的执行过程中其值可以改变的量。
(2).C语言的数据类型
数据类型:1).基本数据类型【整型、实型(单精度型、双
精度型)、字符型、枚举型】
2).构造类型【共用体类型、结构体类型、数据类型】
3).指针类型 4).空类型
3.C语言的运算符
⑴.算术运算符(+、-、*、/、%)
⑵.关系运算符(〈、〉、== 、>= 、<= 、!=) ⑶.逻辑运算符(!非、 && 与、 ||或)等; ⑷.自增自减运算符(++、--)
4.C语言的选择结构程序设计
5
(1).if语句
一般的格式:if(表达式)
{语句组1} else
{语句组2}
其中:当执行if语句时,如果表达式的值为“真”则执行语句组1,否则执行语句组2。
注:if语句嵌套时,else子句与if 的匹配原则是:与在它上面、距它最近、且尚未匹配的if配对。建议:将内嵌的if语句,一律用花括号括起来。 【注意】
1).if语句中是“表达式”必须用“(“和”)”括起来。 2).“if(表达式)”的圆括号后不要跟分号“;”。而语句组中的语句必须用分号“:”结束。
3).else子句是if语句的一部分,必须与if配对使用,有else子句后就必须有与之配对的if语句,不能单独使用。但if语句不一定都有else子句,省了else子句既为通常所说的但分支程序。
(2).switch语句
一般格式:Switch(表达式)
{ Case 常量表达式1:语句组1;break; Case 常量表达式2:语句组2; break;
6
……
Case常量表达式3:语句组3;break; [default: 语句组n+1;[break;]]
}
【注意】
1).Switch是c语言的关键字,它表示switch语句的开始。2).Switch后面的括号内的“表达式”,ANSI标准允许它为任何类型。
3).Case也是c语言的关键字,它与其后面的“常量表达式”合称case标号。
4).Case后面的常量表达式仅起语句标号作用,不判断条件。 5).Switch语句中的break语句作用是非常重要的,它保证语句序列执行结束后跳出switch语句,所以case语句序列后必须加上break语句,以便结束switch语句。否则程序继续往下执行下一个case语句。
5.C语言循环结构程序设计
⑴.While语句
一般形式为:while(表达式)语句
其中,“表达式”是循环条件。“语句”是循环体。 特点:用来实现“当型”循环结构。先判断表达式,再执
行语句。
⑵do-while语句
7
一般形式为:do
语句
While(表达式);
注:do-while循环于while循环不同的就是,“while先判断条件,再执行”而“do-while是先执行一次再判断条件”。
⑶for语句
一般形式为:for([表达式1];[表达式2];[表达式3])语
句
表达式1一般用于给循环控制变量赋初值,表达式2一
般作为循环结束的判断条件,表达式3一般用来修改循环控制变量的值,使循环能正常的结束。 【注意】
1).For语句一般形式中的“表达式1”、“表达式2”和“表达式3”均为可以选项,可以部分省掉,甚至全部省掉,但其间的分号不能省掉。
2).省掉“表达式1”,此时应在for语句之前给循环变量赋初值。
3).省掉“表达式2”则不判断循环条件,循环将无终止的进行。
4).省掉“表达式3”则不对循环变量进行操作,此时可在循环体中加入修改循环控制变量的语句(即使循环趋向于结束的语句),以保证循环能正常结束。
8
(4)多重循环
在循环体结构中,如果一个循环体内又包含另一个或另几个完整的循环结构,就构成了多重循环,也称为循环的嵌套,嵌在循环体内的循环被称为内循环,嵌有内循环的循环被称为外循环。
6.数组 ⑴.一维数组
定义:类型说明符 数组名[常量表达式];
引用的表示方法:数组名[下标表达式]
⑵二维数组
定义形式:类型说名符 数组名[常量表达式1][常量表达式2]
表示方法:数组名[下标表达式1][下标表达式2] 初始化:按行赋值,每行都用一对花括弧括起来,各行之 间都用逗号隔开。
将内层的花括弧去掉,所有的数据按行的顺序,
列在一起。
初值为0的数据,在某些情况下可以省略。在给
出了全部初值(包括0)的情况下,第1维的长度可以省略,但第二维的长度不能省。 【注意】
数组的下标是从0开始的。
9
二、超市管理系统程序设计模块
1.系统说明部分
⑴.说明该程序中有几个模块部分
功能分析:超市管理系统所包含的所有函数,以及定义的一些常量、变量
和数组。
struct sth {
int number; char name[20]; float price; int count;
} goods[20]; /*学生结构体*/ int n=0; /*商品种类计数*/
#include #include ⑵.系统提示文字说明(含流程图) void init()/*超市系统说明性文字*/ { Printf(\"Choose your choice:\\n\"); printf(\"\1.ININ(Press '0' to finish)\\n\"); printf(\"\2.SEEK\\n\"); printf(\"\3.COUNT(Press '0' to finish)\\n\"); printf(\"\4.DISPLAY\\n\"); printf(\"\5.EXIT\\n\"); 10 2.程序的头文件(预处理命令) ⑴功能说明:在每个查询里面都有一个main()函数,因为它是代表一个 程序的开始所以这个文件也是这一个程序的开始,它提示在该程序里面的一些必要的简单操作步骤以及怎么退出该程序。如:1是添加商品、2是查看商品、3是选购商品等等 ⑵流程图: ⑶程序代码: #include \"myhead.h\"/*包含头文件*/ void main() { int choice; clrscr(); printf(\"\*****************************************************\\n\"); printf(\"\\\WELCOME TO USE MY SYSTEM!!!\\n\"); printf(\"\*****************************************************\\n\"); do { 11 init();/*调用超市系统说明性文字模块*/ scanf(\"%d\提供选择*/ if(choice==1) inin();/*选1,添加超市的商品*/ else if(choice==2) seek();/*选2,查询商品*/ else if(choice==3) count();/*选3,购买商品*/ else if(choice==4) print();/*选4,打印现存所有商品信息*/ else if(choice==5) break;/*选5,退出*/ else printf(\"Input error!!!\\n\"); } while(1); } ⑷运行效果图: 3.超市物品添加模块 ⑴功能说明:给超市的货架上添加货(给商品命名、给该商品编一个编 号以及给商品定价和输入商品总的数量。) ⑵流程图: 12 ⑶程序代码: void inin()/*添加超市的商品*/ { float t; do/*循环输入商品信息*/ { printf(\"No.:\\");scanf(\"%d\输入商品的号码*/ if(goods[n].number==0)/*如果商品号码为0,则用break退出循环*/ break; printf(\"Name:\\");/*输入商品的名称*/ scanf(\"%*c%s\ printf(\"Price:\\");/*输入商品的单价*/ scanf(\"%f\ goods[n].price=t; printf(\"count:\\");scanf(\"%d\输入商品的数量*/ n++;/*n为全局变量,用于计数商品的种类数量,注意n的值从0计,始终比实际物品多1,最后一个商品的编号为0*/ } while(1); } ⑷运行效果图: 4.商品查询模块 ⑴功能说明:查询查询超市是否有你要购买的商品和你所要购买的商品有 没有以及还剩数量。如果是没有该商品,管理员可以告诉老板让他进货,以便顾客下次购买时有货,这样方便了顾客又给商店工作人员减少了工作量。 ⑵流程图: 13 ⑶程序代码: void seek()/*查询商品*/ { int num,i; char c; do/*循环查询商品*/ { i=0; printf(\"Input goods number:\");/*按照输入的商品号码查询该商品信息*/ scanf(\"%d\ do/*循环查询系统内是否有输入的商品号码*/ { if(num==goods[i++].number)/*如果查找成功则退出查找循环*/ { i--; break;/*退出该循环*/ }} while(i else/*查找成功,则输出该商品的信息*/ { printf(\"No.\Name\Price\Count\\n\");/*输出商品的代码、名称、单价、还剩余数量*/ printf(\"%d\%s\%.3f\%d\\n\rice,goods[i].count); /*根据先后顺序输出每种商品的代码、名称、单价、还剩余商量*/ 14 } printf(\"Continue?(Y/N)\\n\");/*输入任何值继续查询,输入n或N退出查询功能*/ scanf(\"%*c%c\输入y或n*/ } while(c!='n'&&c!='N'); }/*判断输入的是什么*/ ⑷运行效果图: 5.购买商品清单模块 ⑴功能说明:输入你所需要的商品的编号,以及你要购买的数量。然后, 将在系统中减掉该商品被你所购买的数量,以便管理员好查询该商品在货架上还剩余的数量。最后,将计算出你一共购买的商品列表(包括编号、名称、、单价、数量),再算出你购买这些商品应付金额。 ⑵流程图: 15 ⑶程序代码: void count()/*购买商品*/ { int no,n1,i; float sum=0;/*给sum赋初值为0*/ do { printf(\"No.:\\");scanf(\"%d\输入需要购买商品的号码*/ if(no==0)/*商品号码为0则退出*/ break; for(i=0;i if(i!=n)/*查找成功*/ { printf(\"count:\\");scanf(\"%d\输入想要购买该商品的数量*/ goods[i].count-=n1;/*将库存商品数量相应剪掉*/ sum+=goods[i].price*n1;/*计算购买的商品金额*/ } else/*查询失败*/ printf(\"Input error!\\n\");/*输出错误的提示信息*/ } while(1);/*控制循环变量*/ printf(\"*****************************************************\\n\"); printf(\"\\SUM=%f\\n\输出购买的商品金额*/ printf(\"*****************************************************\\n\"); ⑷运行效果图: 6.打印现存商品所有信息 ⑴功能说明:主要是方便管理员查看现在还有多少货物,以便好进货和方 16 便计算一天以至一个月的营业额以及利润。另外一个主要的因素是给顾客带来一种方便,不会某种原因而造成缺货,使顾客不能满意而归。 ⑵流程图: ⑶程序代码: void print()/*打印现存所有商品信息*/ { int i; printf(\"No.\Name\Price\Count\\n\");/*输出商品的代码、名称、单价、还剩余数量*/ for(i=0;i ⑷运行效果图: 17 7.程序清单 myhead.h struct sth { int number; char name[20]; float price; int count; } goods[20]; int n=0; #include #include \"f1.c\" /*init()*/ #include \"f2.c\" /*inin()*/ #include \"f3.c\" /*seek()*/ #include \"f4.c\" /*count()*/ #include \"f5.c\" /*print()*/ f1.c void init() { printf(\"Choose your choice:\\n\"); printf(\"\1.ININ(Press '0' to finish)\\n\"); printf(\"\2.SEEK\\n\"); printf(\"\3.COUNT(Press '0' to finish)\\n\"); printf(\"\4.DISPLAY\\n\"); printf(\"\5.EXIT\\n\"); } f2.c void inin() { float t; do { printf(\"No.:\\");scanf(\"%d\ds[n].number); if(goods[n].number==0) break; printf(\"Name:\\"); scanf(\"%*c%s\ printf(\"Price:\\"); scanf(\"%f\ goods[n].price=t; printf(\"count:\\");scanf(\"%d\oods[n].count); n++; } while(1); } f3.c void seek() { int num,i; char c; do { i=0; printf(\"Input goods number:\"); scanf(\"%d\ do { if(num==goods[i++].number) { i--; break; } } while(i printf(\"No.\Name\Price\Count\\n\"); printf(\"%d\%s\%.3f\%d\\n\s[i].number,goods[i].name,goods[i].price,goods[i].count); } 18 printf(\"Continue?(Y/N)\\n\"); scanf(\"%*c%c\ } while(c!='n'&&c!='N'); } f4.c void count() { int no,n1,i; float sum=0; do { printf(\"No.:\\");scanf(\"%d\; if(no==0) break; for(i=0;i if(i!=n) { printf(\"count:\\");scanf(\"%d\1); goods[i].count-=n1; sum+=goods[i].price*n1; } else printf(\"Input error!\\n\"); } while(1); printf(\"*****************************************************\\n\"); printf(\"\\SUM=%f\\n\ printf(\"*****************************************************\\n\"); } f5.c void print() { int i; printf(\"No.\Name\Price\Count\\n\"); for(i=0;i main1.c #include \"myhead.h\" void main() { int choice; clrscr(); printf(\"\*****************************************************\\n\"); printf(\"\\\WELCOME TO USE MY SYSTEM!!!\\n\"); printf(\"\*****************************************************\\n\"); do { init(); scanf(\"%d\ if(choice==1) inin(); else if(choice==2) seek(); else if(choice==3) count(); else if(choice==4) print(); else if(choice==5) break; else printf(\"Input error!!!\\n\"); } while(1); 19 三、自我评价与总结 随着计算机软件技术的发展,尤其是进入21世纪以来的日子里,C语言从1972年出现到现在,已经经历了将近40年的时间。而在这将近40年的岁月里,由于C语言本身的各种强大的功能,它现在已经成为了国际上的最广为流传的、并且是很有发展前途的计算机高级语言。正是因为它的特点和功能越来越受到人们的好评,用它开发的各种软件也逐渐应用于各个行业的管理之中。本次课程设计的任务—超市管理系统就是一种比较常见的利用C语言编译的应用程序。 我经过本次课程设计深深的对c语言有了跟深的了解,使自己加深了对c语言的印象。通过对数据结构的课程设计,我了解并发现了很多调试程序的方法,而且懂得了如何处理错误的方法。对C语言的使用得到了进一步的提高。针对数据结构的书本知识得到了进一步的巩固,具体化就是加深了我对线性表的结构的理解。对程序的深层理解,清楚程序中每一步的功能,在程序的运行中是十分重要的,一个好的结构在运行中能够充分的发挥程序的功能。结构设计的合理性决定了这个程序的价值。在今后的学习中我要注意这方面,使得我的编程能力能有进一步的提高。 经历了这次课程设计,让我在意志力方面得到了很好的发展,我相信在以后的锻炼中自己的综合水平还会得到很好的提升。 我不足的地方就是自己不能一步一步做,很多地方都是拿的资料。其实这些资料都是差不多的,可能其中有大部分都和其他同学的一样,但是我也没发啊,有现成的资料我不用,那我怎么做的完老师给我的任务哦。 在这我感谢老师对我各个方面的指点,如果没有您的指点,我想 我还不会这么快就完成了这次任务。 20 四、参考文献 1.苏传芳主编.C语言程序设计基础.北京:电子工业出版社, 2004 2.谭浩强著.c语言程序设计.北京:清华大学出版社,2000 3.向华著.c语言程序设计基础教程。重庆大学出版社 4.赵克林等编.c语言程序设计教程.北京工业大学出版社.2004年8月 5.郎建邵著.边用边学c 语言.北京:清华大学出版社,2002 21 因篇幅问题不能全部显示,请点此查看更多更全内容