TableOfContents

面向对象课程设计

1. 通讯录

数据定义:

功能说明:

输入输出格式:程序以命令行方式交互式运行,命令包括:

使用举例:

添加联系人,姓名叫做czk
 * add czk 
为czk添加属性mobile
 * update czk add phone mobile 13587654600  
为czk添加属性work
 * update czk add phone work 614600 
为czk添加属性qq
 * update czk add numeric qq 245149 
为czk添加属性birth
 * update czk add date birth 1979 8 27 
为czk添加属性email
 * update czk add text email czk@wzu.edu.cn 
添加联系人ymc
 * add ymc 
 * update ymc add phone mobile 13958895577
 * update ymc add phone work 665577
 * update ymc add text email jsj_ymc@wzu.edu.cn
显示所有的联系人
 * list 
显示czk的详细信息
 * show czk  
查找4600,应该可以找到czk
 * search 4600  
查找wzu.edu.cn,应该可以找到czk和ymc
 * search wzu.edu.cn 
把czk的email属性改为另一个值
 * update czk update email czk19790827@gmail.com 
删除czk的mobile属性
 * update czk remove mobile
将所有联系人存入contact.dat文件 
 * save contact.dat 
删除联系人ymc
 * remove ymc 
从contact.dat载入所有联系人信息(当前内存中的所有联系人被清空,替换成文件中所存储的联系人)
 * load contact.dat 

参考设计图:

1.1. 第一步

首先,做一个可以运行的主程序框架,可以接受输入各种指令,但是还不能实现任何功能。

   1 #include <iostream>
   2 #include <string>
   3 using namespace std;
   4 
   5 int main() {
   6     string command;
   7     string prompt = ">>> ";
   8     cout << prompt;
   9     while (cin >> command) {
  10         if(command == "list") {
  11 
  12         } else if(command == "show") {
  13 
  14         } else if(command == "add") {
  15 
  16         } else if(command == "remove") {
  17 
  18         } else if(command == "update") {
  19             
  20         } else if(command == "search") {
  21 
  22         } else if(command == "save") {
  23 
  24         } else if(command == "load") {
  25 
  26         } else if(command == "exit") {
  27             return 0;
  28         } else {
  29             cout << "Unknown command" << endl;
  30         }
  31         cout << prompt;
  32     }
  33 }

运行这个程序,输入正确命令不会有结果,输入错误命令提示Unknown command,输入exit退出程序。

1.2. 第二步

先定义一个简单的Contact类:

   1 class Contact {
   2     string name; // the name of contact
   3 public:
   4     /** 初始化联系人名字为n*/
   5     Contact(string n) {
   6         /*......*/
   7     }
   8     /** 取联系人的名字 */
   9     string get_name() {
  10         /*......*/
  11     }
  12 
  13 };

然后定义ContactList类,实现add和取成员的功能

   1 class ContactList{
   2     Contact *all[100]; ///< 联系人数组
   3     int num; ///< 数组中的联系人总数
   4 public:
   5     /** 初始化列表为空表 */
   6     ContactList() {
   7         /*......*/
   8     }
   9     /** 在列表中添加一个名字叫做name的联系人 */
  10     void add(string name) {
  11         /*......*/
  12     }
  13     /** 取第i个联系人 */
  14     Contact* at(int i) {
  15         /*......*/
  16     }
  17     /** 列表中联系人总数 */
  18     int size() {
  19         /*......*/
  20     }
  21 };

最后修改main函数,使它可以完成添加、列出清单的功能

   1 //......
   2         if(command == "list") {
   3             for(int i = 0; i < contacts.size(); i++)
   4                 cout << contacts.at(i)->get_name() << endl;
   5         } else if(command == "add") {
   6             string name;
   7             cin >> name;
   8             contacts.add(name);
   9         }
  10 //......
  11 

运行这个程序,可以完成add和list的功能

1.3. 第三步

1.4. 第四步

1.5. 第五步

2. 个人财务软件

设计一个基于字符界面的个人财务软件,基本功能包括:

  1. 账户管理。包括:添加、删除、修改账户
    • 账户分为4类:资产、债务、收入、支出。
    • 资产账户是指个人所拥有的财产,比如现金、存款、借出款、股票等。
    • 债务账户是指个人所欠的债务,比如借入款,贷款等。
    • 支出账户是指个人的支出,比如交通、餐饮、购物、房租等
    • 收入账户是指个人的收入,比如工资、奖金、利息等
    • 每个资产账户和债务账户都有初始值。
  2. 交易管理(添加、删除交易,设置交易属性)
    • 交易用于完成在各个帐户之间的财务的转移,每笔记录有时间、转出账户、转入账户、金额、说明等属性。
    • 收入账户只能作为转出账户。支出账户只能作为转入账户。
  3. 统计功能
    • 统计各个资产账户和债务帐户的当前状况
    • 统计历史一段时间内的收入和支出状况
    • 统计一个账户的所有历史交易
  4. 存盘和读取
    • 所有操作能够自动存盘,下次打开程序时能够从磁盘读取,恢复到关闭程序前一样的状态。

使用举例:

刚开始使用可以设置如下账户:

每个资产账户和债务账户设置好初始值。然后开始记录每一笔交易:

3. 画板

设计一个图形编辑软件,基本功能包括:

ch3n2k.com | Copyright (c) 2004-2020 czk.