計算機(jī)程序設(shè)計之Python+Echarts醫(yī)院藥品庫存盤點(diǎn)系統(tǒng)的設(shè)計與實現(xiàn)
1、緒論
? ? ? ?基于Python和Django的醫(yī)院藥品庫存管理系統(tǒng)的開發(fā)背景源于對醫(yī)療衛(wèi)生領(lǐng)域的迫切需求。隨著醫(yī)院規(guī)模和患者數(shù)量的增加,藥品庫存管理變得更為復(fù)雜且重要。傳統(tǒng)的手動管理方式容易導(dǎo)致錯誤、浪費(fèi)和藥品短缺,因此,借助現(xiàn)代信息技術(shù),開發(fā)一個高效、準(zhǔn)確和可靠的系統(tǒng)對醫(yī)療機(jī)構(gòu)和患者都具有重要意義。
? ? ? ?基于Python和Django的醫(yī)院藥品庫存管理系統(tǒng)的意義在于:1.提高藥品管理效率: 系統(tǒng)可以自動跟蹤庫存,減少了手動盤點(diǎn)的時間和錯誤率,確保醫(yī)院隨時有足夠的藥品供應(yīng)。2.減少藥品浪費(fèi): 系統(tǒng)可以根據(jù)藥品的過期日期和使用情況進(jìn)行管理,有助于降低藥品浪費(fèi)和成本。3.改善醫(yī)患關(guān)系: 醫(yī)生可以更輕松地開具處方,患者能夠獲得及時的用藥服務(wù),提高了醫(yī)患關(guān)系的滿意度。4.確保用藥安全: 系統(tǒng)可以檢查藥物相互作用和禁忌癥,減少了患者用藥錯誤的風(fēng)險。5.提供決策支持: 系統(tǒng)可以生成報表和統(tǒng)計數(shù)據(jù),幫助醫(yī)院管理層做出更明智的決策,優(yōu)化庫存和成本控制。
核心功能模塊
? ? ? 該系統(tǒng)旨在實現(xiàn)醫(yī)院內(nèi)藥品庫存的高效管理和流程的優(yōu)化。通過用戶、醫(yī)生和管理員三個角色的互動,實現(xiàn)了個人中心管理、公告信息發(fā)布、醫(yī)生和患者信息管理、藥品信息的全面管理、藥品的入庫和出庫操作、開藥記錄的追蹤以及藥品盤點(diǎn)功能。系統(tǒng)將提高醫(yī)院內(nèi)部藥品管理的可視性和效率,確?;颊吣軌颢@得及時、準(zhǔn)確的藥物治療,同時為醫(yī)生和管理員提供了更好的決策支持和操作便利性,有助于提高醫(yī)療服務(wù)的質(zhì)量和效率。
?3、項目Ui展示








?4、 核心代碼
# models.py
from django.db import models
class Medicine(models.Model):
? ? name = models.CharField(max_length=100)
? ? quantity = models.PositiveIntegerField()
? ? # 其他藥品信息字段
class StockEntry(models.Model):
? ? medicine = models.ForeignKey(Medicine, on_delete=models.CASCADE)
? ? entry_type = models.CharField(max_length=20)? # '入庫'或'出庫'
? ? quantity = models.PositiveIntegerField()
? ? date = models.DateField()
? ? # 其他入庫/出庫信息字段
# views.py
from django.shortcuts import render, redirect
from .models import Medicine, StockEntry
def stock_entry(request):
? ? if request.method == 'POST':
? ? ? ? medicine_id = request.POST['medicine_id']
? ? ? ? entry_type = request.POST['entry_type']
? ? ? ? quantity = int(request.POST['quantity'])
? ? ? ? date = request.POST['date']
? ? ? ? medicine = Medicine.objects.get(id=medicine_id)
? ? ? ? if entry_type == '入庫':
? ? ? ? ? ? medicine.quantity += quantity
? ? ? ? elif entry_type == '出庫':
? ? ? ? ? ? if medicine.quantity >= quantity:
? ? ? ? ? ? ? ? medicine.quantity -= quantity
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? return render(request, 'error_page.html', {'message': '庫存不足'})
? ? ? ? medicine.save()
? ? ? ? stock_entry = StockEntry(medicine=medicine, entry_type=entry_type, quantity=quantity, date=date)
? ? ? ? stock_entry.save()
? ? ? ? return redirect('stock_entry_success')
? ? medicines = Medicine.objects.all()
? ? return render(request, 'stock_entry.html', {'medicines': medicines})
# stock_entry.html
<form method="POST" action="{% url 'stock_entry' %}">
? ? {% csrf_token %}
? ? <label for="medicine_id">選擇藥品:</label>
? ? <select name="medicine_id" id="medicine_id">
? ? ? ? {% for medicine in medicines %}
? ? ? ? ? ? <option value="{{ medicine.id }}">{{ medicine.name }}</option>
? ? ? ? {% endfor %}
? ? </select><br><br>
? ? <label for="entry_type">出庫/入庫類型:</label>
? ? <select name="entry_type" id="entry_type">
? ? ? ? <option value="入庫">入庫</option>
? ? ? ? <option value="出庫">出庫</option>
? ? </select><br><br>
? ? <label for="quantity">數(shù)量:</label>
? ? <input type="number" name="quantity" id="quantity" required><br><br>
? ? <label for="date">日期:</label>
? ? <input type="date" name="date" id="date" required><br><br>
? ? <input type="submit" value="提交">
</form>
```
```python
# models.py
from django.db import models
class Medicine(models.Model):
? ? name = models.CharField(max_length=100)
? ? quantity = models.PositiveIntegerField()
? ? # 其他藥品信息字段
class Prescription(models.Model):
? ? doctor = models.ForeignKey(User, on_delete=models.CASCADE)? # 關(guān)聯(lián)醫(yī)生
? ? patient = models.ForeignKey(User, on_delete=models.CASCADE)? # 關(guān)聯(lián)患者
? ? medicines = models.ManyToManyField(Medicine, through='PrescribedMedicine')
? ? date = models.DateField(auto_now_add=True)
class PrescribedMedicine(models.Model):
? ? medicine = models.ForeignKey(Medicine, on_delete=models.CASCADE)
? ? prescription = models.ForeignKey(Prescription, on_delete=models.CASCADE)
? ? quantity = models.PositiveIntegerField()
? ? # 其他處方藥品信息字段
# views.py
from django.shortcuts import render, redirect
from .models import Medicine, Prescription, PrescribedMedicine
def prescribe_medicine(request):
? ? if request.method == 'POST':
? ? ? ? doctor = request.user? # 獲取當(dāng)前登錄的醫(yī)生
? ? ? ? patient_id = request.POST['patient_id']
? ? ? ? medicine_ids = request.POST.getlist('medicine_ids')
? ? ? ? quantities = request.POST.getlist('quantities')
? ? ? ? patient = User.objects.get(id=patient_id)
? ? ? ? prescription = Prescription(doctor=doctor, patient=patient)
? ? ? ? prescription.save()
? ? ? ? for i in range(len(medicine_ids)):
? ? ? ? ? ? medicine_id = medicine_ids[i]
? ? ? ? ? ? quantity = quantities[i]
? ? ? ? ? ? medicine = Medicine.objects.get(id=medicine_id)
? ? ? ? ? ? if medicine.quantity >= quantity:
? ? ? ? ? ? ? ? medicine.quantity -= quantity
? ? ? ? ? ? ? ? medicine.save()
? ? ? ? ? ? ? ? prescribed_medicine = PrescribedMedicine(medicine=medicine, prescription=prescription, quantity=quantity)
? ? ? ? ? ? ? ? prescribed_medicine.save()
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? return render(request, 'error_page.html', {'message': '庫存不足'})
? ? ? ? return redirect('prescription_success')
? ? patients = User.objects.filter(role='患者')? # 根據(jù)系統(tǒng)用戶角色過濾患者列表
? ? medicines = Medicine.objects.all()
? ? return render(request, 'prescribe_medicine.html', {'patients': patients, 'medicines': medicines})
# prescribe_medicine.html
<form method="POST" action="{% url 'prescribe_medicine' %}">
? ? {% csrf_token %}
? ? <label for="patient_id">選擇患者:</label>
? ? <select name="patient_id" id="patient_id">
? ? ? ? {% for patient in patients %}
? ? ? ? ? ? <option value="{{ patient.id }}">{{ patient.username }}</option>
? ? ? ? {% endfor %}
? ? </select><br><br>
? ? <label for="medicine_ids">選擇藥品:</label>
? ? <select multiple name="medicine_ids" id="medicine_ids">
? ? ? ? {% for medicine in medicines %}
? ? ? ? ? ? <option value="{{ medicine.id }}">{{ medicine.name }}</option>
? ? ? ? {% endfor %}
? ? </select><br><br>
? ? <label for="quantities">藥品數(shù)量:</label>
? ? <input type="number" name="quantities" id="quantities" required><br><br>
? ? <input type="submit" value="開藥">
</form>