源代码分门别类管理,通过头文件。

放置一些函数声明,变量声明,常量定义,宏定义。

hotel.h

#ifndef HOTEL_H_INCLUDED
#define HOTEL_H_INCLUDED #define HOTEL1 872.0 // 各家酒店的默认房费
#define HOTEL2 1838.0 // 各家酒店的默认房费
#define HOTEL3 789.0 // 各家酒店的默认房费
#define HOTEL4 1658.0 // 各家酒店的默认房费
#define DISCOUNT 0.95 // 折扣率 // 菜单函数:显示菜单选项,接收并返回用户的输入
int Menu(void); // 返回用户预订的天数
int GetNights(void); // 根据入住的天数显示最终需要支付的金额
double ShowPrice(int choice,int nights);
#endif // HOTEL_H_INCLUDED

hotel.c

#include <stdio.h>
// 自定义的头文件用双引号
#include "hotel.h" char hotelNames[4][50] = {
"贝罗酒店","香榭丽舍酒店","阿斯图里亚斯酒店","斯克里布酒店"
}; int Menu(void) {
int choice; // 用户的选择
int i;
printf("请选择入住的酒店:\n");
for (i = 0; i< 4;i++) {
printf("%d、%s\n",i+1,hotelNames[i]); // 写完就去main中测试一下
} printf("5、退出程序\n"); printf("请输入您的选择:"); int result = scanf("%d",&choice); // 判断是否合法
while ( result !=1 || choice < 1 || choice >5 ) {
if (result != 1) {
scanf("%*s"); // 消除错误的输入
// fflush(stdin);
} printf("必须输入1-5之间的整数:");
result = scanf("%d",&choice);
} return choice;
} int GetNights(void) {
int nights; printf("先生、女士,请输入要入住的天数:"); int result = scanf("%d",&nights); // 判断是否合法
while ( result !=1 || nights < 1) {
if (result != 1) {
scanf("%*s"); // 消除错误的输入
// fflush(stdin);
} printf("必须输入大于1的整数!\n");
printf("先生、女士,请输入要入住的天数:");
result = scanf("%d",&nights);
} return nights;
} double ShowPrice(int choice,int nights) {
double hotelPrice;
double totalPrice = 0;
if (choice == 1) {
hotelPrice = HOTEL1;
} if (choice == 2) {
hotelPrice = HOTEL2;
} if (choice == 3) {
hotelPrice = HOTEL3;
} if (choice == 4) {
hotelPrice = HOTEL4;
} int i;
for (i = 0 ;i<nights ;i ++ ) {
if (i == 0) {
totalPrice = hotelPrice * DISCOUNT;
} else {
totalPrice += hotelPrice * DISCOUNT;
} hotelPrice = hotelPrice * DISCOUNT;
} return totalPrice; }

main.c

#include <stdio.h>
#include <stdlib.h>
#include "hotel.h" // 最好引入一下头文件
extern char hotelNames[4][50]; // 声明为外部变量 int main()
{
int choice;
int nights;
double totalPrice;
// 用户输入入住的酒店和天数,程序计算出对应的金额
// 1.显示菜单 - 封装成函数
choice = Menu(); if (choice > 0 && choice <5) {
printf("当前用户选择的是:%s\n",hotelNames[choice-1]); // 多遇到一些错误,在错误中成长。将顺序思维,改为模块思维。
} if (choice == 5) {
printf("欢迎使用本系统,再见。\n");
exit(0);
} nights = GetNights();
if (nights > 0) {
printf("当前用户选择入住%d天\n",nights); // 多遇到一些错误,在错误中成长。将顺序思维,改为模块思维。
} // 2.计算过程
totalPrice = ShowPrice(choice,nights);
printf("您入住的酒店是:%s \t 入住天数: %d \t 总费用: %0.2f \n",hotelNames[choice-1],nights,totalPrice); printf("欢迎使用本系统,再见。\n");
return 0;
}

头文件有约束作用。可以重复使用。

C语言 - 头文件使用案例的更多相关文章

  1. c语言头文件中定义全局变量的问题

    c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要 ...

  2. 嵌入式C语言头文件的建立与使用

    如何正确编写 C 语言头文件和与之相关联的 c 源程序文件,这首先就要了解它们的各自功能. 要理解 C 文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程. 一般说来编译器会做以下几 ...

  3. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  4. C语言头文件

    最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比 ...

  5. C++标准库头文件名字和C语言头文件名字的区别

    1.C++版本的C标准库头文件,一般是cname,而C语言头文件一般是name.h 2.命名为cname的头文件中定义的名字都是从std中来的,而如果是name.h则不是这样的. 3.与是用name. ...

  6. C语言头文件的使用(转载)

    C语言头文件的使用 ——by janders 转载请注名作者和出处,谢谢! C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐 ...

  7. C语言头文件、库文件的查找路径

    在 程序设计中,文件包含是很有用的.一个大的程序可以分为多个模块,由多个程序员分别编程.有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用.这样,可避免在每个 ...

  8. 用CBrother将excel中的数据转换为C语言头文件

    用CBrother将excel中的数据转换为C语言头文件 最近在工作中,产品这边总是要调整一些参数,而我们在这一块要求所有的配置必须用宏定义来做,因为不同型号直接硬编码写死在代码里,但是一但数量大了, ...

  9. C语言头文件怎么写?(转载)

    ---恢复内容开始--- c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码,还在 ...

随机推荐

  1. MVC微信浏览器图片上传(img转Base64)

    因公司业务需要,需要做一个微信公众号里的图片上传功能,主要用到的技术就是 img转base64 上到服务器 话不多说, 贴代码 先看前端显示出来的东西 OK 图片不重要,看代码 <!--微信图片 ...

  2. java的优先队列注意事项

    在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针.java比较函数的返回值不是bool型,只能是整型. 内部对应的C++匿名函数: // 匿名Comparator实现 ...

  3. OpenCV中的模板匹配/Filter2d

    1.模板匹配 模板匹配是在图像中寻找目标的方法之一.Come On, Boy.我们一起来看看模板匹配到底是怎么回事. 参考链接:http://www.opencv.org.cn/opencvdoc/2 ...

  4. 读白帽子web安全笔记

    点击劫持 frame buseting if (top.location != location) { top.location = self.location } html5的sandbox属性   ...

  5. 用批处理实现垃圾文件清除/自动关机/清除copy病毒

    晚上睡觉之前为了下emule经常使用命令shutdown,最近受一个小程序影响想做个自动关机的批处理文件免的麻烦!网上有高手做了个,不过运行时出 现一个绑定错误,at也不能执行,所以后来自己做了简化版 ...

  6. 【转】Linux rpm 命令参数使用详解[介绍和应用]

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  7. Redis-RDB持久化设置

    1.如何配置RDB持久化机制redis.conf文件,也就是/etc/redis/6379.conf,去配置持久化 save 60 1000 每隔60s,如果有超过1000个key发生了变更,那么就生 ...

  8. commons.dbutils 的使用列子

    c0p3的导入请参考前文 https://www.cnblogs.com/appium/p/10183016.html JdbcUtils: package cn.itcast.jdbc; impor ...

  9. SQL语句注意得问题

    1/不要使用count(列明)或count(常量)来替代count(*),count(*)是SQL92定义得标准统计行数得语法,跟数据库无关,跟NULL和非NULL无关. 说明:count(*)会统计 ...

  10. 切换原生appium里面H5页面

    #coding = utf-8from appium import webdriverimport time'''1.手机类型2.版本3.手机的唯一标识 deviceName4.app 包名appPa ...