最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python圖書(shū)管理系統(tǒng)

 更新時(shí)間:2020年04月05日 07:55:12   作者:jiky73  
這篇文章主要為大家詳細(xì)介紹了python圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python圖書(shū)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)語(yǔ)言:python

圖形框架:DTK+2.0

數(shù)據(jù)庫(kù)框架:SQLite 3.0

本程序需要以下部件運(yùn)行:

Python2.5.0、GTK+2.16、Pygtk 2.16、PyGobject 2.14、Pycairo 1.4

LibiaryManager.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require('2.0')
import gtk
import sys
import gobject
import sqlite3
import time
import datetime

class LibManager:
 bookColumName = (u"書(shū)本號(hào)", u"書(shū)名", u"作者", u"出版社", 
 u"價(jià)格", u"購(gòu)入日期", u"分類(lèi)", u"簡(jiǎn)介", u"館藏?cái)?shù)")

 readerColumName = (u"讀者號(hào)", u"讀者姓名", u"讀者身份", u"備注")

 def __init__(self):
 self.dbconn = sqlite3.connect('sqlitefile.db')
 self.cursor = self.dbconn.cursor()
 
 self.nowDate = time.strftime("%Y-%m-%d").decode("utf-8")
 inputBookInitData = (u"書(shū)名", u"作者", u"出版社", 
 0.0, self.nowDate, u"分類(lèi)", u"簡(jiǎn)介", 0)

 try:
 builder = gtk.Builder()
 builder.add_from_file("ui.glade")
 except BaseException, e:
 self.errorMessage("Fail to load UI file.")
 print e
 sys.exit(1)

 builder.connect_signals(self)
 self.window = builder.get_object("mainWindow")

 self.borrowView = builder.get_object("borrowView")
 self.borrowViewModel = builder.get_object("borrowViewModel")
 self.borrowViewInit()

 self.returnView = builder.get_object("returnView")
 self.returnViewModel = builder.get_object("returnViewModel")
 self.returnEntryReaderID = builder.get_object("returnReaderID")
 self.returnEntryBookID = builder.get_object("returnBookID")
 self.returnViewInit()

 self.queryView = builder.get_object("queryView")
 self.queryViewReaderModel = builder.get_object("queryViewReaderModel")
 self.queryViewBookModel = builder.get_object("queryViewBookModel")


 self.inputView = builder.get_object("inputView")
 self.inputViewBookModel = builder.get_object("inputViewBookModel")
 self.inputViewReaderModel = builder.get_object("inputViewReaderModel")
 self.inputViewModel = None


 def borrowViewInit(self):
 columName = (u"讀者號(hào)", u"書(shū)號(hào)", u"借出日期")
 columEditAttr = (True, True, False)
 for columnNum in range(len(columName)):
 renderer = gtk.CellRendererText()
 renderer.set_data("column", columnNum)
 renderer.set_property("editable", columEditAttr[columnNum])
 if columEditAttr[columnNum]:
 renderer.connect("edited", self.on_borrow_cell_edited)
 column = gtk.TreeViewColumn(columName[columnNum], renderer, 
  text=columnNum)
 column.set_resizable(True)
 self.borrowView.append_column(column)

 def returnViewInit(self):
 columName = (u"借書(shū)記錄", u"書(shū)本", u"讀者姓名", u"讀者資料", u"借出日期")
 for columnNum in range(len(columName)):
 renderer = gtk.CellRendererText()
 column = gtk.TreeViewColumn(columName[columnNum], renderer, 
  text=columnNum)
 column.set_resizable(True)
 self.returnView.append_column(column)

 # QueryView
 def queryViewSetColumn(self, columName):
 self.queryRecord = 0
 columns = self.queryView.get_columns()
 for c in columns:
 self.queryView.remove_column(c)
 
 self.queryViewModel.clear()
 self.queryView.set_model(self.queryViewModel)
 for columnNum in range(len(columName)):
 renderer = gtk.CellRendererText()
 renderer.set_property("editable", True)
 column = gtk.TreeViewColumn(columName[columnNum], renderer, 
  text=columnNum)
 column.set_resizable(True)
 self.queryView.append_column(column)


 def queryReader(self):
 self.queryViewModel = self.queryViewReaderModel
 self.queryViewSetColumn(self.readerColumName)
 self.cursor.execute("SELECT COUNT(*) FROM reader")
 self.maxRecords = self.cursor.fetchone()[0]
 print self.maxRecords

 def queryBook(self):
 self.queryViewModel = self.queryViewBookModel
 self.queryViewSetColumn(self.bookColumName)
 self.cursor.execute("SELECT COUNT(*) FROM books")
 self.maxRecords = self.cursor.fetchone()[0]
 print self.maxRecords

 #inputView
 def inputViewSetColumn(self, columName):
 columns = self.inputView.get_columns()
 for c in columns:
 self.inputView.remove_column(c)
 
 self.inputViewModel.clear()
 self.inputView.set_model(self.inputViewModel)
 for columnNum in range(len(columName)):
 renderer = gtk.CellRendererText()
 renderer.set_property("editable", True)
 renderer.set_data("column", columnNum)
 renderer.connect("edited", self.on_input_cell_edited)

 column = gtk.TreeViewColumn(columName[columnNum], renderer, 
  text=columnNum)
 column.set_resizable(True)
 self.inputView.append_column(column)

 def inputReader(self):
 self.inputViewModel = self.inputViewReaderModel
 self.inputViewSetColumn(self.readerColumName[1:])

 def inputBook(self):
 self.inputViewModel = self.inputViewBookModel
 self.inputViewSetColumn(self.bookColumName[1:])

 #Callback Functions
 def on_mainWindow_delete_event(self, widget, data=None):
 print "destroy signal occurred"
 gtk.main_quit()

 #BorrowView
 def on_borrowAdd_clicked(self, button, data = None):
 self.borrowViewModel.append((1001, 1, self.nowDate))

 def on_borrowDel_clicked(self, button, data = None):
 selection = self.borrowView.get_selection()
 model, iter = selection.get_selected()
 if iter:
 model.remove(iter)

 def on_borrowClear_clicked(self, button, data = None):
 self.borrowViewModel.clear()

 def on_borrowSubmit_clicked(self, button, data = None):
 for row in self.borrowViewModel:
 self.cursor.execute("INSERT INTO borrow VALUES (NULL, ?, ?, ?)", row)
 self.dbconn.commit()
 self.infoMessage(u"借書(shū)記錄已經(jīng)成功提交。")
 self.borrowViewModel.clear()

 def on_borrow_cell_edited(self, cell, path_string, new_text):
 model = self.borrowViewModel
 iter = model.get_iter_from_string(path_string)
 column = cell.get_data("column")
 try:
 id = int(new_text)
 except ValueError, e:
 print e
 self.errorMessage(u"請(qǐng)輸入純數(shù)字記錄。")
 return

 if column == 0:
 self.cursor.execute("SELECT * FROM reader where ReaderID = ?", [new_text])
 if self.cursor.fetchone():
 model.set(iter, column, id)
 else:
 self.errorMessage(u"不存在該讀者號(hào): %d。" % id)

 if column == 1:
 self.cursor.execute("SELECT * FROM books where BookID = ?", [new_text])
 if self.cursor.fetchone():
 model.set(iter, column, id)
 else:
 self.errorMessage(u"不存在該書(shū)本號(hào): %d。" % id)

 #QueryView
 def on_queryBooks_clicked(self, button, data = None):
 self.queryBook()
 self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?", [15, 0])
 for row in self.cursor:
 self.queryViewModel.append(row)

 def on_queryReaders_clicked(self, button, data = None):
 self.queryReader()
 self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?", [15, 0])
 for row in self.cursor:
 self.queryViewModel.append(row)

 def on_queryPrev_clicked(self, button, data = None):
 if self.queryRecord == 0:
 self.errorMessage(u"已到最前頁(yè)。")
 return
 self.queryRecord -= 15
 self.queryViewModel.clear()

 if self.queryViewModel.get_n_columns() == 9:
 self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?",[15, self.queryRecord])

 elif self.queryViewModel.get_n_columns() == 4:
 self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?",[15, self.queryRecord])

 for row in self.cursor:
 self.queryViewModel.append(row)


 def on_queryNext_clicked(self, button, data = None):
 if self.queryRecord + 15 > self.maxRecords:
 self.errorMessage(u"已到最后頁(yè)。")
 return

 self.queryRecord += 15
 self.queryViewModel.clear()

 if self.queryViewModel.get_n_columns() == 9:
 self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?",[15, self.queryRecord])

 elif self.queryViewModel.get_n_columns() == 4:
 self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?",[15, self.queryRecord])

 for row in self.cursor:
 self.queryViewModel.append(row)


 def on_returnQuery_clicked(self, button, data = None):
 readerid = self.returnEntryReaderID.get_text()
 bookid = self.returnEntryBookID.get_text()

 if len(readerid) and len(bookid):
 self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\
 reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\
 WHERE books.BookID = borrow.BookID AND \
 reader.ReaderID = borrow.ReaderID AND\
 borrow.ReaderID = ? AND borrow.BookID = ?", [readerid, bookid])
 elif len(readerid):
 self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\
 reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\
 WHERE books.BookID = borrow.BookID AND \
 reader.ReaderID = borrow.ReaderID AND\
 borrow.ReaderID = ?", [readerid])
 elif len(bookid):
 self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\
 reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\
 WHERE books.BookID = borrow.BookID AND \
 reader.ReaderID = borrow.ReaderID AND\
 borrow.BookID = ?", [bookid])
 else:
 self.errorMessage(u"請(qǐng)輸入查詢條件。")
 return

 self.returnViewModel.clear()

 for row in self.cursor:
 self.returnViewModel.append(row)
 

 def on_returnCommit_clicked(self, button, data = None):
 selection = self.returnView.get_selection()
 model, iter = selection.get_selected()
 if iter:
 borrowDate = time.strptime(model.get_value(iter, 4), "%Y-%m-%d")
 timeDelta = datetime.date.today() - datetime.date(*borrowDate[0:3])
 borrowDays = timeDelta.days

 borrowID = model.get_value(iter, 0)
 self.cursor.execute("DELETE FROM borrow WHERE BorrowID = ?", [borrowID])
 self.dbconn.commit()
 readerName = model.get_value(iter, 2)
 bookName = model.get_value(iter, 1)
 self.infoMessage(u"讀者 %s 所借書(shū)《%s》歸還成功。 借出%d天" % (readerName, bookName, borrowDays))
 model.remove(iter)

 #inputView
 def on_inputReader_clicked(self, button, data = None):
 self.inputReader()

 def on_inputBooks_clicked(self, button, data = None):
 self.inputBook()

 def on_inputAdd_clicked(self, button, data = None):
 if not self.inputViewModel:
 self.errorMessage(u"請(qǐng)先選擇錄入類(lèi)型。")
 return
 count = self.inputViewModel.get_n_columns()
 if count == 3:
 inputReaderInitData = (u"姓名", u"身份", u"備注")
 self.inputViewModel.append(inputReaderInitData)
 elif count == 8:
 inputBookInitData = (u"書(shū)名", u"作者", u"出版社", 
 0.0, self.nowDate, u"分類(lèi)", u"簡(jiǎn)介", 0)
 self.inputViewModel.append(inputBookInitData)

 def on_inputDel_clicked(self, button, data = None):
 selection = self.inputView.get_selection()
 model, iter = selection.get_selected()
 if iter:
 model.remove(iter)

 def on_inputSubmit_clicked(self, button, data = None):
 count = self.inputViewModel.get_n_columns()
 for row in self.inputViewModel:
 #錄入讀者
 if count == 3:
 self.cursor.execute(u"INSERT INTO reader VALUES (NULL, ?, ?, ?)", 
  [s.decode("utf-8") for s in row])

 #錄入書(shū)目
 elif count == 8:
 dataRow = []
 for obj in row:
 if isinstance(obj, str):
 dataRow.append(obj.decode("utf-8"))
 else:
 dataRow.append(obj)
 print dataRow
 self.cursor.execute(u"INSERT INTO books VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?)",\
  dataRow)
 self.dbconn.commit()
 self.infoMessage(u"記錄已經(jīng)成功提交。")
 self.inputViewModel.clear()

 def on_input_cell_edited(self, cell, path_string, new_text):
 iter = self.inputViewModel.get_iter_from_string(path_string)
 column = cell.get_data("column")
 columnCount = self.inputViewModel.get_n_columns()
 if columnCount == 3:
 self.inputViewModel.set(iter, column, new_text)
 elif columnCount == 8:
 if self.inputViewModel.get_column_type(column) == gobject.TYPE_FLOAT:
 try:
 self.inputViewModel.set(iter, column, float(new_text))
 except ValueError, e:
 self.errorMessage(u"請(qǐng)輸入價(jià)格實(shí)數(shù)。")
 return
 elif self.inputViewModel.get_column_type(column) == gobject.TYPE_UINT:
 try:
 self.inputViewModel.set(iter, column, int(new_text))
 except ValueError, e:
 self.errorMessage(u"請(qǐng)輸入整數(shù)。")
 return
 else:
 self.inputViewModel.set(iter, column, new_text)

 def errorMessage(self, message):
 print message
 dialog = gtk.MessageDialog(None,
  gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
  gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, message)
 dialog.run()
 dialog.destroy()

 def infoMessage(self, message):
 print message
 dialog = gtk.MessageDialog(None,
  gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
  gtk.MESSAGE_INFO, gtk.BUTTONS_OK, message)
 dialog.run()
 dialog.destroy()

 def main(self):
 self.window.show()
 gtk.main()

if __name__ == "__main__":
 app = LibManager()
 app.main()

LibDBInit.py

#!/usr/bin/python
#encoding:utf-8

import sqlite3

def LibDbInit(con):
 c = con.cursor()

 c.execute("""
 CREATE TABLE `books` (
 `BookID` INTEGER PRIMARY KEY,
 `BookName` TEXT ,
 `BookAuthor` TEXT ,
 `BookPublish` TEXT ,
 `BookPrice` FLOAT ,
 `BookDate` TEXT ,
 `BookType` TEXT ,
 `BookContent` TEXT ,
 `BookState` INTEGER
 )
 """)

 c.execute("""
 CREATE TABLE `reader` (
 `ReaderID` INTEGER PRIMARY KEY,
 `ReaderName` TEXT ,
 `ReaderSchool` TEXT ,
 `ReaderInfo` TEXT
 )
 """)

 c.execute("""
 CREATE TABLE `borrow` (
 `BorrowID` INTEGER PRIMARY KEY,
 `ReaderID` INTEGER ,
 `BookID` INTEGER ,
 `BorrowDate` TEXT
 )
 """)

 books = ((1, u"C語(yǔ)言程序設(shè)計(jì)", u"譚浩強(qiáng)", u"教育出版社", 29.90, u"2009-04-30", u"計(jì)算機(jī)", u"", 5),
 (2, u"數(shù)據(jù)結(jié)構(gòu)", u"譚浩強(qiáng)", u"教育出版社", 29.90, u"2009-04-30", u"計(jì)算機(jī)", u"", 5),
 (3, u"數(shù)據(jù)庫(kù)原理", u"譚浩強(qiáng)", u"教育出版社", 29.90, u"2009-04-30", u"計(jì)算機(jī)", u"", 5),
 (4, u"匯編語(yǔ)言", u"譚浩強(qiáng)", u"教育出版社", 29.90, u"2009-04-30", u"計(jì)算機(jī)", u"", 5),
 (5, u"大學(xué)國(guó)文", u"國(guó)立", u"教育出版社", 19.90, u"2009-04-30", u"文學(xué)", u"", 5),
 (6, u"古代詩(shī)詞", u"國(guó)立", u"教育出版社", 19.90, u"2009-04-30", u"文學(xué)", u"", 5),
 (7, u"廣州地圖", u"工作", u"廣州出版社", 9.90, u"2009-04-30", u"工具書(shū)", u"", 5),
 (8, u"牛津詞典", u"詞典", u"廣州出版社", 9.90, u"2009-04-30", u"工具書(shū)", u"", 5))

 for r in books:
 c.execute("INSERT INTO books VALUES (?,?,?,?,?,?,?,?,?)", r)

 readers = ((1001, u"陳一", u"廣州大學(xué)計(jì)算機(jī)學(xué)院", u"B15"),
 (1002, u"王二", u"廣州大學(xué)計(jì)算機(jī)學(xué)院", u"B15"),
 (1003, u"劉三", u"廣州大學(xué)美術(shù)學(xué)院", u"B12"),
 (1004, u"陳一明", u"廣州大學(xué)人文學(xué)院", u"B10"),
 (1005, u"張三", u"廣州大學(xué)人文學(xué)院", u"B5"),
 (1006, u"何明", u"廣州大學(xué)土木工程學(xué)院", u"B22"),
 (1007, u"陳中", u"廣州大學(xué)數(shù)學(xué)學(xué)院", u"B24"),
 (1008, u"黃六", u"廣州大學(xué)體育學(xué)院", u"B25"))

 for r in readers:
 c.execute("INSERT INTO reader VALUES (?,?,?,?)", r)

 borrows = ((1, 1001, 1, u"2009-04-20"),
 (2, 1001, 2, u"2009-04-20"),
 (3, 1002, 3, u"2009-04-20"),
 (4, 1003, 5, u"2009-04-20"),
 (5, 1004, 4, u"2009-04-20"),
 (6, 1004, 2, u"2009-04-20"),
 (7, 1003, 7, u"2009-04-20"),
 (8, 1006, 8, u"2009-04-20"),
 (9, 1007, 2, u"2009-04-20"),
 (10, 1008, 8, u"2009-04-20"))

 for r in borrows:
 c.execute("INSERT INTO borrow VALUES (?,?,?,?)", r)

 # Save (commit) the changes
 con.commit()

if __name__ == "__main__":
 LibDbInit(sqlite3.connect('sqlitefile.db'))

源碼下載:圖書(shū)管理系統(tǒng)

更多學(xué)習(xí)資料請(qǐng)關(guān)注專(zhuān)題《管理系統(tǒng)開(kāi)發(fā)》。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從np.random.normal()到正態(tài)分布的擬合操作

    從np.random.normal()到正態(tài)分布的擬合操作

    這篇文章主要介紹了從np.random.normal()到正態(tài)分布的擬合操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • django 取消csrf限制的實(shí)例

    django 取消csrf限制的實(shí)例

    這篇文章主要介紹了django 取消csrf限制的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 詳解python異步編程之a(chǎn)syncio(百萬(wàn)并發(fā))

    詳解python異步編程之a(chǎn)syncio(百萬(wàn)并發(fā))

    這篇文章主要介紹了詳解python異步編程之a(chǎn)syncio(百萬(wàn)并發(fā)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python如何向IP地址發(fā)送字符串

    Python如何向IP地址發(fā)送字符串

    在Python中,向IP地址發(fā)送字符串通常意味著你需要通過(guò)某種協(xié)議來(lái)實(shí)現(xiàn)通信,最常見(jiàn)的協(xié)議包括TCP和UDP,這篇文章主要介紹了Python向IP地址發(fā)送字符串的示例代碼,需要的朋友可以參考下
    2024-08-08
  • 基于Python?wxPython開(kāi)發(fā)文件管理工具

    基于Python?wxPython開(kāi)發(fā)文件管理工具

    這篇文章主要為大家詳細(xì)介紹了如何基于wxPython開(kāi)發(fā)一個(gè)文件管理工具,該工具提供了多種實(shí)用功能,代碼結(jié)構(gòu)清晰,易于理解和擴(kuò)展,需要的可以了解下
    2025-02-02
  • ubuntu22.04將python源切換為清華源的方法

    ubuntu22.04將python源切換為清華源的方法

    在使用pip命令安裝python的一些庫(kù)時(shí),由于默認(rèn)服務(wù)器在國(guó)外,因此下載需要很長(zhǎng)時(shí)間,本文主要介紹了ubuntu22.04將python源切換為清華源的方法,感興趣的可以了解一下
    2023-12-12
  • Python pandas.DataFrame 找出有空值的行

    Python pandas.DataFrame 找出有空值的行

    這篇文章主要介紹了Python pandas.DataFrame 找出有空值的行,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python制作簡(jiǎn)易版2048小游戲

    Python制作簡(jiǎn)易版2048小游戲

    2048作為經(jīng)典的手機(jī)端游戲一直深受大家的喜愛(ài),本文將利用Python中的Pygame模塊制作簡(jiǎn)單版的2048游戲,感興趣的小伙伴可以了解一下
    2022-07-07
  • Python設(shè)計(jì)模式行為型責(zé)任鏈模式

    Python設(shè)計(jì)模式行為型責(zé)任鏈模式

    這篇文章主要介紹了Python設(shè)計(jì)模式行為型責(zé)任鏈模式,責(zé)任鏈模式將能處理請(qǐng)求的對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理請(qǐng)求為止,避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系,下圍繞改內(nèi)容介紹具有一點(diǎn)的參考價(jià)值,需要的朋友可以參考下
    2022-02-02
  • python中h5py開(kāi)源庫(kù)的使用樣例詳解

    python中h5py開(kāi)源庫(kù)的使用樣例詳解

    這篇文章主要介紹了python中的h5py開(kāi)源庫(kù)的使用,本文只是簡(jiǎn)單的對(duì)h5py庫(kù)的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

惠安县| 铜山县| 华阴市| 常宁市| 寿阳县| 永仁县| 许昌市| 巴楚县| 永和县| 徐汇区| 东平县| 丹棱县| 晋城| 绥芬河市| 金川县| 会理县| 柯坪县| 通州区| 石林| 吕梁市| 奈曼旗| 南涧| 普洱| 镇远县| 南岸区| 雷波县| 雅安市| 新密市| 阜宁县| 肃北| 梁河县| 广昌县| 涿鹿县| 通江县| 嵊州市| 张家港市| 黄大仙区| 泸州市| 巴彦县| 临夏市| 临湘市|