广告设计与欣赏 广告设计中图形设计的理解
广告设计中图形设计的理解
引言
随着科技的进步和人类的不断探索,广告在我国的发展相当迅速,广告逐渐渗透到人们生活中的方方面面。早上起来,你听到的广播中无形中想你灌输广告,当你刷牙的时候,牙膏上的图画与形象的文字让你记住了这种牙膏,走出家门,道路上的大型广告牌映入你的眼帘,走进商场各种海报、宣传单等等都以广告的形式推销着他们自己的商品。
一.图形设计的创意手法
1、添加图形
添加图形是通过想象在一个自然形态中加上另外一个形,使两个原本毫无相关的形融为一体,构成有趣的超常规的组合。如:一个大的耳朵上面添加一个小型的乐队在演奏,用来宣传录音机音质;一广告公司的招贴图形,超常规地在一光头人物的后脑勺上添加一副眼睛,给人以强烈的视觉冲击,同时也隐喻着广告业所需要的奇思异想的特有的素质;冰箱上的加上绿色植物,象征着环保产品,酒杯里加上音乐符号象征美酒加音乐。一本书的外表上添加一只握着钢笔的手,《一天一个健康快乐》,在眼睛里加上蓝天白云等。添加图形也需要丰富的想象力,可以在特定的图形中进行视觉想象,丰富其含义,组成各
1
广告设计与欣赏 广告设计中图形设计的理解
种有趣的画面。
还可以在平面上添加空间的表现,也可以在空间中添加平面的表现。 2、形的破坏、分解与组合
1)、形的破坏 对原有的形态有意识地进行破坏,使人对司空见惯的形象获得一种新的视觉振奋。在破坏中诞生新的形象和特殊的意义,从而表现一种残缺的美。残与美共存、破和立共存,隐含着深刻的哲理。形的破坏有裂像、残像、隐像。如图。
2)、分解组合 将原有的图形打散、重新组合,或与其它形象重新组合、重叠,构成一种往往是超现实的、奇特异常的组合,在视觉上产生强有力的冲击。如齐藤诚图形、柏林爵士音乐节金特. 凯泽、中国彩陶鱼、鸟纹样。艺术节人脸。
3、正负形与共用形
1)、正负形 正形和负形(图和地)相互借用,相互反转,忽前忽后,忽虚忽实,在一种形态结构中体现两种形的交错。正形和负形的比例越接近,反转的效果越强烈。图。
2)、共用形 形与形之间共用线、面、体;复合共用:正倒共用。在研究正负形的形态中,我们可以看到,正负形交界的轮廓线用于任何一方都可以成为实实在在的形象,它构成了形与形之间的共用线,使造型手段简约而精练,实空间和虚空间都得到了充分的重视和利用。图:毕加索人与和平鸽、标志图形,苏联招贴、中国民间剪纸、年画。
2
广告设计与欣赏 广告设计中图形设计的理解 4、影子的利用与表现
物体由于影子有了光源的方向和空间感,在图形设计中,影子不是被动的投射,而是根据图形的创意,利用影子和形的相互关系,表现图形深层的内涵或趣味性。再这里,现实与虚幻、过去与现在、原因和结果可以在奇幻的视觉状态中统一在一起。图:《战争与和平》、《昨天与今天》。胖女人投成瘦女人。
5、同构图形
同构图形是以想象为基础的一种艺术的创造,表面上看来是毫无相干的事物,只要抓住了它们之间的相似的性质,按照一定的构想去组合加工,就可以产生超常规的视觉语言。这种情况下,事物形象本身的意义或加深或转化,同构可以是相似意义上的同构,也可以是相似形的同构,还可以是相似心理感受的同构或综合的同构等等。在研究同构图形中大体分为相似形的同构、相似含意的同构、相似形意的同构。
1)、相似形的同构(元素的替代)
利用不同含义的形与形之间结构的相似性,以一种形象的一部分替换另一种形象来进行形的同构(异质同构),打破人们司空见惯的事物,表现出奇特的、新颖的视觉形象。产生出强烈的视觉冲击力和一定的心理效应。
如图:《人权》的海报设计,通过对主题的精心创意,利用手的外轮廓与铁丝网进行同构,以此来象征着被禁锢的人权,不仅生动地
3
广告设计与欣赏 广告设计中图形设计的理解
表现了人们对自由、对生命、对人权的渴望,有力地揭示了海报所蕴含的深刻的主题思想,也获得了不同寻常的视觉效果。图《吉普车》,用一把车的钥匙与起伏的山峦同构,独特新颖的形式,巧妙地表现出这一品牌的吉普车是专门为崎岖险峻的山路而设计的,巧妙地表现出商品的特点。再如《巴勒斯坦—被否定的国家》和以人的上臂与靠背椅扶手的同构等。(视觉同构)
2)、相似含意的同构
利用含意之间的相似性,以一事物的形象联想或比喻他事物,以获得心理和认识经验上的一致,表现出主题的内涵和深度。如童鞋的广告图形,借用母亲的手捧着一双小脚的形象,来唤起人们类似生活经验的感受,把母爱和商品对儿童的呵护同构起来,传递出商品舒适、柔软、安全的信息。如日本招贴《北方》,画面由五个向上飞的大雁组成,所不同的是将最下面的一个撕开,在视觉上产生分离并造成了心理上的联想的同构。把一瓶葡萄酒嵌在一本厚的书中将两种意义的同构,比喻葡萄酒的历史悠久。交易所广告、引用相朴裁判的公平含义与之同构、《今天的烟盒、明天的药盒》等。(心理同构)
3)、相似形意的同构
利用形与形之间结构的相似性和含意的相似性进行双重同构。不仅在视觉上造成强有力的冲击而且在心理上引起观众强烈的共鸣,揭示事物的本质特征,具有一定的哲理性。
图《生命之树》是一幅宣传环保及生态平衡方面的图形设计,图形在含义上利用人与树均为生命的同构、以及外形上树干、茂盛的树
4
广告设计与欣赏 广告设计中图形设计的理解
与人的脖子、人头的相似处进行同构,图形采用装饰变形的手法设计出既似一个人又似一棵树的有趣组合,通过人和树木的异质同构,以奇特的但又符合情理的图形设计,表现出人和树木息息相关、爱护树木就是爱护生命的深刻内涵。再如图是一幅公益题材的广告,图形在含义上利用酗酒与自杀相似关系的同构、以及外形上以上吊的绳索与酒瓶形的相似形进行同构,表现了酗酒对身体的伤害等于自杀的主题思想。再如:用书与餐具的同构,一个盘子装的奶油蛋糕换成了装了一本书(形的同构),表达出书是精神的食粮的含义(意的同构)。如图杂志的插图,充满了丰富的想象力,用牙齿的形和窗户的形同构、用牙齿和窗户同样需要清洁意义上的同构,以夸张幽默的表现手法,表现了图形的意义。
6、变异图形
1)、渐变。一种形象逐渐地演变成另一种形象的过程,也是量变到质变的过程。渐变可以是两个完全不同的形之间的渐变,也可以是相同外形中间内容的变化,还可以是一个形的完整到残缺、大小、方向的渐变等等。如,啤酒广告,以一杯啤酒渐变为一张笑脸,表现了喝啤酒带来的愉快心情。再如:将发射的炮弹渐变为和平鸽,表现向往和平的主题。还有书渐变为飞翔的小鸟等。埃舍尔的作品。
2) 、突变。突变指在规律的形象中,局部突然发生变化,使意义出现转折,也使突变成为视觉的焦点。突变使主题内容更加鲜明突出。图:表现和平的主题招贴。
5
广告设计与欣赏 广告设计中图形设计的理解
变异的方法还有好多、特别是现在利用电脑技术可以有很多的变化,无论如何变异,都必须有好的创意,通过变化表现主题深刻的思想内涵和传递出明确、清晰的信息。
7、拟人图形
将要表现的事物对象(动、植物、器物等非人物形象)拟人化。用生动、有趣、幽默的表现方法传递主题的意念及商品的信息。如日本一家百货商店在为其商品大减价所作的广告图形中,运用拟人化的表现手法,把一个硕大的西瓜用皮带扎起来,形象地比喻出该商店宁愿自己“勒紧腰带”,也要让利给消费者,有趣地表现出大减价的特性,迎合了人们的购买心理,使观者倍感新奇和亲切。再如英语培训中心的招贴广告,以拟人化的手法刻画了一对小猫小狗的形象,小猫穿着一件大红色的连衣裙,小狗则穿着笔挺的西服、扎着领结,他们煞有介事地手捧着毕业证书,脸上洋溢着自豪与喜悦的神情,寓意着连猫狗都能培养出来更不用说人了,这一经过艺术夸张的生动比喻,使招贴图形的主题一目了然。
8、其它图形
夸张对比图形、文字图形、点线图形、倒置图形、蒙太奇图形、幽默图形等。
二.图形设计的作用
广告是为了某种特定的需要,通过一定形式的媒体,公开而广泛
6
广告设计与欣赏 广告设计中图形设计的理解
地向公众传递信息的宣传手段。 在我国,广告可以追溯到2000多年前,那时的广告主要是实物广告、、叫卖广告、招牌和幌子等广告形式。之后又经历了近代广告,现在我们正处在当代广告的时
科技的进步让广告的设计内容变得更丰富,以前想想中的广告也能呈现在众人的面前,而图形的设计在广告设计中就占据了重要的位置,现在我就来分析一下图形设计在广告设计中的作用。
图形是在平面构成要素中形成广告性格及提高视觉注意力的重要素材。图形能够下意识地左右广告的传播效果。图形占据了重要版面,有的甚至是全部版面。图形往往能引起人们的注意,并激发阅读兴趣,图形给人的视觉印象要优于文字,在平面图形设计中合理的运用图形符号。
图形表现是通过对创意的中心的深刻思考和系统分析,充分发挥想象思维和创造力,将想象、意念形象化、视觉化。这是创意的最后环节,也是关键的环节。从怎样分析、怎样思考到怎样表现的过程。由于人类特有的社会劳动和语言,使人的意识活动达到了高度发展的水平,人的思维是一个由认识表象开始,再将表象记录到大脑中形成概念,而后将这些来源于实际生活经验的概念普遍化加以固定,从而是外部世界乃至自身思维世界的各种对象和过程均在大脑中产生各自对应的映像。这些影响是由直接的外在关系中分离出来,独立于思维中保持并运作的。这些印象以狭义语言为基础,又表现为可视图形,肢体动作,音乐等广义语言。“奇”、“异”、“怪”的图形并非是设计师追求
7
广告设计与欣赏 广告设计中图形设计的理解
的目标,通俗易懂、简洁明快的图形语言,才是达到强烈视觉冲击力的必要条件,以便于公众对广告主题的认识、理解与记忆。
作为视觉传达的符号和信息的载体,图形所承载的信息量和信息传播速度都要优于文字传播,因此现代广告设计中普遍使用了以图为主的设计。
三.创意广告分析
人类学研究资料表明,在还没有“语言”交流时,
古老的视觉图形符号就已经存在了。
“拉斯科”洞穴画
有原始记载的图形视觉形式大约距今1.5万年,在法国南部的“拉斯科”洞穴画,被认为是人类最早期视觉传播的重要代表。原始人作画并非审美,而是为了图腾崇拜,巫术仪式和将狩猎的技艺传播给后代,反映了祈祷的愿望。“拉斯科”洞穴画已经承担了传播技艺的信息功能。
8
广告设计与欣赏 广告设计中图形设计的理解
这是我国最早的广告画,该广告中有两个人,一个是卖者,一个是买者,买者身上挂满了药水瓶,正在向一个老者推荐他的眼药水。该广告通过图片的形式,让人看了过目难忘,真正
地
宋 眼药酸广告
北宋
张择端 《清明上河图》
9
广告设计与欣赏 广告设计中图形设计的理解
生活的面貌,这在中国乃至世界绘画史上都是独一无二的。总计在五米多长的画卷里,共绘了五百五十多个各色人物,牛、马、骡、驴等牲畜五、六十匹,车、轿二十多辆,大小船只二十多艘。房屋、桥梁、城楼等也各有特色,体现了宋代建筑的特征。具有很高的历史价值和艺术水平。
作者通过绘画的方式向我们展现了北宋时期京城汴梁以及汴河两岸的自然风光和繁荣景象,这好比一个广告,很形象的宣传了这个地区。在旅游业快速发展的今天,通过这幅面,相信很多人都会慕名去该地旅游的。
10
广告设计与欣赏 广告设计中图形设计的理解
这是一个关于水的广告,该广告将3D技术运用到图形设计中,将静态的水赋予动态,水蓝色与背景的白色形成对比,突出了水的重要性,该广告也形象地说明了:水,是生命之源。
11
广告设计与欣赏 广告设计中图形设计的理解
? 谁是你的能量源? 这是一个关于咖啡的创意广告,广告的下方写着“谁是那你的能源?” 大体一看,不就是一杯咖啡吗?再细细一看,原来咖啡与电线连在一起,这样形象地说明了咖啡为你提供你提供你提供能源。
12
广告设计与欣赏 广告设计中图形设计的理解
?
? 悼念坟墓里的吸烟者
? 图片中,两个年轻人在一个狭小的空间里吸烟,上面的人凝望着这两个人,其中有个人似乎在说:阿门!
? 这是一个关于吸烟有害健康的广告,用一句话来表达对吸烟者的同情,就是:悼念坟墓里的吸烟者。
?
13
广告设计与欣赏 广告设计中图形设计的理解
? 名画似乎总是被广告商盯上,时不时拿来开个小玩笑。达·芬
奇的《蒙娜丽莎》中,蒙娜丽莎的发型其实是时下很流行的小碎卷,不过据我估计应该是自然卷。这次却被潘婷(Pantene)换了个大波浪发型,突然变得非常青春靓丽起来,只是少了一份原作上她的忧郁和深邃。
14
广告设计与欣赏 广告设计中图形设计的理解
这幅平面广告是宣传保护野生动物,拒绝杀害,和谐相处方能共存。
本平面广告以人的腹部为背景,颜色较浅;以一只被割去鱼鳍的鲨鱼为主体,颜色较深,尤其是鲨鱼的伤口,尤其醒目。
人类杀害鲨鱼,猎取鱼翅,获得口腹之欲。所以,本平面广告设计极其巧妙:一、在人的腹部绘上一只被杀害的鲨鱼,暗示着丧命的鲨鱼成为人类的腹中食;二、滴
15
广告设计与欣赏 广告设计中图形设计的理解
血的伤口在鲨鱼的喉咙上,同时也在人类的腹部上,暗示着对野生动物的杀害,同样也在伤害在人类自己。
在广告的左边,用中国的传统书法,写出了:惟和谐,方共存。毛笔字的运用,简明且直观,较为吸引人的目光。食用鱼翅的现象在中国较为普遍,用中国传统书法也符合中国国情。
本幅平面广告,简洁、巧妙,看似平淡但意味深长。
本平面广告宣传的是灭虫剂。
本平面广告的画面极其简单,以白色为背景颜色,画面的中央部分留有大块空白,占据画面左边空间的是一个人手握着一只伸出长舌的青蛙,右边的角落是宣传产品
16
广告设计与欣赏 广告设计中图形设计的理解
的图片。
简单的背景,将人的注意力自然而然的吸引到左边的图片上:一只人手,一个长舌的青蛙。充分唤起好奇心后,人的注意力就会注意到右下角的产品上,这时,人们才明白,宣传产品是灭虫剂。画面
首先,青蛙的捕虫技术是非常高超的,几乎“百发百中”,这意味着本产品的灭虫功能是非常好的,绝对不会放走任何虫子,就犹如青蛙扑捉昆虫一样。
其次,本广告暗示着,本产品虽然是化学品,但是对人体是无害的,使用本产品,就像养着一只青蛙,灭虫的同时,自然无害,不会留下任何化学问题。 本平面广告简单有趣,含义浅显易懂。让消费者产生兴趣的同时,理解了产品信息,给消费者留下深刻印象。
17
第二篇:宁波工程学院《C语言程序设计》课程设计报告(图书信息管理系统设计)
宁 波 工 程 学 院
2013 ~ 2014 学年第 二 学期
电信学院
C语言课程设计报告
题 目: 图书信息管理系统设计 班 级: 计科13-2 姓 名: 傅天一 学 号: 134xxxxxxxx
指导教师: 洪立
2014 年 6 月
1
目录
目录 ............................................................................................... 2
1、 系统功能和结构 .................................................................. 3
1.1系统设计目的 ................................................................... 3
1.2系统功能分析 ................................................................... 3
1.3系统结构分析 ................................................................... 3
2、 核心技术介绍 ...................................................................... 6
3、 函数功能介绍 ...................................................................... 8
4、 设计体会及总结 .................................................................. 9
参考文献:................................................................................. 10
附录一: ..................................................................................... 11
2
1、 系统功能和结构
1.1系统设计目的
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
这种系统设计的人很多,也有很多种系统。总的感觉他们做的界面不够人性化,不够美观。所以我在功能完善的前提下要做到界面更加美观和人性化。
整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。
1.2系统功能分析
(系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现通讯录的管理,同时对操作结果在计算机中做永久保存。)
整个系统可以分为信息录入、信息浏览、信息查询、信息排序、信息删除和信息修改的功能。系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现图书信息的管理,同时对操作结果在计算机中做永久保存。
3
1.3系统结构分析
程序总体结构图
程序层次图
4
程序流程图
5
2、 核心技术介绍
简单选择排序技术:
基本思想:每一趟在后面n-i 个待排记录中选取排序码最小的记录作为有序序列中的第i 个记录。
排序过程:
① 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,
将它与第一个记录交换。
② 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,
将它与第二个记录交换。
③ 重复上述操作,共进行n-1趟排序后,排序结束
实现代码为:
void bookpaixu(struct book*p,int n)
{
int j,i,k;
char c1;
struct book temp;
printf("\n排序前图书的信息记录为:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
printf("\n按登录号排序(D),还是按作者名排序(A)?"); //选择排序的方式 c1=getchar();
getchar();
if(c1=='d'||c1=='D') //选择登录号由小到大排序
{
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(p[k].no,p[j].no)>0) //使用选择法进行排序
k=j;
if(k!=i) //如果最小熟不熟默认的p[i],再交换,
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
}
printf("\n排序后图书的信息记录为:\n"); //输出排序后图书的信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位 6
","出版时间","价格");
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
else if(c1=='a'||c1=='A') //选择作者名由小到大排序
{
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(p[k].author,p[j].author)>0)
k=j;
if(k!=i) //使用选择法进行排序
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
}
printf("\n排序后图书的信息记录为:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //输出排序后图书的信息
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
else
printf("\n您输入的为非法字符!\n");
}
7
3、 函数功能介绍
stdlib.h是包含文件stdlib 头文件即standard library标准库头文件。stdlib 头文
件里包含了C、C++语言的最常用的系统函数。该文件包含了的C语言标准库函数的定义。stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
系统使用的主要函数
void menu();
int bookluru(struct book*p,int n); (录入图书信息)
void bookliulan(struct book*p,int n); (图书信息浏览) void bookchaxun(struct book*p,int n);(图书信息查询)
void bookxiugai(struct book*p,int n); (图书信息修改)
int bookzengjia(struct book*p,int n); (图书信息增加)
void bookpaixu(struct book*p,int n); (图书信息排序)
void DLsearch(struct book*p,int n); (按登入号查询)
void AUsearch(struct book*p,int n); (按作者名查询)
int bookzairu(struct book*p,int n); (图书信息文件储存 )
void goout(); (退出程序)
int bookbaocun(struct book*p,int n); (图书信息保存)
void main() int bookshanchu(struct book*p,int n); (图书信息删除)
系统使用的主要数据结构
struct book{ //定义一个book类结构体。
char no[L];
char name[L];
char author[L];
char fenlei[L];
char puttime[L];
char putfrom[L];
char price[L];
}
8
4、 设计体会及总结
这次课程设计让我掌握了许多的有用知识。首先通过不断地学习和锻炼更加熟练地掌握应用软件Microsoft Visual C++ 6.0 了。设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正式者一步步一点点的努力让我对C语言游乐更深的认识。同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值
通过两周的课程设计,第一次我试着用所学的C语言知识去编制生活中常用的程序。我们是小组选择编辑图书信息管理系统程序。由于分工合作,我负责的是查询和排除模块。起初对知识掌握的不够全面,在整个设计过程中遇到很多问题。比如,编译出现错误,对于格式的掌握还不够透彻;在分界面运行完后,回不到系统的主界面,出现了死循环;在删除信息的板块中,删除了要保留的;运行时,屏幕显示的字之间无空格。后来,通过小组互相帮组讨论,查阅书籍,改善了程序。首先把原程序中的运用scanf()输入字符,改为getchar(),排除了接受回车键所出现的问题,能够顺利的返回主界面。其次,printf()中字符串控制的长度拉宽。最后还是能如期的完成此次实训。
当然,由于初次接触图书管理系统的设计,程序还是存在缺陷。比如操作起来不够简便、连贯,同时也没考虑到实际问题。如图书的价格要取大于等于零的数等。
总之,此次的课程设计还是对我们的专业很有帮助。既巩固了我们的C语言知识,让我们对一部分函数的功能有了更加深刻的理解,把所学运用到实际,也使我们在系统设计领域有了新的拓展,开发我们的思维。
9
参考文献:
[1] 黄明等编著《C语言课程设计》北京:电子工业出版社
[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社
[3] 宁正元《数据结构(c语言)》南京:东南大学出版社。20xx年6月第1版
[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,19xx年4月第1版
[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社
[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社
[7] 洪国胜 等编著 《C++ Builder程序设计轻松上手》北京:清华大学出版社
[8] 宁正元《数据结构(c语言)》 南京:东南大学出版社。20xx年6月第1版
[9] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,19xx年4月第1版。[10] 明日科技编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。
[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,19xx年 第1版。
[12] 刘大有《数据结构》(面向21世纪课程教材) 北京:高等教育出版社。20xx年6月第1版。
[13] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,19xx年 第1 版。
10
附录一:
系统使用方法:
一开始运行程序时,就会出现一个让你选择的界面,1.图书信息录入;2图书信息浏览;3图书信息查询;4图书信息修改;5图书信息增加;6图书信息删除;7图书信息排序;8图书信息保存;0退出图书管理系统;
当你输入1时(首次录入图书信息时),界面就会输出“添加前的图书信息记录有0个: 请输入要录入的图书书目x(0<x<200):”,接着你就按要求输入你要录入的图书的信息就可以了。当你输入2时,就会在出现一个你录入的图书信息,你可以继续选择继续或不,当选择继续时页面会跳转到3图书信息查询界面此时会提示你请按登陆号查询还是按作者名查询?你可以按照提示进行查询操作。当你输入4时,界面会提示你输入要修改的图书登陆号。接下来按照提示信息一步步修改图书信息。当你输入5时,界面会提示你添加图书信息按提示添加完后会显示添加前的图书信息记录和添加后的图书信息记录。当输入6时,界面会提示输入删除图书的登陆号,删除后会显示图书删除后的记录。当输入7时,界面会提示按登陆号排序或按作者名排序,排序后会显示排序后俄图书信息记录。当输入8时,界面会提示“图书信息保存成功!”当输入0时,将会退出图书管理系统。
Ps:
操作每一步结束都回提示是否继续操作(Y/N)。
源代码:
#include<stdio.h> //头文件
#include<string.h>
#include<stdlib.h>
#define L 30 //宏定义
#define Q 200
struct book //定义一个book类结构体。
{
char no[L];
char name[L];
char author[L];
char fenlei[L];
char puttime[L];
char putfrom[L];
char price[L];
};
//函数声明 //函数声明
void menu();
int bookluru(struct book*p,int n);
void bookliulan(struct book*p,int n);
void bookchaxun(struct book*p,int n);
void bookxiugai(struct book*p,int n);
int bookzhengjia(struct book*p,int n);
11
int bookshanchu(struct book*p,int n); void bookpaixu(struct book*p,int n);
void DLsearch(struct book*p,int n);
void AUsearch(struct book*p,int n);
int bookzairu(struct book*p,int n);
void goout();
int bookbaocun(struct book*p,int n);
void main() //主函数
{
char slect,yn;
struct book record[Q]; //定义book类结构体变量存放图书信息共200条
int total=0,flag;
total=bookzairu(record,Q); //从文件读取图书信息,不超过200条 do
{
menu(); //显示菜单
printf("请服务项编号:");
slect=getchar();
getchar();
switch(slect)
{
case'0': goout();break;
case'1': total=bookluru(record,total);break; //函数调用
case'2': bookliulan(record,total);break;
case'3': bookchaxun(record,total);break;
case'4': bookxiugai(record,total);break;
case'5': total=bookzhengjia(record,total);break;
case'6': total=bookshanchu(record,total);break;
case'7': bookpaixu(record,total);break;
case'8': flag=bookbaocun(record,total);
if("flag==1")
printf("图书信息保存成功!\n");
else
printf("图书信息保存失败!\n");
break;
default:continue;
}
if(slect=='0') break;
printf("\n还要继续选择吗?(Y/N)"); //提示是否结束
do
{
yn=getchar();
12
getchar();
if (yn=='Y'||yn=='y')
break;
else if (yn=='N'||yn=='n')
break;
else
printf("非法选项!\n还要继续选择吗?(Y/N)");
}
while(1);
}
while(yn!='N'&&yn!='n');
}
//图书管理系统主菜单.
void menu()
{
system("cls");
system("color 1e");
printf("\n\n");
printf("请选择服务项目编号(0--8)\n");
printf("******************************************************************\n"); printf("§********************欢迎使用图书信息管理系统******************§\n");
printf("§**************************************************************§\n"); printf("§§ §§\n"); printf("§§ §§\n"); printf("§§ §§\n"); printf("§§ * 1 . 图书信息录入. §§\n");
printf("§§ * 2 . 图书信息浏览. §§\n");
printf("§§ * 3 . 图书信息查寻. §§\n");
printf("§§ * 4 . 图书信息修改. §§\n");
printf("§§ * 5 . 图书信息增加. §§\n");
printf("§§ * 6 . 图书信息删除. §§\n");
printf("§§ * 7 . 图书信息排序. §§\n");
printf("§§ * 8 . 图书信息保存. §§\n");
printf("§§ * 0 . 退出图书管理系统. §§ 13
\n");
printf("§§ §§\n"); printf("§§ §§\n"); printf("§§ §§\n");
printf("******************************************************************\n"); printf("\n");
}
int bookluru(struct book *p,int n)//录入图书信息.
{
int i=0;
int m;
printf("\n添加前的图书信息记录共有%d个:\n",n); //显示原有的图书信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
i=0;
while((i<n)&&(strcmp(p->no,"")!=0)) //输入的登录号不为空时,输出图书信息 {
printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);//信息输出
i++;
p++;
}
printf("\n请输入要录入的图书数目X(0<X<%d): ",200-n); //设置图书信息存储最大值
scanf("%d",&m);
i=0;
while(i<m)
{
printf("\n");
printf("请输入第%d本图书的信息:\n",i+1);
printf("登录号: ");
do
{
gets(p->no); //输入登录号,再输入其他信息
}
while(strcmp(p->no,"")==0);
printf("书名为:");
gets(p->name);
printf("作者名为:");
gets(p->author);
printf("分类号为:");
gets(p->fenlei);
printf("出版时间为:");
14
gets(p->puttime);
printf("出版单位为:");
gets(p->putfrom);
printf("价格为:");
gets(p->price);
p++;
i++;
}
return m+n;
}
void bookliulan(struct book*p,int n)//图书信息浏览.
{
int i=0;
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
while(i<n) //输出原有图书信息 {
printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);
p++;
i++;
}
}
void bookchaxun(struct book*p,int n)//图书信息查寻.
{
char c;
bookliulan(p ,n);
do
{
printf("\n请问按登录号查询(D),还是按作者名查询(A)?"); //选择查询方式 c=getchar();
getchar();
if(c=='D'||c=='d')
{
DLsearch(p,n);
break;
}
else if(c=='A'||c=='a')
{
AUsearch(p,n);
break;
}
15
else
{
printf("\n输入的为非法字符!\n");
continue;
}
}
while(c!='D'||c!='d'||c!='A'||c!='a');
}
void DLsearch(struct book*p,int n)//按登录号查询.
{
int i,x=0;
char DL[L];
printf("\n请输入要查询图书的登录号:");
gets(DL);
for(i=0;i<n;i++)
if(strcmp(DL,p[i].no)==0) //输入登录号,如果在系统中找到则输出图书信息 {
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);
x=1;
break;
}
if(x==0)
printf("\n对不起,图书系统中没有包含此书的信息!\n");
}
void AUsearch(struct book*p,int n)//按作者名查询.
{
int i,x=0;
char AU[20];
printf("\n请输入要查询图书的作者姓名:");
gets(AU);
for(i=0;i<n;i++)
if(strcmp(AU,p[i].author)==0) //输入作者姓名,如果在系统中找到则输出图书信息 {
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);
x=1;
}
16
if(x==0)
printf("\n对不起,图书系统中没有包含此书的信息!\n"); //提示信息 }
void bookxiugai(struct book*p,int n)//图书信息修改.
{
int i,k=0;
char no[L];
bookliulan(p,n);
printf("\n请输入要修改图书的登录号:");
gets(no);
for(i=0;i<n;i++,p++)
{
if(strcmp(no,p->no)!=0) continue; //输入的登录号不匹配,结束本次循环 else
{
printf("\n请输入正确的图书登录号:");
gets(p->no);
printf("\n请输入正确的图书书名:");
gets(p->name);
printf("\n请输入正确的图书作者名:");
gets(p->author);
printf("\n请输入正确的图书分类号:");
gets(p->fenlei);
printf("\n请输入正确的图书出版时间:");
gets(p->puttime);
printf("\n请输入正确的图书出版单位:");
gets(p->putfrom);
printf("\n请输入正确的图书价格:");
gets(p->price);
printf("\n修改图书图书信息完成!!");
k=1;
}
}
if(k==0)
printf("\n对不起,图书系统中没有包含此书的信息!\n");
}
int bookzhengjia(struct book *p,int n)//图书信息增加.
{
int i=0;
char c;
struct book t;
printf("\n添加前图书信息的记录为:\n");
bookliulan(p ,n);//显示添加前图书信息的记录
do
17
{
printf("请输入新图书信息的登录号:");
gets(t.no);
printf("\n请输入新图书信息的书名为:");
gets(t.name);
printf("\n请输入新图书信息的作者名为:");
gets(t.author);
printf("\n请输入新图书信息的分类号为:");
gets(t.fenlei);
printf("\n请输入新图书信息的出版时间为:");
gets(t.puttime);
printf("\n请输入新图书信息的出版单位为:");
gets(t.putfrom);
printf("\n请输入新图书信息的价格为:");
gets(t.price);
for(i=0;i<n;i++)
if(strcmp(t.no,(p+i)->no)==0||strcmp(t.author,(p+i)->author)==0||strcmp(t.fenlei,(p+i)->fenlei)==0)
{
printf("登录号、作者名和分类号重复,要重新输入吗(Y/N)?"); c=getchar();
putchar('\n');
break;
}
if(i==n)
{
*(p+i)=t;
printf("\n添加后图书的信息记录为:\n"); //显示添加后图书的信息记录
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;i<n+1;i++)
printf("\n%9s%9s%9s%9s%9s%9s%9s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);
break;
}
}
while(c=='y'||c=='Y');
return n+1;
}
int bookshanchu(struct book *p,int n)//图书信息删除.
{
int i,x,y=0;
char no[20];
18
printf("\n删除前图书的信息记录为:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //显示删除前图书的信息记录
for(i=0;i<n;i++)
printf("\n%9s%9s%9s%9s%9s%9s%9s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
printf("\n请输入要删除图书的登陆号:");
gets(no);
for(x=0;x<n;x++)
{
if(strcmp(no,p[x].no)!=0) ////输入的登录号不匹配,结束本次循环
continue;
if(x<n)
{
for(i=x;i<n;i++) //后一个图书信息对前一个图书信息覆盖删除 {
strcpy(p[i].no,p[i+1].no);
strcpy(p[i].author,p[i+1].author);
strcpy(p[i].name,p[i+1].name);
strcpy(p[i].fenlei,p[i+1].fenlei);
strcpy(p[i].price,p[i+1].price);
strcpy(p[i].putfrom,p[i+1].putfrom);
strcpy(p[i].puttime,p[i+1].puttime);
}
printf("图书信息删除后的记录:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //显示图书信息删除后的记录
for(i=0;i<n-1;i++)
printf("\n%9s%9s%9s%9s%9s%9s%9s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);
y=1;
}
else
printf("\n对不起,图书系统中没有包含此书的信息!\n");
return n-y;
}
return 0;
}
//对图书信息排序.
void bookpaixu(struct book*p,int n)
{
int j,i,k;
char c1;
struct book temp;
19
printf("\n排序前图书的信息记录为:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
printf("\n按登录号排序(D),还是按作者名排序(A)?"); //选择排序的方式 c1=getchar();
getchar();
if(c1=='d'||c1=='D') //选择登录号由小到大排序
{
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(p[k].no,p[j].no)>0) //使用选择法进行排序
k=j;
if(k!=i) //如果最小熟不熟默认的p[i],再交换,
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
}
printf("\n排序后图书的信息记录为:\n"); //输出排序后图书的信息 printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
else if(c1=='a'||c1=='A') //选择作者名由小到大排序
{
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(p[k].author,p[j].author)>0)
k=j;
if(k!=i) //使用选择法进行排序
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
20
}
}
printf("\n排序后图书的信息记录为:\n");
printf("\n %9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格"); //输出排序后图书的信息
for(i=0;i<n;i++)
printf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
else
printf("\n您输入的为非法字符!\n");
}
//图书信息文件存储.
int bookzairu(struct book*p,int n)
{
FILE *fp; //定义FILE类型文件指针变量
int i,all=0;
char bookfile[200]="book.txt";
fp=fopen("book.txt","r+"); //以只读方式打开
if(fp==NULL)
{
printf("\n***打开%s失败!!***",bookfile);
return 0;
}
fscanf(fp,"%d\n",&all); //从文件指针指向的文本文件中按指定格式逐个输入信息到指定变量
if(all>200) //读取记录总数
{
printf("文件记录太多,不能读取!");
return 0;
}
for(i=0;i<all;i++) //图书信息按指定格式输入
{
fscanf(fp,"%s %s %s %s %s %s %s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p[i].puttime,p[i].price);
}
fclose(fp); //关闭文件
return all;
}
//图书信息文件保存.
int bookbaocun(struct book*p,int n)
{
21
FILE *fp; //定义FILE类型文件指针变量
int i,all=0;
char bookfile[30]="book.txt";
fp=fopen(bookfile,"w"); //以只写方式打开
if(fp==NULL) //
{
printf("\n***打开%s失败!!***",bookfile);
return 0;
}
fprintf(fp,"%d\n",n); //将数据指定格式字符串输出到文件指针所指向的文本文件。
for(i=0;i<n;i++) //图书信息按指定格式输出
{
fprintf(fp,"%s %s %s %s %s %s %s\n",p[i].no,p[i].name,p[i].author,p[i].fenlei,p[i].putfrom,p
[i].puttime,p[i].price);
}
fclose(fp); //关闭文件
return 1;
}
//图书管理系统退出
void goout()
{
printf("\n请按Enter键退出图书信息管理系统!\n");
}
22