杂志订阅管理系统设计

该文详细描述了一个杂志订阅管理系统的课程设计任务,包括系统功能如增加新订户、查询、编辑、删除、统计、保存和读取等功能要求,以及系统设计的步骤,如需求分析、概要设计、详细设计、测试和总结。此外,还提到了编程规范、测试用例和成绩考核标准。
摘要由CSDN通过智能技术生成

课程设计任务书

1.课程设计内容及要求

根据分组完成相应的题目,每组的成员自行分配题目中的相应任务。

题目:杂志订阅管理系统

1)问题描述 使用计算机对杂志进行管理,该杂志最多拥有订阅用户不超过 50 人,每个订户的信息 包括:编号,姓名,性别,电话号码,杂志单位,订阅数,订阅期限(某年某月) 。

2)功能要求:

 (1)增加新订户,即将新订户的全部信息输入到文件中。

 (2)查询功能:可根据订户姓名、性别、单位对已添加的记录进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息。

 (3)显示功能:可显示当前系统中所有记录,每条记录占据一行。

 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性.

 (5)删除功能:根据当天的日期对新订户全部信息进行查询,删除已到期的订户记录。 删除记录时要有提示功能。

 (6)统计功能:能根据多种参数进行统计。能统计性别、订阅数、订阅期限信息等。 例如:统计本期杂志订户数并打印运算结果 本期订阅信息

 订户名 订阅数 单价 全额

 李平     2     5.5  11.0

 黄海     1     5.5   5.5

 合计     3     1.0  16.5

 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。

 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 

3)问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤:

 (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

 (2)分析系统中的各个实体及它们之间的关系;

 

课程设计任务书

1.课程设计内容及要求

根据分组完成相应的题目,每组的成员自行分配题目中的相应任务。

题目:杂志订阅管理系统

1)问题描述 使用计算机对杂志进行管理,该杂志最多拥有订阅用户不超过 50 人,每个订户的信息 包括:编号,姓名,性别,电话号码,杂志单位,订阅数,订阅期限(某年某月) 。

2)功能要求:

 (1)增加新订户,即将新订户的全部信息输入到文件中。

 (2)查询功能:可根据订户姓名、性别、单位对已添加的记录进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息。

 (3)显示功能:可显示当前系统中所有记录,每条记录占据一行。

 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性.

 (5)删除功能:根据当天的日期对新订户全部信息进行查询,删除已到期的订户记录。 删除记录时要有提示功能。

 (6)统计功能:能根据多种参数进行统计。能统计性别、订阅数、订阅期限信息等。 例如:统计本期杂志订户数并打印运算结果 本期订阅信息

 订户名 订阅数 单价 全额

 李平     2     5.5  11.0

 黄海     1     5.5   5.5

 合计     3     1.0  16.5

 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。

 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 

3)问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤:

 (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

 (2)分析系统中的各个实体及它们之间的关系;

 (3)根据问题描述,设计系统的类层次;

 (4)完成类层次中各个类的描述;

 (5)完成类中各个成员函数的定义;

 (6)完成系统的应用模块;

 (7)功能调试;

 (8)完成系统总结报告。

2.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕

要求:

一、 需求分析

在该部分中根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么?以及限制条件是什么?

1.1问题描述

1.2基本要求

(1) 输入的形式和输入值的范围;

(2) 输出的形式;

(3) 程序所能达到的功能。

二 、概要设计

说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。

1、数据结构

2、程序模块

3、各模块之间的调用关系以及算法设计

三 、详细设计

实现概要设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机上直接输入高级语言程序);写出函数和过程的调用关系。

四 、测试与分析

设计测试用例,输出测试的结果。这里的测试数据应该完整和严格,并对结果进行分析。

五 、总结

总结可以包括:面向对象程序设计实践过程的收获、遇到问题、解决问题过程的思考、程序调试能力的思考、面向对象程序设计与面向过程编程的区别和联系、对《面向对象程序设计》这门课程的思考、对《面向对象程序设计》课程的认识等内容。

编程要求

编码规范、测试完整(每个函数,都有函数头说明;程序代码中包含必要的注释和说明

3.主要参考文献

  1. 邵兰洁.C++面向对象程序设计.北京:清华大学出版社,2015
  2. 钱能.C++程序设计教程.北京:清华大学出版社,2013年
  3. 谭浩强.C++程序设计(第三版).北京:清华大学出版社,2016年

4.课程设计进度安排

起 止 日 期

工  作  内  容

2023年 6月 26日

2023年 6月 27日

2023年 6月 28日

2023年 6月 29日

2023年 6月 30日

需求功能分析,程序框架设计

编码、调试

编码、调试

编码、调试、测试

验收、答辩、撰写报告

5.成绩考核办法

程序设计30%;设计报告20%;答辩验收50%。

教研室审查意见:

二级学院(部)意见:

 

1.需求分析

1.1  问题描述

1.2  基本要求

2. 概要设计

2.1  数据结构

2.2  程序模块

2.3  各模块之间的调用关系以及算法设计

3. 详细设计

4. 测试结果与分析

5. 总结与心得

参考文献

 

1.需求分析

1.1 问题描述

网吧管理系统管理信息包括会员的会员名、性别、年龄、积分等。试设计一网吧管理系统,使之能提供以下功能:系统以菜单方式工作,采用密码登录,登陆后可以实现对会员账号的增删改查等操作。

1.2 基本要求

(1)增加新订户,即将新订户的全部信息输入到文件中。

 (2)查询功能:可根据订户姓名、性别、单位对已添加的记录进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息。

 (3)显示功能:可显示当前系统中所有记录,每条记录占据一行。

 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性.

 (5)删除功能:根据当天的日期对新订户全部信息进行查询,删除已到期的订户记录。 删除记录时要有提示功能。

 (6)统计功能:能根据多种参数进行统计。能统计性别、订阅数、订阅期限信息等。 例如:统计本期杂志订户数并打印运算结果 本期订阅信息

 订户名 订阅数 单价 全额

 李平     2     5.5  11.0

 黄海     1     5.5   5.5

 合计     3     1.0  16.5

 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。

 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

1)输出的形式和输入值的范围

在开始时输入1~8整数数字来选择要操作的选择项

2) 输出的形式

提示输出数据的数据类型,以及输出对应的用户基本信息

3)程序所能达到的功能

订阅者信息的录入(增加数据)。用结构体和类的数据类型赋初值的方法把订阅者信息送到各个数组中(但要注意使合法数据),然后把它们保存起来。

订阅者信息的显示(查找显示数据)。任意输入一位编号,将他所有的信息从结构体中读取出来。

订阅者信息的编辑(编辑数据)。任意输入一位编号,即可修改他的所有数据。要求能多次修改。

过期订阅者信息的删除(删除数据)。任意输入一位订阅期限编号,删除这个订阅期限内的所有订阅者信息。

订阅者信息的计算统计(统计信息)。自行运算订阅者订阅本数,并结合订阅单价计算出订阅总价,

然后把它们打印出来。

订阅者信息的保存(保存信息)。将订阅者信息保存到文件中。

订阅者信息的加载(加载信息)。再次进入系统后,可以从之前保存的文件中读取到先前保存的订阅者信息。

2. 概要设计

2.1 数据结构

采用了线性结构来实现模块间的调用。

2.2 程序模块

struct MagazineSubscriber//订阅杂志的用户的结构体函数

class MagazineManagementSystem//杂志管理系统类

void addSubscriber()//添加订阅者信息函数

void displayAllSubscribers()//显示订阅者信息函数

void editSubscriber()//编辑订阅者信息函数

void deleteExpiredSubscribers(const string& currentDate)//删除过期订阅者信息函数

void calculateStatistics()//计算统计订阅者信息函数

void saveToFile()//保存订阅者信息到文件函数

void loadFromFile()//从文件中加载订阅者信息函数

void displaySubscriber(const MagazineSubscriber& subscriber)// 添加订阅者信息具体函数

void SetConsoleColor(int color)// 设置控制台文本颜色函数

int getWindowWidth()//获取控制台窗口的宽度函数

void printCentered(const std::string& str)// 计算每行输出字符串前面需要添加的空格数量,使其在控制台窗口居中函数

void menu()//主菜单函数

2.3各模块之间的调用关系以及算法设计

 

3. 详细设计

    void editSubscriber()

    {

        int id;

        cout << "输入要编辑的编号: ";

        cin >> id;

        cin.ignore(); //用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响

        /* b为数组或容器,是被遍历的对象

           for(auto &a:b),循环体中修改a,b中对应内容也会修改

           for(auto a:b),循环体中修改a,b中内容不受影响

           for(const auto &a:b),a不可修改,用于只读取b中内容

        */

        for (auto& subscriber : subscribers)

        {

            if (subscriber.id == id)

            {

                cout << "输入新的姓名: ";

                getline(cin, subscriber.name);

                cout << "输入新的性别: ";

                getline(cin, subscriber.gender);

                cout << "输入新的电话号码: ";

                getline(cin, subscriber.phoneNumber);

                cout << "输入新的部门单位: ";

                getline(cin, subscriber.companyName);

                cout << "输入新的订阅数: ";

                cin >> subscriber.subscriptionCount;

                cin.ignore();

                cout << "输入新的订阅期限 (某年某月): ";

                getline(cin, subscriber.subscriptionDeadline);

                cout << "订户信息更新成功!" << endl;

                system("pause"); //调用pause命令,等待用户按任意键,然后返回,等同于getchar()

                system("cls"); //清屏

                return;

            }

        }

        cout << "未找到相应编号的订户" << endl;

        system("pause");

        system("cls");

    }

编辑订阅者信息函数,首先用for(auto &a:b),使循环体中修改a,b中对应内容也会修改,之后用if语句判断是否存在该编号的订阅者,如果不存在则显示未找到相应编号的订户,如果存在则继续下列操作。首先创建一个结构体变量,用此变量来保存输入的订阅者信息,在创建一个变量id以此来保存要编辑的订户编号,中间用cin.ignore()函数消除上一次输入对下一次输入的影响。最后用push_back()函数来将最初定义的变量中保存的新增的订户信息存入vector容器中。

    void deleteExpiredSubscribers(const string& currentDate)

    {

        vector<MagazineSubscriber> validSubscribers;

        for (const auto& subscriber : subscribers)

        {

            if (subscriber.subscriptionDeadline > currentDate)

            {

                validSubscribers.push_back(subscriber);

            }

        }

        int deletedCount = subscribers.size() - validSubscribers.size();

        subscribers = validSubscribers;

        if (deletedCount > 0)

        {

            cout << deletedCount << "个过期订户被删除!" << endl;

        }

        else

        {

            cout << "没有找到过期订户!" << endl;

        }

        system("pause");

        system("cls");

    }

删除过期订阅者信息函数,首先用for(const auto&a:b)函数只读取b,也就是vector容器中的内容,之后用if语句判断订户订阅日期是否过期,如果有则用push_back()函数来将最初定义的变量中保存的目前的订户信息存入vector容器中。然后计算删除的个数,用if语句判断有无过期订户被删除,如果没有过期则显示没有找到过期订户,如果有则显示n个过期订户被删除。

void displaySubscriber(const MagazineSubscriber& subscriber)

    {

        cout << "编号: " << subscriber.id << endl;

        cout << "姓名: " << subscriber.name << endl;

        cout << "性别: " << subscriber.gender << endl;

        cout << "电话号码: " << subscriber.phoneNumber << endl;

        cout << "部门单位: " << subscriber.companyName << endl;

        cout << "订阅数: " << subscriber.subscriptionCount << endl;

        cout << "订阅期限: " << subscriber.subscriptionDeadline << endl;

        cout << endl;

        system("pause");

        system("cls");

}

打印订阅者信息函数。首先用引用的方式调用订阅者信息,并且对此信息只调用不修改,用cout语句打印订阅者的各类信息。

4. 测试结果与分析

  1. 如图4-1 测试结果图1,输入1开始添加订阅者, 所有信息添加完成后会提示“添加成功!”

2.如图4-2 测试结果图2,输入2显示添加过的所有订阅者信息

(3) 如图4-3 测试结果图3,输入3后,输入订阅者的信息编号,可以重新编辑订阅者的信息,编辑完成后会提示“订户信息更新成功!”

(4) 如图4-4 测试结果图4,再次输入2会显示更新后的信息

(5) 如图4-5 测试结果图5,输入5会显示统计过后的订阅者信息,其中包括订户名、订阅数、单价及金额

(6) 如图4-6 测试结果图6,输入6后所有信息将会被保存到文件中,再次进入系统后可以从文件中加载,查看订阅信息

(7) 如图4-7 测试结果图7,再次进入系统后,不能直接显示订阅信息

(8) 如图4-8 测试结果图8,需要先从文件中加载信息

(9) 如图4-9 测试结果图9,再次选择显示所有订阅者后,即可显示所有订阅者信息

(10) 如图4-10 测试结果图10,输入4后,输入已过期的订阅期限即可删除这个期限内的所有订阅者信息

(11) 如图4-11 测试结果图11,删除后再次选择显示信息则不会出现删除过的信息

5. 总结与心得

C++是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。 在为期近周的C++课程设计中,我体会颇多,学到了很多东西。我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!明白只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。

在我们小组有解决不了的问题时,我们会主动查阅相关的资料,或向其他同学询问,这不仅丰富了我们的知识,还增进了我们同学之间的友谊。为了增大信息的安全性,需要用文件来存储信息,由于我们在上课时不注重对文件的运用,所以在这方面有较大的困难。我先将书本认认真真地看了一遍,又做了一下课后习题来验证和增进自己的理解,终于,经过我们的不懈努力,我们小组的程序有了突破,成功地实现了用文件来保存并查看学生的信息。

设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点:

1. 首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用;

2. 学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便;

3. 解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方!

4. 在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C++编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C++编写这些小游戏。曾经认为C++是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具!

在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。由于我们是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫不负有心人,我们成功了!

参考文献

1、邵兰洁.C++面向对象程序设计.北京:清华大学出版社,2015年

2、钱能.C++程序设计教程.北京:清华大学出版社,2013年

3、谭浩强.C++程序设计(第三版).北京:清华大学出版社,2016年

评阅意见:                                                 

                                                           

                                                           

教师签名:                         年   月   日

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
杂志订阅管理系统可以分为以下几个模块: 1. 用户管理模块:包括用户注册、登录、个人信息管理、订阅管理等功能。用户可以通过注册账号登录系统,管理个人信息和订阅杂志。 2. 杂志管理模块:包括杂志的分类、添加、删除、修改等功能。管理员可以对杂志进行管理,包括添加、删除、修改以及分类等操作。 3. 订单管理模块:包括用户订阅杂志生成订单、订单查询、订单支付、订单取消等功能。用户可以通过订阅杂志生成订单,并进行支付和取消。 4. 报表统计模块:包括用户订阅情况、杂志销售情况等统计报表。管理员可以查看各种报表,方便管理和决策。 以下是该系统的设计: 1. 数据库设计: 用户表:包括用户ID、用户名、密码、邮箱、性别、生日、注册时间等字段。 杂志表:包括杂志ID、杂志名称、杂志价格、杂志类别等字段。 订单表:包括订单ID、用户ID、杂志ID、订单时间、订单状态等字段。 2. 后端设计: 使用Java语言开发后台,采用Spring Boot框架,搭建RESTful API接口。 使用MyBatis框架操作数据库,实现对用户、杂志、订单等信息的增删改查。 使用Spring Security框架实现用户登录认证和权限控制。 使用Quartz框架实现定时任务,如杂志订阅到期提醒等。 3. 前端设计: 使用HTML、CSS、JavaScript等技术,使用Bootstrap框架实现响应式布局。 使用Vue.js框架实现前端页面交互效果。 4. 部署环境: 使用Docker容器化技术,将应用程序和数据库打包为镜像,方便部署和维护。 使用Nginx反向代理和负载均衡,提高应用的性能和可用性。 以上是杂志订阅管理系统设计方案,可以根据实际需求进行适当调整和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miraitowa....

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值