1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. struct CDAccount
  7. {
  8. double balance; //余额
  9. double rate; //利息
  10. int term; //存期
  11. };
  12.  
  13. struct Date
  14. {
  15. int year;
  16. int month;
  17. int day;
  18. };
  19.  
  20. struct Person
  21. {
  22. string name;
  23. Date birthday;
  24. CDAccount account;
  25.  
  26. };
  27.  
  28. //****************************************
  29. void get_data(CDAccount& account);
  30. double caculate_balance(CDAccount account);
  31. Person get_person_data(void);
  32. void display_person(Person* person);
  33.  
  34. //***************************************
  35. //process entry
  36. int main(int argc,char* argv[]) try
  37. {
  38. //*********************
  39. //演示结构体的一般用法
  40. CDAccount marry;
  41.  
  42. //获取数据
  43. get_data(marry);
  44.  
  45. //计算利息 结构体成员赋值
  46. marry.balance = caculate_balance(marry);
  47.  
  48. //输出信息
  49. cout<<"marry的账户余额为:"<<marry.balance<<endl;
  50.  
  51. CDAccount bob;
  52.  
  53. //结构体整体赋值
  54. bob = marry;
  55.  
  56. cout<<"bob的账户余额为:"<<bob.balance<<endl ;
  57.  
  58. //结构体初始化
  59. CDAccount lee = {,0.12,};
  60.  
  61. //visual c++ 不支持下面的初始化方式, g++支持,属于实现的扩展,本身不是C++的一部分功能
  62. /*CDAccount jack = {
  63. .balance = 4000;
  64. .rate = 0.5;
  65. .term = 10;
  66. }*/
  67.  
  68. //***************************
  69. //演示嵌套结构体的用法
  70. Person dudo;
  71.  
  72. //输入个人信息, 函数返回结构体
  73. dudo = get_person_data();
  74.  
  75. display_person(&dudo);
  76.  
  77. char ch;
  78. cin>>ch;
  79. return ;
  80. }
  81. catch(...)
  82. {
  83. cout<<"捕捉到异常"<<endl;
  84. }
  85.  
  86. //获取数据 函数传递结构引用
  87. void get_data(CDAccount& account)
  88. {
  89. cout<<"请输入本金、利率和存期(存期以月份计算,最大为12个月):";
  90. cin>>account.balance;
  91. cin>>account.rate ;
  92. cin>>account.term ;
  93. }
  94.  
  95. //计算余额 函数传递结构体
  96. double caculate_balance(CDAccount account)
  97. {
  98. double balance;
  99.  
  100. balance = account.balance + account.balance * account.rate * account.term;
  101.  
  102. return balance;
  103. }
  104.  
  105. //获取个人信息
  106. Person get_person_data(void)
  107. {
  108. Person person;
  109. cout<<"请输入账户名称,生日(年、月、日):";
  110. cin>>person.name >>person.birthday.year >>person.birthday.month>>person.birthday.day ;
  111.  
  112. cout<<"请输入"<<person.name <<"的信息,本金、利息和存期(存期最大12个月):";
  113. cin>>person.account.balance >>person.account.rate >>person.account.term ;
  114.  
  115. return person;
  116. }
  117.  
  118. //显示信息, 演示结构体指针变量的使用
  119. void display_person(Person* person)
  120. {
  121. cout<<"名字是:"<<person->name<<endl;
  122. cout<<"生日是:"<<person->birthday.year<<"-"<<person->birthday.month<<"-"<<person->birthday.day<<endl;
  123. cout<<"账户信息:"<<person->account.balance<<"\t"<<person->account.rate<<'\t'<<person->account.term<<endl;
  124.  
  125. }

C++_系列自学课程_第_12_课_结构体的更多相关文章

  1. C++_系列自学课程_第_12_课_语句_《C++ Primer 第四版》

    前面的文章说完了表达式和类型转换的部分内容,在我参考的书里面,接下来讨论的是各种语句,包括:顺序语句.声明语句.复合语句(块语句).语句作用域 .if语句.while语句.for语句.do...whi ...

  2. C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》

    说到数组,大家应该都很熟悉,在C.Pascal.Java等语言中,都有数组的概念.在C++中也提供了对数组的支持.数组简单来说就是一堆相同 数据类型对象的集合. 这里要把握住两个要点: 相同的数据类型 ...

  3. C++_系列自学课程_第_6_课_bitset集_《C++ Primer 第四版》

    在C语言中要对一个整数的某一个位进行操作需要用到很多的技巧.这种情况在C++里面通过标准库提供的一个抽象数据类型 bitset得到了改善. 一.标准库bitset类型 1.bitset的作用 bits ...

  4. C++_系列自学课程_第_5_课_vector容器_《C++ Primer 第四版》

    再一次遇到 vector 这个单词; 每一次见到这个单词都感觉这个单词非常的 "高大上"; 数字遇到vector马上就可以360度旋转: 当 "电" 遇到vec ...

  5. C++_系列自学课程_第_3_课_变量和基本类型_《C++ Primer 第四版》

    最近复习C++相关内容,决定在这里记录自己复习的过程. 以前写过部分文字,但是没有坚持连续写,因此学完后 基本又忘光啦,主要是没有实践,这一次决定自学完后,在这里在复习一遍增强自己的记忆和理解程度. ...

  6. C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》

    上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符 ...

  7. C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》

    程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一 ...

  8. C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》

    前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...

  9. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

随机推荐

  1. 原生JS实现-星级评分系统

    今天我又写了个很酷的实例:星级评分系统(可自定义星星个数.显示信息) sufuStar.star();使用默认值5个星星,默认信息 var msg = [........]; sufuStar.sta ...

  2. 使用apache自带日志分割模块rotatelogs,分割日志

    rotatelogs 是 Apache 2.2 中自带的管道日志程序,参数如下(参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotat ...

  3. Linux初识

    在这篇文章中你讲看到如下内容: 计算机的组成及功能: Linux发行版之间的区别和联系: Linux发行版的基础目录及功用规定: Linux系统设计的哲学思想: Linux系统上获取命令帮助,及man ...

  4. nginx启动报错:/usr/local/nginx/sbin/nginx: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

    查看依赖库:

  5. ola.hallengren的SQL Server维护脚本

    ola.hallengren的SQL Server维护脚本 下载地址 http://files.cnblogs.com/files/lyhabc/ola.hallengrenMaintenanceSo ...

  6. XSS 前端防火墙 —— 可疑模块拦截

    上一篇介绍的系统,已能预警现实中的大多数 XSS 攻击,但想绕过还是很容易的. 由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出 ...

  7. Android(3)—Mono For Android App版本自动更新(2)

    0.前言 这篇博文是上一篇的延续,主要是修改上一个版中的BUG和优化一些待完善的项,也算是结贴,当然还有需要完善的,等日后项目中用到的时候再单独写出来吧,本篇主要写升级改进的部分: 改进1.修复[BU ...

  8. SVG:textPath深入理解

    SVG的文本可以沿着一条自定义的Path来排布,比如曲线.圆形等等,使用方式如下所示(来源MDN): <svg viewBox="0 0 1000 300" xmlns=&q ...

  9. U3D DrawCall优化手记

    在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...

  10. MailKit---获取邮件

    MailKit是一个免费开源的邮箱类库,简单来说MailKit帮我们封装了有关邮箱的一些帮助类,提供方法让我们更容易使用邮箱的Smtp,Imap等邮箱协议. 现在的邮箱基本上都使用smtp协议从邮件服 ...