班级 姓名 学号
答辩情况
考核项 | 满分成绩 | 得分 |
---|---|---|
掌握计算机系统软硬件资源管理的原理,能够设计针对计算机领域复杂工程问题的解决方案,设计满足特定需求的软硬件系统,并具有对解决方案在特定约束条件下进行工程设计和开发的能力。 | 30 | |
能够针对计算机软硬件系统、模块或算法流程的设计方案,在复杂度、易用性、并发性、可靠性、经济性等方面进行分析和评价,并能够进行模块和系统级优化。 | 30 | |
能够针对计算机领域复杂工程问题,分析不同解决方案所设计的相关因素,以及该问题对社会、健康、安全、法律、文化的影响,在此基础上进行评价和权衡,并提出最终解决方案。 | 20 | |
能够分析所使用的技术、资源和工具的优势和不足,理解其局限性。 | 10 | |
理解技术环境的多样化以及应用发展和技术进步对于知识和能力的影响和要求。 | 10 | |
总分 | ||
学院
《小说APP》大作业
系(院): 计算机与软件工程学院
专 业: 班 级:
学生姓名: 学号:
课题名称: 看书软件
任课教师:
学年学期: 2021 ~ 2022 学年 第 2 学期
2022年 6 月 3 日
目 录
1 引言11
1.1 背景11
2 可行性分析22
2.1 用户需求22
2.2 行业推进44
2.3 用户群体44
2.4 占有率55
3 系统分析55
3.1 用例图55
3.2 系统设计77
4 软件界面88
总结1717
1 引言
1.1 背景
随着互联网的一步步发展,手机APP逐渐深入到每一个用户生活当中,企业为了扩展消费人群,开始朝着手机APP方向发展,在线小说阅读一直与文娱产业的火爆项目,小说APP开发在移动网络中蓬勃发展也是合情合理的。潇湘书院、红袖添香等阅读网站一直是深受网民们欢迎的频道,现在身为文学创作大咖的他们纷纷从传统的在线阅读公司转型到移动端小说APP发展。
数字阅读指的是阅读的数字化,主要有两层含义:一是阅读对象的数字化,也就是阅读的内容是以数字化的方式呈现的,如网络小说、电子地图、数码照片、博客、网页等等;二是阅读方式的数字化,就是阅读的载体、终端不是平面的纸张,而是带屏幕显示的电子仪器,如PC电脑、PDA、MP3、MP4、笔记本电脑、手机、阅读器等等目前在中国移动阅读的市场上,有付费阅读、硬件销售、出版发行等盈利模式,而行业内最主要的商业模式是付费阅读模式。
移动阅读又或者是数字阅读,是指用户借助手机、平板电脑、电子阅读器等移动终端进行阅读行为,包含电子书、有声读物、杂志、漫画、新闻等内容。移动阅读的定义包括广义与狭义,其中广义的移动阅读是指使通过移动终端进行的所有阅读行为;狭义的移动阅读是指用移动终端进行定向阅读的行为。我国移动阅读大致经历了四个阶段,分别是从2003年到2005年的探索期;从2006年到2010年的市场启动期;从2011年到2018年的高速发展期;从2019年至今处于应用成熟期。
移动端阅读发展之迅速也在其不同期间有着不同的特色,其经历的发展阶段如图1-1所示
图1-1 中国移动阅读发展阶段
2 可行性分析
2.1 用户需求
随着时代的发展,加之生活节奏变快,碎片化阅读成为主流的阅读方式。在此背景下,在线读书行业迎来发展机遇。根据艾媒咨询数据显示,2021年中国在线读书市场规模达到了372.1亿元,未来将继续保持良好增长势头。
2020年至今,因为疫情的原因,人们在休闲娱乐的时间支出增长,娱乐需求激增,用户参与度提升,而纸质书购入困难,在线阅读的优势更加凸显。现阶段,人们在线读书平台上的消费习惯已经养成,这也为在线读书行业带来了更好的发展环境。从长远发展角度来看,今后在线读书平台更应聚焦于业务创新,持续释放数字阅读价值。
选自2020年1月—2021年3月的中国区App Store数据,阅读类应用月下载总量,基本每个月都能保持在2600万次以上的下载量增长,如图2-1所示
图2-1 阅读类应用月下载总量
在我国移动阅读行业头部企业中,腾讯系APP使用时长拔得头筹,在2020年1-7月月均使用时长突破250小时,最高使用时长在3月份,达到269.8小时,而后逐渐减少,APP使用时长到7月份降至225.1小时;百度系APP使用时长波动最小,且在3月后不降反增,到7月份逆势增长到132.8小时。
从使用时长来看,2021年下半年,我国移动阅读行业APP用户月均使用时长在15.6小时左右,2022年1-7月APP用户月均使用时长在16小时左右;在2022年3月之后,我国移动阅读APP用户月均使用时长逐渐下降,7月份降为14.5小时,环比下降2.68%。
中国移动阅读用户月均使用时长情况如图2-2所示
图2-2 移动阅读用户月均使用时长
在2020年2季度,我国移动阅读市场应用活跃用户人均启动次数最高的是掌阅APP,达到395.34次,人均使用时长为63.38小时;其次是QQ阅读APP,人均启动次数305次,人均使用时长最长,达到75.51小时;排名第三的是宜搜小说APP,人均启动次数为256.63次,人均使用时长为67.71小时。
2020年2季度中国移动阅读应用活跃用户人均行为排行榜TOP10如图2-3所示
图2-3 移动阅读应用活跃用户排行榜
2.2 行业推进
为推动行业的持续发展,政府相继发布移动阅读相关政策,2017年国家立法推动全民阅读,发布《全民阅读“十三五”时期发展规划》,将“推动全民阅读”纳入国家规划纲要,全民阅读工程被列为“十三五”时期文化重大工程之一;指出要加强对数字化阅读的规范和引导,推动传统阅读和数字阅读相融合。
其相关政策如图2-4所示
图2-4 移动阅读相关政策
2.3 用户群体
移动端小说的目标群体主要可以分为三部分,第一部分是散户,书旗小说在各大软件应用市场都有广告推送,有些人自主选择了书旗小说,就阅读而言目前很多小说阅读平台不管是从内容还是模式上都非常相似,散户可以做出多种选择。第二部分是UC客户引流,对于互联网应用来说,基因体系非常重要,UC收购书旗小说之后进行了界面版块重整,而且UC作为国内第一大手机浏览器供应商有着庞大的客户群体,自然可以进行有效引流。第三通过阿里文学资源进行引流,从网络数据来看,之前的淘宝阅读60%以上的用户都变成了书旗小说的用户,被阿里收购以后,书旗小说不仅嫁接了淘宝阅读的内容版权,功能也更加丰富。
2.4 占有率
网络文学经过十余年的野蛮生长已变得相对成熟,有一个合理的盈利链条,但更多的是集中在PC端,而随着移动互联网时代的到来,网络文学也发生了相应的变化,带来了另一次发展契机,各大互联网公司都争相布局。如:腾讯成立阅文集团,百度成立百度文学、阿里成立阿里文学。网络文学能上升至BAT集团战略层面,主要是由于移动互联网正重估一切内容价值,而网络文学是互动娱乐产品的源头,正在狂野发展的游戏和影视剧、网络短剧、话剧等文创产业都将因此受益,有很大的延展性,极具商业价值。
3 系统分析
3.1 用例图
(1)游客用例图
游客有着搜索、登录、注册、查看小说的功能。
游客用例图如图3-1所示
图3-1 游客用例图
(2)读者用例图
读者有着申请作者、发表评论、删除收藏图书、修改用户信息、添加到我的书籍、退出登录、修改密码等功能。
读者用例图如图3-2所示
图3-2 读者用例图
(3)管理员用例图
管理员有着管理小说、管理用户、管理分类、管理评论、管理章节、管理读者、管理编辑、管理作者、添加分类等功能。
管理员用例图如图3-3所示
图3-3 管理员用例图
3.2 系统设计
表3-1游客查看小说用例
用例名称 | 查案小说 | |
---|---|---|
参与者 | 游客 | |
用例概述 | 游客进入小说界面从推荐小说栏、书库或搜索点击小说、查看小说详情。 | |
前置条件 | 无 | |
后置条件 | 无 | |
基本事件流 | 参与者动作 | 系统响应 |
2.游客点击小说列表中详情按钮4.游客点击查看按钮 | 1.系统获取小说详情列表,显示书名,小说封皮、作者、内容简介、上传日期、详细按钮。3.系统雄安是点击的小说详情,包括书名,封面,作者,内容简介,上传日期以及查看按钮。5.系统显示小说内容 | |
其他事件流 |
表3-2登录用例图
用例名称 | 登录 | |
---|---|---|
参与者 | 游客 | |
用例概述 | 游客输入用户名、密码、输入正确的验证码,系统进行验证后,合法着登录系统,否则提供拒绝登录系统 | |
前置条件 | 无 | |
后置条件 | 无 | |
基本事件流 | 参与者动作 | 系统响应 |
1.游客在用户名输入框里面输入用户名,密码框里面输入密码2.在验证码框中填写验证码3.点击登录按钮 | 4.系统验证输入用户输入正确,并且判断用户身份,如用户为读者,跳转至读者界面首页。 | |
其他事件流 | 游客输入错误用户名,系统提示“用户名或密码错误”游客输入错误密码,系统提示“用户名或密码错误” |
表3-3 搜索用例
用例名称 | 搜索小说 | |
---|---|---|
参与者 | 游客、读者、作者 | |
用例概述 | 用户输入小说名字或作者名,点击搜索 | |
前置条件 | 无 | |
后置条件 | 无 | |
基本事件流 | 参与者动作 | 系统响应 |
1.用户在搜索输入框里搜索的内容2.点击搜索按钮 | 3.系统验证输入名称输入正确4.显示小说详情界面 | |
其他事件流 |
表3-4 注册用例
用例名称 | 注册 | |
---|---|---|
参与者 | 游客 | |
用例描述 | 游客进入用户注册界面,完成注册 | |
前置条件 | 无 | |
后置条件 | 无 | |
基本事件流 | 参与者动作 | 系统响应 |
2.游客填写个人信息,用户名,密码。3.游客填写完个人信息,点击提交按钮 | 1.系统获取用户注册界面,显示用户应该完善个人信息。4.系统验证用户输入合法性,系统提示注册成功,并跳转至登录界面。 | |
其他事件流 | 游客输入空白用户名,系统提示“请输入用户名!”游客输入重复用户名,系统提示“该用户已存在!”游客输入空白密码,系统提示“请输入密码!”游客输入空白重复密码,系统提示“请再次输入密码!”游客两次密码输入不一样,系统提示“两次密码不一致,请重新输入!”游客输入空白真实姓名,系统提示“请输入真实姓名!”游客输入空白电子邮箱,系统提示“请输入电子邮箱!”游客输入空白空白联系电话,系统提示“请输入联系电话!”游客输入空白联系地址,系统提示“请输入地址!”游客可以点击“重置”按钮,进行重置 |
表3-5 用户查看小说用例
用例名称 | 查看小说 | |
---|---|---|
参与者 | 读者,作者 | |
用例概述 | 用户进入小说界面从推荐小说栏、书库或搜索点击小说,查看小说详情 | |
前置条件 | 用户以登陆 | |
后置条件 | 无 | |
基本事件流 | 参与者动作 | 系统响应 |
2.用户点击小说列表中的详细按钮4.用户点击查看按钮 | 1.系统获取小说详细列表,显示小说封皮、作者、内容简介3.系统显示点击的小说详情,包括书名,封面等5.系统显示小说内容 | |
其他事件流 | 不能正常显示书架,系统提示网络异常当前章节为最后一章时,系统提示“当前已经是最后一章” |
4 软件界面
进入软件的首页是个读书的封面,爱上阅读的界面。
软件封面如图4-1所示
图4-1 软件封面
登录界面,在软件封面右上角是跳过按钮,点击跳过按钮就直接进入到登录界面,登录界面如图4-2所示
图4-2 登录界面
//在登录页面点击返回销毁登录界面并跳转到index
c_tv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
c_loginActivity.this.finish();
}
});
//点击注册跳转到注册
c_tv_registre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(c_loginActivity.this,c_registerActivity.class);
startActivityForResult(intent, 1);}});
//点击找回密码
c_tv_rpsw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//暂时未实现}
});
//点击登录
c_btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uname=c_et_uname.getText().toString();
upwd=c_et_upwd.getText().toString();
SharedPreferences sp =getSharedPreferences("data",MODE_PRIVATE);
String gname =sp.getString("name","");
String gpwd =sp.getString("pwd","");
if(uname.equals("admin") && upwd.equals("admin")){
Intent intent=new Intent(c_loginActivity.this,w_main_pageActivity.class);
intent.putExtra("uname",uname);
startActivity(intent);
SharedPreferences.Editor editor =getSharedPreferences("data2",MODE_PRIVATE).edit();
editor.putInt("log",1);
editor.putString("name",uname);
editor.apply();
Toast.makeText(c_loginActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
finish();
return; }
else if(TextUtils.isEmpty(uname)){
Toast.makeText(c_loginActivity.this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}else if (TextUtils.isEmpty(upwd)){
Toast.makeText(c_loginActivity.this,"请输入密码",Toast.LENGTH_SHORT).show();
return;}else if(uname.equals(gname) && upwd .equals(gpwd)){
Toast.makeText(c_loginActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(c_loginActivity.this,w_main_pageActivity.class);
intent.putExtra("uname",uname);
startActivity(intent);
finish();
return;}else if(upwd!=null && upwd.equals(gpwd)){
Toast.makeText(c_loginActivity.this,"密码不一致",Toast.LENGTH_SHORT).show();
return; }else{
Toast.makeText(c_loginActivity.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
return;
}
注册界面,新用户注册界面,如图4-3所示
图4-3 注册界面
private void init() {
c_tv_title = (TextView) findViewById(R.id.c_tv_title);
c_tv_title.setText("注册");
c_tv_back = (TextView) findViewById(R.id.c_tv_back);
//布局根元素
c_title_bar = (RelativeLayout) findViewById(R.id.c_title_bar);
c_title_bar.setBackgroundColor(Color.TRANSPARENT);
//获取控件值
c_btn_register = (Button) findViewById(R.id.c_btn_register);
c_et_uname = (EditText) findViewById(R.id.c_et_uname);
c_et_upwd = (EditText) findViewById(R.id.c_et_upwd);
c_et_rupwd = (EditText) findViewById(R.id.c_et_rupwd);
c_btn_register.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
uname = c_et_uname.getText().toString().trim();
upwd = c_et_upwd.getText().toString().trim();
rupwd = c_et_rupwd.getText().toString().trim();
SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
String name = sp.getString("name", "");
String pwd = sp.getString("pwd", "");
c_tv_title.setText(name + pwd);
if (c_et_uname.length() < 1)
{
Toast.makeText(c_registerActivity.this, "请输入用户名,用户名不能为空", Toast.LENGTH_SHORT).show();
return;
}
else if (c_et_upwd.length() < 1 || c_et_rupwd.length() < 1) {
Toast.makeText(c_registerActivity.this, "请输入密码,密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
else if(uname.equals(name)){
Toast.makeText(c_registerActivity.this, "该用户已存在", Toast.LENGTH_SHORT).show();
return;
}
else if (rupwd.equals(upwd)) {
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", uname);
editor.putString("pwd", upwd);
editor.apply();
SharedPreferences.Editor editor2 = getSharedPreferences("data2", MODE_PRIVATE).edit();
editor2.putInt("log",0);
editor2.apply();
Intent intent=new Intent(c_registerActivity.this,c_loginActivity.class);
intent.putExtra("uname",uname);
startActivity(intent);
Toast.makeText(c_registerActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
finish();
}
else if (!rupwd.equals(upwd)) {
Toast.makeText(c_registerActivity.this, "两次密码不正确", Toast.LENGTH_SHORT).show();
return;
}}
});
书架界面,在书架界面显示书架里面书的封面、书名、图书简介等
书架界面如图4-3所示
图4-4书架界面
社区界面,社区界面包括综合讨论区、书评区、书荒互助去、女生区的分栏,界面如图4-4所示
图4-5 社区界面
综合讨论区,综合讨论区显示大家的讨论内容,如图4-5所示
图4-6 综合讨论区
综合讨论区是可以点进大家的评论进行查看的,具体评论的界面如图4-6所示
图4-7 个人的评论
书评区,书评区以每本书来分隔,书评区具体如图4-7所示
图4-8 书评区
书评,点进书的评论区,如图4-8所示
图4-9 书评
发现模块,如图4-9所示
图4-10 发现模块
排行榜
图4-11 排行榜
总结
从一开始我对这次的实习就充满了信心和期望,当然其中也遇到过一些困难,但是最终在我不懈地努力下都将这些困难一一克服了。所以我一直很享受这个过程。当然对于我们来讲,独立完成一个小说管理系统虽然难度不是太大,最终我们也能够完成这个任务,但是对于我们还不是很熟练的情况下,编写出这一个系统还是有一定的压力的,需要我们不断努力和抓紧时间去赶进度的。
就这样在实习的最后时间内,我终于完成了自己的小说管理系统,当看着自己设计的小说管理系统编译成功和运行时,心里的那种喜悦和无比的成就感简直就是“无与伦比”的。如果没有这次的实习,我们可能都无法发现这些问题的所在,所以仅仅学习理论的东西只会将我们“束之高阁”,通过这次实习,最主要的是让我们学会去发现问题,在编译发现问题的过程中学会自己去解决问题,最后解决问题所得到的收获包括成功后的喜悦感都将是属于真正我们自己的东西,成为我们的一笔宝贵的财富和经验,是一笔潜在的能源,受益无穷。