commit 2bfe2cbb46d0b6d3a9e0b34eaa60f9fc17699e8d Author: zzc <1040813130@qq.com> Date: Tue Oct 12 13:10:51 2021 +0800 the initial commit diff --git a/MusicSharing/.gitignore b/MusicSharing/.gitignore new file mode 100644 index 0000000..603b140 --- /dev/null +++ b/MusicSharing/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/MusicSharing/.idea/.name b/MusicSharing/.idea/.name new file mode 100644 index 0000000..ef5f916 --- /dev/null +++ b/MusicSharing/.idea/.name @@ -0,0 +1 @@ +NetCloudSharing \ No newline at end of file diff --git a/MusicSharing/.idea/codeStyles/Project.xml b/MusicSharing/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..0d15693 --- /dev/null +++ b/MusicSharing/.idea/codeStyles/Project.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/MusicSharing/.idea/gradle.xml b/MusicSharing/.idea/gradle.xml new file mode 100644 index 0000000..5cd135a --- /dev/null +++ b/MusicSharing/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/MusicSharing/.idea/misc.xml b/MusicSharing/.idea/misc.xml new file mode 100644 index 0000000..37a7509 --- /dev/null +++ b/MusicSharing/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/MusicSharing/.idea/runConfigurations.xml b/MusicSharing/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/MusicSharing/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/MusicSharing/app/.gitignore b/MusicSharing/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/MusicSharing/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/MusicSharing/app/build.gradle b/MusicSharing/app/build.gradle new file mode 100644 index 0000000..7052842 --- /dev/null +++ b/MusicSharing/app/build.gradle @@ -0,0 +1,43 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.example.netcloudsharing" + minSdkVersion 25 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + useLibrary 'org.apache.http.legacy' +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.github.xujiaji:happy-bubble:1.1.4' + + implementation "androidx.cardview:cardview:1.0.0" + implementation 'com.android.support:design:28.0.0' + implementation 'com.github.bumptech.glide:glide:4.10.0' + implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1' +} diff --git a/MusicSharing/app/libs/mysql-connector-java-5.1.30-bin.jar b/MusicSharing/app/libs/mysql-connector-java-5.1.30-bin.jar new file mode 100644 index 0000000..afef9b2 Binary files /dev/null and b/MusicSharing/app/libs/mysql-connector-java-5.1.30-bin.jar differ diff --git a/MusicSharing/app/proguard-rules.pro b/MusicSharing/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/MusicSharing/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/MusicSharing/app/release/app-release.apk b/MusicSharing/app/release/app-release.apk new file mode 100644 index 0000000..29f49cf Binary files /dev/null and b/MusicSharing/app/release/app-release.apk differ diff --git a/MusicSharing/app/release/output.json b/MusicSharing/app/release/output.json new file mode 100644 index 0000000..fb6688e --- /dev/null +++ b/MusicSharing/app/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release","dirName":""},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/MusicSharing/app/src/androidTest/java/com/example/netcloudsharing/ExampleInstrumentedTest.java b/MusicSharing/app/src/androidTest/java/com/example/netcloudsharing/ExampleInstrumentedTest.java new file mode 100644 index 0000000..5f380e4 --- /dev/null +++ b/MusicSharing/app/src/androidTest/java/com/example/netcloudsharing/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.example.netcloudsharing; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.example.netcloudsharing", appContext.getPackageName()); + } +} diff --git a/MusicSharing/app/src/main/AndroidManifest.xml b/MusicSharing/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0face1a --- /dev/null +++ b/MusicSharing/app/src/main/AndroidManifest.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/java/Fragment/ActivityMusicHome.java b/MusicSharing/app/src/main/java/Fragment/ActivityMusicHome.java new file mode 100644 index 0000000..8860486 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/ActivityMusicHome.java @@ -0,0 +1,194 @@ +package Fragment; + +import android.content.ContentResolver; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.netcloudsharing.LocalMusicAdapter; +import com.example.netcloudsharing.LocalMusicBean; +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.diary.Permission; + +import java.util.ArrayList; +import java.util.List; + +import static Fragment.MainActivity.binder; +import static com.example.netcloudsharing.service.MusicService.currentPlayPosition; + +public class ActivityMusicHome extends AppCompatActivity implements View.OnClickListener { + //三个播放歌曲按钮 + private ImageView nextIv, playIv, lastIv, album; + //歌曲歌手 + private TextView singerTv, songTv; + private RecyclerView musicRv; + private LocalMusicAdapter adapter; + //数据源 + List mData; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_music_home); + initView(); + + mData = new ArrayList<>(); + + //getActivity可能有问题!!! + adapter = new LocalMusicAdapter(this, mData); + musicRv.setAdapter(adapter); + //设置布局管理器 + LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); + musicRv.setLayoutManager(layoutManager); + //加载本地数据源 + loadLocalMusicData(); + //设置每一项的点击事件 + setEventListener(); + Permission permission = new Permission(); + permission.checkPermission(this); + } + + private void setEventListener() { + adapter.setOnItemClickListener(new LocalMusicAdapter.OnItemClickListener() { + @Override + public void OnItemClick(View view, int position) { + currentPlayPosition = position; + LocalMusicBean musicBean = mData.get(position); + binder.playMusicPosition(musicBean); + setMusicBean(binder.getMusicBean()); + } + }); + } + + + /** + * 加载本地存储当中的音乐MP3文件到集合中 + */ + private void loadLocalMusicData() { + //1.获取ContentResolver对象 + ContentResolver contentResolver = getContentResolver(); + //2.获取本地音乐的Uri地址 + Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + //3.开始查询 + Cursor cursor = contentResolver.query(uri, null, null, null, null); + //4.遍历 + int id = 0; + while (cursor.moveToNext()) { + //内存里面存的是毫秒 + long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); + int minute = (int) (duration / 1000 / 60); + int second = (int) (duration / 1000 % 60); + if (minute < 1) continue; + id++; + String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); + String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); + String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); + String sid = String.valueOf(id); + String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); + String time = String.valueOf(minute) + ":" + String.valueOf(second); + //将一行当中的数据封装到对象中 + LocalMusicBean bean = new LocalMusicBean(sid, song, singer, album, time, path); + mData.add(bean); + } + //数据源发送变化,提示适配器更新 + adapter.notifyDataSetChanged(); + setMusicCount(); + + } + + public void setMusicCount() { + SharedPreferences sp = getSharedPreferences("music_count", MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putInt("count", mData.size()); + editor.apply(); + } + + /** + * 初始化控件的函数 + */ + private void initView() { + nextIv = findViewById(R.id.local_music_bottom_ivNext); + playIv = findViewById(R.id.local_music_bottom_ivPlay); + lastIv = findViewById(R.id.local_music_bottom_ivLast); + singerTv = findViewById(R.id.local_music_bottom_tvSinger); + songTv = findViewById(R.id.local_music_bottom_tvSong); + musicRv = findViewById(R.id.local_music_rv); + album = findViewById(R.id.local_music_bottom_ivIcon); + + nextIv.setOnClickListener(this); + lastIv.setOnClickListener(this); + playIv.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.local_music_bottom_ivPlay: + if (currentPlayPosition == -1) { + //如果没有音乐在播放 + binder.playMusicPosition(null); + setMusicBean(binder.getMusicBean()); + playIv.setImageResource(R.mipmap.icon_pause); + return; + } + if (binder.isMusicPlaying()) { + //如果音乐正在播放,则暂停 + binder.pauseMusic(); + playIv.setImageResource(R.mipmap.icon_play); + } else { + //如果音乐正在暂停,则播放 + binder.playMusic(); + playIv.setImageResource(R.mipmap.icon_pause); + } + setMusicBean(binder.getMusicBean()); + break; + case R.id.local_music_bottom_ivLast: + binder.playLastMusic(); + setMusicBean(binder.getMusicBean()); + break; + case R.id.local_music_bottom_ivNext: + binder.playNextMusic(); + setMusicBean(binder.getMusicBean()); + break; + + } + } + + private void setMusicBean(LocalMusicBean bean) { + singerTv.setText(bean.getSinger()); + songTv.setText(bean.getSong()); + if (binder.isMusicPlaying()) { + playIv.setImageResource(R.mipmap.icon_pause); + } else { + playIv.setImageResource(R.mipmap.icon_play); + } + } + + @Override + protected void onResume() { + super.onResume(); + //第二个判断条件是如果还没有播放,则会返回一个错误的值 + if (binder != null && currentPlayPosition != -1) { + setMusicBean(binder.getMusicBean()); + } + } + + @Override + protected void onDestroy() { + SharedPreferences sp = getSharedPreferences("lastMusicPlayPosition",MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putInt("lastMusicPlayPosition",currentPlayPosition); + edit.commit(); + super.onDestroy(); + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentCommunity.java b/MusicSharing/app/src/main/java/Fragment/FragmentCommunity.java new file mode 100644 index 0000000..f440e05 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentCommunity.java @@ -0,0 +1,92 @@ +package Fragment; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.game.WhitePiecesView; + +public class FragmentCommunity extends Fragment implements WhitePiecesView.WhitePiecesListener { + private WhitePiecesView whitePiecesView; + private TextView scoreText; + private Activity mActivity; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.game, container, false); + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + whitePiecesView = view.findViewById(R.id.write_pieces); + scoreText = (TextView) view.findViewById(R.id.score); + whitePiecesView.setWhitePiecesListener(this); + + + } + + @Override + public void getScore(int score, int grade) { + scoreText.setText("" + score + " 等级为" + grade); + } + + @Override + public void gameOver() { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle("Game Over") + .setMessage("您获得的分数为" + scoreText.getText() + "是否重新开始") + .setNegativeButton("是", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + whitePiecesView.restart(); + return; + } + }) + .setPositiveButton("否", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mActivity.finish(); + } + }).show(); + } + + @Override + public void gameWin() { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle("Game Wining") + .setMessage("您获得的分数为" + scoreText.getText() + " 是否重新开始") + .setNegativeButton("是", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + whitePiecesView.restart(); + return; + } + }) + .setPositiveButton("否", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mActivity.finish(); + } + }).show(); + } + + public void onAttach(Context context) { + super.onAttach(context); + this.mActivity = (Activity) context; + } +} \ No newline at end of file diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMessage.java b/MusicSharing/app/src/main/java/Fragment/FragmentMessage.java new file mode 100644 index 0000000..5b1a171 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMessage.java @@ -0,0 +1,26 @@ +package Fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.R; + +public class FragmentMessage extends Fragment { + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_message,container,false); + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMusic.java b/MusicSharing/app/src/main/java/Fragment/FragmentMusic.java new file mode 100644 index 0000000..e0a2979 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMusic.java @@ -0,0 +1,219 @@ +package Fragment; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.example.netcloudsharing.LocalMusicBean; +import com.example.netcloudsharing.Music.MusicSearch; +import com.example.netcloudsharing.R; + +import static Fragment.MainActivity.binder; +import static com.example.netcloudsharing.service.MusicService.currentPlayPosition; + +public class FragmentMusic extends Fragment implements View.OnClickListener { + FragmentMusic_NewSong fragmentMusic_newSong; + FragmentMusic_RankingList fragmentMusic_rankingList; + FragmentMusic_SongList fragmentMusic_songList; + + private Button btnNewSong; + private Button btnRankingList; + private Button btnSongList; + + private TextView tvNewSong; + private TextView tvRankingList; + private TextView tvSongList; + + private View thisView; + //三个播放歌曲按钮 + private ImageView nextIv, playIv, lastIv, album; + //歌曲歌手 + private TextView singerTv, songTv; + private boolean firstOpen = true; + + private ImageButton ibSearch; + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initView(); + selectTab(0); + } + + /** + * 定义控件 + */ + private void initView() { + btnNewSong = thisView.findViewById(R.id.fragment_music_btnNewSong); + btnRankingList = thisView.findViewById(R.id.fragment_music_btnRankingList); + btnSongList = thisView.findViewById(R.id.fragment_music_btnSongList); + + ibSearch = thisView.findViewById(R.id.fragment_music_ibSearch); + + tvNewSong = thisView.findViewById(R.id.fragment_music_tvNewSong); + tvRankingList = thisView.findViewById(R.id.fragment_music_tvRankingList); + tvSongList = thisView.findViewById(R.id.fragment_music_tvSongList); + singerTv = thisView.findViewById(R.id.local_music_bottom_tvSinger); + songTv = thisView.findViewById(R.id.local_music_bottom_tvSong); + + btnNewSong.setOnClickListener(this); + btnRankingList.setOnClickListener(this); + btnSongList.setOnClickListener(this); + + nextIv = thisView.findViewById(R.id.local_music_bottom_ivNext); + playIv = thisView.findViewById(R.id.local_music_bottom_ivPlay); + lastIv = thisView.findViewById(R.id.local_music_bottom_ivLast); + + nextIv.setOnClickListener(this); + lastIv.setOnClickListener(this); + playIv.setOnClickListener(this); + + ibSearch.setOnClickListener(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_music, container, false); + this.thisView = view; + return view; + } + + @Override + public void onClick(View v) { + resetTab(); + switch (v.getId()) { + case R.id.fragment_music_btnNewSong: + selectTab(0); + break; + case R.id.fragment_music_btnSongList: + selectTab(1); + break; + case R.id.fragment_music_btnRankingList: + selectTab(2); + break; + case R.id.local_music_bottom_ivPlay: + if (firstOpen) { + if (currentPlayPosition == -1) { + //如果没有音乐在播放 + binder.playMusicPosition(null); + setMusicBean(binder.getMusicBean()); + playIv.setImageResource(R.mipmap.icon_pause); + } else { + binder.playMusicPosition(currentPlayPosition); + } + firstOpen = false; + } else { + if (binder.isMusicPlaying()) { + //如果音乐正在播放,则暂停 + binder.pauseMusic(); + playIv.setImageResource(R.mipmap.icon_play); + } else { + //如果音乐正在暂停,则播放 + binder.playMusic(); + playIv.setImageResource(R.mipmap.icon_pause); + } + } + setMusicBean(binder.getMusicBean()); + + break; + case R.id.local_music_bottom_ivLast: + binder.playLastMusic(); + setMusicBean(binder.getMusicBean()); + break; + case R.id.local_music_bottom_ivNext: + binder.playNextMusic(); + setMusicBean(binder.getMusicBean()); + break; + case R.id.fragment_music_ibSearch: + Intent intent = new Intent(getActivity(), MusicSearch.class); + startActivity(intent); + } + } + + public void setMusicBean(LocalMusicBean bean) { + singerTv.setText(bean.getSinger()); + songTv.setText(bean.getSong()); + if (binder.isMusicPlaying()) { + playIv.setImageResource(R.mipmap.icon_pause); + } else { + playIv.setImageResource(R.mipmap.icon_play); + } + } + + private void resetTab() { + tvNewSong.setBackgroundColor(Color.WHITE); + tvSongList.setBackgroundColor(Color.WHITE); + tvRankingList.setBackgroundColor(Color.WHITE); + } + + private void selectTab(int i) { + FragmentManager manager = getActivity().getSupportFragmentManager(); + FragmentTransaction transaction = manager.beginTransaction(); + hideFragment(transaction); + switch (i) { + case 0: + tvNewSong.setBackgroundColor(Color.RED); + if (fragmentMusic_newSong == null) { + fragmentMusic_newSong = new FragmentMusic_NewSong(); + transaction.add(R.id.fragment_music_fl, fragmentMusic_newSong); + } else { + transaction.show(fragmentMusic_newSong); + } + break; + case 1: + tvSongList.setBackgroundColor(Color.RED); + if (fragmentMusic_songList == null) { + fragmentMusic_songList = new FragmentMusic_SongList(); + transaction.add(R.id.fragment_music_fl, fragmentMusic_songList); + } else { + transaction.show(fragmentMusic_songList); + } + break; + case 2: + tvRankingList.setBackgroundColor(Color.RED); + if (fragmentMusic_rankingList == null) { + fragmentMusic_rankingList = new FragmentMusic_RankingList(); + transaction.add(R.id.fragment_music_fl, fragmentMusic_rankingList); + } else { + transaction.show(fragmentMusic_rankingList); + } + break; + } + transaction.commit(); + } + + private void hideFragment(FragmentTransaction transaction) { + if (fragmentMusic_newSong != null) { + transaction.hide(fragmentMusic_newSong); + } + if (fragmentMusic_songList != null) { + transaction.hide(fragmentMusic_songList); + } + if (fragmentMusic_rankingList != null) { + transaction.hide(fragmentMusic_rankingList); + } + } + + @Override + public void onResume() { + super.onResume(); + Log.d("MainActivity", "no"); + if (binder != null) { + setMusicBean(binder.getMusicBean()); + } + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMusic_NewSong.java b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_NewSong.java new file mode 100644 index 0000000..c9984a1 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_NewSong.java @@ -0,0 +1,68 @@ +package Fragment; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.Music.MusicDownload; +import com.example.netcloudsharing.R; + +public class FragmentMusic_NewSong extends Fragment implements View.OnClickListener { + private TextView tvLocalMusicCount; + private View thisView; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_music_newsong, container, false); + this.thisView = view; + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + init(); + } + + private void init() { + tvLocalMusicCount = thisView.findViewById(R.id.fragment_music_tvLocalMusicCount); + + thisView.findViewById(R.id.fragment_music_newSong_llLocalSong).setOnClickListener(this); + thisView.findViewById(R.id.fragment_music_newsong_ibDownloadMusic).setOnClickListener(this); + getMusicCount(); + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.fragment_music_newSong_llLocalSong: + Intent intent = new Intent(getContext(), ActivityMusicHome.class); + startActivity(intent); + break; + case R.id.fragment_music_newsong_ibDownloadMusic: + Intent intent1 = new Intent(getContext(), MusicDownload.class); + startActivity(intent1); + break; + } + } + + /** + * 获取本地音乐数量,并显示 + */ + public void getMusicCount(){ + SharedPreferences sp = getActivity().getSharedPreferences("music_count", Context.MODE_PRIVATE); + int count = sp.getInt("count",0); + tvLocalMusicCount.setText("("+count+")"); + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMusic_RankingList.java b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_RankingList.java new file mode 100644 index 0000000..13cc6f7 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_RankingList.java @@ -0,0 +1,27 @@ +package Fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.R; + +public class FragmentMusic_RankingList extends Fragment { + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_music_rankinglist,container,false); + return view; + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMusic_SongList.java b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_SongList.java new file mode 100644 index 0000000..a1567a4 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMusic_SongList.java @@ -0,0 +1,27 @@ +package Fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.R; + +public class FragmentMusic_SongList extends Fragment { + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_music_songlist,container,false); + return view; + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/FragmentMy.java b/MusicSharing/app/src/main/java/Fragment/FragmentMy.java new file mode 100644 index 0000000..147e8fb --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/FragmentMy.java @@ -0,0 +1,46 @@ +package Fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.diary.MainActivity; + + +public class FragmentMy extends Fragment implements View.OnClickListener { + private Button btnDiary; + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_my,container,false); + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + init(view); + } + + private void init(View view) { + view.findViewById(R.id.fragment_my_ll_diary).setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.fragment_my_ll_diary: + Intent intent = new Intent(getActivity(), MainActivity.class); + startActivity(intent); + break; + } + } +} diff --git a/MusicSharing/app/src/main/java/Fragment/MainActivity.java b/MusicSharing/app/src/main/java/Fragment/MainActivity.java new file mode 100644 index 0000000..1aa2af6 --- /dev/null +++ b/MusicSharing/app/src/main/java/Fragment/MainActivity.java @@ -0,0 +1,198 @@ +package Fragment; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.IBinder; +import android.util.Log; +import android.view.View; +import android.widget.ImageButton; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.service.MusicService; + +import static com.example.netcloudsharing.service.MusicService.currentPlayPosition; + + +public class MainActivity extends AppCompatActivity implements View.OnClickListener { + private FragmentMusic fragmentMusic; + private FragmentCommunity fragmentCommunity; + private FragmentMessage fragmentMessage; + private FragmentMy fragmentMy; + + + private ImageButton mImg1; + private ImageButton mImg2; + private ImageButton mImg3; + private ImageButton mImg4; + + + public static MusicService.MyBinder binder; + private myConn conn; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + initView();//初始化控件 + initEvent();//初始化事件 + + conn = new myConn(); + Intent intent = new Intent(this,MusicService.class); + bindService(intent,conn, Context.BIND_AUTO_CREATE); + Log.d("MainActivity","1"); + selectTab(0); + } + + /** + * 初始化事件 + */ + private void initEvent() { + mImg1.setOnClickListener(this); + mImg2.setOnClickListener(this); + mImg3.setOnClickListener(this); + mImg4.setOnClickListener(this); + } + + /** + * 初始化控件 + */ + private void initView() { + //初始化ImageButton布局文件 + mImg1 = findViewById(R.id.ib_tab_home); + mImg2 = findViewById(R.id.ib_tab_community); + mImg3 = findViewById(R.id.ib_tab_message); + mImg4 = findViewById(R.id.ib_tab_my); + + } + + //处理点击事件 + @Override + public void onClick(View v) { + resetImages(); + switch (v.getId()) { + case R.id.ib_tab_home: + selectTab(0); + break; + case R.id.ib_tab_community: + selectTab(1); + break; + case R.id.ib_tab_message: + + selectTab(2); + break; + case R.id.ib_tab_my: + selectTab(3); + break; + } + } + + //进行选中Tab的处理 + private void selectTab(int i) { + //获取FragmentManager对象 + FragmentManager manager = getSupportFragmentManager(); + //获取FragmentTransaction对象 + FragmentTransaction transaction = manager.beginTransaction(); + //先隐藏好所有的Fragment + hideFragment(transaction); + switch (i) { + //将选中的Tab实例化并关联起来 + case 0: + mImg1.setImageResource(R.drawable.select_home); + if (fragmentMusic == null) { + fragmentMusic = new FragmentMusic(); + transaction.add(R.id.fl_content, fragmentMusic); + } else { + transaction.show(fragmentMusic); + } + break; + case 1: + mImg2.setImageResource(R.drawable.select_community); + if (fragmentCommunity == null) { + fragmentCommunity = new FragmentCommunity(); + transaction.add(R.id.fl_content, fragmentCommunity); + } else { + transaction.show(fragmentCommunity); + } + break; + case 2: + mImg3.setImageResource(R.drawable.select_message); + if (fragmentMessage == null) { + fragmentMessage = new FragmentMessage(); + transaction.add(R.id.fl_content, fragmentMessage); + } else { + transaction.show(fragmentMessage); + } + break; + case 3: + mImg4.setImageResource(R.drawable.select_my); + if (fragmentMy == null) { + fragmentMy = new FragmentMy(); + transaction.add(R.id.fl_content, fragmentMy); + } else { + transaction.show(fragmentMy); + } + break; + } + //提交事务 + transaction.commit(); + } + + //将Fragment进行隐藏 + private void hideFragment(FragmentTransaction transaction) { + if (fragmentMusic != null) { + transaction.hide(fragmentMusic); + } + if (fragmentCommunity != null) { + transaction.hide(fragmentCommunity); + } + if (fragmentMessage != null) { + transaction.hide(fragmentMessage); + } + if (fragmentMy != null) { + transaction.hide(fragmentMy); + } + + } + + //重置导航图片 + private void resetImages() { + mImg1.setImageResource(R.drawable.unselect_home); + mImg2.setImageResource(R.drawable.unselect_community); + mImg3.setImageResource(R.drawable.unselect_message); + mImg4.setImageResource(R.drawable.unselect_my); + } + + + private class myConn implements ServiceConnection { + + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + binder = (MusicService.MyBinder) service; + Log.d("MainActivity","4"); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + + } + } + + @Override + protected void onDestroy() { + SharedPreferences sp = getSharedPreferences("lastMusicPlayPosition",MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putInt("lastMusicPlayPosition",currentPlayPosition); + edit.commit(); + + super.onDestroy(); + } + +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicAdapter.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicAdapter.java new file mode 100644 index 0000000..7655f67 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicAdapter.java @@ -0,0 +1,76 @@ +package com.example.netcloudsharing; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +public class LocalMusicAdapter extends RecyclerView.Adapter { + Context context; + List mDatas; + OnItemClickListener onItemClickListener; + + public interface OnItemClickListener { + public void OnItemClick(View view, int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + public LocalMusicAdapter(Context context, List mDatas) { + this.context = context; + this.mDatas = mDatas; + } + + @NonNull + @Override + public LocalMusicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_local_music, parent, false); + LocalMusicViewHolder holder = new LocalMusicViewHolder(view); + return holder; + } + + @Override + public void onBindViewHolder(@NonNull LocalMusicViewHolder holder, final int position) { + //绑定viewholder,并且对每一个控件来进行赋值展示 + LocalMusicBean musicBean = mDatas.get(position); + holder.idTv.setText(musicBean.getId()); + holder.songTv.setText(musicBean.getSong()); + holder.singerTv.setText(musicBean.getSinger()); + holder.albumTv.setText(musicBean.getAlbum()); + holder.timeTv.setText(musicBean.getDuration()); + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onItemClickListener.OnItemClick(v,position); + } + }); + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class LocalMusicViewHolder extends RecyclerView.ViewHolder { + TextView idTv, songTv, singerTv, albumTv, timeTv; + + public LocalMusicViewHolder(@NonNull View itemView) { + super(itemView); + idTv = itemView.findViewById(R.id.item_local_music_num); + songTv = itemView.findViewById(R.id.item_local_music_song); + singerTv = itemView.findViewById(R.id.item_local_music_singer); + albumTv = itemView.findViewById(R.id.item_local_music_album); + timeTv = itemView.findViewById(R.id.item_local_music_durtion); + } + } + +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicBean.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicBean.java new file mode 100644 index 0000000..469bf56 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/LocalMusicBean.java @@ -0,0 +1,89 @@ +package com.example.netcloudsharing; + +public class LocalMusicBean { + private String id; //歌曲id + private String song; //歌曲名称 + private String singer; //歌手名 + private String album; //专辑 + private String duration; //持续的时间 + private String path; //歌曲路径 + private int album_id; //歌曲图片id + + public LocalMusicBean() { + } + + public LocalMusicBean(String id, String song, String singer, String album, String duration, String path, int album_id) { + this.id = id; + this.song = song; + this.singer = singer; + this.album = album; + this.duration = duration; + this.path = path; + this.album_id = album_id; + } + + public LocalMusicBean(String id, String song, String singer, String album, String duration, String path) { + this.id = id; + this.song = song; + this.singer = singer; + this.album = album; + this.duration = duration; + this.path = path; + } + + public int getAlbum_id() { + return album_id; + } + + public void setAlbum_id(int album_id) { + this.album_id = album_id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSong() { + return song; + } + + public void setSong(String song) { + this.song = song; + } + + public String getSinger() { + return singer; + } + + public void setSinger(String singer) { + this.singer = singer; + } + + public String getAlbum() { + return album; + } + + public void setAlbum(String album) { + this.album = album; + } + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/HttpGetDemoActivity.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/HttpGetDemoActivity.java new file mode 100644 index 0000000..0854f9e --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/HttpGetDemoActivity.java @@ -0,0 +1,110 @@ +package com.example.netcloudsharing.Music; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; + +import com.example.netcloudsharing.R; + +import static Fragment.MainActivity.binder; + +public class HttpGetDemoActivity extends Activity { + /** + * Called when the activity is first created. + */ + private Button onlinPlay, stop = null; + private SeekBar seekBar = null; + private static final String TAG = "HttpGetDemoActivity"; + private MusicPlayer musicPlayer = null; + private String pathtext = null; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_music_player); + findView(); + pathtext = getIntent().getStringExtra("path"); + musicPlayer = new MusicPlayer(seekBar); + if(binder.isMusicPlaying()){ + binder.stopMusic(); + } + } + + private void findView() { + onlinPlay = (Button) findViewById(R.id.btn_play); + stop = (Button) findViewById(R.id.btn_pause); + seekBar = (SeekBar) findViewById(R.id.seekBar_playing); + ButtonClickListener clickListener = new ButtonClickListener(); + SeekBarChangeEvent seekBarChangeEvent = new SeekBarChangeEvent(); + onlinPlay.setOnClickListener(clickListener); + stop.setOnClickListener(clickListener); + seekBar.setOnSeekBarChangeListener(seekBarChangeEvent); + } + + private final class ButtonClickListener implements OnClickListener { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.btn_play: + new Thread(new Runnable() { + @Override + public void run() { + //把http://abv.cn/music/光辉岁月.mp3传入并 播放音乐 + musicPlayer.play(pathtext); + } + }).start(); + break; + case R.id.btn_pause: + //暂停 + musicPlayer.pause(); + break; + default: + break; + } + } + } + + class SeekBarChangeEvent implements OnSeekBarChangeListener { + int progress; + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, + boolean fromUser) { + /** + * SeekBar的进度变化监听 把百分进度转变为总文件中的大小 + * progress为百分比 + * this.progress为实际播放文件当前位置的大小 + */ + this.progress = progress * musicPlayer.mediaPlayer.getDuration() / seekBar.getMax(); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + /** + * 开始拖动监听 + */ + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + /** + * 停止拖动监听 + * seekTo()的参数是相对与影片时间的数字,而不是与seekBar.getMax()相对的数字 + */ + musicPlayer.mediaPlayer.seekTo(progress); + } + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + musicPlayer.stop(); + } + +} \ No newline at end of file diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicDownload.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicDownload.java new file mode 100644 index 0000000..a4c225e --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicDownload.java @@ -0,0 +1,16 @@ +package com.example.netcloudsharing.Music; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.netcloudsharing.R; + +public class MusicDownload extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_music_download); + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicPlayer.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicPlayer.java new file mode 100644 index 0000000..2e32bff --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicPlayer.java @@ -0,0 +1,116 @@ +package com.example.netcloudsharing.Music; + +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnBufferingUpdateListener; +import android.media.MediaPlayer.OnPreparedListener; +import android.os.Handler; +import android.os.Message; +import android.widget.SeekBar; + +import java.io.IOException; +import java.util.Timer; +import java.util.TimerTask; + +public class MusicPlayer implements OnBufferingUpdateListener, OnPreparedListener { + /* SeekBar拖动条 */ + private SeekBar seekBar = null; + /* 播放器 */ + public MediaPlayer mediaPlayer = null; + /* Timer定时器 */ + private Timer mTimer = new Timer(); + private static final int SHOW_SEEKBAR = 0; + private boolean isPlaying = false; + + public MusicPlayer(SeekBar seekBar) { + this.seekBar = seekBar; + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.setOnBufferingUpdateListener(this); + mediaPlayer.setOnPreparedListener(this); + + //使用定时器来改变seekBar的进度 + mTimer.schedule(timerTask, 0, 1000); + } + + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + if (mediaPlayer == null) + return; + if (isPlaying && !seekBar.isPressed()) { + mHandler.sendEmptyMessage(SHOW_SEEKBAR); + } + } + }; + + Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == SHOW_SEEKBAR) { + if (mediaPlayer != null) { + int posttion = mediaPlayer.getCurrentPosition();//获取当前播放位置 + int duration = mediaPlayer.getDuration();//获取总长度 + int pos = (int) (100 * ((float) posttion / (float) duration)); + seekBar.setProgress((int) pos); + } + } + } + + }; + + public void play(String url) { + try { + mediaPlayer.reset(); + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void pause() { + mediaPlayer.pause(); + } + + public void stop() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release();//结束后release + mediaPlayer = null; + isPlaying = false; + } + } + + @Override + public void onBufferingUpdate(MediaPlayer arg0, int arg1) { + /** + * 当网络stream buffer发生改变的时候调用 + * 这里设置seekBar的第二进度条 + */ + this.seekBar.setSecondaryProgress(arg1); + } + + + @Override + public void onPrepared(MediaPlayer mp) { + /** + * 当播放文件准备好了后调用 + * 开始播放 + */ + mp.start(); + isPlaying = true; + } +} \ No newline at end of file diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicSearch.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicSearch.java new file mode 100644 index 0000000..119d426 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/Music/MusicSearch.java @@ -0,0 +1,88 @@ +package com.example.netcloudsharing.Music; + +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.SearchView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.netcloudsharing.R; + +public class MusicSearch extends AppCompatActivity { + + private String[] mStrings = new String[]{"http://data.flash127.com/mp3_flash127_com/mp3/201806/20180601_1854_774058.mp3", "http://data.flash127.com/mp3_flash127_com/mp3/201802/20180205_1546_724406.mp3" + , "http://k6.kekenet.com/Sound/2019/08/m200016581_1484302841_1444410KGM.mp3", "http://data.flash127.com/mp3_flash127_com/mp3/201605/1462090742.mp3"}; + String path; + private ListView listView; + private SearchView searchView; + private EditText etURL; + private ImageButton ibBack; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.music_search); + init(); + } + + private void init() { + etURL = findViewById(R.id.activity_music_search_etURL); + ibBack = findViewById(R.id.fragment_music_ibBackToMusicHome); + ibBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + listView = findViewById(R.id.listview); + listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mStrings)); + //设置ListView启用过滤 +// listView.setTextFilterEnabled(true); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + etURL.setText(mStrings[position]); + } + }); + searchView = findViewById(R.id.searchview); + //设置该SearchView默认是否自动缩小为图标 + searchView.setIconifiedByDefault(false); + //设置该SearchView显示搜索按钮 + searchView.setSubmitButtonEnabled(true); + searchView.setQueryHint("查找"); + //为该SearchView组件设置事件监听器 + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + //单机搜索按钮时激发该方法 + @Override + public boolean onQueryTextSubmit(String query) { + //实际应用中应该在该方法内执行实际查询,此处仅使用Toast显示用户输入的查询内容 + path = String.valueOf(searchView.getQuery()); + Intent intent = new Intent(MusicSearch.this,HttpGetDemoActivity.class); + intent.putExtra("path",path); + startActivity(intent); + return false; + } + + //用户输入字符时激发该方法 + @Override + public boolean onQueryTextChange(String newText) { +// tvSearchView.setText(searchView.getQuery()); + //如果newText不是长度为0的字符串 + if (TextUtils.isEmpty(newText)) { + //清除ListView的过滤 + listView.clearTextFilter(); + } else { + //使用用户输入的内容对ListView的列表项进行过滤 + listView.setFilterText(newText); + } + return true; + } + }); + } +} \ No newline at end of file diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/NetStart.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/NetStart.java new file mode 100644 index 0000000..e515084 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/NetStart.java @@ -0,0 +1,23 @@ +package com.example.netcloudsharing; + +import android.os.Bundle; +import android.widget.Button; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.netcloudsharing.activity.LoginActivity; +import com.example.netcloudsharing.activity.RegisterActivity; +import com.example.netcloudsharing.tool.BaseTool; + +public class NetStart extends AppCompatActivity { + + private Button btnLogin; + private Button btnRegister; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_net_start); + Button btnLogin = BaseTool.openActivity(this,(Button)findViewById(R.id.btn_login),LoginActivity.class); + Button btnRegister = BaseTool.openActivity(this,(Button)findViewById(R.id.btn_register), RegisterActivity.class); + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/LoginActivity.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/LoginActivity.java new file mode 100644 index 0000000..864b1f7 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/LoginActivity.java @@ -0,0 +1,264 @@ +package com.example.netcloudsharing.activity; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.diary.Permission; +import com.example.netcloudsharing.tool.BaseTool; +import com.example.netcloudsharing.tool.UserDao; +import com.example.netcloudsharing.tool.Userinfo; + +import Fragment.MainActivity; + +public class LoginActivity extends AppCompatActivity{ + private EditText etAccount; + private EditText etPassword; + private CheckBox cbAccount; + private CheckBox cbPassword; + private Handler mainHandle; //主线程 + private UserDao dao; //用户数据库操作类 + private String TAG = "LoginActivity"; + private String SP_ACCOUNT = "sp_account"; + private String SP_PASSWORD = "sp_password"; + private String SP_IS_REMEMBER_ACCOUNT = "sp_is_remember_account"; + private String SP_IS_REMEMBER_Password = "sp_is_remember_password"; + private SharedPreferences sharedPreferences; + private boolean isCheckedAccount = false; + private boolean isCheckedPassword = false; + private Context context = this; + private Permission permission; + private Handler handler = new Handler(){ + @Override + public void handleMessage(@NonNull Message msg) { + //super.handleMessage(msg); + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + //初始化控件 + initUI(); + //初始化数据 + initData(); + permission = new Permission(); + permission.checkPermission(LoginActivity.this); + + } + + private void initData() { + if(sharedPreferences==null){ + sharedPreferences = getApplicationContext().getSharedPreferences("config", Context.MODE_PRIVATE); + } + isCheckedAccount = sharedPreferences.getBoolean(SP_IS_REMEMBER_ACCOUNT,false); + isCheckedPassword = sharedPreferences.getBoolean(SP_IS_REMEMBER_Password,false); + //回写数据 + if(isCheckedAccount){ + etAccount.setText(sharedPreferences.getString(SP_ACCOUNT,"")); + } + if(isCheckedPassword){ + etPassword.setText(sharedPreferences.getString(SP_PASSWORD,"")); + } + cbAccount.setChecked(isCheckedAccount); + cbPassword.setChecked(isCheckedPassword); + } + + private void initUI(){ + dao = new UserDao(); //操作数据库类 + mainHandle = new Handler(getMainLooper()); //获取主线程 + + etAccount = findViewById(R.id.login_et_account); + etPassword = findViewById(R.id.login_et_password); + + + //设置编辑框监听器 + login_etListener(); + + cbAccount = findViewById(R.id.cb_remember_account); + cbPassword = findViewById(R.id.cb_remember_password); + + //设置复选框监听器 + login_cbListener(); + + Button btnLogin = findViewById(R.id.login_btn_login); + //设立点击事件——登录 + btnLogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String account = etAccount.getText().toString().trim(); + String password = etPassword.getText().toString().trim(); + login(account,password); + } + }); + Button btnTouristLogin = findViewById(R.id.login_btn_tourist); + btnTouristLogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + BaseTool.showShortMsg(context,"欢迎进入"); + BaseTool.navigateTo(context,MainActivity.class); + } + }); + } + + /** + * 复选框监听器 + */ + private void login_cbListener(){ + /** + * 设立点击记住账号事件 + */ + cbAccount.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Log.d(TAG,"账号状态为:"+isChecked); + isCheckedAccount = isChecked; + //实例化sharedPreferences对象 + if(sharedPreferences==null){ + sharedPreferences = getApplicationContext().getSharedPreferences("config", Context.MODE_PRIVATE); + } + + //实例化sharedPreferences的编辑者对象 + SharedPreferences.Editor edit = sharedPreferences.edit(); + //存储数据 + if(isChecked) { + edit.putString(SP_ACCOUNT, etAccount.getText().toString().trim()); + } + edit.putBoolean(SP_IS_REMEMBER_ACCOUNT,isChecked); + //提交 + edit.commit(); + } + }); + /** + * 设立点击记住密码事件 + */ + cbPassword.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Log.d(TAG, "密码状态为:" + isChecked); + isCheckedPassword = isChecked; + //实例化sharedPreferences对象 + if (sharedPreferences == null) { + sharedPreferences = getApplicationContext().getSharedPreferences("config", Context.MODE_PRIVATE); + } + + //实例化sharedPreferences的编辑者对象 + SharedPreferences.Editor edit = sharedPreferences.edit(); + //存储数据 + if (isChecked) { + edit.putString(SP_PASSWORD, etPassword.getText().toString().trim()); + } + edit.putBoolean(SP_IS_REMEMBER_Password, isChecked); + //提交 + edit.commit(); + } + }); + } + /** + * 编辑框监听器 + */ + private void login_etListener(){ + etAccount.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if(isCheckedAccount){ + //实例化sharedPreferences对象 + if(sharedPreferences==null){ + sharedPreferences = getApplicationContext().getSharedPreferences("config", Context.MODE_PRIVATE); + } + SharedPreferences.Editor edit = sharedPreferences.edit(); + edit.putString(SP_ACCOUNT,etAccount.getText().toString().trim()); + edit.commit(); + } + } + }); + etPassword.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if(isCheckedPassword){ + //实例化sharedPreferences对象 + if(sharedPreferences==null){ + sharedPreferences = getApplicationContext().getSharedPreferences("config", Context.MODE_PRIVATE); + } + SharedPreferences.Editor edit = sharedPreferences.edit(); + edit.putString(SP_PASSWORD, etPassword.getText().toString().trim()); + edit.commit(); + } + } + }); + } + /** + * 执行登录操作 + * @param account 账号 + * @param password 密码 + */ + private void login(final String account, final String password){ + if(TextUtils.isEmpty(account)){ + BaseTool.showShortMsg(this,getString(R.string.please_input_account)); + etAccount.requestFocus(); + }else if(TextUtils.isEmpty(password)){ + BaseTool.showShortMsg(this,getString(R.string.please_input_password)); + etPassword.requestFocus(); + }else{ + new Thread(new Runnable() { + @Override + public void run() { + final Userinfo item = dao.getUserByUnameAndUpass(account,password); + mainHandle.post(new Runnable() { + @Override + public void run() { + if(item==null){ + BaseTool.showDlaMsg(context,"用户名或密码错误"); + }else{ + BaseTool.showShortMsg(context,"登录成功"); + Intent intent = new Intent(context, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setClass(context,MainActivity.class); + context.startActivity(intent); + } + } + }); + } + }).start(); + } + + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/RegisterActivity.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/RegisterActivity.java new file mode 100644 index 0000000..0bcf2d7 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/activity/RegisterActivity.java @@ -0,0 +1,91 @@ +package com.example.netcloudsharing.activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +//import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +//import android.widget.Toast; + +import com.example.netcloudsharing.R; +import com.example.netcloudsharing.tool.BaseTool; +import com.example.netcloudsharing.tool.UserDao; +import com.example.netcloudsharing.tool.Userinfo; + +import java.util.Date; + +import Fragment.MainActivity; + +public class RegisterActivity extends AppCompatActivity { + private EditText etAccount; + private EditText etPassword; + private Handler mainHandle; //主线程 + private UserDao dao; //用户操作数据库类 + private Context context = this; +// private Handler handler = new Handler(){ +// @Override +// public void handleMessage(@NonNull Message msg) { +// //super.handleMessage(msg); +// +// } +// }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + + etAccount = findViewById(R.id.register_et_account); + etPassword = findViewById(R.id.register_et_password); + Button btnRegister = findViewById(R.id.register_btn_register); + + dao = new UserDao(); + mainHandle = new Handler(getMainLooper()); + btnRegister.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String account = etAccount.getText().toString().trim(); + String password = etPassword.getText().toString().trim(); + String createDt = String.format("%tY-% mData; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.diary_main); + init(); + mData = new ArrayList<>(); + notesDB = new NotesDB(this); + Log.d("Main", "onCreate"); + } + + private void init() { + btnText = findViewById(R.id.btn_text); + btnImg = findViewById(R.id.btn_img); + btnVideo = findViewById(R.id.btn_video); + lv = findViewById(R.id.lv); + + btnVideo.setOnClickListener(this); + btnText.setOnClickListener(this); + btnImg.setOnClickListener(this); + + String[] mode = {"相机", "相册", "取消"}; + ListView listView = new ListView(this); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + listView.setLayoutParams(params); + listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mode)); + + dialog = new BottomSheetDialog(this); + dialog.setContentView(listView); + + //选择图文模块后顶部弹出listView选择框 + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + permission = new Permission(); + permission.checkPermission(MainActivity.this); + switch (position) { + case 0: + dispatchTakePictureIntent(); + dialog.dismiss(); + break; + case 1: + Intent intent1 = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + intent1.setType("image/*"); + startActivityForResult(intent1, REQUEST_PICK); + dialog.dismiss(); + break; + case 2: + dialog.dismiss(); + break; + default: + break; + } + } + }); + + } + + static final int REQUEST_IMAGE_CAPTURE = 1; + + public void dispatchTakePictureIntent() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + //必须确保手机上有相机,才可以继续,否则会一直闪退,故加判断语句 + if (takePictureIntent.resolveActivity(getPackageManager()) != null) { + File photoFile = null; + try { + photoFile = createImageFile(); + } catch (IOException ex) { + ex.printStackTrace(); + } + if (photoFile != null) { + Uri photoURI = FileProvider.getUriForFile(this, "com.example.netcloudsharing.fileprovider", photoFile); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); + startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + } + } + } + + private File createImageFile() throws IOException { + //Create an image file name + String imageFileName = getTimeToPath(); + Log.d("imageFileName", imageFileName); + File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); + File image = File.createTempFile( + imageFileName, + ".jpg", + storageDir + ); + currentPath = image.getAbsolutePath(); + Log.d("imageFileName", currentPath); + return image; + } + + public String getTimeToPath() { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA); + Date curDate = new Date(); + return format.format(curDate); + } + + @Override + public void onClick(View v) { + intent = new Intent(this, AddContent.class); + switch (v.getId()) { + case R.id.btn_text: + intent.putExtra("flag", "1"); + startActivity(intent); + break; + case R.id.btn_img: + intent.putExtra("flag", "2"); + dialog.show(); + break; + case R.id.btn_video: + intent.putExtra("flag", "3"); + startActivity(intent); + break; + } + } + + public void deleteDB(int position) { + String id = mData.get(position).getId(); + SQLiteDatabase dbWrite = notesDB.getWritableDatabase(); + dbWrite.delete(NotesDB.TABLE_NAME, NotesDB.ID + "=?", new String[]{id + ""}); + dbWrite.close(); + selectDB(); + } + + + public void selectDB() { + //将链表清空 + mData.clear(); + SQLiteDatabase dbReader = notesDB.getReadableDatabase(); + Cursor cursor = dbReader.query(NotesDB.TABLE_NAME, null, null, null, null, null, null); + while (cursor.moveToNext()) { + String id = cursor.getString(cursor.getColumnIndex(NotesDB.ID)); + String content = cursor.getString(cursor.getColumnIndex(NotesDB.CONTENT)); + String path = cursor.getString(cursor.getColumnIndex(NotesDB.PATH)); + String video = cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO)); + String time = cursor.getString(cursor.getColumnIndex(NotesDB.TIME)); + int type = cursor.getInt(cursor.getColumnIndex(NotesDB.TYPE)); + NoteInfo info = new NoteInfo(content, path, video, id, time, type); + mData.add(info); + } + cursor.close(); + dbReader.close(); + adapter = new MyAdapter(this, mData); + lv.setAdapter(adapter); + lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(MainActivity.this, AddContent.class); + NoteInfo noteInfo = mData.get(position); + intent.putExtra("noteInfo", noteInfo); + intent.putExtra("flag", noteInfo.getType() + ""); + Log.d("flag", noteInfo.getType() + ""); + startActivity(intent); + } + }); + lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { + View viewDelete = LayoutInflater.from(MainActivity.this).inflate(R.layout.diary_button_delete, null); + //设置长按删除按钮 + final BubbleDialog bubbleDialog = new BubbleDialog(MainActivity.this); + bubbleDialog.addContentView(viewDelete).setClickedView(view).calBar(true).calBar(true).show(); + Button btnDelete = viewDelete.findViewById(R.id.diary_btnDelete); + btnDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + deleteDB(position); + bubbleDialog.dismiss(); + } + }); + return true; + } + }); + } + + /** + * 重写每次与屏幕连接的函数 + */ + @Override + protected void onResume() { + super.onResume(); + Log.d("Main", "OnResume"); + selectDB(); + } + + /** + * 选择图文按钮中的拍照或选择图库中的图片返回函数 + * + * @param requestCode 请求码 + * @param resultCode 返回码 + * @param data 数据 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case REQUEST_CAMERA: { + Intent intent = new Intent(this, AddContent.class); + intent.putExtra("path", currentPath); + intent.putExtra("flag", "2"); + startActivity(intent); + break; + } + case REQUEST_PICK: { + Uri uri = null; + // try 是有可能未选择图片就进行返回,会造成空指针 + try { + uri = data.getData(); //获取系统返回的照片uri + } catch (NullPointerException e) { + e.printStackTrace(); + } finally { + if (uri != null) { + // 使用ContentResolve 进行读取选择的图片路径 + String[] strings = {MediaStore.Images.Media.DATA}; + Cursor cursor = getContentResolver().query(uri, strings, null, null, null); + cursor.moveToFirst(); + int index = cursor.getColumnIndex(strings[0]); + String path = cursor.getString(index); //获取图片路径 + cursor.close(); + Intent intent = new Intent(this, AddContent.class); + intent.putExtra("path", path); + intent.putExtra("flag", "2"); + startActivity(intent); + } + } + break; + } + } + } + } + + /** + * 判断权限返回是否正确 + * + * @param requestCode 返回字段 + * @param permissions 权限集 + * @param grantResults 结果集 + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == permission.REQUEST_CODE) { + for (int i = 0; i < grantResults.length; i++) { + if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { + Log.e("permission", permissions[i] + "not"); + Log.e("permission", grantResults[i] + "not"); + } else { + Log.e("permission", permissions[i] + ""); + Log.e("permission", grantResults[i] + ""); + } + } + } + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/MyAdapter.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/MyAdapter.java new file mode 100644 index 0000000..54d4778 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/MyAdapter.java @@ -0,0 +1,100 @@ +package com.example.netcloudsharing.diary; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.ThumbnailUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.netcloudsharing.R; + +import java.util.List; + +public class MyAdapter extends BaseAdapter { + private Context context; + private ViewHolder holder; + private List data; + + MyAdapter(Context context, List data) { + this.context = context; + this.data = data; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = LayoutInflater.from(context).inflate(R.layout.diary_list_item, parent, false); + holder = new ViewHolder(); + holder.tv_listContent = convertView.findViewById(R.id.list_tvContent); + holder.tv_listTime = convertView.findViewById(R.id.list_tvTime); + holder.iv_listImage = convertView.findViewById(R.id.list_ivImg); + holder.iv_listVideo = convertView.findViewById(R.id.list_ivVideo); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + holder.tv_listContent.setText(data.get(position).getContent()); + holder.tv_listTime.setText(data.get(position).getTime()); + holder.iv_listImage.setImageBitmap(getImageThumbnail(data.get(position).getPath(), + 200, 200)); + return convertView; + } + + /** + * 获取缩略图的方法 + * + * @param uri 路径 + * @param width 宽 + * @param height 高 + * @return 缩略图 + */ + public Bitmap getImageThumbnail(String uri, int width, int height) { + Bitmap bitmap = null; + //获取缩略图 + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + bitmap = BitmapFactory.decodeFile(uri, options); + options.inJustDecodeBounds = false; + int beWidth = options.outWidth / width; + int beHeight = options.outHeight / height; + int be = 1 ; + if (beWidth < beHeight) { + be = beWidth; + } else { + be = beHeight; + } + if (be <= 0) { + be = 1; + } + options.inSampleSize = be; + bitmap = BitmapFactory.decodeFile(uri, options); + bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, + ThumbnailUtils.OPTIONS_RECYCLE_INPUT); + return bitmap; + } +} + +class ViewHolder { + public TextView tv_listContent, tv_listTime; + public ImageView iv_listImage, iv_listVideo; +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NoteInfo.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NoteInfo.java new file mode 100644 index 0000000..f777b9b --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NoteInfo.java @@ -0,0 +1,73 @@ +package com.example.netcloudsharing.diary; + +import java.io.Serializable; + +public class NoteInfo implements Serializable { + private String content; + private String path; + private String video; + private String id; + private String time; + private int type; + + public NoteInfo() { + + } + + public NoteInfo(String content, String path, String video, String id, String time,int type) { + this.content = content; + this.path = path; + this.video = video; + this.id = id; + this.time = time; + this.type = type; + } + + public void setType(int type) { + this.type = type; + } + + public int getType() { + return type; + } + + public void setContent(String content) { + this.content = content; + } + + public void setPath(String path) { + this.path = path; + } + + public void setVideo(String video) { + this.video = video; + } + + public void setId(String id) { + this.id = id; + } + + public void setTime(String time) { + this.time = time; + } + + public String getContent() { + return content; + } + + public String getPath() { + return path; + } + + public String getVideo() { + return video; + } + + public String getId() { + return id; + } + + public String getTime() { + return time; + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NotesDB.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NotesDB.java new file mode 100644 index 0000000..a00c1aa --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/NotesDB.java @@ -0,0 +1,33 @@ +package com.example.netcloudsharing.diary; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class NotesDB extends SQLiteOpenHelper { + public static final String TABLE_NAME = "note"; + public static final String CONTENT = "content"; + public static final String PATH = "path"; + public static final String VIDEO = "video"; + public static final String ID = "_id"; + public static final String TIME = "time"; + public static final String TYPE = "type"; + + public NotesDB(Context context) { + super(context, "notes", null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("create table " + TABLE_NAME + "(" + ID + + " integer not null primary key autoincrement," + CONTENT + + " text," + PATH + " text," + VIDEO + + " text," + TIME + " text not null,"+ TYPE + + " tinyint not null)"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/Permission.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/Permission.java new file mode 100644 index 0000000..0ddd187 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/diary/Permission.java @@ -0,0 +1,36 @@ +package com.example.netcloudsharing.diary; + +import android.Manifest; +import android.app.Activity; +import android.content.pm.PackageManager; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import java.util.ArrayList; +import java.util.List; + +public class Permission { + private static final String[] permission = { + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_FINE_LOCATION}; + private List permissionList = new ArrayList<>(); + public int REQUEST_CODE = 1000; + + public void checkPermission(Activity activity) { + for (int i = 0; i < permission.length; i++) { + if (ContextCompat.checkSelfPermission(activity, permission[i]) != PackageManager.PERMISSION_GRANTED) { + permissionList.add(permission[i]); + } + } + if(permissionList.size()>0){ + requestPermission(activity); + } + } + + private void requestPermission(Activity activity) { + ActivityCompat.requestPermissions(activity,permissionList.toArray(new String[permissionList.size()]),REQUEST_CODE); + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/PiecesRectF.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/PiecesRectF.java new file mode 100644 index 0000000..51f2a6a --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/PiecesRectF.java @@ -0,0 +1,26 @@ +package com.example.netcloudsharing.game; + +import android.graphics.RectF; + +public class PiecesRectF extends RectF { + private int type; + + public final static int BLAKE = 0;//黑块 + public final static int WRITE = 1;//白块 + public final static int BLUE = 2;//黑块按下时的显示蓝块 + public final static int START = 3;//标记有开始的黑块 + public final static int RED = 4;//按到白块,或有黑块漏按,游戏结束时的红块 + + public PiecesRectF(){ + super(); + type = Math.random() > 0.5 ? 0:1;//初始化时,给type随机一个白块或黑块 + } + + public void setType(int type) { + this.type = type; + } + + public int getType() { + return type; + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/WhitePiecesView.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/WhitePiecesView.java new file mode 100644 index 0000000..055e8c7 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/game/WhitePiecesView.java @@ -0,0 +1,328 @@ +package com.example.netcloudsharing.game; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.MotionEvent; + +import static android.view.MotionEvent.ACTION_DOWN; +import static android.view.MotionEvent.ACTION_POINTER_DOWN; +import static android.view.MotionEvent.ACTION_POINTER_UP; +import static android.view.MotionEvent.ACTION_UP; + + +public class WhitePiecesView extends androidx.appcompat.widget.AppCompatTextView { + + private final static String TAG = WhitePiecesView.class.getSimpleName(); + + private Paint mPaint; + + private PiecesRectF[][] ovals = new PiecesRectF[5][4];//屏幕上的方格块 + private SparseArray selectOvals = new SparseArray();//点击时选中的方格块 + + private int topOvalHeight = 0;//最上面一行方格的高度 + private int score = 0; + + private boolean isGameOver;//游戏是否结束 + private boolean isGameWin;//游戏输赢 + private boolean once = true; + private int index; + private int speed = 20; + + public WhitePiecesView(Context context) { + this(context,null); + } + + public WhitePiecesView(Context context, AttributeSet attrs) { + this(context, attrs,0); + } + + public WhitePiecesView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + mPaint = new Paint(); + initOvals();//初始化方块 + } + + private void initOvals(){ + + for (int i = 0;i < 5;i++){ + for (int j = 0;j<4;j++){ + + ovals[i][j] = new PiecesRectF(); + if (j == 1){ + //如果是第二列,则若第一列的是黑块将这个方块设为白块 + if (ovals[i][j-1].getType() == PiecesRectF.BLAKE || + ovals[i][j-1].getType() == PiecesRectF.START) { + ovals[i][j].setType(PiecesRectF.WRITE); + } + }else if (j == 3){ + //如果是第四列,同样若第一列的是黑块将这个方块设为白块 + if (ovals[i][j-1].getType() == PiecesRectF.BLAKE || + ovals[i][j-1].getType() == PiecesRectF.START) { + ovals[i][j].setType(PiecesRectF.WRITE); + } + //如果是第四列,且前四列的都为白块,则设为黑块 + else if (ovals[i][j-2].getType() == PiecesRectF.WRITE && + ovals[i][j-3].getType() == PiecesRectF.WRITE) { + ovals[i][j].setType(PiecesRectF.BLAKE); + } + } + + if (i == 4){ + if (ovals[i][j].getType() == PiecesRectF.BLAKE) + ovals[i][j].setType(PiecesRectF.START);//若是最后一行,将黑块的type替换为START + + } + } + } + } + + + private WhitePiecesListener MyWhitePiecesListener; + + public void setWhitePiecesListener(WhitePiecesListener myWhitePiecesListener) { + MyWhitePiecesListener = myWhitePiecesListener; + } + + public interface WhitePiecesListener{ + void getScore(int score,int grade); + void gameOver(); + void gameWin(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawRect(canvas); + } + + private void drawRect(Canvas canvas){ + int w = getWidth()/4;//得到每个小方块的宽 + int h = getHeight()/4;//得到每个小方块的高 + if(isGameWin){ + MyWhitePiecesListener.gameWin(); + isGameWin = false; + } + if (isGameOver){ + //游戏结束 + MyWhitePiecesListener.gameOver(); + isGameOver = false; + } + for (int i = 0;i < 5;i++){ + for (int j = 0;j < 4;j++){ + + ovals[i][j].left = w * j; + ovals[i][j].right = w * (j + 1); + ovals[i][j].bottom = topOvalHeight + i * h; + ovals[i][j].top = ovals[i][j].bottom - h; + + mPaint.setStyle(Paint.Style.FILL);//绘制色块时,设置画笔为FILL + switch (ovals[i][j].getType()){ + case PiecesRectF.BLAKE:{ + //绘制黑块 + mPaint.setColor(Color.BLACK); + canvas.drawRect(ovals[i][j],mPaint); + break; + } + case PiecesRectF.BLUE:{ + //绘制蓝块 + mPaint.setColor(Color.BLUE); + canvas.drawRect(ovals[i][j],mPaint); + break; + } + case PiecesRectF.RED:{ + //绘制红块 + mPaint.setColor(Color.RED); + canvas.drawRect(ovals[i][j],mPaint); + break; + } + case PiecesRectF.START:{ + //先绘制黑块 + mPaint.setColor(Color.BLACK); + canvas.drawRect(ovals[i][j],mPaint); + + //在绘制文字 + mPaint.setColor(Color.parseColor("#ffffff")); + mPaint.setTextAlign(Paint.Align.CENTER); + mPaint.setTextSize(50); + + String start = "开始"; + Rect bounds = new Rect(); + mPaint.getTextBounds(start,0,start.length(),bounds); + float x = ovals[i][j].left / 2 + ovals[i][j].right / 2; + float y = ovals[i][j].top / 2 + ovals[i][j].bottom / 2 + bounds.bottom / 2 - bounds.top / 2; + canvas.drawText(start,x,y,mPaint); + break; + } + } + //设置画笔为STROKE,绘制边框 + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setColor(Color.parseColor("#ffffff")); + mPaint.setStrokeWidth(3); + canvas.drawRect(ovals[i][j],mPaint); + } + } + } + + //@android.support.annotation.RequiresApi(api = Build.VERSION_CODES.FROYO) + @Override + public boolean onTouchEvent(MotionEvent event) { + int index = event.getActionIndex(); + switch (event.getActionMasked()){ + case ACTION_DOWN: + case ACTION_POINTER_DOWN: { + int id = event.getPointerId(index); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < 4; j++) { + PiecesRectF f = ovals[i][j]; + if (event.getX() > f.left && event.getX() < f.right + && event.getY() > f.top && event.getY() < f.bottom) { + selectOvals.put(id, f);//点击选中的方块存入SparseArray + + switch (f.getType()){ + case PiecesRectF.BLAKE:{ + if (!once) { + f.setType(PiecesRectF.BLUE); + score++; + } + break; + } + case PiecesRectF.START:{ + if (once){ + //判断第一次按中 + startThread(); + once = false; + } + //按黑块处理 + f.setType(PiecesRectF.BLUE); + score++; + break; + } + case PiecesRectF.WRITE:{ + if (!once) { + //点中白块GameOver + f.setType(PiecesRectF.RED); + isGameOver = true; + invalidate(); + } + break; + } + } + MyWhitePiecesListener.getScore(score,21-speed); + } + } + } + break; + } + case ACTION_UP: + case ACTION_POINTER_UP:{ + int id = event.getPointerId(index); + PiecesRectF f = selectOvals.get(id,null);//得到某个手指选中的方块 + if (f != null && f.getType() == PiecesRectF.BLUE ){ + //手指抬起后,将蓝色重新变红 + f.setType(PiecesRectF.WRITE); + } + break; + } + } + return true; + } + + private void startThread() { + new Thread(new Runnable() { + + + @Override + public void run() { + while(true){ + if(speed == 5){ + isGameWin = true; + postInvalidate(); + return; + } + if(score>=10*(21-speed)){ + speed--; + } + topOvalHeight =topOvalHeight + 20;//这里写死了滑动速度 + if (isGameOver) {//如果游戏已经结束,结束循环 + return; + } + if (topOvalHeight > getHeight()/4) { + topOvalHeight = 0;//若最顶层的方块的高,超出正常方块的的高,清零。 + if (checkBottomOvals()){//检测是否有黑色方块漏点 + //有漏点,游戏结束 + isGameOver = true; + postInvalidate(); + return; + }else + //没有漏点,更新方块游戏结束 + updateRectF(); + } + try { + Thread.sleep(speed); + } catch (InterruptedException e) { + e.printStackTrace(); + } + postInvalidate(); + } + } + }).start(); + } + + + private boolean checkBottomOvals(){ + boolean haveBlake = false; + for (int i = 0;i < 4;i++){ + if (ovals[4][i].getType() == PiecesRectF.BLAKE + || ovals[4][i].getType() == PiecesRectF.START) { + //判断最后一行是否存在BLAKE或START方块 + //如果有将其设为红色 + ovals[4][i].setType(PiecesRectF.RED); + haveBlake = true; + } + } + return haveBlake; + } + + /** + * 更新方块 + */ + private void updateRectF(){ + + for (int i = 4; i >= 0; i--) { + for (int j = 0; j < 4; j++) { + if (i == 0) {//如果是第一行,重新初始化一行 + ovals[i][j] = new PiecesRectF(); + + if (j == 1){ + if (ovals[i][j-1].getType() == PiecesRectF.BLAKE) + ovals[i][j].setType(PiecesRectF.WRITE); + }else if (j == 3){ + if (ovals[i][j-1].getType() == PiecesRectF.BLAKE) + ovals[i][j].setType(PiecesRectF.WRITE); + else if (ovals[i][j-2].getType() == PiecesRectF.WRITE && + ovals[i][j-3].getType() == PiecesRectF.WRITE) + ovals[i][j].setType(PiecesRectF.BLAKE); + } + } + else//否则,将行数后移 + ovals[i][j] = ovals[i - 1][j]; + } + } + } + + public void restart(){ + once = true; + topOvalHeight = 0;//顶层高度归零 + score = 0;//分数归零 + speed = 20; + MyWhitePiecesListener.getScore(score,21-speed); + initOvals();//重新初始化 + invalidate();//再次绘制 + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/service/MusicService.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/service/MusicService.java new file mode 100644 index 0000000..95c3d0c --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/service/MusicService.java @@ -0,0 +1,231 @@ +package com.example.netcloudsharing.service; + +import android.app.Service; +import android.content.ContentResolver; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Binder; +import android.os.IBinder; +import android.provider.MediaStore; +import android.util.Log; +import android.widget.Toast; + +import com.example.netcloudsharing.LocalMusicBean; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class MusicService extends Service { + private static final String TAG = "MusicService"; + private List mData; + MediaPlayer mediaPlayer; + //记录当前正在播放的音乐的位置 + public static int currentPlayPosition = -1;//默认没有播放 + //记录暂停音乐时进度条哦的位置 + int currentPausePositionInSong = 0; + MyBinder binder; + + public class MyBinder extends Binder { + + + /** + * 根据传入的位置播放音乐 + * + * @param position 传入的位置 + */ + public void playMusicPosition(int position) { + if (position >= 0 && position <= mData.size()) + playMusicPosition(mData.get(position)); + } + + /** + * 根据传入对象播放音乐 + * + * @param musicBean 传入对象 + */ + public void playMusicPosition(LocalMusicBean musicBean) { + if (mData.size() == 0) return; + if (musicBean == null) { + musicBean = mData.get(0); + currentPlayPosition = 0; + } + stopMusic(); + //重装多媒体播放器 + mediaPlayer.reset(); + //设置新的播放路径 + try { + mediaPlayer.setDataSource(musicBean.getPath()); + playMusic(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 播放音乐的函数 点击播放按钮音乐,或者从暂停从新播放 + * 播放的音乐有两种 + * 1.从暂停到播放 + * 2.从停止到播放 + */ + public void playMusic() { + if (mediaPlayer != null && !mediaPlayer.isPlaying()) { + if (currentPausePositionInSong == 0) { + try { + mediaPlayer.prepare(); + mediaPlayer.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + //从暂停到播放 + mediaPlayer.seekTo(currentPausePositionInSong); + mediaPlayer.start(); + } + } + + } + + /** + * 暂停音乐的操作 + */ + public void pauseMusic() { + if (mediaPlayer != null && mediaPlayer.isPlaying()) { + currentPausePositionInSong = mediaPlayer.getCurrentPosition(); + mediaPlayer.pause(); + } + } + + /** + * 停止音乐的操作 + */ + public void stopMusic() { + if (mediaPlayer != null) { + currentPausePositionInSong = 0; + mediaPlayer.pause(); + mediaPlayer.seekTo(0); + mediaPlayer.stop(); + } + } + + /** + * 播放上一首音乐 + */ + public void playLastMusic() { + if (currentPlayPosition == -1) { + Toast.makeText(getApplicationContext(), "没有音乐正在播放中", Toast.LENGTH_SHORT).show(); + } else if (currentPlayPosition == 0) { + Toast.makeText(getApplicationContext(), "已经是第一首", Toast.LENGTH_SHORT).show(); + } else { + currentPlayPosition--; + playMusicPosition(mData.get(currentPlayPosition)); + } + } + + /** + * 播放下一首音乐 + */ + public void playNextMusic() { + if (currentPlayPosition == -1) { + Toast.makeText(getApplicationContext(), "没有音乐正在播放中", Toast.LENGTH_SHORT).show(); + } else if (currentPlayPosition == mData.size() - 1) { + Toast.makeText(getApplicationContext(), "已经是最后一首", Toast.LENGTH_SHORT).show(); + } else { + currentPlayPosition++; + playMusicPosition(mData.get(currentPlayPosition)); + } + } + + public LocalMusicBean getMusicBean() { + return mData.get(currentPlayPosition); + } + + /** + * 音乐是否在播放 + * + * @return 是或否 + */ + public boolean isMusicPlaying() { + return mediaPlayer.isPlaying(); + } + } + + + @Override + public void onCreate() { + super.onCreate(); + Log.d("MainActivity", "2"); + mData = new ArrayList<>(); + //加载本地数据源 + loadLocalMusicData(); + mediaPlayer = new MediaPlayer(); + //恢复上次关闭程序的播放位置 + SharedPreferences sp = getSharedPreferences("lastMusicPlayPosition", MODE_PRIVATE); + currentPlayPosition = sp.getInt("lastMusicPlayPosition", -1); + //设置播放完成后自动播放下一曲 + setAutoMusic(); + } + + /** + * 播放完成后自动播放下一曲 + */ + private void setAutoMusic() { + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + if (currentPlayPosition == mData.size() - 1) { + Toast.makeText(getApplicationContext(), "最后一首歌曲啦,请重新播放", Toast.LENGTH_SHORT).show(); + currentPlayPosition = 0; + binder.stopMusic(); + } else { + currentPlayPosition++; + binder.playMusicPosition(currentPlayPosition); + + } + } + }); + } + + @Override + public IBinder onBind(Intent intent) { + Log.d("MainActivity", "3"); + this.binder = new MyBinder(); + return this.binder; + } + + /** + * 加载本地存储当中的音乐MP3文件到集合中 + */ + private void loadLocalMusicData() { + //1.获取ContentResolver对象 + ContentResolver contentResolver = getContentResolver(); + //2.获取本地音乐的Uri地址 + Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + //3.开始查询 + Cursor cursor = contentResolver.query(uri, null, null, null, null); + //4.遍历 + int id = 0; + while (cursor.moveToNext()) { + //内存里面存的是毫秒 + long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); + int minute = (int) (duration / 1000 / 60); + int second = (int) (duration / 1000 % 60); + if (minute < 1) continue; + id++; + String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); + String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); + String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); + String sid = String.valueOf(id); + String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); + String time = String.valueOf(minute) + ":" + String.valueOf(second); + //将一行当中的数据封装到对象中 + LocalMusicBean bean = new LocalMusicBean(sid, song, singer, album, time, path); + mData.add(bean); + } + } + + +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/BaseTool.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/BaseTool.java new file mode 100644 index 0000000..7b866bd --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/BaseTool.java @@ -0,0 +1,68 @@ +package com.example.netcloudsharing.tool; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +public class BaseTool{ + /** + * 给button设置监听器 + * @param context 上下文 + * @param btn 按钮 + * @param cls 导向的class + * @return + */ + public static Button openActivity(final Context context, Button btn, final Class cls){ + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + BaseTool.navigateTo(context,cls); + } + }); + return btn; + } + + /** + * 导航到另一个Activity中 + * @param context 上下文 + * @param cls 导向的class + */ + public static void navigateTo(Context context,Class cls){ + Intent intent = new Intent(context,cls); + context.startActivity(intent); + } + /** + * 显示的短消息 + * @param context 上下文 + * @param msg 要显示的短消息 + */ + public static void showShortMsg(Context context,String msg){ + Toast.makeText(context,msg,Toast.LENGTH_SHORT).show(); + } + + /** + * 显示长消息 + * @param context 上下文 + * @param msg 要显示的消息 + */ + public static void showLongMsg(Context context,String msg){ + Toast.makeText(context,msg,Toast.LENGTH_LONG).show(); + } + + /** + * 显示消息对话框 + * @param context 上下文 + * @param msg 要显示的消息 + */ + public static void showDlaMsg(Context context,String msg){ + new AlertDialog.Builder(context) + .setTitle("提示信息") + .setMessage(msg) + .setPositiveButton("确定",null) + .setNegativeButton("取消",null) + .create().show(); + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/DbOpenHelper.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/DbOpenHelper.java new file mode 100644 index 0000000..8f60cd6 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/DbOpenHelper.java @@ -0,0 +1,55 @@ +package com.example.netcloudsharing.tool; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; + +/* + 直接连接数据库的辅助工具类 + */ +public class DbOpenHelper { + final static private String CLS = "com.mysql.jdbc.Driver"; + final static private String URL = "jdbc:mysql://10.77.169.229:3306/netsharingdb"; + final static private String USER = "zzc"; + final static private String PWD = "112211"; + + public static Connection conn; //连接对象 + public static Statement stmt; //命令集 + public static PreparedStatement pStmt; //预编译命令集 + public static ResultSet rs; //结果集 + + //取得连接的方法 + public static void getConnection(){ + try{ + Class.forName(CLS); + conn = DriverManager.getConnection(URL,USER,PWD); + }catch(Exception ex){ + ex.printStackTrace(); + } + } + //关闭连接 + public static void closeAll(){ + try{ + if(rs!=null){ + rs.close(); + rs=null; + } + if(pStmt!=null){ + pStmt.close(); + pStmt=null; + } + if(stmt!=null){ + stmt.close(); + stmt=null; + } + if(conn!=null){ + conn.close(); + conn=null; + } + }catch (Exception ex){ + ex.printStackTrace(); + } + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/MySqlHelp.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/MySqlHelp.java new file mode 100644 index 0000000..db06c40 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/MySqlHelp.java @@ -0,0 +1,32 @@ +package com.example.netcloudsharing.tool; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +/* + 直接连接数据库的辅助工具类 + */ +public class MySqlHelp { + public static int getUserSize(){ + final String CLS = "com.mysql.jdbc.Driver"; + final String URL = "jdbc:mysql://10.77.169.229:3306/netsharingdb"; + final String USER = "zzc"; + final String PWD = "112211"; + int count=0; + try{ + Class.forName(CLS); + Connection conn = DriverManager.getConnection(URL,USER,PWD); + String sql ="select count(1) as sl from userinfo"; + Statement stmt = conn.createStatement(); + ResultSet rs =stmt.executeQuery(sql); + while(rs.next()){ + count = rs.getInt("sl"); + } + }catch (Exception ex){ + ex.printStackTrace(); + } + return count; + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/UserDao.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/UserDao.java new file mode 100644 index 0000000..c878296 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/UserDao.java @@ -0,0 +1,137 @@ +package com.example.netcloudsharing.tool; + +import java.util.ArrayList; +import java.util.List; + +/* + 用户数据库操作类 + 实现用户的CRUD操作 + */ +public class UserDao extends DbOpenHelper { + /** + * 查询所有用户的信息 R + * @return List表单 + */ + public List getAllUserList(){ + List list = new ArrayList<>(); + try{ + getConnection(); //取得连接信息 + String sql="select * from userinfo"; + pStmt = conn.prepareStatement(sql); + rs = pStmt.executeQuery(); + if(rs.next()){ + Userinfo item = new Userinfo(); + item.setId(rs.getInt("id")); + item.setUname(rs.getString("uname")); + item.setUpass(rs.getString("upass")); + item.setCreateDt(rs.getString("createDt")); + + list.add(item); + } + + }catch (Exception ex){ + ex.printStackTrace(); + }finally { + closeAll(); + } + return list; + } + + /** + * 按用户名和密码查询用户信息 R + * @param uname 用户名 + * @param upass 密码 + * @return Userinfo实例 + */ + public Userinfo getUserByUnameAndUpass(String uname,String upass){ + Userinfo item = null; + try{ + getConnection(); //取得连接信息 + String sql="select * from userinfo where uname = ? and upass = ?"; + pStmt = conn.prepareStatement(sql); + pStmt.setString(1,uname); + pStmt.setString(2,upass); + rs = pStmt.executeQuery(); + if(rs.next()){ + item = new Userinfo(); + item.setId(rs.getInt("id")); + item.setUname(uname); + item.setCreateDt(rs.getString("createDt")); + } + + }catch (Exception ex){ + ex.printStackTrace(); + }finally { + closeAll(); + } + return item; + } + + /** + * 添加用户信息 C + * @param item 要添加的用户 + * @return int 影响的行数 + */ + public int addUser(Userinfo item){ + int iRow = 0; + try{ + getConnection(); //取得连接信息 + String sql="insert into userinfo(uname,upass,createDt) values(?,?,?)"; + pStmt = conn.prepareStatement(sql); + pStmt.setString(1,item.getUname()); + pStmt.setString(2,item.getUpass()); + pStmt.setString(3,item.getCreateDt()); + iRow = pStmt.executeUpdate(); + }catch (Exception ex){ + ex.printStackTrace(); + }finally { + closeAll(); + } + return iRow; + } + /** + * 修改用户信息 U + * @param item 要修改的用户 + * @return int 影响的行数 + */ + public int editUser(Userinfo item){ + int iRow = 0; + try{ + getConnection(); //取得连接信息 + String sql="updata userinfo set uname = ?,upass = ? where id =?"; + pStmt = conn.prepareStatement(sql); + pStmt.setString(1,item.getUname()); + pStmt.setString(2,item.getUpass()); + pStmt.setInt(3,item.getId()); + iRow = pStmt.executeUpdate(); + + }catch (Exception ex){ + ex.printStackTrace(); + }finally { + closeAll(); + } + return iRow; + } + + /** + * 根据id 删除用户信息 D + * @param id 要删除的用户id + * @return int 影响的行数 + */ + public int delUser(int id){ + int iRow = 0; + try{ + getConnection(); //取得连接信息 + String sql="delete from userinfo where id = ?"; + pStmt = conn.prepareStatement(sql); + pStmt.setInt(1,id); + iRow = pStmt.executeUpdate(); + + }catch (Exception ex){ + ex.printStackTrace(); + }finally { + closeAll(); + } + return iRow; + } +} diff --git a/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/Userinfo.java b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/Userinfo.java new file mode 100644 index 0000000..aadb3c9 --- /dev/null +++ b/MusicSharing/app/src/main/java/com/example/netcloudsharing/tool/Userinfo.java @@ -0,0 +1,54 @@ +package com.example.netcloudsharing.tool; +/* + 用户信息实体类 + */ +import java.io.Serializable; +public class Userinfo implements Serializable{ + private int id; + private String uname; + private String upass; + private String createDt; + + public Userinfo() { + } + + public Userinfo(int id, String uname, String upass, String createDt) { + this.id = id; + this.uname = uname; + this.upass = upass; + this.createDt = createDt; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUname() { + return uname; + } + + public void setUname(String uname) { + this.uname = uname; + } + + public String getUpass() { + return upass; + } + + public void setUpass(String upass) { + this.upass = upass; + } + + public String getCreateDt() { + return createDt; + } + + public void setCreateDt(String createDt) { + this.createDt = createDt; + } +} + diff --git a/MusicSharing/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/MusicSharing/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/backtohome.png b/MusicSharing/app/src/main/res/drawable/backtohome.png new file mode 100644 index 0000000..e428d98 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/backtohome.png differ diff --git a/MusicSharing/app/src/main/res/drawable/backtomusichome.png b/MusicSharing/app/src/main/res/drawable/backtomusichome.png new file mode 100644 index 0000000..c95a20c Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/backtomusichome.png differ diff --git a/MusicSharing/app/src/main/res/drawable/bg1.jpg b/MusicSharing/app/src/main/res/drawable/bg1.jpg new file mode 100644 index 0000000..c6b0e09 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/bg1.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/bg3.jpg b/MusicSharing/app/src/main/res/drawable/bg3.jpg new file mode 100644 index 0000000..d9442a0 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/bg3.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/bg4.jpg b/MusicSharing/app/src/main/res/drawable/bg4.jpg new file mode 100644 index 0000000..2850417 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/bg4.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/chen.jpg b/MusicSharing/app/src/main/res/drawable/chen.jpg new file mode 100644 index 0000000..e0b014f Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/chen.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/chengwei.jpg b/MusicSharing/app/src/main/res/drawable/chengwei.jpg new file mode 100644 index 0000000..5292bfa Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/chengwei.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/chenweiting.jpg b/MusicSharing/app/src/main/res/drawable/chenweiting.jpg new file mode 100644 index 0000000..ee2eaa3 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/chenweiting.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/daymusic.png b/MusicSharing/app/src/main/res/drawable/daymusic.png new file mode 100644 index 0000000..8100f26 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/daymusic.png differ diff --git a/MusicSharing/app/src/main/res/drawable/diar.png b/MusicSharing/app/src/main/res/drawable/diar.png new file mode 100644 index 0000000..8947874 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/diar.png differ diff --git a/MusicSharing/app/src/main/res/drawable/download.png b/MusicSharing/app/src/main/res/drawable/download.png new file mode 100644 index 0000000..fb5bf90 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/download.png differ diff --git a/MusicSharing/app/src/main/res/drawable/ic_launcher_background.xml b/MusicSharing/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MusicSharing/app/src/main/res/drawable/label.png b/MusicSharing/app/src/main/res/drawable/label.png new file mode 100644 index 0000000..ef20eed Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/label.png differ diff --git a/MusicSharing/app/src/main/res/drawable/localmusic.png b/MusicSharing/app/src/main/res/drawable/localmusic.png new file mode 100644 index 0000000..134176e Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/localmusic.png differ diff --git a/MusicSharing/app/src/main/res/drawable/localsong.png b/MusicSharing/app/src/main/res/drawable/localsong.png new file mode 100644 index 0000000..f0e22d4 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/localsong.png differ diff --git a/MusicSharing/app/src/main/res/drawable/login_icon.jpg b/MusicSharing/app/src/main/res/drawable/login_icon.jpg new file mode 100644 index 0000000..8dbee5a Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/login_icon.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/menu.png b/MusicSharing/app/src/main/res/drawable/menu.png new file mode 100644 index 0000000..de6f352 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/menu.png differ diff --git a/MusicSharing/app/src/main/res/drawable/music_icon.png b/MusicSharing/app/src/main/res/drawable/music_icon.png new file mode 100644 index 0000000..2913963 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/music_icon.png differ diff --git a/MusicSharing/app/src/main/res/drawable/musicbackground.jpg b/MusicSharing/app/src/main/res/drawable/musicbackground.jpg new file mode 100644 index 0000000..d3781d7 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/musicbackground.jpg differ diff --git a/MusicSharing/app/src/main/res/drawable/musicsearch.png b/MusicSharing/app/src/main/res/drawable/musicsearch.png new file mode 100644 index 0000000..7887b4f Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/musicsearch.png differ diff --git a/MusicSharing/app/src/main/res/drawable/my_black.png b/MusicSharing/app/src/main/res/drawable/my_black.png new file mode 100644 index 0000000..5c7bafa Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/my_black.png differ diff --git a/MusicSharing/app/src/main/res/drawable/mysinger.png b/MusicSharing/app/src/main/res/drawable/mysinger.png new file mode 100644 index 0000000..7f17289 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/mysinger.png differ diff --git a/MusicSharing/app/src/main/res/drawable/netmusicbackground.png b/MusicSharing/app/src/main/res/drawable/netmusicbackground.png new file mode 100644 index 0000000..1464b9f Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/netmusicbackground.png differ diff --git a/MusicSharing/app/src/main/res/drawable/pay.png b/MusicSharing/app/src/main/res/drawable/pay.png new file mode 100644 index 0000000..3a069a8 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/pay.png differ diff --git a/MusicSharing/app/src/main/res/drawable/personalfm.png b/MusicSharing/app/src/main/res/drawable/personalfm.png new file mode 100644 index 0000000..dad275a Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/personalfm.png differ diff --git a/MusicSharing/app/src/main/res/drawable/rangkinglist.png b/MusicSharing/app/src/main/res/drawable/rangkinglist.png new file mode 100644 index 0000000..d0ec61f Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/rangkinglist.png differ diff --git a/MusicSharing/app/src/main/res/drawable/recentlyplayed.png b/MusicSharing/app/src/main/res/drawable/recentlyplayed.png new file mode 100644 index 0000000..74aca6e Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/recentlyplayed.png differ diff --git a/MusicSharing/app/src/main/res/drawable/record.png b/MusicSharing/app/src/main/res/drawable/record.png new file mode 100644 index 0000000..8cc6e43 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/record.png differ diff --git a/MusicSharing/app/src/main/res/drawable/schedule.png b/MusicSharing/app/src/main/res/drawable/schedule.png new file mode 100644 index 0000000..0a691e3 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/schedule.png differ diff --git a/MusicSharing/app/src/main/res/drawable/search.png b/MusicSharing/app/src/main/res/drawable/search.png new file mode 100644 index 0000000..650e324 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/search.png differ diff --git a/MusicSharing/app/src/main/res/drawable/search_shape.xml b/MusicSharing/app/src/main/res/drawable/search_shape.xml new file mode 100644 index 0000000..5774a31 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/search_shape.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/select_community.png b/MusicSharing/app/src/main/res/drawable/select_community.png new file mode 100644 index 0000000..bc5efc1 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/select_community.png differ diff --git a/MusicSharing/app/src/main/res/drawable/select_home.png b/MusicSharing/app/src/main/res/drawable/select_home.png new file mode 100644 index 0000000..758da77 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/select_home.png differ diff --git a/MusicSharing/app/src/main/res/drawable/select_message.png b/MusicSharing/app/src/main/res/drawable/select_message.png new file mode 100644 index 0000000..bacf83c Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/select_message.png differ diff --git a/MusicSharing/app/src/main/res/drawable/select_my.png b/MusicSharing/app/src/main/res/drawable/select_my.png new file mode 100644 index 0000000..89564de Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/select_my.png differ diff --git a/MusicSharing/app/src/main/res/drawable/setting.png b/MusicSharing/app/src/main/res/drawable/setting.png new file mode 100644 index 0000000..41af7fa Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/setting.png differ diff --git a/MusicSharing/app/src/main/res/drawable/shape_login_btn.xml b/MusicSharing/app/src/main/res/drawable/shape_login_btn.xml new file mode 100644 index 0000000..8378151 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/shape_login_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/shape_login_form.xml b/MusicSharing/app/src/main/res/drawable/shape_login_form.xml new file mode 100644 index 0000000..a42d75e --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/shape_login_form.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/MusicSharing/app/src/main/res/drawable/shape_login_tourist_btn.xml b/MusicSharing/app/src/main/res/drawable/shape_login_tourist_btn.xml new file mode 100644 index 0000000..a4a9bb1 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/shape_login_tourist_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/shape_register_btn.xml b/MusicSharing/app/src/main/res/drawable/shape_register_btn.xml new file mode 100644 index 0000000..84b0ad2 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/shape_register_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/sharp_button.xml b/MusicSharing/app/src/main/res/drawable/sharp_button.xml new file mode 100644 index 0000000..38acd17 --- /dev/null +++ b/MusicSharing/app/src/main/res/drawable/sharp_button.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/MusicSharing/app/src/main/res/drawable/unselect_community.png b/MusicSharing/app/src/main/res/drawable/unselect_community.png new file mode 100644 index 0000000..ab36fba Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/unselect_community.png differ diff --git a/MusicSharing/app/src/main/res/drawable/unselect_home.png b/MusicSharing/app/src/main/res/drawable/unselect_home.png new file mode 100644 index 0000000..c2c0942 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/unselect_home.png differ diff --git a/MusicSharing/app/src/main/res/drawable/unselect_message.png b/MusicSharing/app/src/main/res/drawable/unselect_message.png new file mode 100644 index 0000000..9408dbd Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/unselect_message.png differ diff --git a/MusicSharing/app/src/main/res/drawable/unselect_my.png b/MusicSharing/app/src/main/res/drawable/unselect_my.png new file mode 100644 index 0000000..9ff1170 Binary files /dev/null and b/MusicSharing/app/src/main/res/drawable/unselect_my.png differ diff --git a/MusicSharing/app/src/main/res/layout/activity_login.xml b/MusicSharing/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..5259e92 --- /dev/null +++ b/MusicSharing/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xscj/fun.php b/xscj/fun.php new file mode 100644 index 0000000..d14d0d6 --- /dev/null +++ b/xscj/fun.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/xscj/images/20.jpg b/xscj/images/20.jpg new file mode 100644 index 0000000..f1d2f3d Binary files /dev/null and b/xscj/images/20.jpg differ diff --git a/xscj/images/bottom.gif b/xscj/images/bottom.gif new file mode 100644 index 0000000..23f3260 Binary files /dev/null and b/xscj/images/bottom.gif differ diff --git a/xscj/images/bottom1.png b/xscj/images/bottom1.png new file mode 100644 index 0000000..efc3345 Binary files /dev/null and b/xscj/images/bottom1.png differ diff --git a/xscj/images/home.gif b/xscj/images/home.gif new file mode 100644 index 0000000..5df7b8a Binary files /dev/null and b/xscj/images/home.gif differ diff --git a/xscj/images/top.png b/xscj/images/top.png new file mode 100644 index 0000000..69ebe37 Binary files /dev/null and b/xscj/images/top.png differ diff --git a/xscj/images/xscj.gif b/xscj/images/xscj.gif new file mode 100644 index 0000000..c811a6b Binary files /dev/null and b/xscj/images/xscj.gif differ diff --git a/xscj/index.php b/xscj/index.php new file mode 100644 index 0000000..ca59fe7 --- /dev/null +++ b/xscj/index.php @@ -0,0 +1,140 @@ + + + + +学生管理系统 + + + + + + +
+

学生管理系统

+
+ + +
+ +
+ + + + \ No newline at end of file diff --git a/xscj/login.css b/xscj/login.css new file mode 100644 index 0000000..52d70e8 --- /dev/null +++ b/xscj/login.css @@ -0,0 +1,45 @@ +/* CSS Document */ +body{ + background:url(images/20.jpg); + background-repeat:no-repeat; + background-size:100% auto; + } + #login-box{ + width:30%; + height:auto; + margin:0 auto ; + margin-top:13%; + text-align:center; + background:#00000060; + padding:20px 50px; + } + #login-box h1{ + color:#fff; + } + #login-box .form .item{ + margin-top:15px; + } + #login-box .form .item i{ + font-size:18px; + color:#fff; + } + #login-box .form .item input{ + width:180px; + font-size:18px; + border:0; + border-bottom:2px solid #fff; + padding:5px 10px; + background:#ffffff00; + color:#fff; + } + #login-box button{ + margin-top:20px; + width:190px; + height:30px; + font-size:20px; + font-weight:700; + color:#fff; + background-image: linear-gradient(to right, #74ebd5 0%, #9face6 100%); + border:0; + border-radius:15px; + } \ No newline at end of file diff --git a/xscj/login.php b/xscj/login.php new file mode 100644 index 0000000..6af46a0 --- /dev/null +++ b/xscj/login.php @@ -0,0 +1,29 @@ + + + + +登录 + + + + +
+

登录页面

+
+
+
+ + + +
+
+ + + +
+
+ +
+ + + \ No newline at end of file diff --git a/xscj/login1.php b/xscj/login1.php new file mode 100644 index 0000000..6aadbe5 --- /dev/null +++ b/xscj/login1.php @@ -0,0 +1,32 @@ +alert(\"该用户名不存在\");"; + echo ""; + exit(); + } + + //查询用户 + $sql = "select userid from user where username = '$username' and password = '$password'";//SQL查询语句 + $result = mysqli_query($db,$sql); + if(mysqli_num_rows($result) > 0){//查询到数据,跳转到系统主页index.php + $_SESSION['username'] = $_POST['username']; + echo ""; + } + else{//没有查询到数据,弹出一个对话框 + echo ""; + echo ""; + } + +?> \ No newline at end of file diff --git a/xscj/pxscj.sql b/xscj/pxscj.sql new file mode 100644 index 0000000..00f30f1 --- /dev/null +++ b/xscj/pxscj.sql @@ -0,0 +1,145 @@ +/* + Navicat Premium Data Transfer + + Source Server : root + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : localhost:3306 + Source Schema : pxscj + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 28/06/2020 00:21:12 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for cj +-- ---------------------------- +DROP TABLE IF EXISTS `cj`; +CREATE TABLE `cj` ( + `XM` char(8) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `KCM` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `CJ` int(255) NULL DEFAULT NULL, + PRIMARY KEY (`XM`, `KCM`) USING BTREE, + CONSTRAINT `FK_CJ_XS` FOREIGN KEY (`XM`) REFERENCES `xs` (`XM`) ON DELETE CASCADE ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of cj +-- ---------------------------- +INSERT INTO `cj` VALUES ('张三', 'C语言', 79); +INSERT INTO `cj` VALUES ('张三', '体育', 78); +INSERT INTO `cj` VALUES ('张三', '数据库', 80); +INSERT INTO `cj` VALUES ('张三', '高数', 80); +INSERT INTO `cj` VALUES ('张宇', 'c++', 80); +INSERT INTO `cj` VALUES ('李四', '高数', 80); +INSERT INTO `cj` VALUES ('李弈', '体育', 72); +INSERT INTO `cj` VALUES ('李星', 'C语言', 89); +INSERT INTO `cj` VALUES ('章程', '高数', 80); +INSERT INTO `cj` VALUES ('罗宜', '体育', 75); +INSERT INTO `cj` VALUES ('罗宜', '数据库', 82); +INSERT INTO `cj` VALUES ('罗宜', '高数', 85); + +-- ---------------------------- +-- Table structure for kc +-- ---------------------------- +DROP TABLE IF EXISTS `kc`; +CREATE TABLE `kc` ( + `KCM` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `XS` tinyint(255) NULL DEFAULT NULL, + `XF` tinyint(255) NULL DEFAULT NULL, + PRIMARY KEY (`KCM`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of kc +-- ---------------------------- +INSERT INTO `kc` VALUES ('', NULL, NULL); +INSERT INTO `kc` VALUES ('C++', 36, 3); +INSERT INTO `kc` VALUES ('C语言', 32, 2); +INSERT INTO `kc` VALUES ('公共体育', 32, 2); +INSERT INTO `kc` VALUES ('大学物理', 32, 2); +INSERT INTO `kc` VALUES ('大学英语', 32, 2); +INSERT INTO `kc` VALUES ('数据库', 36, 2); +INSERT INTO `kc` VALUES ('数据结构', 36, 2); +INSERT INTO `kc` VALUES ('高数', 36, 2); + +-- ---------------------------- +-- Table structure for user +-- ---------------------------- +DROP TABLE IF EXISTS `user`; +CREATE TABLE `user` ( + `userid` int(8) NOT NULL, + `username` char(12) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL, + `password` char(12) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of user +-- ---------------------------- +INSERT INTO `user` VALUES (1, 'root', '123456'); +INSERT INTO `user` VALUES (2, 'root', '123456'); + +-- ---------------------------- +-- Table structure for xmcj_view +-- ---------------------------- +DROP TABLE IF EXISTS `xmcj_view`; +CREATE TABLE `xmcj_view` ( + `KCM` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `CJ` int(255) NULL DEFAULT NULL, + PRIMARY KEY (`KCM`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for xs +-- ---------------------------- +DROP TABLE IF EXISTS `xs`; +CREATE TABLE `xs` ( + `XM` char(8) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `XB` tinyint(1) NULL DEFAULT NULL, + `CSSJ` date NULL DEFAULT NULL, + `KCS` int(255) NULL DEFAULT NULL, + `BZ` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL, + `ZP` blob NULL, + PRIMARY KEY (`XM`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of xs +-- ---------------------------- +INSERT INTO `xs` VALUES ('张一', 1, '2001-03-16', 1, NULL, NULL); +INSERT INTO `xs` VALUES ('张三', 1, '2020-06-07', 4, NULL, NULL); +INSERT INTO `xs` VALUES ('张宇', 1, '2020-06-12', 3, NULL, NULL); +INSERT INTO `xs` VALUES ('李依', 0, '2020-05-12', 1, NULL, NULL); +INSERT INTO `xs` VALUES ('李四', 0, '2000-12-13', 3, NULL, NULL); +INSERT INTO `xs` VALUES ('李弈', 0, '2020-06-12', 3, NULL, NULL); +INSERT INTO `xs` VALUES ('李星', 1, '2020-12-23', 4, NULL, NULL); +INSERT INTO `xs` VALUES ('章程', 1, '2020-06-07', 4, NULL, NULL); +INSERT INTO `xs` VALUES ('罗宜', 1, '2020-06-05', 5, NULL, NULL); +INSERT INTO `xs` VALUES ('赵泽', 1, '2020-06-14', 2, NULL, NULL); +INSERT INTO `xs` VALUES ('陈橙', 0, '2020-01-25', 2, NULL, NULL); + +-- ---------------------------- +-- Triggers structure for table cj +-- ---------------------------- +DROP TRIGGER IF EXISTS `CJ_INSERT_KCS`; +delimiter ;; +CREATE TRIGGER `CJ_INSERT_KCS` AFTER INSERT ON `cj` FOR EACH ROW UPDATE XS SET KCS=KCS+1 where new.XM=XM +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table cj +-- ---------------------------- +DROP TRIGGER IF EXISTS `CJ_DELEFE_KCS`; +delimiter ;; +CREATE TRIGGER `CJ_DELEFE_KCS` AFTER DELETE ON `cj` FOR EACH ROW update xs set kcs=kcs-1 where xm=old.xm +;; +delimiter ; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/xscj/scoreAction.php b/xscj/scoreAction.php new file mode 100644 index 0000000..915e992 --- /dev/null +++ b/xscj/scoreAction.php @@ -0,0 +1,306 @@ + +alert(\"请输入姓名,课程名和成绩\");"; + exit(); + } + + $sql = "select cj from cj where xm = '$name' and kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if(mysqli_num_rows($result)>0) + { + echo""; + exit(); + } + + $sql = "insert into cj(xm,kcm,cj) values('$name','$kcm','$score')"; + $result = mysqli_query($db,$sql); + if($result) + { + echo""; + $result = mysqli_query($db,"select * from cj where xm = '$name' and kcm = '$kcm'"); + $row = mysqli_fetch_array($result); + echo ""; + echo ""; + echo ""; + echo ""; + echo "
姓名课程名成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
>"; + } + else + { + echo ""; + exit(); + } + + $sql = "select xm from cj where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + if(strlen($kcm)&&strlen($name)) + { + $sql = "delete from cj where xm = '$name' and kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + + if($result) + { + echo ""; + exit(); + } + else + { + echo ""; + exit(); + } + } + else if(strlen($name)) + { + $sql = "delete from cj where xm = '$name'"; + $result = mysqli_query($db,$sql); + + if($result) + { + echo ""; + exit(); + } + else + { + echo ""; + exit(); + } + } + } + + if(isset($_POST['更新'])) + { + if(!strlen($name) || !strlen($kcm) || !strlen($score)) + { + echo ""; + exit(); + } + + $sql = "select xm from cj where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + $sql = "update cj set cj = '$score' where xm = '$name' and kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + $result = mysqli_query($db,"select * from cj where xm = '$name' and kcm = '$kcm'"); + $row = mysqli_fetch_array($result); + echo " + + + + + "; + echo ""; + echo ""; + echo ""; + echo "
姓名课程成绩
".$row['xm'],"".$row['kcm'],"".$row['cj'],"
"; + } + else + { + echo ""; + exit(); + } + } + + if(isset($_POST['查询'])) + { + if(strlen($name)&&!strlen($score)&&!strlen($kcm)) + { + + $sql = "select xm from cj where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + $sql = "select xm,kcm,cj from cj where xm = '$name'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + else + { + echo ""; + exit(); + } + } + else if(strlen($name)&&strlen($kcm)) + { + $sql = "select xm,kcm,cj from cj where xm = '$name' and kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if($row = mysqli_fetch_array($result)) + { + echo ""; + echo "". + "". + "". + ""; + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + else{ + echo ""; + exit(); + } + } + else if(strlen($name)&&strlen($score)) + { + $sql = "select xm,cj from cj where xm = '$name' and cj = '$score'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + $sql = "select xm,kcm,cj from cj where cj= '$score' and xm = '$name'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + } + else if(strlen($kcm)&&strlen($score)) + { + $sql = "select kcm,cj from cj where kcm = '$kcm' and cj = '$score'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + $sql = "select xm,kcm,cj from cj where cj= '$score' and kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + } + else if(strlen($score)&&!strlen($kcm)&&!strlen($name)) + { + $sql = "select cj from cj where cj = '$score'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + $sql = "select xm,kcm,cj from cj where cj= '$score'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + } + else if(!strlen($score)&&strlen($kcm)&&!strlen($name)) + { + $sql = "select kcm from cj where kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + $sql = "select xm,kcm,cj from cj where kcm = '$kcm'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
姓名课程成绩
".$row['xm']."".$row['kcm']."".$row['cj']."
"; + } + } + else + { + $sql = "select xm,cj,kcm from cj"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) + { + echo "". + "". + "". + ""; + } + echo "
课程姓名成绩
".$row['kcm']."".$row['xm']."".$row['cj']."
"; + } + else + { + echo ""; + exit(); + } + } + } +?> \ No newline at end of file diff --git a/xscj/score_manage.php b/xscj/score_manage.php new file mode 100644 index 0000000..2bbb463 --- /dev/null +++ b/xscj/score_manage.php @@ -0,0 +1,57 @@ + + + +成绩管理 + + + +
+ + 姓名:
+
课程名:
+
成绩:
+
+ + + + + + +
+ + + \ No newline at end of file diff --git a/xscj/studentAction.php b/xscj/studentAction.php new file mode 100644 index 0000000..2b5d9c1 --- /dev/null +++ b/xscj/studentAction.php @@ -0,0 +1,308 @@ + +alert(\"姓名不能为空\");"; + exit(); + } + $sql = "select xm from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + $sql = "insert into xs(xm,xb,cssj,kcs) values('$name','$sex','$birthday','$kcs')"; + $result = mysqli_query($db,$sql); + + if($result) + { + echo ""; + $result = mysqli_query($db,"select xm,xb,cssj,kcs from xs where xm = '$name'"); + $row = mysqli_fetch_array($result); + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
姓名性别出生日期已修课程数
".$row['姓名'].""; + if($row['性别'] == 1) echo "男"; + else echo "女"; + echo "".$row['出生日期']."".$row['已修课程数']."
"; + } + else + { + echo ""; + } + } + if(isset($_POST['查询'])) + { + if(strlen($name)&&!strlen($sex)&&!strlen($kcs)) + { + $sql = "select xm from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + $sql = "select xm,xb,cssj,kcs from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + + } + else if(strlen($sex)&&!strlen($kcs)&&!strlen($name)) + { + $sql = "select xm,xb,cssj,kcs from xs where xb = '$sex'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } + else if(strlen($kcs)&&!strlen($name)&&!strlen($sex)) + { + $sql = "select xm,xb,cssj,kcs from xs where kcs = '$kcs'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } + else if(!strlen($name)&&strlen($sex)&&strlen($kcs)) + { + $sql = "select xm,xb,cssj,kcs from xs where kcs = '$kcs' and xb = '$sex'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } + else if(strlen($name)&&!strlen($sex)&&strlen($kcs)) + { + $sql = "select xm,xb,cssj,kcs from xs where kcs = '$kcs' and xb = '$sex'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } + else if(strlen($name)&&strlen($sex)&&!strlen($kcs)) + { + $sql = "select xm,xb,cssj,kcs from xs where kcs = '$kcs' and xb = '$sex'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } + else + { + $sql = "select xm,xb,cssj,kcs from xs"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + while($row = mysqli_fetch_array($result)) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } + } +} + +if(isset($_POST['删除'])) +{ + if(!strlen($name)) + { + echo ""; + exit(); + } + + $sql = "select xm from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + $sql = "delete from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + } + else + { + echo ""; + } + +} +if(isset($_POST['更新'])) +{ + if(!strlen($name)) + { + echo ""; + exit(); + } + if(!strlen($sex) || !strlen($birthday) || !strlen($kcs)) + { + echo ""; + exit(); + } + $sql = "select xm from xs where xm = '$name'"; + $result = mysqli_query($db,$sql); + if(!mysqli_num_rows($result)) + { + echo ""; + exit(); + } + + $sql = "update xs set xb = '$sex', cssj = '$birthday', kcs = '$kcs' where xm = '$name'"; + $result = mysqli_query($db,$sql); + if($result) + { + echo ""; + $result = mysqli_query($db,"select xm,xb,cssj,kcs from xs where xm = '$name'"); + $row = mysqli_fetch_array($result); + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
姓名性别出生日期已修课程数
".$row['xm'].""; + if($row['xb']==1)echo"男"; + else echo"女"; + echo "".$row['cssj']."".$row['kcs']."
"; + } + else + { + echo ""; + exit(); + } +} + +?> \ No newline at end of file diff --git a/xscj/student_manage.php b/xscj/student_manage.php new file mode 100644 index 0000000..98033f5 --- /dev/null +++ b/xscj/student_manage.php @@ -0,0 +1,59 @@ + + + + + +学生管理 + + + +
+
+ 姓名:
+ 性别:
+ 出生日期:
+ 课程数:
+ + + + + +
+
+ + + \ No newline at end of file