首页 > > 详细

辅导DPST1091编程设计、讲解C++程序、辅导C++程序 解析Haskell程序|辅导Web开发

项目预算:   开发周期:  发布时间:   要求地区:
DPST1091 21T1 - Assignment 2 - CSpotify
Assignment 2 - CSpotify
Introduction
We consider music streaming to be a normal thing that we use regularly . . . but it wasn't always this way. In the late 1990s, a new file format
called the MP3 appeared. Its ability to compress audio coupled with the rise of the internet lead to a new era in the music industry. Napster
(and a new generation of music pirates) brought this into the spotlight when they launched in 1999.
Nowadays, with services like Spotify, we have access to a massive library of music (and other audio) content from nearly any device with an
internet connection.
In this assignment, you'll be looking at some of the coding work that goes into organisation of music with things like song information,
playlists and personal music libraries. CSpotify is our implementation of a song library using linked lists as the primary data structure.
Your Goal
The assignment is divided into two parts:
Part A - Implementation (5 Stages)
Your task here is to write the functions that will manage your music Library of Playlists which contain Tracks. All of these functions
are contained inside the file cspotify.c.
Part B - Testing
Your task here is to write functions in test_cspotify.c to check that your code works.
Please note that you do not need to scan in any inputs from the user, this is already completed for you in the given starter code.
The Overall Picture - Your Library
The Library is the overall struct which contains all the objects you will need for the assignment. The Library contains a list of Playlists. In
each of the Playlists, there is a list of Tracks. At the start of the program, the Library starts off as an empty Library containing no
Playlists and hence no Tracks.
As you progress through Stage 1 of the assignment to manage Playlists to your Library, your Library might start to look like this, where
there are Playlists in the Library but not Tracks in any of the Playlists:
Note: You should refer to cspotify.h for more technical and detailed instructions in regards to each function’s implementation.
2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify
https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 2/13
Stage 2 will then allow you to navigate around your Library Playlists and add Tracks to each Library, resulting in a Library that could look
like this:
Each Track will store information about the title, artist and the trackLength in addition to a next pointer.
Stage 3 will focus on removing certain objects from your Library.
Stage 4 and 5 will be more challenging manipulations of your Library.
The assignment breaks up the above further into smaller tasks to help you build and navigate around your Library. It is strongly
recommended that o begin from Stage 1 and progress in the gi en order
2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify
https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 3/13
recommended that you begin from Stage 1 and progress in the given order.
Getting Started
Starter Code
The starter code consists of the following files:
main.c contains the main function for the assignment. It will scan the program's input, then call the functions you will write.
You must not change this file.
cspotify.h contains the definitions of all the functions you will be writing. It also contains useful constants and type definitions.
You must not change this file.
cspotify.c contains empty functions which you will need to implement. It already contains some functions. It is strongly recommended that
you use these.
This file is where you will write your own code.
test_main.c contains a main function and other functions that allow you to run the tests you create in test_cspotify.c.
You must not change this file.
test_cspotify.h contains the prototypes of the testing functions in test_cspotify.c.
You must not change this file.
test_cspotify.c contains an alternative main function as well as template code that you will modify to make your own tests.
This file is where you will write your own test cases.
capture.h contains the definition of a function that allows you to capture the output of your own code, to use in testing. It can only be used
in test_cspotify.c, and will not be available in cspotify.c .
You must not change this file.
capture.c contains the implementation of functions that allow you to capture the output of your own code, to use in testing.
You must not change this file.
To run your code interactively, you should use the command:
$ dcc -o cspotify cspotify.c main.c
$ ./cspotify
To run your tests (written in test_cspotify.c), you should use the command:
$ dcc -o test_cspotify cspotify.c test_cspotify.c capture.c test_main.c
$ ./test_cspotify
Allowed C Features
In this assignment, there are two restrictions on C Features:
You must follow the rules explained in the Style Guide.
You may not use the function fnmatch, or import fnmatch.h.
It is recommended to only use features that have been taught in DP1091. Course work in Week 8, 9 and some of Week 10 will have a
particular focus on assistance for this assignment and you will not need any of the subject material from Weeks 11 or 12.
If you choose to disregard this advice, you must still follow the Style Guide. You also may be unable to get help from course staff if you use
features not taught in DP1091.
Reference Implementation
If you have questions about what behaviour your program should exhibit, we have provided a sample solution for you to use.
$ 1091 cspotify
Download the starter code (cspotify.zip) here or copy it to your CSE account using the following command:
$ 1091 setup_cspotify
2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify
https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 4/13
Stage One
When you execute your program, you can assume that the Library has already been created for you to perform the following operations.
Stage 1 involves managing the Playlists in your Library as well as printing out the state of the Library. You will need to implement or
modify the following functions:
create_library (This is already implemented for you, you may need to modify it)
add_playlist
print_library
rename_playlist
Add a playlist
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Add a new Playlist to the Library.
int add_playlist(Library library, char playlistName[MAX_LEN]) {
return SUCCESS;
}
This function will be given a Library and a Playlist name. You will need to insert a new Playlist node at the end of the linked list of
Playlists in the Library. If the Library has no Playlists, your new Playlist will become the first Playlist in the Library. If this is the case,
you will need to make this Playlist “selected”.
You can assume you will never receive a Playlist name which already exists in the Library
You may receive invalid inputs so the function will return either:
ERROR_INVALID_INPUTS if the given Playlist name is invalid (i.e. not alphanumeric).
SUCCESS if a new Playlist is successfully added.
You will need to create a Playlist node (using malloc) before it is inserted into the Library.
Please note that until you implement the next function in this stage for printing out the Library, you will not be able to see whether your
Playlist has been added successfully into the Library.
Print Out the Library
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Print out the Library.
void print_library(Library library) {
}
You will need to use the following helper functions already provided to you in the same file: print_playlist, print_selected_playlist and
print_track.
This function will be given a Library. The function should go through each Playlist in the Library and print out the information in the order
they are in inside the Library. You should use the above helper functions to print the Library out, instead of calling printf yourself. Note
that the word static on these functions will make that function only accessible in the current file. We often use static on helper functions
that are not part of the header file and aren't used by any other parts of the program. static will not significantly change how you will use or
define this function.
Command: A
Example: A RoadTrip
Description: Adds a new Playlist named "Roadtrip" at the end of the Library of Playlists.
The message which appears right after running any command simply acknowledges the function has been called and/or depends on
your return values. It does not necessarily indicate the success of your implementation of this function.
Command: P
Example: P
Description: Prints out the Library.
2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify
https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 5/13
You may see that both print_playlist and print_selected_playlist above take in an int number, this is the position in which they are in in
the Library of Playlists assuming that the first Playlist is at position 0.
The function should not return anything.
At this stage, you will only need to use print_playlist and print_selected_playlist to help you print out information in the Library.
print_track is not needed until Stage 2 has been implemented. After implementing stage 2, you should come back and make sure that the
Tracks in each Playlist are also printed out.
Rename a Playlist
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Rename the name of an existing Playlist.
int rename_playlist(Library library, char playlistName[MAX_LEN],
char newPlaylistName[MAX_LEN]) {
return SUCCESS;
}
This function will be given a Library, a Playlist name and a new Playlist name. Your task is to find the playlistName in the Library of
Playlists and change its name to the name given in newPlaylistName.
You may receive invalid inputs so the function will return either:
ERROR_NOT_FOUND if the given Playlist name is not found otherwise,
ERROR_INVALID_INPUTS if the new Playlist name is invalid (i.e. not alphanumeric).
SUCCESS if a new Playlist is successfully added.
Stage Two
Stage 2 involves navigating around a Library of Playlists and adding Tracks. You will need to implement the following functions:
select_next_playlist
select_previous_playlist
add_track
playlist_length
Select the Next Playlist
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Selects the next Playlist in the Library.
void select_next_playlist(Library library) {

}
This function will be given a Library. In Stage 1, by default the first Playlist added into the Library was selected. For this function, you will
need to change the selected Playlist in the Library to the Playlist after the currently selected Playlist.
If the currently selected Playlist is the last Playlist in the Library, make the first Playlist in the Library become the new selected
Playlist.
The function should not return anything.
Select the Previous Playlist
Command: R
Example: R Roadtrip SleepMusic
Description: Renames the existing Playlist "Roadtrip" to "SleepMusic".
Command: S
Example: S
Description: Selects the next Playlist in the Library.
2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify
https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 6/13
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Selects the previous Playlist in the Library.
void select_previous_playlist(Library library) {

}
This function is very similar to selecting the next Playlist. Given a Library, you will need to change the Playlist that is selected to the
Playlist before the currently selected Playlist.
If the currently selected Playlist is the first Playlist in the Library, make the last Playlist in the Library become the new selected
Playlist.
The function should not return anything.
Add a Track
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Add a new Track to the selected Playlist.
int add_track(Library library, char title[MAX_LEN], char artist[MAX_LEN],
int trackLengthInSec, int position) {
return SUCCESS;
}
This function will be given a Library, Track title, the artist of the Track, the Track length in seconds as well as a position number.
Your task is to go through the selected Playlist and add a new Track node at the position specified by position. If position is 0, the node
should be inserted at the front of the Playlist. If the position has a value equal to the number of Tracks in the Playlist, the node should
be inserted at the end of the Playlist.
It is possible that the same Track can be added to the same Playlist multiple times. You may receive invalid inputs so the function will
return one of the following:
ERROR_NOT_FOUND if there are no Playlists in the Library, otherwise,
ERROR_INVALID_INPUTS if the given title/artist/position/track length is invalid. (see cspotify.h for more details)
SUCCESS if a new Playlist is successfully added.
You will also need to make changes to your print_library function in Stage 1 so that it will now also print out the Tracks you add to a
Playlist.
Calculate the Length of the Playlist
In cspotify.c you have been given the function stub (a stub is an unimplemented function):
// Calculate the total length of the selected Playlist in minutes and seconds.
void playlist_length(Library library, int *playlistMinutes, int *playlistSeconds) {
}
For this function, you are given a Library and two uninitialised int variables passed into the function by reference (i.e. the two int pointers
you receive in this function are pointing to the memory location of two int variables).
Command: W
Example: W
Description: Selects the previous Playlist in the Library.
Command: a <artist> <trackLengthInSec> <position><br>Example: a PrettySavage BLACKPINK 350 0<br>Description: Adds a new Track at the 0th position in the selected Playlist. Specifically, this is a Track titled "PrettySavage" by the<br>artist "BLACKPINK" and has a Track length of 350 seconds.<br>Command: T<br>Example: T<br>Description: Calculates the total length of the selected Playlist in minutes and seconds. <br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 7/13<br>Your task is to go through and calculate the length of the currently selected Playlist in your Library. The total number of minutes in the<br>Playlist should be stored inside the memory pointed to by the playlistMinutes pointer. The total number of seconds in the Playlist<br>should be stored in the memory pointed to by the playlistSeconds pointer.<br>The function should not return anything.<br>Stage Three<br>Stage 3 involves removing objects from your Library and the Library itself. You will be freeing memory which has been malloced. You will<br>need to implement the following functions:<br>delete_track<br>delete_playlist<br>delete_library<br>Delete a Given Track<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Delete the first instance of the given track in the selected Playlist<br>// of the Library.<br>void delete_track(Library library, char track[MAX_LEN]) {<br>}<br>Calling this function should delete the first instance which matches the given Track name within the selected Playlist.<br>The function should not return anything.<br>Delete the Selected Playlist<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Delete the selected Playlist and select the next Playlist in the Library.<br>void delete_playlist(Library library) {<br>}<br>Calling this function should delete the entire selected Playlist as well as all the Tracks within this Playlist. You should ensure that the next<br>Playlist in the Library is selected once the currently selected Playlist is removed. If there is no next Playlist, select the first Playlist in<br>the Library.<br>The function should not return anything.<br>Delete the Entire Library<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>Command: d <track><br>Example: d LovesickGirls<br>Description: Deletes the first instance of the Track titled "LovesickGirls" in the selected Playlist of the Library.<br>Command: D<br>Example: D<br>Description: Deletes the selected Playlist and select the next Playlist in the Library.<br>Command: X<br>Example: X<br>Description: Deletes an entire Library and its associated Playlists and Tracks. <br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 8/13<br>// Delete an entire Library and its associated Playlists and Tracks.<br>void delete_library(Library library) {<br>}<br>Calling this function should delete the entire given Library including its Playlists and Tracks within each Playlist.<br>The function should not return anything.<br>Stage Four<br>Stage 4 consists of more involved manipulations of the Library. You will need to implement the following functions:<br>cut_and_paste_track<br>soundex_search<br>Cut and Paste Track<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Cut the given track in selected Playlist and paste it into the given<br>// destination Playlist.<br>int cut_and_paste_track(Library library, char trackTitle[MAX_LEN],<br> char destPlaylist[MAX_LEN]) {<br> return SUCCESS;<br>}<br>This function will take in a Library, a Track title and a destination Playlist. It should remove the first Track instance which matches the given<br>trackName from the selected Playlist and add it into the end of the Playlist with the given destination Playlist name. The function<br>should return one of the error codes (see cspotify.h for more details) or SUCCESS.<br>Soundex Search<br>What is Soundex?<br>Soundex is a phonetic algorithm which allows strings to be encoded so that words which sound similar will have the same encoding despite<br>small differences in spelling.<br>This becomes very useful in searching for music. For example, when searching for artists, mispelling the artist names will still allow you to<br>search for the artist.<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Search the given Library for tracks where its artist<br>// match the given searchTerm<br>void soundex_search(Library library, char artist[MAX_LEN]) {<br><br>}<br>This function will take in a Library and a search term. Your task is to go through the given Library and print out all Tracks with artists that<br>have the same Soundex encoding as the given search term. You will again, need to use the given help function print_track instead of calling<br>printf yourself to print out the matching Tracks.<br>This stage has very few tests in the autotest! They do not necessarily cover every edge case. You should test it with other inputs, and<br>compare your solution against the reference solution.<br>Command: c <trackName> <destPlaylist><br>Example: c WakaWaka Fun<br>Description: Moves the Track title "WakaWaka" from the currently selected Playlist to an existing destination Playlist named "Fun".<br>Command: s <searchTerm><br>Example: s Robert<br>Description: Prints out all Tracks with artists that have the same Soundex Encoding as the given search term. <br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 9/13<br>The specific version of the Soundex algorithm which will be used is specified in cspotify.h<br>The function should not return anything.<br>Stage Five<br>Stage 5 consists of more involved manipulations of the Library. You will need to implement the following functions:<br>add_filtered_playlist<br>reorder_playlist<br>Add Filtered Playlist<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Move all Tracks with artists that have the same Soundex Encoding as<br>// the given artist to a new Playlist.<br>int add_filtered_playlist(Library library, char artist[MAX_LEN]) {<br> return SUCCESS;<br>}<br>This function will take in a Library and an artist. It should go through the entire Library and move all Tracks with artists that have the same<br>Soundex Encoding as the given artist into a new Playlist named with the given artist. The function should return one of the error codes (see<br>cspotify.h for more details) or SUCCESS.<br>Reorder Playlist<br>In cspotify.c you have been given the function stub (a stub is an unimplemented function):<br>// Move all Tracks with artists that have the same Soundex Encoding as<br>// the given artist to a new Playlist.<br>// Reorder the selected Playlist in the given order specified by the order array.<br>void reorder_playlist(Library library, int order[MAX_LEN], int length) {<br>}<br>This function differs slightly in the way in which the command is executed. Once the above command is executed, the program will prompt<br>you to enter a series of integers.<br>This function will take in a Library, an order array and length. It should reorder the Tracks in the selected Playlist based on the order in the<br>given array. More details about this function has been given in cspotify.h.<br>Testing<br>It is important to test your program thoroughly to make sure it can manage different situations.<br>Writing your own Automated Tests<br>As you implement functions in cspotify.c, you will encounter autotests in that require you to implement the functions in test cspotify.c.<br>This stage has very few tests in the autotest! They do not necessarily cover every edge case. You should test it with other inputs, and<br>compare your solution against the reference solution.<br>Command: F <artist><br>Example: F Taylor<br>Description: Move all Tracks with artists that have the same Soundex Encoding as "Taylor" to a new Playlist.<br>Command: r <length><br>Example: r 5<br>Description: Reorders the selected Playlist of 5 Tracks in an order which will be specified in the input following this command. <br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 10/13<br>s you p e e t u ct o s cspot y.c, you e cou te autotests t at equ e you to p e e t t e u ct o s test_cspot y.c.<br>You are given a file test_main.c. This is not the same as the interactive program in main.c. Instead, it runs the series of automatic tests on the<br>functionality provided by cspotify.h and cspotify.c. You should not change this main function.<br>Your main function will call other functions that look like this:<br>// Test function for 'add_playlist'<br>int test_add_playlist(void) {<br> // Test 1: Does add_playlist return SUCCESS and add<br> // when adding one Playlist with a valid name?<br> Library testLibrary = create_library();<br> int result = add_playlist(testLibrary, "Favourites");<br> if (result != SUCCESS) {<br> printf("DOES NOT MEET SPEC\n");<br> return;<br> }<br> char printText[10000];<br> CAPTURE(print_library(testLibrary), printText, 10000);<br> if (!string_contains(printText, "Favourites")) {<br> printf("DOES NOT MEET SPEC\n");<br> return;<br> }<br> // Test 2: Does add_playlist return ERROR_INVALID_INPUTS<br> // and not add the playlist into the Library<br> // when trying to add a Playlist with an invalid name?<br> // TODO: Add your test for Test 2<br> // Test 3: ???<br> // TODO: Add your own test, and explain it.<br> printf("MEETS SPEC\n");<br>}<br>Your job is to fill in the spaces where it says "TODO" with a series of C statements that check whether the functions in cspotify.c work.<br>As you can see in Test 1, some of these functions have already been partially implemented to show you what you should do<br>Some functions will ask you to specifically test something (in this case, to make sure add_playlist returns the correct amount if you call it<br>many times).<br>Some functions will ask you to decide on your own test. You should describe what you are testing, and then write a test for that situation.<br>Note that you can only test functions by checking their outputs, and their output to the terminal. You cannot access the fields of a struct, nor<br>can you redefine the structs from cspotify.c in test_cspotify.c. Doing so may cause you to lose marks.<br>You can test your tests yourself, by compiling it against your cspotify.c.<br>This is what you will see when you compile the starter code/tests.<br>$ dcc -o test_cspotify test_cspotify.c cspotify.c capture.c<br>$ ./test_cspotify<br>*~~~~~~~~~~~~~~~~~~~~~~~{ CSpotify Tests }~~~~~~~~~~~~~~~~~~~~~~~*<br>Stage 1 - Test add_playlist: DOES NOT MEET SPEC<br>Stage 1 - Test rename_playlist: DOES NOT MEET SPEC<br>Stage 2 - Test add_track: MEETS SPEC<br>Stage 2 - Test playlist_length: MEETS SPEC<br>Stage 3 - Test delete_playlist: MEETS SPEC<br>Stage 4 - Test soundex_search: MEETS SPEC<br>Your extra tests: MEETS SPEC<br>Capture<br>You may notice that we have given you two extra files -- capture.c and capture.h. These files define the CAPTURE macro. Macros are not<br>covered in this course and as a result, you do not need to understand these files.<br>You can use them to capture what a function prints and put it into a string. This is useful if you use it with for example, the print_library<br>function, since you can then test the output for the Library is as you expect.<br>The header of capture.h describes how to use it.<br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 11/13<br>// This file contains the `CAPTURE()` macro. To use this macro,<br>// you should define a large, empty string. Lets say your string is:<br>// char str[MAX_LENGTH];<br>// Then you can do the following:<br>// CAPTURE(my_function(), str, MAX_LENGTH)<br>// Which will put the output of `my_function()` into str.<br>Autotests<br>As usual autotest is available with some simple tests - but your own tests in test_cspotify.c may be more useful at pinpointing exactly<br>which functions are and aren't working.<br>$ 1091 autotest cspotify<br>If you wish to use autotest to view only a specific stage of the assignment, you can use autotest-stage. The following example shows how to<br>autotest stage 1 but you can replace the stage number with any stage you would like to test.<br>$ 1091 autotest-stage 01 cspotify<br>Frequently Asked Questions<br>How many tests do I need to complete to get full marks?<br>You only need to complete the tests marked with "TODO"; except the extra_tests which are optional. For each function, this means you will<br>need to write two tests (note that this desn't include tests we have provided you). You do not need to write tests for stage five, though we<br>encourage you to do so for your own learning and enjoyment!<br>Why can't I access structs from cspotify.c inside of test_cspotify.c?<br>The way C works is if the struct definition is not present in the current .c file then the code there is not able to access the members of that<br>struct. You can create a pointer variable which points to that struct, but you will not be able to access it's members with ->. This is a good<br>thing, and is intended.<br>This design feature is because it allows us to implement Abstract Data-Types (ADTs). The objective of using ADTs is so that the code of one<br>file can not access the “inner workings” of a variable that it uses, but is restricted to calling functions from a .h file with that variable. This may<br>sound counter productive at first, why would you want to limit access to a variable? Actually there are several advantages:<br>1. Access Control: This is a useful concept when you have multiple programmers working together. It allows you to police the things that<br>happens to your Library. If you are the creator of the data type (the Library) you can prevent other people (who may not know what<br>their doing) from changing pointers (perhaps accidentally) in your data structure and in general ruining things.<br>2. Abstraction: It presents a simple interface (defined in the .h file) to use the code of your Library. If you are the user of the data type<br>someone else has created, it is really helpful to be presented with a simpler interface which hides the details of the underlying data<br>structures, so they don't have to learn as many things to be able to use your data type.<br>3. Decoupling: All test_cspotify.c files will conform to a common interface. Perhaps the way the other students in this course organised<br>the members in their structs might be different to the way you're doing it. Tests which don't directly interact with the Library's<br>members are interchangeable in this sense, one student's tests could be paired up with another student's Library and there wouldn't<br>be any compatibility issues there.<br>So, to fix your error, try to design tests which don't stab -> into the Library, just call the functions in cspotify.h and check their outputs are<br>correct/they did the correct things.<br>(Answer adapted from a forum post by Dean Wunder)<br>Can I define structs from cspotify.c in test_cspotify.c?<br>Unfortunately no, See above.<br>Why do I keep getting the Incomplete definition of type ... error?<br>Please Note: There will be tests in the autotest which are dedicated to testing some of the tests you write in test_cspotify.c. These<br>have not been released yet and will be released shortly after the assignment release.<br>2021/3/30 DPST1091 21T1 - Assignment 2 - CSpotify<br>https://cgi.cse.unsw.edu.au/~dp1091/21T1/assignments/ass2/index.html 12/13<br>See above.<br>Look out for this space! More may be added to clarify any questions throughout the assignment!<br>Assessment<br>Attribution of Work<br>This is an individual assignment. The work you submit must be your own work and only your work apart from exceptions below. Joint work is<br>not permitted.<br>You may use small amounts (< 10 lines) of general purpose code (not specific to the assignment) obtained from site such as Stack Overflow<br>or other publically available resources. You should attribute clearly the source of this code in a comment with it.<br>You are not permitted to request help with the assignment apart from in the course forum, help sessions or from course lecturers or tutors.<br>Do not provide or show your assignment work to any other person (including by posting it on the forum) apart from the teaching staff of<br>DPST1091.<br>The work you submit must otherwise be entirely your own work. Submission of work partially or completely derived from any other person<br>or jointly written with any other person is not permitted. The penalties for such an offence may include negative marks, automatic failure of<br>the course and possibly other academic discipline. Assignment submissions will be examined both automatically and manually for such<br>submissions.<br>Relevant scholarship authorities will be informed if students holding scholarships are involved in an incident of plagiarism or other<br>misconduct. If you knowingly provide or show your assignment work to another person for any reason, and work derived from it is submitted<br>you may be penalized, even if the work was submitted without your knowledge or consent. This may apply even if your work is submitted by<br>a third party unknown to you.<br>Note, you will not be penalised if your work is taken without your consent or knowledge.<br>Submission of Work<br>You are required to test and/or submit intermediate versions of your assignment. Every time you work on the assignment and make<br>some progress you should copy your work to your CSE account and submit it using the give command, or autotest it using 1091 autotest<br>It is fine if intermediate versions do not compile or otherwise fail submission tests.<br>Only the final submitted version of your assignment will be marked. You must give when you have completed your </span> </div> </div> <style type="text/css"> .listkeyword { color: #990099; font-size: 14px; margin:0px 0px 0px 17px; word-wrap: break-word; text-align:left; } </style> <div class="width30bi divfr"> <div class="width99bi margintop20 divbdr divfl"> <div class="divtitle"> <div class="divfl divtitlefont" style="text-align: left; width:250px"> 软件开发、广告设计客服</div> <div class="divfr"> </div> </div> <div> <ul> <li class="divullititle heightline25px divtal">QQ:99515681 </li> <li class="divullititle heightline25px divtal">邮箱:99515681@qq.com </li> <li class="divullititle heightline25px divtal">工作时间:8:00-23:00 </li> <li class="divullititle heightline25px divtal">微信:codinghelp</li> </ul> </div> </div> <div class="width99bi margintop20 divbdr divfl"> <div class="divtitle"> <div class="divfl divtitlefont" style="text-align: left"> 热点项目</div> <div class="divfr"> <img src="/image/j01.jpg" width="14" height="14" alt="软件定制开发更多图片" /></div> <div class="divfr"> <a href="Lists-0-1.html" id="infotop2_amore" title="软件定制开发周排行更多">更多</a></div> </div> <div> <ul> <li class="divullititle heightline25px divtal"><a href="2024122316761170001.html" title="代做 program、代写 C++设计程序" target="_blank"> 代做 program、代写 c++设计程... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316761091561.html" title="COMP2012J 代写、代做 java 设计编程" target="_blank"> comp2012j 代写、代做 java 设... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316761090931.html" title="代做 data 编程、代写 Python/java 程序" target="_blank"> 代做 data 编程、代写 python/... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316696298591.html" title="代做EN.553.413-613 Applied Stats and Data Analysis Practice Midterm 2" target="_blank"> 代做en.553.413-613 applied s... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659448431.html" title="代做Steady-State Analvsis代做迭代" target="_blank"> 代做steady-state analvsis代做... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659443281.html" title="代写Photo essay of a deciduous tree帮做R程序" target="_blank"> 代写photo essay of a deciduo... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659438121.html" title="代写GPA Analyzer调试C/C++语言" target="_blank"> 代写gpa analyzer调试c/c++语言 </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659437651.html" title="代做Comp 330 (Fall 2024): Assignment 3代做留学生SQL 程序" target="_blank"> 代做comp 330 (fall 2024): as... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659432501.html" title="代写PSTAT 160A Fall 2024 - Assignment-4代做迭代" target="_blank"> 代写pstat 160a fall 2024 - a... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316659427341.html" title="代做PSTAT 160A: Stochastic Process: Fall 2024代做迭代" target="_blank"> 代做pstat 160a: stochastic p... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316609990461.html" title="代做7SSGN110 Environmental Data Analysis | Practical 7 | Time Series Analysis – Frequency Domain代做Java" target="_blank"> 代做7ssgn110 environmental d... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316609985311.html" title="代做COMPSCI 4039 PROGRAMMING 2020代写Java编程" target="_blank"> 代做compsci 4039 programming... </a> <span class="colorlan"> 2024-12-23</span> </li> <li class="divullititle heightline25px divtal"><a href="2024122316609980151.html" title="代做Lab Exercise 8: Dictionaries and Class Inheritance代写留学生Python语言" target="_blank"> 代做lab exercise 8: dictiona... </a> <span class="colorlan"> 2024-12-23</span> </li> </ul> </div> </div> <div class="width99bi margintop20 divbdr divfl"> <div class="divtitle"> <div class="divfl divtitlefont" style="text-align: left"> 热点标签</div> </div> <div> <ul class="listkeyword"> <a href="Lists.aspx?wd=MKTG2509" title="MKTG2509"> mktg2509 </a> <a href="Lists.aspx?wd=CSCI 2600" title="CSCI 2600"> csci 2600 </a> <a href="Lists.aspx?wd=38170" title="38170"> 38170 </a> <a href="Lists.aspx?wd=LNG302" title="LNG302"> lng302 </a> <a href="Lists.aspx?wd=CSSE3010" title="CSSE3010"> csse3010 </a> <a href="Lists.aspx?wd=PHAS3226" title="PHAS3226"> phas3226 </a> <a href="Lists.aspx?wd=77938" title="77938"> 77938 </a> <a href="Lists.aspx?wd=ARCH1162" title="ARCH1162"> arch1162 </a> <a href="Lists.aspx?wd=ENGN4536/ENGN6536" title="ENGN4536/ENGN6536"> engn4536/engn6536 </a> <a href="Lists.aspx?wd=ACX5903" title="ACX5903"> acx5903 </a> <a href="Lists.aspx?wd=COMP151101" title="COMP151101"> comp151101 </a> <a href="Lists.aspx?wd=PHL245" title="PHL245"> phl245 </a> <a href="Lists.aspx?wd=CSE12" title="CSE12"> cse12 </a> <a href="Lists.aspx?wd=COMP9312" title="COMP9312"> comp9312 </a> <a href="Lists.aspx?wd=STAT3016/6016" title="STAT3016/6016"> stat3016/6016 </a> <a href="Lists.aspx?wd=PHAS0038" title="PHAS0038"> phas0038 </a> <a href="Lists.aspx?wd=COMP2140" title="COMP2140"> comp2140 </a> <a href="Lists.aspx?wd=6QQMB312" title="6QQMB312"> 6qqmb312 </a> <a href="Lists.aspx?wd=XJCO3011" title="XJCO3011"> xjco3011 </a> <a href="Lists.aspx?wd=REST0005" title="REST0005"> rest0005 </a> <a href="Lists.aspx?wd=EMATM0051" title="EMATM0051"> ematm0051 </a> <a href="Lists.aspx?wd=5QQMN219" title="5QQMN219"> 5qqmn219 </a> <a href="Lists.aspx?wd=LUBS5062M" title="LUBS5062M"> lubs5062m </a> <a href="Lists.aspx?wd=EEE8155" title="EEE8155"> eee8155 </a> <a href="Lists.aspx?wd=CEGE0100" title="CEGE0100"> cege0100 </a> <a href="Lists.aspx?wd=EAP033" title="EAP033"> eap033 </a> <a href="Lists.aspx?wd=ARTD1109" title="ARTD1109"> artd1109 </a> <a href="Lists.aspx?wd=MAT246" title="MAT246"> mat246 </a> <a href="Lists.aspx?wd=ETC3430" title="ETC3430"> etc3430 </a> <a href="Lists.aspx?wd=ECMM462" title="ECMM462"> ecmm462 </a> <a href="Lists.aspx?wd=MIS102" title="MIS102"> mis102 </a> <a href="Lists.aspx?wd=INFT6800" title="INFT6800"> inft6800 </a> <a href="Lists.aspx?wd=DDES9903" title="DDES9903"> ddes9903 </a> <a href="Lists.aspx?wd=COMP6521" title="COMP6521"> comp6521 </a> <a href="Lists.aspx?wd=COMP9517" title="COMP9517"> comp9517 </a> <a href="Lists.aspx?wd=COMP3331/9331" title="COMP3331/9331"> comp3331/9331 </a> <a href="Lists.aspx?wd=COMP4337" title="COMP4337"> comp4337 </a> <a href="Lists.aspx?wd=COMP6008" title="COMP6008"> comp6008 </a> <a href="Lists.aspx?wd=COMP9414" title="COMP9414"> comp9414 </a> <a href="Lists.aspx?wd=BU.231.790.81" title="BU.231.790.81"> bu.231.790.81 </a> <a href="Lists.aspx?wd=MAN00150M" title="MAN00150M"> man00150m </a> <a href="Lists.aspx?wd=CSB352H" title="CSB352H"> csb352h </a> <a href="Lists.aspx?wd=MATH1041" title="MATH1041"> math1041 </a> <a href="Lists.aspx?wd=EENGM4100" title="EENGM4100"> eengm4100 </a> <a href="Lists.aspx?wd=ISYS1002" title="ISYS1002"> isys1002 </a> <a href="Lists.aspx?wd=08" title="08"> 08 </a> <a href="Lists.aspx?wd=6057CEM" title="6057CEM"> 6057cem </a> <a href="Lists.aspx?wd=MKTG3504" title="MKTG3504"> mktg3504 </a> <a href="Lists.aspx?wd=MTHM036" title="MTHM036"> mthm036 </a> <a href="Lists.aspx?wd=MTRX1701" title="MTRX1701"> mtrx1701 </a> <a href="Lists.aspx?wd=MTH3241" title="MTH3241"> mth3241 </a> <a href="Lists.aspx?wd=EEEE3086" title="EEEE3086"> eeee3086 </a> <a href="Lists.aspx?wd=CMP-7038B" title="CMP-7038B"> cmp-7038b </a> <a href="Lists.aspx?wd=CMP-7000A" title="CMP-7000A"> cmp-7000a </a> <a href="Lists.aspx?wd=INTS4010" title="INTS4010"> ints4010 </a> <a href="Lists.aspx?wd=ECON2151" title="ECON2151"> econ2151 </a> <a href="Lists.aspx?wd=INFS5710" title="INFS5710"> infs5710 </a> <a href="Lists.aspx?wd=FINS5516" title="FINS5516"> fins5516 </a> <a href="Lists.aspx?wd=FIN3309" title="FIN3309"> fin3309 </a> <a href="Lists.aspx?wd=FINS5510" title="FINS5510"> fins5510 </a> <a href="Lists.aspx?wd=GSOE9340" title="GSOE9340"> gsoe9340 </a> <a href="Lists.aspx?wd=MATH2007" title="MATH2007"> math2007 </a> <a href="Lists.aspx?wd=MATH2036" title="MATH2036"> math2036 </a> <a href="Lists.aspx?wd=SOEE5010" title="SOEE5010"> soee5010 </a> <a href="Lists.aspx?wd=MARK3088" title="MARK3088"> mark3088 </a> <a href="Lists.aspx?wd=INFS3605" title="INFS3605"> infs3605 </a> <a href="Lists.aspx?wd=ELEC9714" title="ELEC9714"> elec9714 </a> <a href="Lists.aspx?wd=COMP2271" title="COMP2271"> comp2271 </a> <a href="Lists.aspx?wd=MA214" title="MA214"> ma214 </a> <a href="Lists.aspx?wd=COMP2211" title="COMP2211"> comp2211 </a> <a href="Lists.aspx?wd=INFS3604" title="INFS3604"> infs3604 </a> <a href="Lists.aspx?wd=600426" title="600426"> 600426 </a> <a href="Lists.aspx?wd=SIT254" title="SIT254"> sit254 </a> <a href="Lists.aspx?wd=ACCT3091" title="ACCT3091"> acct3091 </a> <a href="Lists.aspx?wd=BBT405" title="BBT405"> bbt405 </a> <a href="Lists.aspx?wd=MSIN0116" title="MSIN0116"> msin0116 </a> <a href="Lists.aspx?wd=COM107/COM113" title="COM107/COM113"> com107/com113 </a> <a href="Lists.aspx?wd=MARK5826" title="MARK5826"> mark5826 </a> <a href="Lists.aspx?wd=SIT120" title="SIT120"> sit120 </a> <a href="Lists.aspx?wd=Comp9021" title="Comp9021"> comp9021 </a> <a href="Lists.aspx?wd=ECO2101" title="ECO2101"> eco2101 </a> <a href="Lists.aspx?wd=EEEN40700" title="EEEN40700"> eeen40700 </a> <a href="Lists.aspx?wd=CS253" title="CS253"> cs253 </a> <a href="Lists.aspx?wd=ECE3114" title="ECE3114"> ece3114 </a> <a href="Lists.aspx?wd=ECMM447" title="ECMM447"> ecmm447 </a> <a href="Lists.aspx?wd=CHNS3000" title="CHNS3000"> chns3000 </a> <a href="Lists.aspx?wd=MATH377" title="MATH377"> math377 </a> <a href="Lists.aspx?wd=ITD102" title="ITD102"> itd102 </a> <a href="Lists.aspx?wd=COMP9444" title="COMP9444"> comp9444 </a> <a href="Lists.aspx?wd=COMP(2041|9044)" title="COMP(2041|9044)"> comp(2041|9044) </a> <a href="Lists.aspx?wd=ECON0060" title="ECON0060"> econ0060 </a> <a href="Lists.aspx?wd=ECON7230" title="ECON7230"> econ7230 </a> <a href="Lists.aspx?wd=MGT001371" title="MGT001371"> mgt001371 </a> <a href="Lists.aspx?wd=ECS-323" title="ECS-323"> ecs-323 </a> <a href="Lists.aspx?wd=CS6250" title="CS6250"> cs6250 </a> <a href="Lists.aspx?wd=MGDI60012" title="MGDI60012"> mgdi60012 </a> <a href="Lists.aspx?wd=MDIA2012" title="MDIA2012"> mdia2012 </a> <a href="Lists.aspx?wd=COMM221001" title="COMM221001"> comm221001 </a> <a href="Lists.aspx?wd=COMM5000" title="COMM5000"> comm5000 </a> <a href="Lists.aspx?wd=MA1008" title="MA1008"> ma1008 </a> <a href="Lists.aspx?wd=ENGL642" title="ENGL642"> engl642 </a> <a href="Lists.aspx?wd=ECON241" title="ECON241"> econ241 </a> <a href="Lists.aspx?wd=COM333" title="COM333"> com333 </a> <a href="Lists.aspx?wd=MATH367" title="MATH367"> math367 </a> <a href="Lists.aspx?wd=MIS201" title="MIS201"> mis201 </a> <a href="Lists.aspx?wd=NBS-7041X" title="NBS-7041X"> nbs-7041x </a> <a href="Lists.aspx?wd=MEEK16104" title="MEEK16104"> meek16104 </a> <a href="Lists.aspx?wd=ECON2003" title="ECON2003"> econ2003 </a> <a href="Lists.aspx?wd=COMM1190" title="COMM1190"> comm1190 </a> <a href="Lists.aspx?wd=MBAS902" title="MBAS902"> mbas902 </a> <a href="Lists.aspx?wd=COMP-1027" title="COMP-1027"> comp-1027 </a> <a href="Lists.aspx?wd=DPST1091" title="DPST1091"> dpst1091 </a> <a href="Lists.aspx?wd=comp7315" title="comp7315"> comp7315 </a> <a href="Lists.aspx?wd=EPPD1033" title="EPPD1033"> eppd1033 </a> <a href="Lists.aspx?wd=M06" title="M06"> m06 </a> <a href="Lists.aspx?wd=EE3025" title="EE3025"> ee3025 </a> <a href="Lists.aspx?wd=MSCI231" title="MSCI231"> msci231 </a> <a href="Lists.aspx?wd=BB113/BBS1063" title="BB113/BBS1063"> bb113/bbs1063 </a> <a href="Lists.aspx?wd=FC709" title="FC709"> fc709 </a> <a href="Lists.aspx?wd=COMP3425" title="COMP3425"> comp3425 </a> <a href="Lists.aspx?wd=COMP9417" title="COMP9417"> comp9417 </a> <a href="Lists.aspx?wd=ECON42915" title="ECON42915"> econ42915 </a> <a href="Lists.aspx?wd=CB9101" title="CB9101"> cb9101 </a> <a href="Lists.aspx?wd=MATH1102E" title="MATH1102E"> math1102e </a> <a href="Lists.aspx?wd=CHME0017" title="CHME0017"> chme0017 </a> <a href="Lists.aspx?wd=FC307" title="FC307"> fc307 </a> <a href="Lists.aspx?wd=MKT60104" title="MKT60104"> mkt60104 </a> <a href="Lists.aspx?wd=5522USST" title="5522USST"> 5522usst </a> <a href="Lists.aspx?wd=LITR1-UC6201.200" title="LITR1-UC6201.200"> litr1-uc6201.200 </a> <a href="Lists.aspx?wd=EE1102" title="EE1102"> ee1102 </a> <a href="Lists.aspx?wd=COSC2803" title="COSC2803"> cosc2803 </a> <a href="Lists.aspx?wd=MATH39512" title="MATH39512"> math39512 </a> <a href="Lists.aspx?wd=OMP9727" title="OMP9727"> omp9727 </a> <a href="Lists.aspx?wd=INT2067/INT5051" title="INT2067/INT5051"> int2067/int5051 </a> <a href="Lists.aspx?wd=BSB151" title="BSB151"> bsb151 </a> <a href="Lists.aspx?wd=MGT253" title="MGT253"> mgt253 </a> <a href="Lists.aspx?wd=FC021" title="FC021"> fc021 </a> <a href="Lists.aspx?wd=BABS2202" title="BABS2202"> babs2202 </a> <a href="Lists.aspx?wd=MIS2002S" title="MIS2002S"> mis2002s </a> <a href="Lists.aspx?wd=PhyA21" title="PhyA21"> phya21 </a> <a href="Lists.aspx?wd=18-213" title="18-213"> 18-213 </a> <a href="Lists.aspx?wd=CEGE0012" title="CEGE0012"> cege0012 </a> <a href="Lists.aspx?wd=MDIA1002" title="MDIA1002"> mdia1002 </a> <a href="Lists.aspx?wd=MATH38032" title="MATH38032"> math38032 </a> <a href="Lists.aspx?wd=MECH5125" title="MECH5125"> mech5125 </a> <a href="Lists.aspx?wd=07" title="07"> 07 </a> <a href="Lists.aspx?wd=CISC102" title="CISC102"> cisc102 </a> <a href="Lists.aspx?wd=MGX3110" title="MGX3110"> mgx3110 </a> <a href="Lists.aspx?wd=CS240" title="CS240"> cs240 </a> <a href="Lists.aspx?wd=11175" title="11175"> 11175 </a> <a href="Lists.aspx?wd=FIN3020S" title="FIN3020S"> fin3020s </a> <a href="Lists.aspx?wd=Eco3420" title="Eco3420"> eco3420 </a> <a href="Lists.aspx?wd=ICTTEN622" title="ICTTEN622"> ictten622 </a> <a href="Lists.aspx?wd=COMP9727" title="COMP9727"> comp9727 </a> <a href="Lists.aspx?wd=CPT111" title="CPT111"> cpt111 </a> <a href="Lists.aspx?wd=DE114102D" title="DE114102D"> de114102d </a> <a href="Lists.aspx?wd=MGM320H5S" title="MGM320H5S"> mgm320h5s </a> <a href="Lists.aspx?wd=BAFI1019" title="BAFI1019"> bafi1019 </a> <a href="Lists.aspx?wd=MATH21112" title="MATH21112"> math21112 </a> <a href="Lists.aspx?wd=EFIM20036" title="EFIM20036"> efim20036 </a> <a href="Lists.aspx?wd=MN-3503" title="MN-3503"> mn-3503 </a> <a href="Lists.aspx?wd=FINS5568" title="FINS5568"> fins5568 </a> <a href="Lists.aspx?wd=110.807" title="110.807"> 110.807 </a> <a href="Lists.aspx?wd=BCPM000028" title="BCPM000028"> bcpm000028 </a> <a href="Lists.aspx?wd=INFO6030" title="INFO6030"> info6030 </a> <a href="Lists.aspx?wd=BMA0092" title="BMA0092"> bma0092 </a> <a href="Lists.aspx?wd=BCPM0054" title="BCPM0054"> bcpm0054 </a> <a href="Lists.aspx?wd=MATH20212" title="MATH20212"> math20212 </a> <a href="Lists.aspx?wd=CE335" title="CE335"> ce335 </a> <a href="Lists.aspx?wd=CS365" title="CS365"> cs365 </a> <a href="Lists.aspx?wd=CENV6141" title="CENV6141"> cenv6141 </a> <a href="Lists.aspx?wd=FTEC5580" title="FTEC5580"> ftec5580 </a> <a href="Lists.aspx?wd=MATH2010" title="MATH2010"> math2010 </a> <a href="Lists.aspx?wd=EC3450" title="EC3450"> ec3450 </a> <a href="Lists.aspx?wd=COMM1170" title="COMM1170"> comm1170 </a> <a href="Lists.aspx?wd=ECMT1010" title="ECMT1010"> ecmt1010 </a> <a href="Lists.aspx?wd=CSCI-UA.0480-003" title="CSCI-UA.0480-003"> csci-ua.0480-003 </a> <a href="Lists.aspx?wd=ECON12-200" title="ECON12-200"> econ12-200 </a> <a href="Lists.aspx?wd=IB3960" title="IB3960"> ib3960 </a> <a href="Lists.aspx?wd=ECTB60H3F" title="ECTB60H3F"> ectb60h3f </a> <a href="Lists.aspx?wd=CS247—Assignment" title="CS247—Assignment"> cs247—assignment </a> <a href="Lists.aspx?wd=TK3163" title="TK3163"> tk3163 </a> <a href="Lists.aspx?wd=ICS3U" title="ICS3U"> ics3u </a> <a href="Lists.aspx?wd=IB3J80" title="IB3J80"> ib3j80 </a> <a href="Lists.aspx?wd=COMP20008" title="COMP20008"> comp20008 </a> <a href="Lists.aspx?wd=COMP9334" title="COMP9334"> comp9334 </a> <a href="Lists.aspx?wd=EPPD1063" title="EPPD1063"> eppd1063 </a> <a href="Lists.aspx?wd=ACCT2343" title="ACCT2343"> acct2343 </a> <a href="Lists.aspx?wd=CCT109" title="CCT109"> cct109 </a> <a href="Lists.aspx?wd=ISYS1055/3412" title="ISYS1055/3412"> isys1055/3412 </a> <a href="Lists.aspx?wd=MATH350-Real" title="MATH350-Real"> math350-real </a> <a href="Lists.aspx?wd=MATH2014" title="MATH2014"> math2014 </a> <a href="Lists.aspx?wd=EEC180" title="EEC180"> eec180 </a> <a href="Lists.aspx?wd=STAT141B" title="STAT141B"> stat141b </a> <a href="Lists.aspx?wd=ECON2101" title="ECON2101"> econ2101 </a> <a href="Lists.aspx?wd=MSINM014/MSING014/MSING014B" title="MSINM014/MSING014/MSING014B"> msinm014/msing014/msing014b </a> <a href="Lists.aspx?wd=FIT2004" title="FIT2004"> fit2004 </a> <a href="Lists.aspx?wd=COMP643" title="COMP643"> comp643 </a> <a href="Lists.aspx?wd=BU1002" title="BU1002"> bu1002 </a> <a href="Lists.aspx?wd=CM2030" title="CM2030"> cm2030 </a> </ul> </div> </div> <br /> </div> <div class="divfloatclear"> </div> <div class="bottomdiv"> <div class="width1000px divmargin0auto paddingtop20"> <div class="height30px divtal"> <a href="#" title="软件定制开发网、软件制作联系我们">联系我们</a> - QQ: 9951568 </div> <div class="height30px divtal"> © 2021 <a href="#" target="_blank" title="软件定制开发网、软件制作技术分享">www.rj363.com</a> <span style="display:none"> </span> </div> <div class="divtal"> <span class="colorlan">软件定制开发网!</span> </div> <div class="paddingtop20"> </div> </div> </div> </div> </form> </body> </html>