初學c語言,下面是一個簡易的藥房系統
如何讓他的背景不是黑色填充,添加背景圖
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct medicine
{
char name[20];
char number[50];
char price[50];
char inventory[50];
char brand[20];
} medicine[100];
int num;
int menu_select()
{
char s[80];
int a;
system("cls");
printf("\t\t------------- 您好!您已進入藥房管理系統 -----------\n\n");
printf("\t\t\t1. 輸入藥品資訊 \n");
printf("\t\t\t2. 查看藥品資訊 \n");
printf("\t\t\t3. 修改藥品資訊 \n");
printf("\t\t\t4. 按編號查找藥品 \n");
printf("\t\t\t5. 按價格排序 \n");
printf("\t\t\t6. 洗掉藥品資訊 \n");
printf("\t\t\t7. 退出\n");
printf("\t\t------------------------------------------\n\n");
do{
printf("Enter you choice(1~7):");
scanf("%s",s);
a=atoi(s);
}
while (a<1 || a>7);
return a;
}
int addmedicine()
{
printf("\t\t\t-------------- 請輸入您要保存的資訊 ------------\n");
printf("\t\t\t 輸入藥品名稱 :\n");
scanf("%s",medicine[num].name);
printf("\t\t\t 輸入藥品編號 :\n");
scanf("%s",medicine[num].number);
printf("\t\t\t 單價:\n");
scanf("%s",medicine[num].price);
printf("\t\t\t 品牌:\n");
scanf("%s",medicine[num].brand);
printf("\t\t\t 庫存數量 :\n");
scanf("%s",medicine[num].inventory);
num++;
printf("\t\t\t 是否繼續添加 ?(Y/N):\n");
if(getch()=='y' || getch()=='Y')
addmedicine();
return(0);
}
void modifybyname()
{
char c;
int i,mark=0;
char name[20];
printf("\n\t\t 請輸入要修改的藥品名稱: ");
scanf("%s",name);
if(num==0)
{
printf("\n\t\t 檔案中無相關藥品 ");
printf("\n\t\t 按任意鍵回傳主選單 ");
getch(); mark++;
return;
}
for(i=0;i<num;i++)
{
if(strcmp(medicine[i].name,name)==0)
{
printf("\n\t\t 以下是您要修改的藥品資訊 ");
printf("\n\t\t 藥品名稱 : %s",medicine[i].name);
printf("\n\t\t 藥品編號 : %s",medicine[i].number);
printf("\n\t\t 單價: %s",medicine[i].price);
printf("\n\t\t 品牌: %s",medicine[i].brand);
printf("\n\t\t 庫存數量 : %s",medicine[i].inventory);
printf("\n\t\t 是否修改 (y/n)");
if(getch()=='y')
{
printf("\n\t---------------------- 請選擇修改資訊 -------------------------");
printf("\n\t 1-修改藥品名稱 ");
printf("\n\t 2-修改藥品編號 ");
printf("\n\t 3-修改單價 ");
printf("\n\t 4-修改品牌 ");
printf("\n\t 5-修改庫存數量 ");
printf("\n\t--------------------------------------------------------------------------");
printf("\n\t 請選擇您所要的服務: ");
scanf("%s",&c);
switch(c)
{
case '1': printf("\n\t 請輸入新藥品名稱: ");
scanf("%s",medicine[i].name);break;
case'2':printf("\n\t 請輸入新藥品編號: %s");
scanf("%s",medicine[i].number);break;
case'3':printf("\n\t 請輸入新單價 : ");
scanf("%s",medicine[i].price);break;
case'4':printf("\n\t 請輸入新品牌 : ");
scanf("%s",medicine[i].brand);break;
case'5':printf("\n\t 請輸入新庫存數量 : ");
scanf("%s",medicine[i].inventory);break;
}
}
}
}
if(mark==0)
{
printf("\n\t\t 藥品資訊修改完畢 ");
printf("\n\t 是否繼續修改? (Y/N):");
if(getch()=='y')
modifybyname();
return;
}
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t---------- 已為您顯示所有藥品資訊 ----------\n");
for (i=0;i<num;i++)
{
printf("\t\t\t 藥品名稱: %s\n",medicine[i].name);
printf("\t\t\t 藥品編號: %s\n",medicine[i].number);
printf("\t\t\t 單價: %s\n",medicine[i].price);
printf("\n\t\t 品牌 : %s\n",medicine[i].brand);
printf("\t\t\t 庫存數量: %s\n",medicine[i].inventory);
if(i+1<num)
{
system("pause");
}
}
printf("\t\t\t------------------------------\n");
}
else
printf("\t\t\t 系統中無任何記錄 \n");
printf("\t\t\t 按任意鍵回傳主選單: \n");
getch();
return;
}
int searchbyname()
{
int mark=0;
int i;
printf("\t\t\t---------- 按藥品名稱查找 ----------\n");
char name[20];
printf("\t\t\t 請輸入藥品名稱 :\n");
scanf("%s",name);
for(i=0;i<num;i++)
{
if (strcmp(medicine[i].name,name)==0)
{
printf("\t\t\t------- 以下是您查找的藥品資訊 -------\n");
printf("\t\t\t 藥品名稱: %s",medicine[i].name);
printf("\t\t\t 藥品編號: %s",medicine[i].number);
printf("\t\t\t 單價: %s",medicine[i].price);
printf("\n\t\t 品牌: %s",medicine[i].brand);
printf("\t\t\t 庫存數量: %s\n",medicine[i].inventory);
printf("\t\t\t------------------------------------------------------\n");
mark++;
if((i+1)<num)
{
printf("\t\t\t 是否繼續查找相同名稱的藥品資訊: (y/n)\n");
if(getch()=='y' || getch()=='Y')
{
continue;
}
else
return(0);
}
else
{
printf("\t\t\t 請按任意鍵回傳主選單 ");
getch();
return(0);
}
}
}
if(mark == 0)
{
printf("\t\t\t 沒有您要查找的藥品記錄 \n");
printf("\t\t\t 請按任意鍵回傳主選單 \n");
getch();
return(0);
}
return 0;
}
int searchbynumber()
{
int mark=0;
int i;
printf("\t\t\t--------------- 按藥品編號查找 --------------\n");
char number[10];
printf("\t\t\t 請輸入藥品編號 :\n");
scanf("%s",number);
for(i=0;i<num;i++)
{
if (strcmp(medicine[i].number,number)==0)
{
printf("\t\t\t--------------- 以下是您查找的藥品資訊 ---------------\n");
printf("\t\t\t 藥品名稱: %s",medicine[i].name);
printf("\t\t\t 藥品編號: %s",medicine[i].number);
printf("\t\t\t 單價: %s",medicine[i].price);
printf("\n\t\t 品牌: %s",medicine[i].brand);
printf("\t\t\t 庫存數量: %s\n",medicine[i].inventory);
printf("\t\t\t-------------------------------------------------\n");
printf("\t\t\t 請按任意鍵回傳主選單 \n");
mark++;
getch();
return(0);
}
}
if (mark==0)
{
printf("\t\t\t 沒有改藥品的資訊 \n");
printf("\t\t\t 請按任意鍵回傳主選單 \n");
getch();
return(0);
}
return(0);
}
void deletebynumber()
{
int i,j;
int deletemark=0;
char number[20];
printf("\t\t\t 請輸入要洗掉藥品編號: \n");
scanf("%s",number);
if(num==0)
{
printf("\t\t\t 對不起,系統中無任何記錄 \n");
printf("\t\t\t 請按任意鍵回傳主選單 \n");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(medicine[i].number,number)==0)
{
printf("\t\t\t 以下是您要洗掉的用戶記錄: \n");
printf("\t\t\t 藥品名稱: %s",medicine[i].name);
printf("\t\t\t 藥品編號: %s",medicine[i].number);
printf("\t\t\t 單價: %s",medicine[i].price);
printf("\n\t\t 品牌 : %s",medicine[i].brand);
printf("\t\t\t 庫存數量: %s\n",medicine[i].inventory);
printf("\t\t\t 是否洗掉 ?(y/n)");
if (getch()=='y' || getch()=='Y')
{
for (j=i;j<num-1;j++)
medicine[j]=medicine[j+1];
num--;
deletemark++;
printf("\t\t\t 洗掉成功 ");
printf("\t\t\t 是否繼續洗掉 ?(y/n)");
if (getch()=='y' || getch()=='Y')
deletebynumber();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\t\t\t 沒有該藥品的記錄 ");
printf("\t\t\t 是否繼續洗掉 ?(y/n)");
if(getch()=='y' || getch()=='Y')
deletebynumber();
return;
}
return;
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\t\t\t 請輸入要洗掉藥品名稱: \n");
scanf("%s",name);
for (i=a;i<num;i++)
{
if(strcmp(medicine[i].name,name)==0)
{
printf("\t\t\t 以下是您要洗掉的藥品資訊: ");
findmark++;
printf("\t\t\t________________________________");
printf("\t\t\t 藥品名稱: %s",medicine[i].name);
printf("\t\t\t 藥品編號: %s",medicine[i].number);
printf("\t\t\t 單價: %s",medicine[i].price);
printf("\n\t\t 品牌 : %s",medicine[i].brand);
printf("\t\t\t 庫存數量: %s\n",medicine[i].inventory);
printf("\t\t\t________________________________");
printf("\t\t\t 是否洗掉 ?(y/n)");
if (getch()=='y' || getch() == 'Y')
{
for(j=i;j<num-1;j++)
medicine[j]=medicine[j+1];
num--;
deletemark++;
printf("\t\t\t 洗掉成功 ");
if((i+1)<num)
{
printf("\t\t\t 是否繼續洗掉相同名稱的藥品資訊 ?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\t\t\t 是否繼續洗掉 ?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("\t\t\t 是否繼續洗掉相同名稱的藥品資訊 ?(y/n)");
if (getch()=='y' || getch() == 'Y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\t\t\t 沒有該藥品的記錄 ");
printf("\t\t\t 是否繼續洗掉 ?(y/n)");
if(getch()=='y' || getch() == 'Y')
deletebynumber();
return;
}
else if (findmark!=0)
{
printf("\t\t\t 沒有重名資訊 ");
printf("\t\t\t 沒有該藥品的記錄 ");
printf("\t\t\t 是否繼續洗掉 ?(y/n)");
if(getch()=='y' || getch() == 'Y')
deletebynumber();
return;
}
}
int dele()
{
char choic;
printf("\t\t\t1- 按藥品編號洗掉 2-按藥品名稱洗掉 ");
printf("\t\t\t 請選擇: ");
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<num;i++)
{
if(strcmp(medicine[i].price,medicine[i-1].price)<0)
{
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("\t\t\t 排序成功 ,是否顯示 ?(y/n)");
if (getch()=='y')
list();
return(0);
}
int main()
{
printf("\t\t---------------------------------------------------------\n");
printf("\t\t---------Welcome to management system ----------\n");
printf("\t\t----------Made By FACE CARD-------------\n");
printf("\t\t---------------------------------------------------------\n");
printf(" 請按任意鍵進入主選單 :)\n");
getch();
int selectnum;
while(1)
{
selectnum = menu_select();
switch(selectnum)
{
case 1:
{
addmedicine();
break;
}
case 2:
{
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;
}
uj5u.com熱心網友回復:
改變背景顏色還容易些,放個背景圖比較復雜uj5u.com熱心網友回復:
這只是個控制端程式,運行時調出來的背景可不是C代碼控制的。如果是覺得不好看,想做成界面化得,你得用那種java, C++ builder等支持圖形化編程的工具
uj5u.com熱心網友回復:
如果你想改背景顏色,是可以的,但是你寫的再長也是控制臺程式,想添加背景圖,就得做圖形開發啦,學學Qt或C++Builder,不行的話Python簡單uj5u.com熱心網友回復:
改變控制臺背景顏色及輸出資訊顏色《VS2015中修改控制臺背景及輸出字體顏色》
類似如下圖

希望能夠幫到你!
uj5u.com熱心網友回復:
添加背景圖有點難度,起碼需要圖片決議,改變顏色是可行的。能控制顯示資訊,主要是gdi模塊在起作用,更下面是通過像素操作framebuf空間。如果需要添加圖片,最好使用gui框架,如:mfc,minigui,qt等等。
uj5u.com熱心網友回復:
你好,控制臺添加背景圖這怕不是小白能搞得,你需要基于對話框的應用程式,比如Qt或Vc,而不是控制臺應用程式。uj5u.com熱心網友回復:
背景圖參考C++ Builder 6.0幾個示例程式專案源代碼下載:





C++ Builder第一個程式(模擬聊天室)v1.11
C++ Builder模擬數字雙時鐘示例(未完成)v0.2.1
C++ Builder紙牌游戲Demo v0.03
C++ Builder不規則影像透明貼圖(位圖的透明顯示)三種方法及簡單影片v1.3
C++ Builder寫的《ZEC 四則運算練習程式》 海底海星情景v0.9.2
C++ Builder是真正的可視化的開發工具。C++ Builder可以用滑鼠拖拉控制元件加上設定屬性輕松的“設計”出一個程式的圖形用戶界面,利用可視的組件/控制元件像“搭積木”一樣,以“所見即所得”的方式搭建應用程式的界面,這也是C++ Builder這個名字中Builder的概念。這樣,只需要用C++語言撰寫業務邏輯代碼,類似于DOS下文本界面編程,只要專注于實作業務邏輯功能就可以了,代碼非常簡潔。資料的輸入和表現,都在圖形用戶界面,非常直觀、易用。這就是RAD開發(Rapid Application Development,快速應用程式開發)。
書籍推薦:
《C++Builder 6程式設計教程(第二版)》 (陸衛忠,劉文亮 等編著 /2011-04-01 /科學出版社)(當當網)
《C++Builder 6編程實體精解》(趙明現),PDF,是數字版的,非掃描版的,里面還有一個俄羅斯方塊游戲的完整實作。
《精彩C++Builder 6程式設計》(臺灣 吳逸賢),里面有10幾個簡單小游戲的實作,可以自己看懂以后再重寫,才是自己掌握的。
《C++ Builder 5高級編程實體精解》(劉濱 編著)都是較大的實用的程式。
uj5u.com熱心網友回復:

C++ Builder簡單電話簿Demo例子v1.11
uj5u.com熱心網友回復:
控制臺添加背景圖建議使用GDI繪圖由GetConsoleWindow和GetDC獲取畫圖設備
再由LoadBitmap或LoadImage加載圖片,然后繪圖
不過這樣的話文本輸出只能用TextOut或DrawText了
uj5u.com熱心網友回復:
#include "windows.h"
HBITMAP hbitmap=NULL;
//加載一張bmp圖片
void LoadMyBitmap( char* FileName )
{
hbitmap = LoadImage( NULL, FileName, 0, 0, 0, LR_LOADFROMFILE );
}
//在控制臺視窗上繪制之前加載的圖片
void DrawBitmapInConsole( void )
{
BITMAP bitmap;
GetObject( hbitmap , sizeof(BITMAP), &bitmap );
HWND hwnd = GetConsoleWindow();
HDC hdc = GetDC( hwnd );
HDC mdc = CreateCompatibleDC( hdc );
SelectObject( mdc, hbitmap );
BitBlt( hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, mdc, 0, 0, SRCCOPY );
ReleaseDC( hwnd, hdc );
DeleteDC( mdc );
}
int main( void )
{
LoadMyBitmap( "背景.bmp" );
while( 1 )
{
DrawBitmapInConsole();
Sleep(300);
}
return 0;
}
效果如下(設定控制臺視窗上):

準備一張bmp圖片,將它的檔案名(不和exe同一目錄則用絕對路徑或相對路徑)傳給LoadMyBitmap。繪圖前這樣加載一次就行。然后回圈時每次先呼叫一次DrawBitmapInConsole()。這兩個函式你照抄就行了。效果不是很好。對于控制臺視窗寬高和圖片不符的情況,你可以用MoveWindow或system函式修改控制臺視窗的大小以適應圖片。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72807.html
標籤:C語言
上一篇:Win10不創建有根的組播嗎?
