第一篇:C語言藥房管理系統
#include
char name[20];
//藥品名稱 char number[50];
//藥品編號 char price[50];
//單價 char inventory[50];
//庫存數量 char brand[20];
//品牌
}
medicine[100];
//假設最大數為100.//定義全局變量num
int num;
int menu_select(){
char s[80];int a;/*定義整形變量*/ system(“cls”);printf(“tt-------------您好!您已進入藥房管理系統-----------nn”);printf(“ttt1.輸入藥品信息n”);printf(“ttt2.查看藥品信息n”);printf(“ttt3.修改藥品信息n”);printf(“ttt4.按編號查找藥品n”);printf(“ttt5.按價格排序 n”);printf(“ttt6.刪除藥品信息n”);printf(“ttt7.退出n”);printf(“tt-----------nn”);
do{
} printf(“Enter you choice(1~7):”);
scanf(“%s”,s);
a=atoi(s);
while(a<1 || a>7);
return a;}
int addmedicine(){
printf(“ttt--------------請輸入您要保存的信息------------n”);printf(“ttt輸入藥品名稱:n”);scanf(“%s”,medicine[num].name);printf(“ttt輸入藥品編號:n”);scanf(“%s”,medicine[num].number);printf(“ttt單價:n”);scanf(“%s”,medicine[num].price);
printf(“ttt品牌:n”);
} scanf(“%s”,medicine[num].brand);printf(“ttt庫存數量 :n”);scanf(“%s”,medicine[num].inventory);num++;printf(“ttt是否繼續添加?(Y/N):n”);if(getch()=='y' || getch()=='Y')
addmedicine();return(0);void modifybyname()
//按藥品名稱修改 {
char c;int i,mark=0;char name[20];printf(“ntt請輸入要修改的藥品名稱:”);scanf(“%s”,name);if(num==0){ printf(“ntt文件中無相關藥品”);printf(“ntt按任意鍵返回主菜單”);getch();mark++;return;} for(i=0;i if(strcmp(medicine[i].name,name)==0){ printf(“ntt以下是您要修改的藥品信息”);printf(“ntt藥品名稱: %s”,medicine[i].name); printf(“ntt藥品編號: %s”,medicine[i].number); printf(“ntt單價: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ntt庫存數量: %s”,medicine[i].inventory); printf(“ntt是否修改(y/n)”); if(getch()=='y'){ printf(“nt----------------------請選擇修改信息-------------------------”);printf(“nt 1-修改藥品名稱 ”);printf(“nt 2-修改藥品編號 ”); printf(“nt 3-修改單價 ”); printf(“nt 4-修改品牌 ”); printf(“nt 5-修改庫存數量 ”);printf(“nt------------”);printf(“nt請選擇您所要的服務:”);scanf(“%s”,&c);switch(c){ case '1': printf(“nt請輸入新藥品名稱: ”); scanf(“%s”,medicine[i].name);break; case'2':printf(“nt請輸入新藥品編號: %s”); scanf(“%s”,medicine[i].number);break; case'3':printf(“nt請輸入新單價: ”); scanf(“%s”,medicine[i].price);break; case'4':printf(“nt請輸入新品牌: ”); scanf(“%s”,medicine[i].brand);break; case'5':printf(“nt請輸入新庫存數量: ”); } } scanf(“%s”,medicine[i].inventory);break;} } if(mark==0){ printf(“ntt藥品信息修改完畢”);printf(“nt是否繼續修改?(Y/N):”);if(getch()=='y')modifybyname();return;} } void list(){ int i;system(“cls”);if(num!=0){ printf(“ttt----------已為您顯示所有藥品信息----------n”); for(i=0;i { printf(“ttt藥品名稱:%sn”,medicine[i].name);printf(“ttt藥品編號:%sn”,medicine[i].number);printf(“ttt單價:%sn”,medicine[i].price); printf(“ntt品牌: %sn”,medicine[i].brand); } int searchbyname()printf(“ttt庫存數量:%sn”,medicine[i].inventory); if(i+1 { system(“pause”); } } printf(“ttt------------------------------n”);} else printf(“ttt系統中無任何記錄n”); printf(“ttt按任意鍵返回主菜單:n”); getch(); return;{ int mark=0;int i;printf(“ttt----------按藥品名稱查找----------n”);char name[20];printf(“ttt請輸入藥品名稱:n”);scanf(“%s”,name);for(i=0;i if(strcmp(medicine[i].name,name)==0) { printf(“ttt-------以下是您查找的藥品信息-------n”);printf(“ttt藥品名稱: %s”,medicine[i].name);printf(“ttt藥品編號: %s”,medicine[i].number);printf(“ttt單價: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand);printf(“ttt庫存數量:%sn”,medicine[i].inventory);printf(“ttt-----------------------n”); mark++; if((i+1) { printf(“ttt是否繼續查找相同名稱的藥品信息:(y/n)n”); if(getch()=='y' || getch()=='Y') { continue; } else return(0); } else } } { printf(“ttt請按任意鍵返回主菜單”); getch(); return(0); } } if(mark == 0){ } return 0; printf(“ttt沒有您要查找的藥品記錄n”); printf(“ttt請按任意鍵返回主菜單n”); getch(); return(0);int searchbynumber(){ int mark=0;int i;printf(“ttt---------------按藥品編號查找--------------n”);char number[10];printf(“ttt請輸入藥品編號:n”);scanf(“%s”,number);for(i=0;i printf(“ttt---------------以下是您查找的藥品信息---------------n”); printf(“ttt藥品名稱: %s”,medicine[i].name); printf(“ttt藥品編號: %s”,medicine[i].number); printf(“ttt單價: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt庫存數量:%sn”,medicine[i].inventory); } void deletebynumber(){ int i,j;int deletemark=0;char number[20];printf(“ttt請輸入要刪除藥品編號:n”);scanf(“%s”,number);if(num==0){ printf(“ttt對不起,系統中無任何記錄n”); printf(“ttt------------------n”); printf(“ttt請按任意鍵返回主菜單n”); mark++; getch(); return(0);} } if(mark==0){ printf(“ttt沒有改藥品的信息n”);printf(“ttt請按任意鍵返回主菜單n”);getch();return(0);} return(0); printf(“ttt請按任意鍵返回主菜單n”); getch();return;} for(i=0;i if(strcmp(medicine[i].number,number)==0) { printf(“ttt以下是您要刪除的用戶記錄:n”);printf(“ttt藥品名稱: %s”,medicine[i].name);printf(“ttt藥品編號: %s”,medicine[i].number);printf(“ttt單價: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt庫存數量:%sn”,medicine[i].inventory); } printf(“ttt是否刪除?(y/n)”); if(getch()=='y' || getch()=='Y') { } else return; for(j=i;j medicine[j]=medicine[j+1]; num--; deletemark++; printf(“ttt刪除成功”); printf(“ttt是否繼續刪除?(y/n)”); if(getch()=='y' || getch()=='Y') deletebynumber(); return; } continue;if(deletemark==0){ printf(“ttt沒有該藥品的記錄”); printf(“ttt是否繼續刪除?(y/n)”); if(getch()=='y' || getch()=='Y') deletebynumber(); return; } } void deletebyname(){ int a=0;int findmark=0;int j;int deletemark=0;int i;char name[20];printf(“ttt請輸入要刪除藥品名稱:n”);scanf(“%s”,name);for(i=a;i printf(“ttt以下是您要刪除的藥品信息:”); findmark++; printf(“ttt________________________________”); printf(“ttt藥品名稱: %s”,medicine[i].name);return; printf(“ttt藥品編號: %s”,medicine[i].number); printf(“ttt單價: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt庫存數量:%sn”,medicine[i].inventory); printf(“ttt________________________________”); printf(“ttt是否刪除?(y/n)”); if(getch()=='y' || getch()== 'Y') { for(j=i;j medicine[j]=medicine[j+1]; num--; deletemark++; printf(“ttt刪除成功”); if((i+1) { printf(“ttt是否繼續刪除相同名稱的藥品信息?(y/n)”); if(getch()=='y') { a=i; continue; } } printf(“ttt是否繼續刪除?(y/n)”); if(getch()=='y') deletebyname(); return; } if((i+1) { printf(“ttt是否繼續刪除相同名稱的藥品信息?(y/n)”); if(getch()=='y' || getch()== 'Y') { a=i; continue; } } } else continue;} if((deletemark==0)&&(findmark==0)){ printf(“ttt沒有該藥品的記錄”);printf(“ttt是否繼續刪除?(y/n)”);if(getch()=='y' || getch()== 'Y') deletebynumber();return;} else if(findmark!=0){ printf(“ttt沒有重名信息”);printf(“ttt沒有該藥品的記錄”);printf(“ttt是否繼續刪除?(y/n)”);if(getch()=='y' || getch()== 'Y') deletebynumber();return;} } int dele() //刪除記錄 { } char choic;printf(“ttt1-按藥品編號刪除 2-按藥品名稱刪除”);printf(“ttt請選擇:”);choic=getch();switch(choic){ case '1':deletebynumber();break;case '2':deletebyname();break;} return(0);int sortbyprice() //按藥品單價進行排序 { int i,j;struct medicine tmp;for(i=1;i tmp=medicine[i]; j=i-1; do { medicine[j+1]=medicine[j]; j--; }while((strcmp(tmp.price,medicine[j].price)<0&&j>=0)); medicine[j+1]=tmp;} } printf(“ttt排序成功,是否顯示?(y/n)”); } if(getch()=='y') list();return(0);int main(){ printf(“tt--------------------------n”); printf(“tt---------Welcome to management system----------n”); printf(“tt----------Made By 蔣俊杰 李梁偉 鄭奈春-------------n”); printf(“tt--------------------------n”); printf(“請按任意鍵進入主菜單:)n”); getch(); int selectnum; while(1) { selectnum = menu_select();switch(selectnum){ case 1: { } case 2: { addmedicine(); //添加藥品信息 break; list(); break; } case 3: { modifybyname(); //修改藥品信息 break; } case 4: { searchbynumber(); //按藥品編號查找 break; } case 5: { sortbyprice();//按藥品單價排序 break; } case 6: { dele(); break; } case 7: { printf(“BYE BYE!n”);system(“pause”);getchar(); exit(0);} } } getchar(); return 0;} 醫院藥房管理系統 1.需求分析 1.1概述 藥品管理主要是藥品管理員對藥品庫存進行的相關管理。在該管理系統中,藥品管理員主要需要對藥品的庫存信息進行記錄,查詢和統計功能。藥品管理是醫院日常管理事務中的重要內容,藥品管理過程的準確性和高效性至關重要。利用計算機高效,準確的特點能夠很好的滿足醫院藥品管理過程的需求,在保證管理過程準確性的基礎上,最大程度地提高管理效率。目前,大多數醫院都已采用醫院管理系統進行醫院藥品管理業務的計算機管理。醫院藥品管理系統主要是為醫院藥品管理人員提供藥品信息的記錄,查詢和統計功能,為管理人員提供重要的信息參考。通過醫院藥品管理系統,管理人員可以對醫院藥品的入庫,出庫以及庫存信息進行管理,系統提供方便的藥品管理信息的查詢和統計功能,能夠滿足醫院藥品管理人員的基本管理需求。1.2 可行性分析 本次課程設計主要是為醫院藥品庫存管理系統設計合理的數據庫,基于所研究的課題是我們日常生活中比較常接觸的,所以從以下三個方面對其可行性進行分析: 經濟可行性:本次課程設計主要在自己的電腦上開發,而且從老師給的初始條件結合平時自己對這個業務的理解,而且我們獲取需求的時候有很多人幫 助。所以在完成這次課程設計的時候基本上沒有什么經濟開銷。所以就經濟可行性而言,我就的我也有能力獨立完成這次課程設計。技術可行性:本次課程設計的核心問題是要為藥品管理系統設計一個理的數據庫。就我學習的數據庫課程中,重點講述的就是如何設計和實現一個合理的數據庫,而且我們在數據庫課程學習的過程中做過實現一個簡單的數據庫的試驗,因此這方面有一定的基礎。這次課程設計主要添加的內容是需要我們自己去進行需求分析,自己從客戶那里獲取相應的功能需求。這一方面的知識我在軟件工程和軟件需求中都有學習,所以是可行的。另一方面,本次課程設計可以使用 1 比較簡單的jsp為數據庫設計相 應的前臺界面。所以就技術而言,可以完成這次課程設計.操作可行性:本次課程設計所做的是藥品管理系統,主要完成的功能是為醫院藥品管理人員提供藥品信息的記錄,查詢和統計功能,為管理人員提供重要的信息參考。鑒于藥品管理員對藥品信息管理已經很熟悉,而且本次課程設計出的數據庫的操作非常簡單,所以操作可行性也沒有什么問題.綜上所述,我覺得我有相應的技術和能力獨立完成本次課程設計,而且我所設計出的數據庫功能齊全,簡單明了,方便客戶使用。所以我認為本次 課程設計是可行的。1.3用戶需求 本次課程設計的主要任務是為藥品管理系統設計一個合理的數據庫,在實現該系統的過程中,必須滿足該系統的基本目標:醫院藥品管理人員提供藥品信息的記錄,查詢和統計功能,為管理人員提供重要的信息參考。我所設計的藥品管理數據庫正是基于這個目標而開發的。在實現該系統的同時,也相應的鍛煉了我們的動手能力,讓我們有機會將課本上的知識運用到實際中來,加深了我們對知識的理解,我認為這也是該系統的目標之一。該系統的主要任務是為了完成醫院藥品管理人員提供藥品信息的記錄,查詢和統計功能,為管理人員提供重要的信息參考。但是基于該系統的功能比較簡單,所以可以在此基礎上相應的增加一些相關的功能:當管理員發現某類藥品的庫存數量低于某個標準時,管理員要聯系供應商購買相應的藥品來補充該藥品的庫存;當醫院的某個部門缺少某類藥品時,需向管理員申請提取相應的藥品時,管理員可以根據該藥品的庫存情況為該部門分配相應數量的藥品。2.開發和運行環境 2.1 網絡邏輯結構 本次課程設計采用B/S模式來實現,B/S模式是三層C/S模式的一種實現方式,其結構為:瀏覽器/WEB服務器/數據庫服務器。其中表示層(瀏覽器)負責處理用戶的輸入和向客戶輸出。功能層(WEB服務器)負責建立數據庫的連接,2 根據用戶的請求生成訪問數據庫的SQL語句,并把結果返回給客戶端。數據層(數據庫服務器)負責實際的數據庫存儲和檢索,響應功能層的數據處理請求,并將結果返回給功能層。在B/S模式中,用戶要運行某個應用程序時只需在瀏覽器上鍵入相應的網址。調用WEB服務器上的應用程序并對數據庫進行操作完成數據處理工作,最后將結果通過瀏覽器返回給用戶。供 應商 藥品管理員 藥品管理數WEB服務器 據庫(mysql)(Tomcat) 醫生 所以用戶的操作非常簡單,而且客戶端要求的配置也不高,這2.2 軟件支撐環境及開發工具 本次課程是我選擇這中模式的主要原因。設計主要是設計一個合理的數據庫,而我的電腦上安裝了Mysql,所以可以在自己的電腦上完成本次課程設計,運行環境為WindowsXP,而且和數據庫的聯系也比較簡單,方便.考慮使用JSP來完成前臺的設計。所以涉及到的工具為:Mysql, Eclipse,WINDOWSXP.3.概念結構設計 3 3.1總體DFD 藥品管理系統中的主要功能是在藥品入庫和藥品出庫時,方便藥品管理員對藥品入庫信息,藥品出庫信息和藥品庫存信息進行查詢和統計的功能。所以該系統主要是對藥品入庫管理和藥品出庫管理進行設計的,所以設計基于藥品入庫管理和藥品出庫管理的數據流圖如下: 藥品入庫單 供應 供應商 藥品庫存信息 提取 部門 藥品出庫單 3.2功能結構 本次課程設計主要是針對醫院藥品管理人員設計的,主要是為了方便藥品管理人員在進行購買藥品時藥品入庫,和提出藥品時藥品出庫時對藥品進行記錄查詢和統計。所以本次課程設計主要分成4個大的功能模塊:用戶管理,藥品的入庫,藥品出庫,庫存清點: 4 醫院藥品管理系統 用藥藥庫戶品品存管供提清理 應 取 點 3.2.1用戶管理 該課程設計中主要有2類用戶,一類是系統管理員,一類是藥品倉庫管理員。其中由于該數據庫主要針對藥品管理員而設計,所以在這里主要講述藥品管理員的功能需求:藥品管理員主要是負責藥品的入庫和藥品的出庫管理和庫存的清點工作。 管理員 用戶管理 供應商 醫生 5 3.2.2供應藥品 供應藥品主要是供應商為藥品倉庫提供藥品補給,其中主要要求藥品管理員對供應清單進行記錄,而后藥品入庫后,會對庫存的藥品產生一定的影響,藥品管理員需對相應的變化對藥品記錄做相應的改變 填寫供應單 保存供應單 供應藥品 編輯入庫藥品信息 藥品入庫 3.2.3提取藥品 提取藥品主要是某個部門申請提取藥品,主要要求藥品管理員對提取單做相應的修改和記錄。而后藥品出庫后,會對庫存的藥品產生一定的影響,藥品管理員需對相應的變化對藥品記錄做相應的改變 填寫提取單 保存提取單 提取藥品 編輯出庫藥品信息 藥品出庫 6 3.2.4庫存清點功能 該功能主要是針對藥品的現有庫存信息進行查詢和統計功能,在每次進行藥品入庫和藥品出庫后藥品的庫存信息將有所改變,所以需要對庫存的藥品進行清點功能,提醒藥品管理員進行藥品入庫或其他操作。庫存信息查詢 庫存信息瀏覽 庫存清點 出庫信息查詢 入庫信息查詢 3.3 局部視圖設計 3.3.1數據字典 數據字典是系統中各類數據描述的集合,是進行詳細的數據收集和數據分析所獲得的主要成果,并且數據字典的內容將在數據庫的設計過程中不斷的修改、充實和完善。數據字典有多種表示方法,在這里,我使用的書上介紹的,一般包含:數據項,數據結構,數據流,這幾個部分。庫存藥品的數據項描述: 數據項名 數據項含義 類型 長度 約束 藥品編號 藥品的編號 int 2 每個藥品有一個唯一的編號 倉庫編號 倉庫的編號 int 2 必須與某個倉庫編號一至 藥品名稱 藥品的名稱 varchar 20 必須是炒菜,湯,煲類之一 藥品種類 藥品的種類 varchar 10 藥品屬于中藥或西藥之一 7 單價 藥品的單價 int 5 必須大于0 生產日期 輸入必須符合日期的格式 藥品的生產日datetime 期 過期日期 藥品的過期日datetime 過期日期必須大于生產日期 期 庫存數量 藥品的數量 int 10 必須大于0 供貨商數據項描述: 數據項名 數據項含義 類型 長度 約束 int 2 每個供貨商有一個唯供貨商編號 供貨商編號 一的編號 名稱 名稱 VARCHAR 20 電話 供貨商電話 bigint 8 地址 供貨商地址 VARCHAR 20 管理員的數據項描述: 數據項名 數據項含義 類型 長度 備注 int 2 每個管理員有唯一一個管理員編號 管理員的編編號 號 VARCHAR 20 姓名 管理員的性VARCHAR 10 性別必須是男或女 性別 別 年齡 廚師的年齡 int 2 0到60之間,60歲退休 倉庫編號 倉庫的編號 int 2 必須與某個倉庫編號一至 藥品倉庫的數據項描述: 數據項名 數據項含義 類型 長度 備注 8 倉庫編號 倉庫的編號 int 2 每個倉庫有唯一一個編號 地址 倉庫的地址 VARCHAR 20 地址不能為空 電話 倉庫的電話 BIGINT 8 電話號碼不能為空 面積 倉庫的大小 int 4 必須大于0 部門數據項描述: 數據項名 數據項含義 類型 長度 約束 部門編號 部門編號 int 2 每個部門有一個唯一的編號 名稱 名稱 VARCHAR 20 電話 供貨商電話 bigint 8 3.3.2 實體-聯系圖 根據上面的功能需求分析過程可以看出,可以將本系統劃分成3個大的功能模塊,所以可以將本系統畫出3個局部E—R圖,如下所示: 由于本次課程設計中沒有涉及到前臺的操作,所以這里畫出藥品管理員這個實體和該實體的屬性: 管理員編性別 名稱 年齡 號 藥品管理員 供應藥品子系統的分E—R圖: 9 n 藥品 庫存 供應商編號 1 名稱 供 n 貨 1 藥品倉庫 供應 地址 商 m 電話 管理 1 藥品管理員 供應標識 時間 供應量 提取藥品子系統的分E—R圖: 10 藥品管理員 n 提取標識 提取時間 庫存 1 提取量 1 藥品倉庫 提取 1 部門編號 n 部門名稱 管理 部門 m 電話 藥品管理員 11 藥品管理系統E—R圖: 供應 標識 提取標識 時間 時間 提取量 供應量 m m 供應 藥品 提取 n n n 庫存 供應商 部門 1 藥品倉庫 1 管理 n 藥品管理員 4.邏輯結構設計 本次課程設計中的邏輯設計采用關系模型來設計,根據概念設計中的E-R圖,將圖中的實體和實體間的關系轉化成關系模式,在將E-R圖轉化成關系模型的時候,由于在我所設計的E-R圖中存在實體間的聯系,根據課本中提到的情況: 藥品管理員(管理員編號,名稱,性別,年齡,倉庫編號)12 藥品倉庫(倉庫編號,地址,電話,面積)庫存藥品(藥品編號,倉庫編號,藥品名稱,藥品種類,庫存數量,單價,生產日期,過期日期) 供應商(供應商編號,名稱,地址,電話) 供應(供應標識,供應商編號,藥品編號,倉庫編號,時間,供應量,單價)13 部門(部門編號,部門名稱,電話) 提取(提取標識,部門編號,藥品編號,倉庫編號,時間,提取量) 5.應用系統界面設計 在把數據庫設計完成之后,轉而投入了實現了前臺界面與后臺數據庫的交互,我此次用的是JSP實現的一個小型界面,這正是B/S模式的體現,通過程序與數據庫連接,可以對數據庫里面的信息進行修改,刪除,查看等操作。1.藥房管理員工作流程如下圖: 14 輸入相應的編號,系統會與數據庫取得聯系,判斷該用戶是哪類用戶,若輸入10則表示是藥房管理員: 選擇要進行的操作,按提交,這里有三種操作供選擇,這里選擇查看庫存信息: 2.供應商的工作流程如下: 輸入編號20表示是供應商,進入界面: 輸入響應信息后,顯示此次的供應單并計算總價: 3.醫生提取藥品的工作流程: 輸入編號30表示是醫生,進入界面: 輸入相應信息后,點顯示此次的 提取單并計算價錢: 6.經驗總結 在這一周的課程設計實習過程中,我的收獲良多。在一周的時間中,其實畫在建立數據庫這個環節上的時間不是很多。在學習數據庫這門課程的時候,我記得書上有講過:“數據庫設計的特點之一是三分技術,七分管理,十二分基礎數據”。在這一周的課程設計中我深有體會,在開始的需求分析和基礎數據的獲取階段我差不多花了3天的時間來收集整理材料,由于我對于醫院的藥品管理這個領域比較陌生,所以花了比較長的時間來了解這個行業的情況和信息。當收集的資料差不多之后,接下來的任務就比較輕松:因為在需求分析階段了解可以將整個系統中劃分成幾個實體,每個實體有什么屬性,以及實體和實體之間有什么聯系。所以在接下來的概念設計中的E—R圖的設計就比較簡單,而且在畫E—R圖的時候就可以大致知道整個系統需要劃分成幾個基本表來實現,所以邏輯設計階段也比較輕松,至于物理階段的設計,使用的是MYSQL數據庫,是出于操作簡單,運行速度快的特點選用的。在把數據庫設計完成之后,轉而投入了實現了前臺界面與后臺數據庫的交互,在這里我使用的是JSP語言,起初對JDBC只有概念上的認識,通過這次設計,我對 JDBC 中的ResultSet,Statement,PreparedStatement等有了很大認識,主要是在設計的時候對出錯原因進行了分析,使得自己對JDBC的理解更加清晰。在本次課程設計過程中,我最大的體會就是了解了一個具體的數據庫設計的過程,以及每個過程之間的緊密聯系和他們不同的重要性。就像前面提到的一樣,在書上看到“數據庫設計的特點之一是三分技術,七分管理,十二分基礎數據”這句話的時候,并沒有引起我什么注意,可是在這次課程設計過程中,我深深的體會到其實要建立數據庫中的幾個基本表其實很容易,難的是從我所不熟悉的現實領域收集提取建立數據庫所需要的基本數據。在這次課程設計中,我了解 17 到將書本上的知識運用到實際中的時候,會使我對原有的知識有更深層次的理解以及掌握。而且通過這次課程設計,我掌握了為某個具體系統建立數據庫的流程和方法,肯定會對我將后的學習和實踐有很大的幫助。7.參考文獻 [1]王珊 編著 數據庫系統簡明教程,高等教育出版社 [2]王智學 等編著 ROSE對象建摸方法與技術,機械工業出版社 18 藥房管理: 藥房劃價: 在藥房管理內找到 藥房劃價 窗口點擊進入,進入后,需選擇 藥房名稱; 進行 藥品劃價 前,需要進行處方類型選擇; 在藥品名后的窗口內輸入需劃價的藥品名稱首拼,進行劃價:(如:阿莫西林顆粒的劃價;只需輸入: a m x l ,點擊空格鍵查詢,在查詢出的藥品信息中選擇相應的藥品的 規格,對于農合報銷的藥品,必須查看藥品是否 保內,如果藥品是保外的,需協同藥房或庫房管理人員進行調解,看藥品是的農合編碼是否能對成保內的,選擇中后點擊回車鍵選擇,在彈出的藥品劃價信息中,操作員只需要輸入其處方信息中需開的 數量。核對一下 價格,若;價格有誤,可在此修改價格,注意:此窗口所調的價格為臨時調價。若需將價格徹底調為最新的價格,需到庫房管理內找到成本調價與零售調價窗口,進行調價方才將價格徹底調過來。核對信息完畢后看,點擊回車鍵確定劃價。 在藥品劃價的過程中,操作員可將藥品的用量、頻次、用法編輯在藥品信息內。 在所有的藥品劃價完畢后,點擊 保存單據。系統將自動生成一個 處方號; 藥房操作員需將處方號編輯于紙張處方單上明顯的地方,方便收費人員能再第一時間查詢到已劃價的藥品信息。 劃價單查詢; 找到劃價單查詢窗口進入 , 選擇藥房位置,常用時間段、查詢條件的設置。 藥品劃價單查詢共分為 已劃價未收費 的處方單據與 已劃價已收費 的處方單據信息。若需 3 要查看已經收費的處方,須將已經收費的標準勾上。點擊查詢。 ( 注:已劃價未收費的單據可作廢或修改藥品信息,增加藥品與刪除藥品。)增加藥品: 門診發藥與住院發藥: 在藥房管理內找到門或住院診發藥窗口點擊進入,在處方號、姓名窗口內,輸入患者的姓名或處方號,點擊 查詢。 選擇需發藥的患者藥品信息。點擊發藥按鈕。系統自動藥發出去,相應的藥品庫存將自動減少。 注:住院發藥流程與門診一致不同的是住院發藥可輸入患者的住院號: 門診退藥: 步驟:藥房管理內找到門診退藥窗口,點擊進入,在處方號后的小窗口內輸入 處方號(輸入的處方只要求輸入后四位即可)。點擊空格鍵查找,操作員也可直接點擊空格鍵,查詢出需退藥的患者姓名。選擇后點擊回車鍵,點擊 查詢 按鈕。 確定與處方信息一致后。點擊確定退藥按鈕,系統會自動將藥品退回藥房。(注:門診退藥為全退。) 住院退藥: 步驟:藥房管理內找到住院退藥窗口,點擊進入,在處方號后的小窗口內輸入 住院號或者處方號(輸入的處方只要求輸入后四位即可)。點擊空格鍵查找,操作員也可直接點擊空格鍵,查詢出需退藥的患者姓名。選擇后點擊回車鍵 點擊查詢按鈕。 在查詢出藥品信息后,若只需退其中一種藥品,可點擊藥品名稱,在自動彈出的窗口內編輯需退的藥品 數量,點擊回車鍵保存退藥信息 系統根據編輯所退的數量自動生成退藥的數量,在退要信息窗口內會自動生成選重的藥品信息。,退藥信息編輯完畢后;點擊確定退藥按鈕。 若需要將整張處的藥品信息全退的,可點擊全退按鈕。再點擊確定退藥按鈕。 注:住院退藥可全退,可單獨退某一種藥品信息。 源程序: # include #define MAX 60 //下列字符數組的大小 struct Date{//日期 char year[MAX];//年 char month[MAX];//月 char day[MAX];//日 };struct Goods{//藥品信息 char name[MAX];//藥品名稱 char price[MAX];//藥品價格 char number[MAX];//藥品數量 char cost[MAX];//藥品總價 char kind[MAX];//藥品的種類 Date indate;//入庫日期 Date xiaoqi;//到期時間 Goods * next;//下一個結點 }; class Cangkuguanli { //類定義與實現 private: int length;//客戶數量 Goods * head;//列表的頭結點 Goods * current;//當前結點 public: Cangkuguanli()//構造函數 { head=new Goods;//創建頭結點 current=head; current->next=NULL; length=0;//長度為0 } void Creatlist()//創建新的列表 { char g='Y'; int s=0; length=0;//初始長度為0; current=head; do { Goods * temp=new Goods;//構建新結點信息 length++;//每加一個結點 鏈表長度增1 temp->next=NULL; cout<<“ 請輸入藥品名稱: ”; cin>>temp->name; cout<<“ 請輸入單價 : ”; cin>>temp->price; cout<<“ 請輸入藥品數量: ”; cin>>temp->number; cout<<“ 請輸入總費用 : ”; cin>>temp->cost; cout<<“ 請輸入日期(**** ** **): ”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“ 請輸入藥品有效期(**** ** **):”; cin>>temp->xiaoqi.year>>temp->xiaoqi.month>>temp->xiaoqi.day; cout<<“ 請輸入藥品種類: ”; cin>>temp->kind; if(head==NULL){head=temp;current=temp;} //head頭指針,current尾指針 else {current->next=temp,current=temp;} do{ cout<<“ next ?(Y N)”;//是否繼續存入新產品 cin>>g; if(g!='Y'&&g!='N') { cout<<“n error!!n ”; } }while(g!='Y'&&g!='N'); }while(g=='Y');//判斷是否繼續插入新結點 } void Open()//打開一個數據文件,并建立鏈表關聯 和文件中的記錄對應 { char fname[20];//文件名稱 cout<<“ input the name of the file n”; cin>>fname;//輸入要打開的文件名 ifstream infile(fname);//創建輸入文件流 infile>>length; cout<<“n length is: ”< //if(length==0)cout<<“ 數據為空n”; for(int i=0;i { Goods * t=new Goods; t->next=NULL; infile>>t->name>>t->price>>t->number>>t->cost>>t->kind>> t->indate.year>>t->indate.month>>t->indate.day; if(head==NULL){head=t;current=t;}//跟上面的鏈表創建相似 else {current->next=t,current=t;} } infile.close();//關閉文件流 }//open void Save()//保存鏈表信息到文件 { if(length==0) { cout<<“ 列表為空 不需存盤 n”; return; } char fname[20];//文件名稱 cout<<“ input the name of the file you want to put data in n”; cin>>fname; ofstream outfile(fname);//創建輸出文件流 Goods * temp=head->next; outfile< while(temp!=NULL)//把所有結點寫入到文件fname { outfile< << “ ”< //寫入每個結點信息 temp=temp->next; } outfile.close();//關閉文件流 } void printinfor(Goods * current)//輸出一個結點的信息到字符界面 { if(current==NULL) { cout<<“n元素為空!!n ”;return; } cout.fill(' ');cout< cout.width(8); cout.width(8);cout< cout< cout.width(10);cout< void Show()//輸出所有結點信息到字符界面 { current=head->next;if(current==NULL){ cout<<“列表為空 n”;return;} cout.fill(' ');cout.width(2);cout<<“名稱”; cout.width(8);cout<<“價格”;cout.width(8);cout<<“數量”;cout.width(8);cout<<“總費用”;cout.width(10);cout<<“藥品的種類”;cout.width(15);cout<<“購進時間”;cout.width(15);cout<<“有效期”;cout< //循環輸出所有結點 printinfor(current); current=current->next;} }//show Goods *Searchindate(Date t){ //按購入日期搜索 返回結點指針temp //結構體t含有t.year t.month t.day三個信息塊 Date d;bool f=false;Goods * temp;current=head->next; while(current!=NULL) { d=current->indate; if(!strcmp(d.year,t.year)&&!strcmp(d.month,t.month)&&!strcmp(d.day,t.day)) { temp=current; f=true; break; } current=current->next; } if(f==false) { cout<<“n 沒有滿足要求的信息 n”; return NULL; } return temp;} void Queryindate()//按入庫日期查詢 { Date t;cout<<“ input the date(**** ** **): ”;cin>>t.year>>t.month>>t.day; printinfor(Searchindate(t));}//Queryindate()Goods * Searchname(char r[])//搜索藥品名 返回結點指針temp { Goods * temp; current=head->next;bool f=false; while(current!=NULL) { if(strcmp(current->name,r)==0) { temp=current; f=true; break; } current=current->next; } if(f==false) { cout<<“n 商品名為 : ”< return NULL; } return temp;} void Queryname()//按藥品名查詢 { char r[MAX];cout<<“ input the name: ”;cin>>r;printinfor(Searchname(r));} void Query()//查詢函數 一個次級菜單 { char m;do{ cout<<“ ********************************************************** ”< cout<<“******* 按入庫的時間查詢 ***********”< cout<<“******* 按藥品的名稱查詢 ***********”< cout<<“******* ***********”< case 'a': Queryindate();break;case 'b': Queryname();break; case 'c': return;default: cout<<“error!”;} }while(m!='h');}//Query void Removebynumber()//按總量刪除某個結點 { char t[MAX];//需要刪除的總量值 bool f=false;//表示是否找到滿足要求的結點 Goods * temp;//指向找到的結點,并刪除 cout<<“ 請輸入藥品的數量: ”; cin>>t; current=head; while(current->next!=NULL) { if(strcmp(current->next->number,t)==0)//判斷是否滿足條件 { temp=current->next; current->next=temp->next; length--;//沒刪除一個結點,鏈表長度減1 f=true; delete temp;//釋放結點 cout<<“已刪除此藥品n”; //break; 此處屏蔽break,也就是說找到第一個滿足條件的結點,并不退出循環,而是繼續刪除 } else{ current=current->next; } } if(f==false)//false沒有改動,表示沒有滿足條件的結點 { cout<<“此藥品不存在 ,無須刪除 n”; } }//Removebynumber void Removebyname()//按名稱刪除某個結點 { char t[20]; bool f=false;; Goods * temp; cout<<“ 請輸入藥品的名稱:”; cin>>t; current=head; while(current->next!=NULL) { if(strcmp(current->next->name,t)==0) { temp=current->next; current->next=temp->next; length--; f=true; delete temp;cout<<“已刪除此藥品n”;//break;此處屏蔽break,也就是說找到第一個滿足條件的結點,并不退出循環,而是繼 續刪除 } else{ current=current->next; } } if(f==false) { cout<<“此藥品不存在 ,無須刪除 n”; } }//Removebyname void Removebyindate()//按購進時間刪除某個結點 { Date t,d; bool f=false; Goods * temp; cout<<“ 請輸入查找藥品的日期: ”; cin>>t.year>>t.month>>t.day; current=head; while(current->next!=NULL) { d=current->next->indate; if(d.year==t.year&&d.month==t.month&&d.day==t.day) { temp=current->next; current->next=temp->next; length--; f=true; delete temp;cout<<“已刪除此藥品n”; } else{ current=current->next; } } if(f==false) { cout<<“此元素不存在 ,無須刪除 n”; } }//Removebyindate void Remove()//刪除函數 { char g='Y'; do{ cout<<“ ********************************************************** ”< ***********”< ***********”< ***********”< ***********”< case 'a': Removebynumber();break;case 'b': Removebyname();break;case 'c': Removebyindate();break;case 'd': return;default: cout<<“error!”;} } while(g!='d');} void Add(){ Goods * temp;current=head;while(current->next!=NULL)//找到尾指針 { current=current->next;} temp=new Goods;temp->next=NULL;length++;//鏈表長加1 cout<<“ 請輸入藥品名稱: ”; cin>>temp->name; cout<<“ 請輸入單價 : ”; cin>>temp->price; cout<<“ 請輸入藥品數量 : ”; cin>>temp->number; cout<<“ 請輸入總費用 : ”; cin>>temp->cost; cout<<“ 請輸入入購日期(**** ** **)”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“請輸入有效期(**** ** **)”; cin>>temp->xiaoqi.year>>temp->xiaoqi.month>>temp->xiaoqi.day; cout<<“ 請輸入藥品的種類:”< cin>>temp->kind; current->next=temp;//這時current指向尾指針,將要插入的結點接到current后面 current=temp;}//add void Modify(){//通過藥品名找到要修改的數據項 char n[MAX];cout<<“請輸入您要修改的藥品名:”< Goods * temp=Searchname(n);//按商品名查找 cout<<“ 請輸入單價:”; cin>>temp->price; cout<<“ 請輸入藥品的總費用:n”; cin>>temp->cost; cout<<“ 請輸入日期(**** ** **):n”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“ 請輸入藥品的數量:n”; cin>>temp->number; cout<<“ 請輸入藥品的種類:n”; cin>>temp->kind;} void operation(){ char g='Y';do{ cout<<“t”;cout.fill('*');cout.width(21);cout<<'*';cout<<“醫院藥房管理系統”;cout.fill('*');cout.width(19);cout<<'*'; cout<<“n”; cout<<“t********************************************************n”; cout<<“t MWDICINE STORE MANAGEMENT SYSTERMn”; cout<<“t********************************************************n”;cout<<“t && && &&&&&&&&&&&&&&& cout<<”t && && &&&&&&&&&&&&&&& n“;n”; cout<<“t && && &&& n”; cout<<“t && && &&& n”; cout<<“t && && &&&&&&&&&&&&&&& n”; cout<<“t && && &&&&&&&&&&&&&&& n”; cout<<“t &&& &&& n”; cout<<“t &&& &&& n”; cout<<“t &&& &&& n”; cout<<“t &&& 退出 &&& n”; cout<<“t********************************************************n”; cout<<“t********************************************************n”;cout<<“t”;cout.fill('*');cout.width(18);cout<<'*';cout<<“醫院藥房管理系統”;cout.fill('*');cout.width(22);cout<<'*';cout< cin>>g;switch(g){ case 'C': Creatlist();break;case 'A': Add();break;case 'M': Modify();break;case 'D': Show();break;case 'Q': Query();break;case 'R': Remove();break;case 'O': Open();break;case 'S': Save();break;case 'N': system(“cls”);break;case 'E': return;default: cout<<“ error! input the right character!!!n”;}//switch }while(g!='E');}//operation };//Cangkuguanli int main(){ Cangkuguanli A; A.operation();return 0;} #include “stdio.h” #include “string.h” #define N 20 struct mem { char name[20]; char tel[20]; char wu[20]; char dz[20];}mem[N];void sorttel(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){ printf(“不能打開文件n”);} for(i=0;i for(j=0;j if(strcmp(mem[j+1].tel,mem[j].tel)<0) { temp=mem[j]; mem[j]=mem[j+1]; mem[j+1]=temp; } for(i=0;i void sortname(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){ printf(“不能打開文件n”);} for(i=0;i for(j=i+1;j if(strcmp(mem[j].name,mem[i].name)<0) { temp=mem[i]; mem[i]=mem[j]; mem[j]=temp; } for(i=0;i void sor(){int k; do{printf(“--------------------排序菜單-------------------n”); printf(“------------------------n”); printf(“ 1:按號碼排序n”); printf(“ 2:按姓名排序n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“請輸入0-2選擇功能n”); scanf(“%d”,&k);getchar(); switch(k) { case 1:sorttel(mem);break; case 2:sortname(mem);break; case 0:return; } }while(1);} void add(){ char name[10];char tel[10]; char wu[10]; char dz[10];FILE *fp;if((fp=fopen(“c: elephone.txt”,“a”))==NULL){ printf(“不能打開文件n”); exit(0);} printf(“請輸入姓名”); gets(name); printf(“請輸入電話號碼”); gets(tel); printf(“請輸入工作單位”); gets(wu); printf(“請輸入地址”); gets(dz);printf(“n”); fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz); fclose(fp);} void del(){ FILE *fp; int i=0,n; char name[10]; printf(“請輸入刪除名字”); gets(name); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)!=0)i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打開文件n”); exit(0);} for(n=0;n fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“ 姓名 電話號碼 工作單位 地址n”); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) {fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;} fclose(fp); n=i; for(i=0;i printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10]; printf(“請輸入要修改的姓名”);gets(name);printf(“請輸入修改后的姓名”);gets(nn);printf(“請輸入修改后的電話號碼”);gets(nt);printf(“請輸入修改后的工作單位”);gets(nwu);printf(“請輸入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)==0) {strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);} i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打開文件n”); exit(0);} n=i; for(i=0;i fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); fclose(fp);} void main(){ int choose; while(1) { printf(“--------------------電話簿管理系統--------------------n”); printf(“------------------------n”); printf(“ 1:添加一個新號碼n”); printf(“ 2:刪除一個號碼n”); printf(“ 3:顯示所有保存的號碼n”); printf(“ 4:修改號碼n”); printf(“ 5:排序n”); printf(“ 6:查詢n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“請輸入0-6選擇功能n”); scanf(“%d”,&choose);getchar(); if(choose!=0) switch(choose) { case 1:add();break; case 2:del();break; case 3:dis();break; case 4:mod();break; case 5:sor();break; case 6:/*que();break*/; } else exit(0); } }第二篇:醫院藥房管理系統
第三篇:藥房管理:
第四篇:源程序(醫院藥房藥品管理系統C++)
保存文件 藥品查詢
第五篇:c語言 電話簿管理系統