当前位置:文档之家› 《移动互联网开发技术》大作业报告

《移动互联网开发技术》大作业报告

XXX大学《移动互联网开发技术》大作业报告题目:电子书APP-《书屋》学生姓名:学号:学院:专业班级:完成日期:2020年10 月20 日成绩(百分制):授课教师:目录目录 (2)1功能描述 (1)1.1总体界面 (1)1.2书架模块 (2)1.2.1显示目录 (3)1.2.2设置主题 (3)1.2.3设置翻页效果 (4)1.2.4设置字体样式 (4)1.2.5调节字体大小 (5)1.2.6设置字体颜色 (6)1.2.7添加书签 (6)1.2.8显示书签列表 (7)1.2.9清空书签列表 (7)1.3用户模块 (8)1.3.1用户注册 (8)1.3.2用户登录 (9)2程序结构 (10)2.1整个工程包含的所有JA V A文件 (10)2.2整个工程包含的所有布局文件 (11)3详细设计 (12)3.1主模块设计 (12)3.1.1主模块流程图 (12)3.1.2主模块关键代码 (12)3.2书架模块设计 (13)3.2.1书架模块流程图 (13)3.2.2书架模块关键代码 (13)3.3用户模块设计 (17)3.1.1用户模块流程图 (17)3.1.2用户模块关键代码 (18)3.4数据库设计 (20)4运行效果 (22)5总结 (30)1功能描述这款电子书APP主要有三个大模块,我的、书城、书架。

分别的功能是用户中心,网上书城,我的书架。

APP截图:图1.1 电子书APP运行在手机上的效果1.1总体界面书城:可阅读网上的电子书图1.2 APP整体样式1.2书架模块点击书架跳转到书架,初始界面有很多本地电子书图1.3 书架界面打开任意一本电子书,所具有的功能:主要有目录、设置、字体、书签几个模块图1.4 电子书界面1.2.1显示目录点击目录按钮,显示目录。

点击目录可跳转到对应章节图1.5 电子书的目录显示1.2.2设置主题点击设置按钮里面有四种主题样式,点击可更换主题。

点击护眼主题查看效果颜色换成了偏绿色,点击夜间主题颜色就会换成黑色,对应主题都会有对应样式。

图1.6 更改阅读主题1.2.3设置翻页效果点击设置按钮,显示翻页效果的设置,这里有三种翻页效果的设置分别是,仿真翻页、覆盖翻页、无效果。

选择仿真翻页查看效果。

仿真翻页的效果就类似真实翻书的翻页的效果。

图1.7 更改翻页效果1.2.4设置字体样式点击字体按钮,可以更改显示的字体样式,显示现在使用的是默认字体。

我们可以点击其他字体。

图1.8 字体样式点击切换字体样式使用幼圆字体,查看显示效果和默认字体不一样图1.9 更改字体样式1.2.5调节字体大小点击设置按钮,显示设置字体大小的功能,拖动设置字体的字体条来改变字体的大小,现在是拖到了最大。

图1.10 调节字体大小1.2.6设置字体颜色点击字体按钮,看到有设置字体颜色选择蓝色样式,查看效果字体颜色变成了蓝色。

图1.11 更改字体颜色1.2.7添加书签点击书签按钮,给当前阅读也添加书签图1.12 添加书签1.2.8显示书签列表长按书签按钮,显示书签列表和每个书签添加的时间,列表里是阅读是添加的书签。

图1.13 查看书签列表1.2.9清空书签列表长按书签按钮,点击书签列表的垃圾桶样式按钮即可清空书签列表,查看效果。

图1.14 清空书签列表1.3用户模块点击用户按钮,跳转到用户模块。

图1.15 用户模块1.3.1用户注册点击用户登录跳转到用户登录页面,点击页面上的注册按钮注册用户。

图1.16 用户注册1.3.2用户登录点击用户登录,用注册过的用户进行登录。

图1.17 用户登录2程序结构2.1整个工程包含的所有JAVA文件图2.1 整个工程所有JA V A文件的功能2.2整个工程包含的所有布局文件图2.2 整个工程所有布局文件3详细设计3.1主模块设计3.1.1主模块流程图整体模块分为三个模块,主模块的功能主要是让我们可以进入不同的模块,去阅读线上的电子书籍。

图3.1 整体模块流程图3.1.2主模块关键代码@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);WebView webView = findViewById(R.id.id_webView);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.loadUrl("/");}public void doBookrack(View v){Intent intent = new Intent(MainActivity.this,ShelfActivity.class);startActivity(intent);}public void doUser(View v){Intent intent = new Intent(MainActivity.this,UserActivity.class);startActivity(intent);}3.2书架模块设计3.2.1书架模块流程图图3.2 书架模块流程图3.2.2书架模块关键代码电子书阅读显示@Overrideprotected void setScreen() {//全屏getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);}功能菜单的四个功能按钮@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button_content://设置出现动画和位置mContentPopup.setAnimationStyle(R.style.pop_window_anim_style);mContentPopup.showAsDropDown(mBottomBar, 0, -mContentPopup.getHeight());lightOff();break;case R.id.button_setting:int xOff = (mBottomBar.getWidth() - mSettingPopup.getWidth()) / 2;int yOff = -mSettingPopup.getHeight() - mBottomBar.getHeight() / 6;mSettingPopup.setAnimationStyle(R.style.pop_window_anim_style);mSettingPopup.showAsDropDown(mBottomBar, xOff, yOff);break;case R.id.button_font:mFontPopup.setAnimationStyle(R.style.pop_window_anim_style);mFontPopup.showAsDropDown(mBottomBar, 0, -mFontPopup.getHeight());lightOff();break;case R.id.button_label:saveLabel();Toast.makeText(mContext, "书签已添加,长按显示书签列表",Toast.LENGTH_SHORT).show();break;}}书签存入数据库private void saveLabel() {Time time = new Time();time.setToNow(); // 取得系统时间。

String timeStr = time.year + "/" + time.month + "/" + time.monthDay;ReadInfo readInfo = mBookPageFactory.getReadInfo();String objectStr = SaveHelper.serObject(readInfo);Label label = new Label();label.setBookId(mBookId);label.setDetails(mBookPageFactory.getCurContent());label.setProgress(mBookPageFactory.getPercentStr());label.setTime(timeStr);label.setPrePageOver(mFlipView.isPrePageOver());label.setReadInfoStr(objectStr);label.save();}目录功能主要实现代码private class ContentsAdapter extends RecyclerView.Adapter<ContentsHolder> {private List<String> mBookContents;public ContentsAdapter(List<String> bookContents) {mBookContents = bookContents;}@Overridepublic ContentsHolder onCreateViewHolder(ViewGroup parent, int viewType) {LayoutInflater inflater = LayoutInflater.from(mContext);View view = inflater.inflate(yout.simple_list_item_1, parent, false);return new ContentsHolder(view);}@Overridepublic void onBindViewHolder(ContentsHolder holder, int position) {holder.bind(mBookContents.get(position), position);}@Overridepublic int getItemCount() {return mBookContents.size();}}public void setBackgroundColor(int color) {mLinearLayout.setBackgroundColor(color);}设置功能主要实现代码private void setCurThemeBtn() {Button usedButton = mThemeBtns[mTheme];for (int i = 0; i < mThemeBtns.length; i++) {// 设置背景填充颜色GradientDrawable drawable = (GradientDrawable) mThemeBtns[i].getBackground();drawable.setColor(mPopupColors[i]);//设置边框颜色if (mThemeBtns[i].getId() == usedButton.getId()) {int strokeColor = mStrokeColors[i];drawable.setStroke(5, strokeColor);} else {drawable.setStroke(5, mPopupColors[i]); //未选择button的边框颜色和填充颜色一致}}}private void setCurSeekBarStyle() {for (SeekBar seekBar : mSeekBars) {//获取seekBar的layer-list drawable对象LayerDrawable layerDrawable = (LayerDrawable) seekBar.getProgressDrawable();//层次包括背景图和进度,所以进度直接设为1,获取并设置进度条背景Drawable drawable = layerDrawable.getDrawable(1);drawable.setColorFilter(mStrokeColors[mTheme], PorterDuff.Mode.SRC);//获取thumb背景Drawable thumb = seekBar.getThumb();thumb.setColorFilter(mStrokeColors[mTheme], PorterDuff.Mode.SRC);}}字体功能主要实现代码private void initViews() {mTextColors = new int[]{0xff121111, //黑0x8A000000, //常规0xffa9a8a8, //夜间0xfbe6e3e3, //白0xff486c94, //蓝};@Overridepublic void onClick(View v) {int typeIndex = mTypeIndex;int color = 0;for (int i = 0; i < mButtons.length; i++) {if (v.getId() == mButtons[i].getId()) {typeIndex = i;break;}}for (int i = 0; i < mFabs.length; i++) {if (v.getId() == mFabs[i].getId()) {color = mTextColors[i];break;}}//改变字体if (typeIndex != mTypeIndex) {mTypeIndex = typeIndex;setUsedButton();if (mListener != null)mListener.onTypefaceSelected(mTypeIndex);}//改变颜色if (color != 0) {if (mListener != null)mListener.onColorSelected(color);}}3.3用户模块设计3.1.1用户模块流程图图3.3 用户模块流程图3.1.2用户模块关键代码用户管理类方法主要实现代码,增加用户,检测用户//增加public boolean insertUser(String name,String password){User user = new User();user.setName(name);user.setPassword(password);//创建数据库LitePal.getDatabase();return user.save();}//通过用户名查找用户是否存在public boolean findUserByName(String name){List<User> users = LitePal.findAll(User.class);for(User person: users){if(name.trim().equals(person.getName())){return false;}}return true;}//查找密码是否正确public boolean findUser(String password){List<User> users = LitePal.findAll(User.class);for(User person: users){if(password.trim().equals(person.getPassword())){return false;}}return true;}用户注册private void register_check() {if(isUserNameAndPwdValid()){boolean flag;String name = mAccount.getText().toString().trim();String password = mPwd.getText().toString().trim();String rePassword = mPwdCheck.getText().toString().trim();flag = userManager.findUserByName(name);if(!flag){Log.d("tag","注册失败");Toast.makeText(this, "用户名已经存在",Toast.LENGTH_SHORT).show();return ;}if(!password.equals(rePassword)){Toast.makeText(this, "输入的密码不同",Toast.LENGTH_SHORT).show();return ;}else {flag=userManager.insertUser(name,password);if(!flag){Toast.makeText(this,"注册失败",Toast.LENGTH_LONG).show();return ;}Toast.makeText(this,"注册成功",Toast.LENGTH_LONG).show();List<User> people = LitePal.findAll(User.class);for(User person: people){Log.d("RegisterActivity","person name is"+person.getName());Log.d("RegisterActivity","person password is"+person.getPassword());}Intent intent_Register_to_Login = newIntent(RegisterActivity.this,LoginActivity.class) ; //切换User Activity至Login Activity startActivity(intent_Register_to_Login);finish();}}}用户登录if(isUserNameAndPwdValid()){boolean flag,flag2;// 取得用户界面输入String username = name.getText().toString();String password = pass.getText().toString();flag = userManager.findUserByName(username);flag2 = userManager.findUser(password);if(flag){Toast.makeText(this, "该用户不存在",Toast.LENGTH_SHORT).show();return ;}if(flag2){Toast.makeText(this, "输入的密码不正确",Toast.LENGTH_SHORT).show();return ;}//进入主界面Intent intent = new Intent(LoginActivity.this,MainActivity.class);intent.putExtra("username",username);startActivity(intent);finish();}}3.4数据库设计数据库利用了第三方数据库框架LitePal,LitePal是一款开源的Android数据库框架采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以不用写一行SQL语句就可以完成创建表、增删、改、查的操作。

相关主题