国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

CSE 332S代寫、代做c/c++設(shè)計編程

時間:2024-05-11  來源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯



CSE 3**S Lab 5: OOP Design
Miscellaneous details:
Due Date: Monday, May 6th at 11:59 PM CT, no extensions will be given. The late policy will
apply. The last day to submit will be May 8th at 11:59 PM. No work will be accepted afterwards.
Grade breakdown: This lab accounts for 20% of your final semester grade, 25% total for lab 5
and studios 16-21
Group details: You will work in the same groups as you did for Studio 16-21. Groups of **3
students are allowed.
Getting started: Continue working in your repository for studios 16-21 and lab 5. Open and
build targeting “lab5” and “testlab5”.
Note: Please review the repository structure video on Canvas if you have any issues
navigating the projects. Also, see the README.md file in the base directory of your
repository for details on how to work through and run/test your code.
You should not modify the file structure of the repository in any way. We have already
created CMake build configurations for each of the studios and the unit tests associated with
each studio. We have also already created most files you will need for the studios and lab 5.
After you finish working, be sure to commit and push any changes you made. Each time you sit
down to start working, be sure to “pull” any changes from github into your local repository.
Lab overview:
This lab will be built upon studios 16-21. You should complete all studios before starting the lab.
Throughout studios 16-21 and continuing into lab 5, you will build a software simulation of a file
system, some simple file types that may be stored in a file system, and a user interface similar
to a command prompt or terminal that allows a user to interact with the file system and files it
contains. Throughout the design and implementation of the file system, OOP design principles
and patterns learned throughout the semester will be used to ensure the file system is easy to
extend with new functionality in the future, easy to modify without major code refactoring, and
easy to configure with different functionality as needed. Here is a quick overview of what you
have done in studio already:
1. Studio 16: Creating a set of related classes via interface inheritance. A file system
stores files of many different types. In this studio, you created an interface that declares
the basic functionality all files share (read, write, append, getSize, getName). You then
defined a couple of concrete file types that inherit this interface and define it
appropriately for the given file type(TextFile, ImageFile(studio 17)). This creates a set of
concrete file classes that share a common interface (AbstractFile).
2. Studio 17: Programming to an interface. Now that you have some concrete file types,
you need a way to store and manage access to files. This is the file system’s job. This
studio introduces a new interface describing the functionality all file systems share
(createFile (moved in studio 18), addFile, openFile, closeFile, removeFile) and
introduces an implementation of this interface (SimpleFileSystem). The
SimpleFileSystem may store and manage access to many different file types. To support
this, the file system is programmed to use the AbstractFile interface. A file system stores
AbstractFiles and interacts with AbstractFiles. As concrete classes that inherit and define
the AbstractFile interface are subclasses of AbstractFile, objects of those classes may
be used freely with the file system. New file types can easily be added to the file system
by creating new concrete file classes that inherit the AbstractFile interface.
3. Studio 18: Single responsibility principle and the abstract factory design pattern.
This studio separates the task of creating files from the file system object. A file system
should simply be responsible for storing and managing access to files, not creating them.
A new object, a file factory, will be responsible for creating files instead. The abstract
factory pattern is used to support extensibility and flexibility in our design. The
AbstractFileFactory interface declares an interface for creating files and concrete file
factory objects define that interface to handle the creation of objects of different concrete
file types. The abstract factory pattern provides extensibility by making it easy to create
new concrete file factory classes (as in studio 20). Each concrete file factory may
enforce restrictions on what types of files it can create, or can vary how the files are
actually created. The pattern supports flexibility as a client that creates files using the
AbstractFileFactory interface may be configured with any concrete factory class that
inherits from AbstractFileFactory. This allows us to easily configure a client to change
what types of files it may create or how those files are created.
4. Studio 19: Adding new functionality to existing file types via the visitor pattern.
This studio introduces the visitor pattern. The visitor pattern allows us to add new
functionality to an existing set of related classes, where each concrete class may require
a different implementation. For instance, a file may be displayed in different ways.
Maybe we want to display the bytes contained in the file directly, without any special
formatting; maybe we want to display metadata about the file only; or, maybe we want to
display the file in a format specific to that concrete file type. Rather than adding a virtual
member function to the AbstractFile interface for each of these display methods (such as
readBytes(), readMetadata(), readFormatted()) and overriding those methods in an
appropriate way in each derived file class, we can instead use the visitor pattern to
accomplish this without cluttering the AbstractFile interface. After completion, you will
now have a couple of concrete visitors. One prints the contents of a file in a format
specific to that file type, the other displays the metadata of the file.
5. Studio 20: Password protected files using the Proxy pattern. This studio introduces
the Proxy design pattern to start to build support for password protected files. A proxy
object can be stored in place of a real file in the file system. Any attempts to read, write,
or visit a file will require the user to enter the correct password for the file before gaining
access.
6. Studio 21: Adding a user interface and the command pattern. Up to this point,
testing/interacting with the file system has been done via writing code in main. This
studio creates a user interface (CommandPrompt) that allows a user to interact with the
file system by issuing commands. To implement this functionality, the command pattern
is used. Each action the user can request is implemented as a ConcreteCommand
object. When a user provides input, the CommandPrompt object invokes the appropriate
command based on the user’s input. The touch command is introduced in this studio.
Touch is a command that creates a new file and adds the file to the file system.
What you will implement in lab 5: For lab 5, you will be creating a few additional commands to
increase the functionality of the program. The commands you will modify or implement are listed
below, you will find further details on the specification and requirements of each command later
in this document. In lab 5, you will:
1. Create and implement a command called “ls” to list all of the files stored in the file
system
2. Create and implement a command called “remove” to remove a file from the filesystem
3. Modify the “touch” command to support creating password protected files
4. Create and implement a command called “cat” that concatenates or writes user input into
a file
5. Create and implement a command called “ds” that displays the contents of a file based
on the file’s type
6. Create and implement a command called “copy” that makes a copy of an existing file
and stores it in the file system with a different name (prototype pattern)
7. Create and implement a command called “rename” that renames an existing file in the
file system (composite pattern, strategy pattern)
And finally, the details…
Modify, or create and implement the following commands as described below. All commands
you add should be ConcreteCommand objects as part of the command pattern. You should
name your classes exactly as they are typed below when highlighted in blue. Header and
source files for your classes should already be created and linked in the solution.
Note: You should not:
● Modify any base class interfaces to include additional functions not described in this
document or studio assignments. For example: you cannot add a function to AbstractFile
to return the file’s concrete type. You may modify AbstractFile to support the prototype
pattern as this is required.
● Modify any tests.
● Determine a file’s type in a command object by using the file’s name and extension.
Command objects should not need to understand the types of files they are interacting
with.
Doing any of the above will result in deductions.
1. Create and implement LSCommand in LSCommand.h/.cpp (15 points): The
LSCommand will be invoked by the user by typing “ls” into the command prompt. It
should output to the terminal the names of all files currently in the file system. To support
this, you should first add a function to the AbstractFileSystem interface called
“getFileNames” that takes no parameters and returns a std::set<string> containing the
names of all files in the file system. Implement this function in SimpleFileSystem. You
can assume all file names are less than 20 chars total (you can enforce this in “touch” if
you would like). The output of the “ls” command should look as below (assume we have
5 files in the file system currently: file.txt, image.img, other.txt, file2.txt, image2.img):
$ ls // the command given by the user
file.txt file2.txt // output of the command
image.img image2.img
other.txt
More specifically, 2 files should be printed per line and the file names should be evenly
spaced and aligned appropriately.
The “ls” command should also support an additional option, “-m”, which will display a
single file per line along with the metadata associated with that file as below (sizes are
made up):
$ ls -m
file.txt text 15
file2.txt text 10
image.img image 4
image2.img image 9
other.txt test 0
When the command is executed, it should return 0 if the command executes
successfully, or some non-zero value if the command fails for some reason.
Hint: You may already have a visitor that can help with this. Given a file name, how
would you obtain a pointer to the file so that you can “visit” it?
Other Hint: When the CommandPrompt executes a command, what does it pass to the
command’s execute function if the user enters “ls”? What about “ls -m”? Use the
debugger to figure this out if you need to.
2. Create and implement RemoveCommand (RemoveCommand.h/.cpp)(5 points):
This command should remove the file with the provided name from the file system. If the
file is unable to be removed for some reason, the command should return a non-zero
value indicating this. Otherwise, it should return 0 if the file was removed successfully.
The command should be invoked by the user with “rm <filename>”, such as below:
$ ls
file.txt image.img // file system contains these
files
$ rm file.txt // rm one of the files
$ ls
image.img // file.txt was successfully removed
$ // ready for the next command from the user
3. Modify your TouchCommand from studio 21 to support creating password
protected files (10 points): Update “touch” with an option to create a file that is
password protected. When touch is invoked with the “-p” option, a password protected
file should be created rather than a regular file. You must use your Proxy from studio 21
to support this. The touch command should create the file, prompt the user for a
password, and then set up the proxy to protect the file. Then add the proxy to the file
system. An example is below:
$ touch file.txt // creates file.txt and adds it, no password
$ touch file1.txt -p // -p comes after the filename
What is the password? // prompt the user for a password
1234 // user input: a not very safe password
$
After implementing cat and ds below, you can verify the password protection is working
correctly (cat and ds will write/read the file).
4. Create and implement CatCommand (CatCommand.h/.cpp)(15 points): Add a new
command to your program called cat. If you are unfamiliar with linux command line
utilities, cat is a utility that is useful for concatenating files. The cat command can be
used to write to a file as well, which will be the purpose of our cat command. Cat can be
invoked from the command prompt as follows:
$ cat <filename> [-a]
<filename> will be replaced with the name of a real file in the file system. The ‘[‘ brackets
around “-a” indicate “-a” is optional. So, a real invocation of the command may look like:
$ cat file.txt // or
$ cat file.txt -a
The cat command should be defined to do the following: the -a option stands for append.
If the -a option is given, the current contents of the file should be displayed (the bytes
only, not the formatted output) followed by a new line. The user should then be prompted
to input data to append to the file, to input “:wq” to save and quit, or to input “:q” to quit
without saving. The user's input should be read from cin line by line. If the line is not
“:wq” or “:q”, the data should be saved temporarily. Remember getline() will trim off the
newline character (‘\n’), make sure to reinsert a new line character between each line of
user input when saving it. If the user enters “:q”, the cat command should return and no
data should be written to the file. If the user enters “:wq”, the input provided up until the
user entered “:wq” should be appended to the file.
If the user invokes cat without the -a option, the functionality should be the same as
above except the current contents of the file should not be displayed to the user before
prompting for input and when the user provides “:wq” as input, the contents of the file
should be overwritten with the data supplied by the user, rather than appended to the
end of the file. Some example invocations and possible output are below(note “ds” is a
command you will implement later, it displays a file):
Note: These images show the functionality from a previous semester where we
supported directories and hierarchical file storage. The output may look a bit different
(root $ instead of $ only, root/file.txt instead of file.txt, etc..). Ignore those minor
differences and the images show the correct functionality.
And continued on..
As with other commands, 0 should be returned if the command executes successfully,
otherwise a non-zero value should be returned indicating an error occurred.
5. Create and implement DisplayCommand (DisplayCommand.h/.cpp)(10 points): Add
a new command, Display. Display is invoked with “ds”. Display opens a file and displays
its contents, either formatted or not (when given the “-d” option for data only). An
example invocation could be:
$ ds image.img // formated
Or..
$ ds image.img -d // unformatted
And here is a screenshot of it in action:
If display executes successfully, 0 should be returned. Otherwise, a non-zero value
should be returned indicating an error occurred.
6. Create and implement CopyCommand (CopyCommand.h/.cpp)(15 points): The
copy command will copy a file that exists in the file system and add the copy to the file
system with a different name. It is invoked with the following command structure:
cp <file_to_copy> <new_name_with_no_extension>
Where file_to_copy is replaced with a real file that exists in the file system and
new_name_with_no_extension is replaced with the name a user would like the copy to
be called (minus the extension). The copy will be of the same type as the original file, so
the file extension should match as well. When the copy is made, the correct extension
should be added to the file name given by the user. The original file, and the copy of the
file should be unique file objects. To receive credit for this command, you must
implement the prototype pattern in order to copy a file object. If any errors occur while
copying or adding the copy to the file system, a message notifying the user the
command failed should be displayed and the copy of the file should be deleted. Here is a
transcript of copy in action (kind of, I have not implemented this version of the lab yet, so
some output is missing but this shows the general commands to run):
$ touch file.txt // create file.txt
$ cat file.txt // write to it
123456
:wq
$ cp file.txt file_copy // create a copy
$ ds file_copy.txt // .txt added by the cp command
123456 // ensure it is a copy
$ cat file_copy.txt
Hello
:wq
$ ds file.txt
123456 // ensure the copy is a unique file, writing to
// the copy does not change the original
If the file is copied successfully and added to the file system, executing this command
should return 0 for success. Otherwise, a non-zero value should be returned.
How should a password protected file be copied? The copy should be password
protected as well. So, not only does the file need to be copied via the prototype pattern,
but the proxy for the file needs to be copied as well.
Hint: You will need to change the name of the copy to its new name, however there is no
setName function in the AbstractFile interface. You should not add a setter for the file
name. Instead, it may be helpful to pass a string holding the new file name to the clone
function as part of the prototype pattern.
7. Create and Implement support for MacroCommands (10 points): Macro commands
will allow us to construct commands out of other commands. Executing a macro
command simply executes each of the commands it is composed of in order. To
implement this, you should first create a class called MacroCommand
(MacroCommand.h/.cpp)that inherits the AbstractCommand interface and maintains as
member variables a std::vector of AbstractCommand objects (the primitive commands
the macro command will use) and a pointer to an AbstractParsingStrategy (This will be
described shortly). In our project, the macro command’s execute function takes in an
input string, however we can’t just pass that same string to each individual command the
macro command is composed of, as they expect different input. The job of a
ParsingStrategy will be to take the input provided to the macro command’s execute
function and transform it into a vector<string>, where each string in the vector is the
input that should be supplied to the corresponding individual command.
MacroCommand’s execute function should be implemented as follows:
a. Ask the ParsingStrategy object to parse the input provided to the macro
command’s execute function, which will return a vector<string>. See below.
b. For each individual command the MacroCommand is composed of, call the
individual command’s execute function with the corresponding input from the
vector<string> returned by the ParsingStrategy. If any individual command
returns an error, return an error. Otherwise, if all individual commands execute
successfully, return 0 for success.
As a MacroCommand is a composite object in the composite pattern, it needs to provide
a function for adding individual commands to its vector of commands. Add a function to
its public interface called addCommand that takes a pointer to an AbstractCommand and
pushes it to the end of its vector of commands. Add a function to set the macro
command’s parsing strategy as well. This should be called setParseStrategy and should
take a pointer to an AbstractParsingStrategy as a parameter.
Declare the AbstractParsingStrategy (AbstractParsingStrategy.h) interface. An
AbstractParsingStrategy has a single public pure virtual member function called parse
that takes a std::string parameter and returns a std::vector<string> by value.
8. Add the rename command (5 points): To receive credit, this command must be
implemented as a MacroCommand. The rename command will change the name of an
existing file (you cannot change it directly, this must be implemented as a
MacroCommand or you will get 0 credit). Rename can be invoked by the user with “rn”
as below:
$ rn <existing_file> <new_name_with_no_extension>
Where <existing_file> is replaced with the name of an existing file and
<new_name_with_no_extension> is replaced with the name the user would like the file
to be called (a file extension like.txt or .img will be tacked on to the name provided by the
CopyCommand). Renaming a file should do two things: First, copy the file with the copy
command giving the copy the correct new name. Second, remove the original file with
the remove command. To implement a MacroCommand with this functionality you will
need to:
● Implement a concrete class called “RenameParsingStrategy”
(RenameParsingStrategy.h/.cpp) that defines the interface provided by
AbstractParsingStrategy. The interface should be defined appropriately so that
given an input string like:
<existing_file> <new_name>
The parse function will return a vector containing the strings:
<existing_file> <new_name> // in index 0, used by the copy command
<existing_file> // in index 1, used by the remove command
● Update main to create a MacroCommand object configured with a
RenameParsingStrategy object as its AbstractParsingStrategy and a
CopyCommand as well as a RemoveCommand object as its command objects.
Add the MacroCommand to the CommandPrompt so it will be invoked when the
user provides “rn” as input
9. Add support for an additional MacroCommand of your choosing (5 points): Any
options supported by the individual commands should be supported by the Macro
command as well, if it makes sense to do so. Some useful command ideas I can think of
are:
a. Cat + ds - edit a file and then display it afterwards to see the edits.
b. Touch + cat - create a file and edit it immediately
c. Even crazier: touch + cat + ds
Update main to create a new MacroCommand object configured to support a parsing
strategy for the command you chose to implement and configure the CommandPrompt
to support your command. In your Readme, document what command you chose to
implement, how the command is invoked from the command prompt, and what tests you
ran to ensure it works properly. NOTE: If you need to create a new header/source file
for your parsing strategy, create them along side existing header files in
include/mockos/ and alongside existing .cpp files in /lib/mockos/
10. Updating main and testing (10 points): update main to configure the command prompt
with each of the above commands. Test your commands thoroughly. In your lab5.md
(docs/lab5.md) file, document the tests you ran as well as any errors/bugs you
encountered while working. Also, at the top of your Readme.md for lab 5 (docs/lab5.md),
list each group member’s name and describe how the work was split between the group
members.
a. Note: Make sure to avoid memory leaks, double deletions, etc.
i. What objects are allocated dynamically? (files? factories?
commandPrompt? Commands? Visitors? File system?)
ii. For each dynamically allocated object, when is it deallocated or when
should it be deallocated if it isn’t already?
11. Extra credit (5 points): Come up with an additional piece of functionality you would like
to add to the file system/command prompt that can be implemented cleanly using a
design pattern. Meet with and discuss your idea with Prof. Shidal to have it approved,
then implement it. No credit will be given without prior discussion and approval
with Prof. Shidal. Extra credit ideas must be discussed with Prof. Shidal before the
end of 5/3/2024. This should be done in-person, ideas will not be discussed over
email. When you come to discuss an idea, you should already have an idea of how
you will implement the added functionality and what design pattern you will use.
Some potential ideas to think about:
● Permissions on files - read only
● Copy on write
● Other common linux utilities like grep
● Symbolic links
● Aggregate statistics about the file system - total space required, etc.
● Write the in-memory files out to real files, read real files in to populate the file
system

請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp







 

掃一掃在手機打開當(dāng)前頁
  • 上一篇:代寫CPT204、代做Java編程設(shè)計
  • 下一篇:代做INFO1110、代寫Python程序設(shè)計
  • 無相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強度疲勞振動
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強度疲
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)40個行業(yè)
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)4
    超全面的拼多多電商運營技巧,多多開團助手,多多出評軟件徽y1698861
    超全面的拼多多電商運營技巧,多多開團助手
    CAE有限元仿真分析團隊,2026仿真代做咨詢服務(wù)平臺
    CAE有限元仿真分析團隊,2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗證碼 寵物飼養(yǎng) 十大衛(wèi)浴品牌排行 suno 豆包網(wǎng)頁版入口 wps 目錄網(wǎng) 排行網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    免费拍拍拍网站| 国产日韩一区欧美| 国产精品久久久久久久app| 日韩网站免费观看| 日韩中文字幕网| 国产suv精品一区二区| 久久久www免费人成黑人精品 | 国产精品吊钟奶在线| 国产精品成人aaaaa网站| 国产精品高清一区二区三区| 久久亚洲国产精品成人av秋霞| 久久伊人色综合| 中文字幕99| 午夜精品久久久久久久无码 | 每日在线更新av| 国产青青在线视频| av动漫免费看| 久久久综合香蕉尹人综合网| 国产成人jvid在线播放| 久久精品视频在线| 米奇精品一区二区三区在线观看| 欧美激情视频在线| 亚洲欧洲另类精品久久综合| 天堂v在线视频| 欧美中日韩免费视频| 精品一区二区成人免费视频| 国产九区一区在线| 国产精品2018| 国产精品丝袜高跟| 国产精品久久久久久久久久久久午夜片| 国产精品激情av电影在线观看 | 国产精品二区二区三区| 九九久久久久久久久激情| 中文字幕无码不卡免费视频| 欧美一级片久久久久久久| 欧美精彩一区二区三区| 成人国产精品久久久久久亚洲| 国产成人精品电影| 欧美成人精品影院| 无码中文字幕色专区| 欧美人与动牲交xxxxbbbb| 高清视频一区二区三区| 久久久久久久久久久久久久久久av| 久久精品国产亚洲精品| 自拍另类欧美| 欧美高清性xxxxhdvideosex| 91精品国产综合久久香蕉| 久久精品国产亚洲精品| 亚洲黄色一区二区三区| 韩国精品一区二区三区六区色诱| 国产精品69久久久久| 欧美成人免费va影院高清| 日韩欧美一区二区三区四区| 国产伦精品一区二区三区免费视频 | 久久成人av网站| 日本免费在线精品| 国产乱子夫妻xx黑人xyx真爽| 久久久久欧美| 亚洲色欲久久久综合网东京热 | 欧美日韩喷水| 国产二区一区| 欧美激情久久久久| 欧美成人一区二区在线观看| 国产精品91视频| 一本色道久久综合亚洲精品婷婷| 国内免费久久久久久久久久久| 国产第一区电影| 一区二区精品在线| 国产一区视频免费观看| 久久久精品在线| 青青草一区二区| 久久草.com| 日本伊人精品一区二区三区介绍| 99中文视频在线| 中文字幕乱码人妻综合二区三区| 国产视频九色蝌蚪| 国产精品免费一区豆花| 日韩欧美在线一区二区| 国产成人综合精品| 日日摸日日碰夜夜爽无码| 91国在线高清视频| 亚洲精品免费一区二区三区| 波多野结衣精品久久| 欧美日韩国产va另类| 国产三区二区一区久久| 欧美成人精品一区| 国产欧美日韩中文字幕| 九九久久精品一区| 国产乱码精品一区二区三区卡| 久久成人亚洲精品| 国产一级片黄色| 一区二区不卡视频| 99久久伊人精品影院| 亚洲**2019国产| 国产成人在线免费看| 日韩欧美激情一区二区| www欧美日韩| 麻豆精品蜜桃一区二区三区| 精品免费日产一区一区三区免费| 国产欧美日韩网站| 亚洲欧洲日产国码无码久久99| 91国产在线播放| 日韩黄色片在线| 国产精品裸体瑜伽视频| 国产欧美欧洲| 在线观看成人一级片| 91精品天堂| 色噜噜色狠狠狠狠狠综合色一| 国产成人精品久久二区二区| 青春草在线视频免费观看| 国产精品高潮呻吟久久av野狼| 国产欧美一区二区三区不卡高清| 一区二区欧美日韩| 久久波多野结衣| 精品一区2区三区| 亚洲一区二区三区加勒比| 国产成人福利网站| 女同一区二区| 中文字幕日韩精品无码内射| 久久久99精品视频| 精品1区2区| 夜夜添无码一区二区三区| 久久久中精品2020中文| 欧美极品少妇无套实战| 一区二区在线不卡| 久99久视频| 国产内射老熟女aaaa| 午夜精品视频在线| 国产精品久久中文字幕| 9a蜜桃久久久久久免费| 青青在线免费视频| 欧美激情xxxxx| 久久久久久久久久码影片| 国产日韩欧美电影在线观看| 日本亚洲欧洲色α| 欧美久久久精品| 日韩在线免费av| 国产另类自拍| 欧美在线激情网| 亚洲一区二区在线观| 国产成人精品最新| 99精品视频在线看| 欧美性视频精品| 亚洲啊啊啊啊啊| 精品不卡在线| 国产精品三区在线| 久久综合九九| 国产美女被下药99| 欧美 日韩 国产在线观看| 午夜精品久久久久久99热软件 | 中文字幕黄色大片| 久久精品国产欧美激情| 国产精彩视频一区二区| 国产在线98福利播放视频| 青青草精品视频在线| 亚洲欧美一区二区原创| 国产精品高潮呻吟久久av无限| 久久一区二区三区欧美亚洲| 国产在线精品一区二区三区》| 日本香蕉视频在线观看| 在线播放 亚洲| 久久成人这里只有精品| 国产l精品国产亚洲区久久| 高清视频欧美一级| 国产资源在线视频| 欧美日韩系列| 欧美在线亚洲一区| 日韩男女性生活视频| 欧美一区二区三区在线免费观看| 久久久久久91香蕉国产| 精品国产综合区久久久久久| 国产精品老女人精品视频| 久久99精品久久久久久青青日本| 99精品国产高清一区二区| 国产视频精品网| 国产一级黄色录像片| 国产中文欧美精品| 欧美激情 国产精品| 日韩欧美视频第二区| 无码免费一区二区三区免费播放| 最新中文字幕久久| 欧美精品亚州精品| 精品国产一二| 精品免费日产一区一区三区免费 | 久久精品国产v日韩v亚洲| 国产第一页视频| 久久久水蜜桃| 久久人人爽人人爽人人av| 91国产丝袜在线放| 91精品国产自产91精品| 成人h视频在线观看| 国产麻豆一区二区三区在线观看 | 国产精自产拍久久久久久| 免费在线观看的毛片| 欧美 日韩 国产 在线观看| 欧美精品video| 国产精品久久久久久久久| 国产精品久久久久秋霞鲁丝| 国产精品精品视频一区二区三区| 国产精品视频xxxx|