1.
两个Bean文件:CostBean(用户)school(学校)
CostBean
package com.example.kaoyanpai; public class school { private String name; private String fenshu; private String bili; private String jingyan; private String taolunzu; public school(String name, String fenshu, String bili, String jingyan, String taolunzu) { this.name = name; this.fenshu = fenshu; this.bili = bili; this.jingyan = jingyan; this.taolunzu = taolunzu; } public school() { } public String getName() { return name; } public String getFenshu() { return fenshu; } public String getBili() { return bili; } public String getJingyan() { return jingyan; } public String getTaolunzu() { return taolunzu; } public void setName(String name) { this.name = name; } public void setFenshu(String fenshu) { this.fenshu = fenshu; } public void setBili(String bili) { this.bili = bili; } public void setJingyan(String jingyan) { this.jingyan = jingyan; } public void setTaolunzu(String taolunzu) { this.taolunzu = taolunzu; } }
school
package com.example.kaoyanpai; public class CostBean { private String name; private String password; public String getName() { return name; } public String getPassword() { return password; } public void setName(){ } public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public CostBean(){ } public CostBean(String name, String password) { this.name = name; this.password = password; } }
db:连接数据库
package com.example.kaoyanpai; import android.util.Log; import com.mysql.jdbc.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class db { private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动 private static String url = "jdbc:mysql://192.168.1.5:3306/yanhu?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"; private static String user = "root";//用户名 private static String password = "zhangziyi1670";//密码 //192.168.1.5 /** * 连接数据库 * */ public static Connection getConn(){ Connection conn = null; try { Class.forName(driver);//获取MYSQL驱动 conn = (Connection) DriverManager.getConnection(url, user, password);//获取连接 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 关闭数据库 * */ public static void closeAll(Connection conn, PreparedStatement ps){ if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭数据库 * */ public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs){ if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args){ if(getConn()!=null){ Log.i("message","ok"); } else { Log.i("m","no"); } } }
DBService:
package com.example.kaoyanpai; import android.util.Log; import com.mysql.jdbc.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class DBService { private Connection conn = null; //打开数据库对象 private PreparedStatement ps = null;//操作整合sql语句的对象 private ResultSet rs = null;//查询结果的集合 /** * 获取要发送短信的患者信息 查 */ public boolean getUserData(String name){ //结果存放集合 List<CostBean> list=new ArrayList<CostBean>(); boolean flag=false; //MySQL 语句 String sql="select * from yanhu where name = '"+name+"'"; //获取链接数据库对象 conn= db.getConn(); try { if(conn!=null&&(!conn.isClosed())){ ps= (PreparedStatement) conn.prepareStatement(sql); if(ps!=null){ rs= ps.executeQuery(); if(rs!=null){ flag=true; } else flag=false; } } } catch (SQLException e) { e.printStackTrace(); } db.closeAll(conn,ps,rs);//关闭相关操作 return flag; } //查学校 public List<school> searchschool(String name){ //结果存放集合 List<school> list=new ArrayList<school>(); //MySQL 语句 String sql="select * from school where name = '"+name+"'"; //获取链接数据库对象 conn= db.getConn(); try { if(conn!=null&&(!conn.isClosed())){ ps= (PreparedStatement) conn.prepareStatement(sql); if(ps!=null){ rs= ps.executeQuery(); if(rs.next()){ school school=new school(); school.setName(name); school.setFenshu(rs.getString("fenshu")); school.setBili(rs.getString("bili")); school.setJingyan(rs.getString("jingyan")); school.setTaolunzu(rs.getString("taolun")); list.add(school); } } } } catch (SQLException e) { e.printStackTrace(); } db.closeAll(conn,ps,rs);//关闭相关操作 return list; } /** * 修改数据库中某个对象的状态 改 * */ /*public int updateUserData(String phone){ int result=-1; if(!StringUtils.isEmpty(phone)){ //获取链接数据库对象 conn= DBOpenHelper.getConn(); //MySQL 语句 String sql="update user set state=? where phone=?"; try { boolean closed=conn.isClosed(); if(conn!=null&&(!closed)){ ps= (PreparedStatement) conn.prepareStatement(sql); ps.setString(1,"1");//第一个参数state 一定要和上面SQL语句字段顺序一致 ps.setString(2,phone);//第二个参数 phone 一定要和上面SQL语句字段顺序一致 result=ps.executeUpdate();//返回1 执行成功 } } catch (SQLException e) { e.printStackTrace(); } } DBOpenHelper.closeAll(conn,ps);//关闭相关操作 return result; } /** * 批量向数据库插入数据 增 * */ public int insertUserData(List<CostBean> list) { int result = -1; if ((list != null) && (list.size() > 0)) { //获取链接数据库对象 conn = db.getConn(); if(conn==null){ Log.i("list","connnull"); } //MySQL 语句 String sql = "INSERT INTO yanhu (name,password) VALUES (?,?)"; try { boolean closed = conn.isClosed(); if ((conn != null) && (!closed)) { for (CostBean user : list) { ps = (PreparedStatement) conn.prepareStatement(sql); String name = user.getName(); String password = user.getPassword(); ps.setString(1, name);//第一个参数 name 规则同上 ps.setString(2, password);//第二个参数 phone 规则同上 result = ps.executeUpdate();//返回1 执行成功 } } } catch (SQLException e) { e.printStackTrace(); } } db.closeAll(conn, ps);//关闭相关操作 return result; } /** * 删除数据 删 * */ /*public int delUserData(String phone) { int result = -1; if ((!StringUtils.isEmpty(phone)) && (PhoneNumberUtils.isMobileNumber(phone))) { //获取链接数据库对象 conn = DBOpenHelper.getConn(); //MySQL 语句 String sql = "delete from user where phone=?"; try { boolean closed = conn.isClosed(); if ((conn != null) && (!closed)) { ps = (PreparedStatement) conn.prepareStatement(sql); ps.setString(1, phone); result = ps.executeUpdate();//返回1 执行成功 } } catch (SQLException e) { e.printStackTrace(); } } DBOpenHelper.closeAll(conn, ps);//关闭相关操作 return result; }*/ public static void main(String[] args){ List<CostBean>list=new ArrayList<CostBean>(); CostBean costBean=new CostBean(); costBean.setName("zhangziyi"); costBean.setPassword("zhangziyi"); list.add(costBean); //insertUserData(list); } }
ScoViewParger:新建class
package com.example.kaoyanpai; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.viewpager.widget.ViewPager; public class ScoViewParger extends ViewPager { private Handler handler; public ScoViewParger(@NonNull Context context) { this(context,null); } public ScoViewParger(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); handler=new Handler(Looper.getMainLooper()); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); startLooper(); } private void startLooper(){ handler.postDelayed(mTask,4000); } private Runnable mTask=new Runnable() { @Override public void run() { int currentItem=getCurrentItem(); currentItem++; setCurrentItem(currentItem); postDelayed(this,4000); } }; @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); stopLooper(); } private void stopLooper(){ handler.removeCallbacks(mTask); } }
startActivity:空白Activity
package com.example.kaoyanpai; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; public class startActivity extends AppCompatActivity { private ViewPager viewPager; private List<Integer> list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); //10秒后向登录界面跳转 initViews(); initData(); Timer timer=new Timer(); TimerTask timerTask=new TimerTask() { @Override public void run() { startActivity(new Intent(startActivity.this,zhuce.class)); } }; timer.schedule(timerTask,10000); Log.i("message","chenggong"); } private void initViews() { //加载布局 viewPager = (ViewPager) findViewById(R.id.im1); viewPager.setAdapter(my); } private PagerAdapter my=new PagerAdapter(){ @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view==object; } //Alt+Insert @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { View item= LayoutInflater.from(container.getContext()).inflate(R.layout.item,container,false); ImageView iv=item.findViewById(R.id.im2); //设置数据 iv.setImageResource(list.get(position)); if(iv.getParent() instanceof ViewGroup){ ((ViewGroup)iv.getParent()).removeView(iv); } container.addView(iv); return iv; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View)object); } }; private void initData() { //加载数据 list.add(R.mipmap.yan1); list.add(R.mipmap.yan2); list.add(R.mipmap.yan3); my.notifyDataSetChanged(); } }
zhuce:空白Activity
package com.example.kaoyanpai; //import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class zhuce extends AppCompatActivity implements Button.OnClickListener { private EditText name; private EditText password; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zhuce); name=(EditText)findViewById(R.id.dengluname); password=(EditText)findViewById(R.id.denglupassword); button=(Button)findViewById(R.id.button2); button.setOnClickListener(this); } public void onClick(View view) { //登录或者注册 String name1 = name.getText().toString(); String password1 = password.getText().toString(); List<CostBean> list = new ArrayList<CostBean>(); DBService service = new DBService(); //已有这个用户,提示 if (service.getUserData(name1) == true) { showCoverDialog("登录成功"); } else {//没有这个用户 添加 CostBean costBean = new CostBean(); costBean.setPassword(password1); costBean.setName(name1); list.add(costBean); if (list != null) { Log.i("list", name1); //添加成功,提示 service.insertUserData(list); showCoverDialog("注册成功"); } else { //添加失败 提示 Log.i("list", "空值"); showCoverDialog1("注册失败,请重新填写信息"); } } showCoverDialog("成功"); } //测试 private void showCoverDialog(String message){ final AlertDialog.Builder builder = new AlertDialog.Builder(zhuce.this); builder.setTitle("提示"); builder.setMessage(message); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { startActivity(new Intent(zhuce.this,MainActivity.class)); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.show(); } private void showCoverDialog1(String message){ final AlertDialog.Builder builder = new AlertDialog.Builder(zhuce.this); builder.setTitle("提示"); builder.setMessage(message); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.show(); } }
MianActivity:BottomNa。。。(带有底部导航栏)
package com.example.kaoyanpai; import android.os.Bundle; import com.google.android.material.bottomnavigation.BottomNavigationView; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); BottomNavigationView navView = findViewById(R.id.nav_view); // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications,R.id.shequ,R.id.wode) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupWithNavController(navView, navController); } }
HomeFragment:包下的UI文件夹
package com.example.kaoyanpai.ui.home; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.example.kaoyanpai.DBService; import com.example.kaoyanpai.R; import com.example.kaoyanpai.school; import java.util.List; public class HomeFragment extends Fragment { private HomeViewModel homeViewModel; private Button button; private EditText editText; private TextView textView; @SuppressLint("HandlerLeak") private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { Log.i("789","789"); switch (msg.what){ case 0x11: String s = (String) msg.obj; textView.setText(s); Log.i("message","123"); break; case 0x12: String ss = (String) msg.obj; textView.setText(ss); break; } } }; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class); View root = inflater.inflate(R.layout.fragment_home, container, false); final TextView textView = root.findViewById(R.id.text_home); homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@NonNull String s) { textView.setText(s); } }); onStart(root); return root; } protected void onStart(View v){ button=(Button)v.findViewById(R.id.button3); editText=(EditText)v.findViewById(R.id.schoolname); textView=(TextView)v.findViewById(R.id.show); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //创建一个线程,点击查询按钮,查询高校信息 new Thread(new Runnable() { @Override public void run() { Looper.prepare(); //Handler handler=new Handler(); Message message=handler.obtainMessage(); /*message.what=0x11; message.obj="chenggong"; Log.i("message","111"); handler.sendMessage(message); Log.i("456","456"); */ String name=editText.getText().toString(); DBService service=new DBService(); List<school> list=service.searchschool(name); if (list != null) { String s = ""; for (int i = 0; i < list.size(); i++) { s += "分数线:" + list.get(i).getFenshu() + " "; s += "报录比:" + list.get(i).getBili() + " "; s += "经验: " + list.get(i).getJingyan() + " "; s += "加入讨论组 " + list.get(i).getTaolunzu()+ " "; } //0x11、0x12消息的定位标志 message.what = 0x12; message.obj = s; } else { message.what = 0x11; message.obj = "查询结果为空"; } handler.sendMessage(message); } }).start(); } }); } }
Layout部分:
shequ.xml 以及wode.xml我都没写,fragment开头的是自动生成的
activity_start.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/pink" tools:context=".startActivity"> <com.example.kaoyanpai.ScoViewParger android:id="@+id/im1" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY"/> </RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/im2"/> </LinearLayout>
activity_mian.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="?attr/actionBarSize"> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/bottom_nav_menu" /> <fragment android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:layout_constraintBottom_toTopOf="@id/nav_view" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:navGraph="@navigation/mobile_navigation" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_zhuce.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".zhuce"> <!--app图标区域--> <ImageView android:layout_marginLeft="150dp" android:id="@+id/tubiao" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginTop="38dp" android:background="@color/colorAccent" android:src="@mipmap/touxiang" android:scaleType="fitXY"/> <TextView android:id="@+id/jvzi" android:layout_width="450px" android:layout_height="100px" android:layout_below="@+id/tubiao" android:layout_marginTop="38dp" android:gravity="center" android:text="让考研不再孤单" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/denglu_name" android:text="姓名" android:layout_below="@+id/jvzi" android:layout_marginTop="50dp" android:layout_marginLeft="42dp"/> <EditText android:layout_width="500px" android:layout_height="100px" android:id="@+id/dengluname" android:layout_below="@+id/jvzi" android:layout_toRightOf="@+id/denglu_name" android:layout_marginTop="50dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/denglu_password" android:text="密码" android:layout_below="@+id/denglu_name" android:layout_marginTop="37dp" android:layout_marginLeft="42dp"/> <EditText android:layout_width="500px" android:layout_height="100px" android:id="@+id/denglupassword" android:layout_below="@+id/dengluname" android:layout_toRightOf="@+id/denglu_password" android:layout_marginTop="37dp"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/denglupassword" android:id="@+id/button1" android:layout_marginTop="37dp" android:layout_marginLeft="42dp" android:text="同意研乎《用户注册协议》《隐私协议》" /> <TextView android:layout_width="500px" android:layout_height="100px" android:id="@+id/jvzi2" android:layout_below="@+id/button1" android:layout_marginLeft="42dp" android:layout_marginTop="30dp" android:text="新用户登录后自动注册"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/jvzi2" android:id="@+id/button2" android:layout_marginLeft="42dp" android:layout_marginTop="25dp" android:text="登录/注册" android:onClick="onClick"/> </RelativeLayout>
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:actionBarNavMode="tabs"> <TextView android:id="@+id/text_home" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginStart="8dp" android:layout_marginTop="32dp" android:layout_marginEnd="8dp" android:textAlignment="center" android:textSize="50sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/school_name" android:layout_width="100dp" android:layout_height="45dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginBottom="500dp" android:text="@string/school_name" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/text_home" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.93" /> <EditText android:id="@+id/schoolname" android:layout_width="300dp" android:layout_height="45dp" android:layout_marginStart="12dp" android:layout_marginLeft="12dp" android:layout_marginTop="156dp" android:hint="请输入您想要查询的学校信息" app:layout_constraintStart_toEndOf="@+id/school_name" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginBottom="440dp" android:text="查询" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/show" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginBottom="172dp" android:text="123" app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="-31dp" /> </androidx.constraintlayout.widget.ConstraintLayout>
values:string.xml
<resources> <string name="app_name">kaoyanpai</string> <string name="title_home">Home</string> <string name="title_dashboard">Dashboard</string> <string name="title_notifications">Notifications</string> <string name="school_name">院校名称</string> </resources>
values:color.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#008577</color> <color name="colorPrimaryDark">#00574B</color> <color name="colorAccent">#D81B60</color> <color name="pink">#FFC0CB</color> </resources>
轮播图的照片复制到mipmap下
数据库表
用户表:
院校表:
python爬取数据代码:
import bs4 import pymysql import requests from bs4 import BeautifulSoup import pandas as pd def download_all_htmls(): htmls=[]; for idx in range(2): url=f"https://yz.chsi.com.cn/sch/?start={idx*20}" print("craw html",url) r=requests.get(url) if r.status_code!=200: raise Exception("error") htmls.append(r.text) return htmls htmls=download_all_htmls() def parse_single_html(html): name1=[]; soup=BeautifulSoup(html,'html.parser') tbody=soup.find('tbody') print("1") if isinstance(tbody, bs4.element.Tag): for tr in tbody.find_all("tr"): a=tr.find("td").find("a") name1.append(a.getText().replace(' ', '')) print(name1) return name1 ''' for idex in range(2): name2 = parse_single_html(htmls[idex]) name=tbody.find('tr').find('td').find('a') ''' conn = pymysql.connect( host='localhost', # 我的IP地址 port=3306, # 不是字符串不需要加引号。 user='root', password='zhangziyi1670', db='yanhu', charset='utf8' ) cursor = conn.cursor() # 获取一个光标 for idex in range(2): name = parse_single_html(htmls[idex]) for a in range(20): sql = 'insert into school (name,fenshu,bili) values (%s,%s,%s);' name3=name[a] print(name3) fenshu=420 bili=0.2 cursor.execute(sql, [name3,fenshu,bili]) print() conn.commit() cursor.close() conn.close() # name2=parse_single_html(htmls[0]) # def pa(html): # soup=BeautifulSoup(html,"html.parser") # articles=soup.find_all("artical") # datas=[] # for article in articles: # title_node=( # article.find("h2",class_="entry_title") # .find("a") # ) # title=title_node.get_text() # # 得到title的内容 # link=title_node["href"] # # 得到title的链接 # datas.append({"title":title,"link":link}); # return datas