1. コース設計のトピック
病院管理システム
2. コース設計の目的
データベース システム コースは、データベース システムの原理とアプリケーション開発の学習と連携するように設計されており、コンピューター科学技術、ビッグ データ、情報セキュリティ、モノのインターネット エンジニアリング、ソフトウェア エンジニアリング、インテリジェント技術の実践に焦点を当てた教育リンクです。これは、データベースの理論的知識を実際的な問題を解決する能力に変える上で重要な関係です。データベースシステムコースは、リレーショナルデータベースの理論的知識の理解を深め、特定のDBMSを使用することで実際のデータベース管理システムとその運用技術を習得し、データベースフロントエンド開発ツール( VB、C++、Java、JSP、Delphi、PowerBuilder など)データベース テクノロジを使用して実際的な問題を解決する学生の能力をさらに向上させます。
3.全体のデザイン
1. 背景知識
(1) Java GUI インターフェイス設計
Java の初期のインターフェイス ライブラリである AWT は、関数を実装するためにローカル システム メソッドを呼び出す必要があり、重量のあるコントロールです。Swing は AWT の拡張です。(javax.swing: AWT に基づく一連のグラフィカル インターフェイス システム。より多くのコンポーネントを提供し、完全に Java で実装されています。移植性が向上し、軽量なコンポーネントです。) そして、JavaFX、JDK1。8 で導入された新しいインターフェイス ライブラリ。
このデザインでは、swing と awt を使用してインターフェイスを設計しました。Java Swingグラフィカルインタフェース開発
(2) JavaのJDBC接続データベース
JDBC:Java DataBase Connectivity(Javaデータベース接続技術)。JavaとSQLを組み合わせた、特定のデータベースシステムに依存しないアプリケーションプログラミングインタフェースです。私は理想とmysqlを使用しました。JDBC 入門から習熟まで - 機能クラス、CRUD、SQL インジェクション、トランザクション、接続プーリングの詳細な説明
2. モジュールの紹介
- メインのログイン ページとメインの登録ページでは、
ログインに別のスタッフが使用されます。たとえば、看護師と医師は入院に対応できますが、上級リーダーは従業員管理モジュールに入ることができます。資材モジュールに入ることができるのは薬剤師のみです。登録ページには病院のみが必要です。病院職員以外のユーザーのみがログインできます。病院職員以外のユーザーは登録およびログインできません。 - 入院管理モジュールのメニューインターフェース
入院管理には患者管理とベッド管理があり、医師や看護師が追加・削除・変更・確認することができます。 - 従業員管理モジュールのメニューインターフェース
従業員管理には、従業員概要、給与報告、人事異動などのメニューがあり、上位リーダーのみが入力・追加・削除・修正・確認することができます。 - 材料リストモジュールのメニューページ
材料リストには薬剤リストと器具リストがあり、薬剤師はシステム内に入り追加・削除・修正・確認が可能ですが、それ以外の者は立ち入ることができません。
3. 設計手順
(1) まずデータベーステーブルを作成します
(2) 各モジュールのインターフェース設計
(3) Java はデータベースに接続し、データを使用します (つまり、jdbc を使用します)
(4) デバッグと変更
(いくつかの既存のエラーを解決するか、リマインダーにフラグを立てます)
4. 詳細設計
1 システム要件の分析
病院管理システムにより、病院管理業務の体系化、標準化、自動化が可能となり、病院経営効率の向上という目的を達成できます。
1.1 システム機能分析
病院管理システムが完了する必要がある主な機能は次のとおりです。
- 従業員の基本情報、役職、役職などのさまざまな従業員情報を入力します。
- 従業員の基本情報、役職、役職、給与などのさまざまな従業員情報を照会および変更します。
- 従業員の人事異動管理。
- 患者情報の管理。
- 病床の管理。
- 薬局のリソース管理。
- 機器のリソース管理。
- システムのユーザー管理と権限管理。
1.2 システム機能モジュールの設計(分割)
図 1 に示すように、システムの機能要件に従って、システムをいくつかのモジュールに分解して、それぞれアプリケーション プログラム インターフェイスを設計できます。設計者は入院部門と従業員管理モジュールの関連機能のみを実装でき、その中で外来部門、薬剤、機器モジュールは時間に応じて選択できます。
1.3 他のシステムとの関係
1.4 データ フロー チャート
病院管理システムのデータ フローを図 2 に示します (設計者が作成)。
2 データベース設計
2.1 データベース要件の分析
病院経営の内容とデータの関係を分析し、以下のようにデータ項目とデータ構造を設計しました。
- 従業員の基本ステータスに含まれるデータ項目は、従業員番号、従業員氏名、性別、所属、ID番号、誕生日、出身地、国籍、民族、婚姻状況、健康状態、勤務時間、従業員ステータス、自宅住所、連絡先などです。番号等。
- 従業員の基本ステータスに含まれるデータ項目は、従業員番号、従業員氏名、性別、所属、ID番号、誕生日、出身地、国籍、民族、婚姻状況、健康状態、勤務時間、従業員ステータス、自宅住所、連絡先などです。番号等。
- 従業員給与ステータスに含まれるデータ項目には、従業員番号、給与区分、給与額などが含まれます。
- 病院の求人情報には、求人コード、求人名などのデータベース項目が含まれます。
- 病院部門情報には、部門コード、部門名、部門長等のデータ項目が含まれる。
- 患者情報に含まれるデータ項目としては、患者氏名、患者性別、入院時刻、診療科、患者ステータス、患者担当医、病室クエスチョンマーク、ベッド番号等が挙げられる。
- 医薬品資源管理情報に含まれるデータ項目としては、医薬品コード番号、医薬品名、医薬品価格、医薬品在庫数量、備考等が挙げられる。
- 医療機器管理には、機器コード、機器名、機器価格、機器数量、備考などのデータ項目が含まれます。
上記のデータ構造、データ項目、データ関係により、以下のようなデータベース設計を行うことができます。
2.2 データベースの概念構造設計
上記の設計に基づいて本システムが計画するエンティティには、従業員エンティティ、部門エンティティ、職位エンティティ、患者エンティティ、製薬エンティティ、機器エンティティが含まれます。エンティティの ER 図モデルとエンティティ間の関係を図 3 に示します。
2.3 データベースの論理構造の設計
上記のエンティティとエンティティ間の関係に基づいて、データベース内のテーブルと各テーブル間の関係を形成できます。病院管理システムデータベースの各テーブルの設計結果を表1~表7に示す。
2.4 データベースの構築
2.4.1 データベースの構築
2.4.2 初期データの入力
3 各機能モジュールの設計と実装
3.1 機能説明
1. 従業員情報の管理。
2. 患者情報の管理。
3. 病床の管理。
4. 医薬品機器リソースの管理。
5. システムのユーザー管理と権限管理。
3.2 ユーザー インターフェイスの設計
データベースの作成と機能の説明が完了したら、次のステップであるユーザー インターフェイスの設計に進むことができます。病院管理システムの形態は、図に示すように大きく 5 つの部分に分けられます。
1. システムのウェルカム インターフェイスとログイン インターフェイスの設計
メイン コード:
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new regest();
f.dispose();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username=id.getText().trim();
String password1= String.valueOf(password.getPassword())/*password.getPassword().toString()*/;
System.out.println(password.getPassword());
String pass=String.valueOf(password.getPassword());
if (j.getSelectedItem().equals("住院办理")) {
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_1 where TMS_user=? and TMS_paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next()) {
new inpatien_system();
f.dispose();
}
else {
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
else if (j.getSelectedItem().equals("员工管理"))
{
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_2 where tms2user=? and tms2paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next())
{
new employee_managemwnt();
f.dispose();
} else
{
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}else if(j.getSelectedItem().equals("物资清单"))
{
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_3 where tms3user=? and tms3paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next()) {
new material_list();
f.dispose();
}
else {
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
2. 登録モジュールインターフェイスの
メインコード:
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = id.getText().trim();
String password1 = String.valueOf(password.getPassword());
String password3 = String.valueOf(password2.getPassword());
System.out.print(password1.equals(password3));
if (password1.equals(password3)) {
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
PreparedStatement pr1 = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from personnel where per_name=?");
pr1 = conn.prepareStatement("insert into tms_all values(?,?)");
pr.setString(1, id.getText());
//pr.setString(2, String.valueOf(password.getPassword()));
rs = pr.executeQuery();
if (rs.next()) {
pr1.setString(1, id.getText());
pr1.setString(2, String.valueOf(password.getPassword()));
pr1.execute();
JOptionPane.showMessageDialog(null, "注册成功!", "提示", JOptionPane.WARNING_MESSAGE);
new login();
f.dispose();
} else {
JOptionPane.showMessageDialog(null, "你不是该医院的员工,请退出!", "警告", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
} else {
JOptionPane.showMessageDialog(null, "两次密码不一样,请重新输入!", "提示", JOptionPane.WARNING_MESSAGE);
}
}
});
2.
入院部門管理モジュールのメインインターフェイスコード表示:
public inpatien_system() {
JFrame f = new JFrame("住院办理界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_1.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择住院办理类型");
Font font = new Font("宋体", Font.BOLD, 40);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
//类似设置一个div方便修改位置和大小内容因为有标签修改有限制,然后把<p></p>等放进div中
JRadioButton rb1=new JRadioButton("病床管理");
JRadioButton rb2=new JRadioButton("病人管理");
rb1.setFont(font);
rb2.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 300);
panel3.setBounds(140,200,400,300);
panel3.add(rb2);
panel2.add(rb1);
f.add(panel2);
f.add(panel3);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 310, 170, 400);
panel6.setBounds(350, 310, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected())
{
new patientroom();
f.dispose();
}
else
{
new patient();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={
"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择办理类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose(); }
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
3.
従業員管理モジュールのメインインターフェイスコード表示:
public employee_managemwnt() {
JFrame f = new JFrame("员工管理界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_3.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择查询类型");
Font font = new Font("宋体", Font.BOLD, 30);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
//类似设置一个div方便修改位置和大小内容因为有标签修改有限制,然后把<p></p>等放进div中
JRadioButton rb1=new JRadioButton("员工一览");
JRadioButton rb2=new JRadioButton("工资报表");
JRadioButton rb3=new JRadioButton("人事调动");
rb1.setFont(font);
rb2.setFont(font);
rb3.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel4.add(rb3,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 200);
panel3.setBounds(140,200,400,200);
panel4.setBounds(140,280,400,200);
panel3.add(rb2);
panel2.add(rb1);
panel4.add(rb3);
f.add(panel2);
f.add(panel3);
f.add(panel4);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
bg.add(rb3);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 350, 170, 400);
panel6.setBounds(350, 350, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected())
{
new employee_information();
f.dispose();
}
if (rb2.isSelected())
{
new pay_sheet();
f.dispose();
}
if(rb3.isSelected())
{
new personnel_transfer();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择查询类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose();
}
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
4.
材料リストモジュールのメインインターフェイスコード表示:
public material_list() {
JFrame f = new JFrame("物资清单界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_2.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择清单类型");
Font font = new Font("宋体", Font.BOLD, 40);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
JRadioButton rb1=new JRadioButton("药品清单");
JRadioButton rb2=new JRadioButton("仪器清单");
rb1.setFont(font);
rb2.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 300);
panel3.setBounds(140,200,400,300);
panel3.add(rb2);
panel2.add(rb1);
f.add(panel2);
f.add(panel3);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 310, 170, 400);
panel6.setBounds(350, 310, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected()) {
new drug_list();
f.dispose();
}
else
{
new instrument_list();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择清单类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose();
}
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
3.3 各主要インターフェースの各機能モジュールの実装
1. 入院部門管理モジュールの主要インターフェース設計
(1) 病床管理モジュールのインターフェース設計
5. 結果と分析
各モジュールは基本的に追加、削除、変更、確認などの機能を備えており、レポートの印刷以外は基本的に設計・実装されています。
6. まとめと経験
ダウンロードしたソフトウェアにバグがあるだけでなく、データベースの構築、ページのデザイン、そしてデータベースに入るまでに、さまざまなソフトウェアの不一致やその他のデバッグがあり、作業を開始したときは本当に混乱しました。接続されています。でも一番難しいのはバグで、常に問題を探しては解決していくのですが、最終的には自分の力で成功することができたときの達成感もあります。