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

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

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. C#微信公众号的开发——服务配置

    最近因为需要用C#开发微信公众号的一些功能,记录一下开发公众号的一些坑..... 首先先介绍一下,微信公众号的官方文档.虽然这个文档我感觉比较糙,但是还是可以借鉴一下让我们摸着石头过河的. 首先我们得 ...

  2. netty 引用计数对象(reference counted objects)

    [Netty官方文档翻译]引用计数对象(reference counted objects) http://damacheng009.iteye.com/blog/2013657

  3. openMSP430之io_test

    openMSP430: IO functionality test with interupt #include "omsp_system.h" volatile char shi ...

  4. bootstrap 模态框日期控件datepicker被遮住问题的解决

    找到日期输入框,并将  .class 属性的 z-index 改大 在JSP页添加样式: 这样就OK了:

  5. HDU_5810_数学,概率,方差

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5810 大意:将n个球往m个盒子中投,每个球被投入每个盒子的概率相等,求方差. 看题解说,这是二项分布( ...

  6. Appium Android 获取包名和 Activity 的几种方法 (转)

    本文档主要记录“获取包名和 Activity 的方法”,用于自动化测试时启动APP.以下方法主要来源于网络和社区同学的贡献,特此感谢! 1. 方法一: pm list package查看包名 adb ...

  7. Graph network classification(As a beginner, continue to update)

    Data arrangement 1.Reference Webs http://nlp.csai.tsinghua.edu.cn/~tcc/ https://blog.csdn.net/a60964 ...

  8. apicloud UISearchBar 使用方法

    app中经常会有搜索的页面. 大概逻辑是,一般来说首页有一个搜索的图,点击之后跳转到一个搜索的页面,在这个页面做搜索. 正常代码逻辑 <body> <a class="bu ...

  9. SSO 单点登录解决方案

    转自:http://www.blogjava.net/Jack2007/archive/2014/03/11/191795.html 1 什么是单点登陆      单点登录(Single Sign O ...

  10. 阿里云服务器centos7环境下安装xampp后,mysql有进程,但是却没有监听3306端口

    配置阿里云服务器centos7中xampp环境时出现了一种情况: 在centos中可以使用命令进入mysql 修改后也可以远程用phpmyadmin连接mysql 但是用navicat却无法连接 先修 ...