當前位置:編程學習大全網 - 源碼下載 - 全部2000分 求c語言高手 幫我 做個小程序

全部2000分 求c語言高手 幫我 做個小程序

樓主貌似問過這個問題了吧,不是已經結帖了嗎?

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename( "EOF", "adoEOF" )//必需自帶dll庫函數

#include <ole2.h>

#include <stdio.h>

#include <conio.h>

#include "string.h"

#include <malloc.h>

#include <stdlib.h>

#include <windows.h>

struct MYDATE{//自定義時間結構體。

int YEAR;

int MONTH;

int DAY;

};

inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};

void ItemX(int select);//數據庫操作

BOOL saveFile(char* bookID,char *time,float price);//保存文件

BOOL DeleteFile(char* bookID,MYDATE data,float price);//刪除文件記錄,再保存

void PrintProviderError(_ConnectionPtr pConnection);//數據庫出錯處理

void PrintComError(_com_error &e);//數據庫出錯處理

void Begin(int &select);//起點

char* left(char *pch,int len);//字符串取左位

char* right(char *pch,int len);

int findString(char *pch,char *temp);//字符串取相同字符首地址。

int main(int argc, char* argv[])

{

if(FAILED(::CoInitialize(NULL)))

return 0;

int select=-1;

Begin(select);

//Wait here for the user to see the output

printf("謝謝使用.\n本軟件只提供學習參考,不得用於其它商業軟件.\nEmail:worldk@163.com\n"

"Press any key to continue...\n");

getch();

::CoUninitialize();

return 0;

}

BOOL saveFile(char* bookID,char *time,float price)/*int x,int y,MYDATA data)*/

{

char buff[100];FILE *file;char* strfile="\0";

WIN32_FIND_DATA FindFileData;

HANDLE hFind;

hFind = FindFirstFile("borrow.dat", &FindFileData);

if (hFind == INVALID_HANDLE_VALUE) {

printf ("未找到文件 %d\n", GetLastError ());

} else {

FindClose(hFind);

memset(buff,0,100);

file=fopen("borrow.dat","rb");

fseek(file,0,SEEK_END);

int len=ftell(file);

strfile=new char[len];

rewind(file);

fread(strfile,1,len+1,file); strfile[len]='\0';

fclose(file);

}

file=fopen("borrow.dat","wb");

//編號、租借日期、押金。略……x,y,data運算自加

fseek(file,0,SEEK_END);

sprintf(buff,"%s,%s,%.2f\n",bookID,time,price*3);

fwrite(buff,1,strlen(buff),file);

fwrite(strfile,1,strlen(strfile),file);

fclose(file);

printf("寫入文件成功\n");

return TRUE;

}

int findString(char *pch,char *temp)

{

int len=strlen(pch);

int templen=strlen(temp);

printf("%d\t",len);

int pos=0;

char* pch1=pch;

char *pch2=temp;

while(*pch1)

{

for(int i=0;i<templen;i++)

{

if(*(pch1+i)!=temp[i])

break;

}

if(i==templen)

return pos;

pch1++;

pos++;

}

return -1;

};

char* left(char *pch,int len)

{

char* pch1=(char *)malloc( _MAX_PATH );

strcpy(pch1,pch);

pch1[len]='\0';

return pch1;

}

char* right(char *pch,int len)

{

char* pch1=(char *)malloc( _MAX_PATH );

strcpy(pch1,pch);

pch1+=len;

return pch1;

}

BOOL DeleteFile(char* bookID,MYDATE data,float price)/*int x,int y,MYDATA data)*/

{

char buff[100];FILE *file;char* strfile="\0";

WIN32_FIND_DATA FindFileData;

HANDLE hFind;

hFind = FindFirstFile("borrow.dat", &FindFileData);

if (hFind == INVALID_HANDLE_VALUE) {

printf ("未找到文件 %d\n", GetLastError ());//未找到文件

return FALSE;

} else {

FindClose(hFind);

memset(buff,0,100);

file=fopen("borrow.dat","rb");

fseek(file,0,SEEK_END);

int len=ftell(file);

strfile=new char[len];

rewind(file);

fread(strfile,1,len+1,file); strfile[len]='\0';

fclose(file);

}

sprintf(buff,"%s,%d-%d-%d",bookID,data.YEAR,data.MONTH,data.DAY);

int pos=findString(strfile,buff);

if(pos==-1)

{

printf("文件中沒有這條記錄\n");

return FALSE;

}

char choose;

int pos2=0;

printf("%s ,單價%.2f 找到\n",buff,price);

//編號、租借日期、押金。略……x,y,data運算自加

switch(*bookID)

{

case 'b':printf("資費1元\/日\n");break;

case 'v':printf("資費2元\/日\n");break;

case 'r':printf("資費3元\/日\n");break;

default:printf("不詳\/日\n");break;

}

do

{

fflush(stdin);

printf("是否刪除(Y/N)\n");

scanf("%c",&choose);

}while(!(choose=='Y' || choose=='y' ||choose=='n' || choose=='N'));

if(choose=='n' || choose=='N')

return FALSE;

char *strlef=(char *)malloc( _MAX_PATH );;

char *pch1=NULL;

if(pos==0) strlef="\0";

else

{

strlef=left(strfile,pos);

strlef[pos-1]='\0';

}

char *strright=right(strfile,pos);

pch1=strchr(strright,'\n');

if(pch1==NULL)

{

printf("找字符串錯誤,文件操作\n");

return FALSE;

}

char * temp;

temp=strlef;

if(pos!=0) strcat(temp,pch1);

else temp=pch1+1;

file=fopen("borrow.dat","wb");

/* fwrite(temp,1,strlen(temp),file);

// fwrite(strfile,1,strlen(strfile),file);

*/

fwrite(temp,1,strlen(temp),file);

fclose(file);

printf("文件刪除記錄成功\n");

return TRUE;

}

void Begin(int &select)

{

select=-1;

do{ printf( "|----------------------------------------------| \n"

"| 請輸入選項編號(0——5): |\n"

"|----------------------------------------------| \n"

"| 1——創建音像圖書庫 | \n"

"| 2——租借音像圖書 | \n"

"| 3——歸還時音像圖書 | \n"

"| 4——購進音像圖書 | \n"

"| 5——報廢音像圖書 | \n"

"| 0——退出系統 | \n"

"|----------------------------------------------| \n");

fflush(stdin);

printf("請選擇:(0-5)");

scanf("%d",&select);

}while(!(select==1 ||select==2 || select==3 || select==4 ||select==5 ||select==0));

if(select==0)

return;

ItemX(select);

}

void ItemX(int select)

{

fflush(stdin);

HRESULT hr = S_OK;

_ConnectionPtr pConnection = NULL;

_RecordsetPtr pRst = NULL;

_CommandPtr pCmd = NULL;

_ParameterPtr pPrm = NULL;

FieldPtr pFld = NULL;

SYSTEMTIME recvtime,currenttime;//最好用其它方法,這裏節省時間

_bstr_t strCnn("DRIVER=Driver do Microsoft Access (*.mdb);DBQ=myBook"); //本程序目錄下的myBook.mdb數據庫

char *filename="myBook.mdb";//文件名

char *tabname="BOOK"; //文件表名

_variant_t Column[5];

_variant_t vIndex;

Column[0]="BIANHAO";//字段1,字符型,編號

Column[1]="NAME"; //字段2,字符型,名稱

Column[2]="PRICE"; //字段3,小數型,價格

Column[3]="TOTAL"; //字段4,整型, 總數

Column[4]="NOWCOUNT";//字段5,整型,庫存

MYDATE data;

try

{

TESTHR(pConnection.CreateInstance(__uuidof(Connection)));

TESTHR(pRst.CreateInstance(__uuidof(Recordset)));

TESTHR(pCmd.CreateInstance(__uuidof(Command)));

_bstr_t strText;

char temp[100]={"SELECT * FROM BOOK"};

char bookID[100];

switch(select)

{

case 1:

printf("這個用源碼實現非常困難,最好用專門的數據庫程序工具(如Access,SQL,MYSQL等)...\n"

"顯示建好的數據庫每條記錄\n這裏用的是微軟的mdb數據庫\n");

strText=("SELECT * FROM BOOK ");//SQL語句……

break;

case 2:

printf("請妳輸入編號:\t");

gets(bookID);

strcat(temp ," where BIANHAO='" );

strcat(temp,bookID);

strcat(temp, "'");

strText=temp;

printf("自動取的當前時間.(年-月-日)\n");//個人方法可不同,略……

memset(¤ttime,0,sizeof(currenttime));

GetSystemTime(¤ttime);//取系統時間,如果系統有時區差,這裏也會有時差。為節省時間,略……

break;

case 3:

printf("請輸入編號:\t");

gets(bookID);

strcat(temp ," where BIANHAO='" );

strcat(temp,bookID);

strcat(temp, "'");

strText=temp;

do{

printf("請輸入借出的日期(年-月-日)");//同上略

scanf("%d-%d-%d",&data.YEAR,&data.MONTH,&data.DAY);

}while(data.MONTH<1 || data.MONTH>12 || data.DAY<1 || data.DAY>31);

break;

case 4:

printf("請妳輸入編號:\t");

gets(bookID);

strcat(temp ," where BIANHAO='" );

strcat(temp,bookID);

strcat(temp, "'");

strText=temp;

break;

case 5:

printf("請妳輸入編號:\t");

gets(bookID);

strcat(temp ," where BIANHAO='" );

strcat(temp,bookID);

strcat(temp, "'");

strText=temp;

break;

default:

strText=("SELECT * FROM BOOK ");

break;

}

pCmd->CommandText = strText;

//////數據庫連接

pConnection->Open(strCnn, "", "", adConnectUnspecified);

pCmd->ActiveConnection = pConnection;

_variant_t Conn;

Conn.vt = VT_ERROR;

Conn.scode = DISP_E_PARAMNOTFOUND;

pRst->Open((_variant_t((IDispatch *) pCmd)),Conn,adOpenStatic,

adLockReadOnly, -1);

////////////

long count=pRst->GetRecordCount();

if(count<=0 && select!=4)

{

pRst->Close();

pConnection->Close();

printf("沒有條記錄\n");

printf("按任意鍵回主菜單....\n");

getch();

Begin(select);

return;

}

else if(count<=0 && select==4)

{

char temp[100];

char bookName[100];

float price;

printf("請妳輸入名稱:(DOS下不支持中文輸入)");scanf("%s",&bookName);

printf("請妳輸入價格:");scanf("%f",&price);

sprintf(temp,"INSERT into BOOK VALUES ('%s','%s',%f,1,1)",bookID,bookName,price);

pRst->Close();

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("添加記錄成功\n");

}

else if(count>0)

{

char temp[100];

strcpy(temp,pCmd->CommandText);

pRst->MoveFirst();

long limit = 0;

limit = ((pRst->Fields->Count) - 1);

int intLineCnt = 0; printf("\t");

for(int i=0;i<5;i++)

{

if(i==2) printf("\t");

printf("%s\t",(LPCSTR)(_bstr_t)Column[i]);

}

printf("\n");

while(!pRst->adoEOF)

{

printf("\t");

for (short iIndex = 0; iIndex <= limit; iIndex++)

{

vIndex = iIndex;

pFld = pRst->Fields->GetItem(&vIndex);

_variant_t FldVal = pFld->GetValue();

// Because Value is the default property of a

// Property object,the use of the actual keyword

// here is optional.

switch(FldVal.vt)

{

case (VT_DECIMAL):

printf("%.2f",//"Value = '%s'",

(float)(FldVal.iVal)/100);

printf("\t");

break;

case (VT_BOOL):

if(FldVal.boolVal)

{

printf("Value = 'True'");

}

else

{

printf("Value = 'False'");

}

printf("\t");

break;

case (VT_BSTR):

printf("%s",//"Value = '%s'",

(LPCSTR)(_bstr_t)FldVal.bstrVal);

printf("\t");

break;

case (VT_I4):

printf("%d",//"Value = '%d'",

(LPCSTR)FldVal.iVal);

printf("\t");

break;

case (VT_EMPTY):

printf("%d",//"Value = '%s'",

(LPCSTR)FldVal.lVal);

printf("\t");

break;

case VT_DATE:

VariantChangeType(&FldVal,&FldVal,VARIANT_NOVALUEPROP,VT_BSTR);

printf("%s",//"Value = '%s'",

(LPCSTR)(_bstr_t)FldVal.bstrVal);

printf("\t");

break;

default:

break;

}

}

intLineCnt++;

printf("\n");

pRst->MoveNext();

}

pRst->MoveFirst();

_variant_t FldVal=pRst->Fields->GetItem(Column[3])->GetValue();

int total=FldVal.iVal;

FldVal=pRst->Fields->GetItem(Column[4])->GetValue();

int nowcount=FldVal.iVal;

FldVal=pRst->Fields->GetItem(Column[2])->GetValue();

float m_price=(float)FldVal.iVal/100;

switch(select)

{

case 2:

char buff[100];

char choose;

sprintf(temp,"UPDATE BOOK SET NOWCOUNT=%d WHERE BIANHAO='%s'",nowcount-1,bookID);

pRst->Close();

if(nowcount-1<0)

{

printf("對不起,庫存已經為空,請以後再來\n",total);

break;

}

sprintf(buff,"%d-%d-%d",currenttime.wYear,currenttime.wMonth,currenttime.wDay);

do

{

printf("出借時間""%s""是否確定(Y/N)",buff);

scanf("%c",&choose);

}while(!(choose=='Y' || choose=='y' ||choose=='n' || choose=='N'));

if(choose=='n' || choose=='N')

break;

saveFile(bookID,buff,m_price);//參數自己加,略……

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("出借成功,現庫存為%d\n",nowcount-1);

break;

case 3:

if(!DeleteFile(bookID,data,m_price))//參數自己加,略……

break;

else

sprintf(temp,"UPDATE BOOK SET NOWCOUNT=%d WHERE BIANHAO='%s'",

nowcount+1,bookID);

pRst->Close();

pRst.CreateInstance(__uuidof(Recordset));

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("成功修改了庫存,現記錄為%d\n",nowcount+1);

break;

case 4:

sprintf(temp,"UPDATE BOOK SET TOTAL=%d,NOWCOUNT=%d WHERE BIANHAO='%s'",

total+1,nowcount+1,bookID);

pRst->Close();

pRst.CreateInstance(__uuidof(Recordset));

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("成功修改了總數,現記錄為%d\n",total+1);

printf("成功修改了庫存,現記錄為%d\n",nowcount+1);

sprintf(temp,"Select * FROM BOOK where BIANHAO='%s'",bookID);

break;

case 5:

sprintf(temp,"UPDATE BOOK SET TOTAL=%d,NOWCOUNT=%d WHERE BIANHAO='%s'",

total-1,nowcount-1,bookID);

pRst->Close();

if(nowcount-1<0)

{

printf("對不起,庫存已經為空,總數量為%d\n",total);

if(total==0)

{

sprintf(temp,"DELETE * FROM BOOK where BIANHAO='%s'",bookID);

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("由於總數量為0,該記錄將被徹底清除\n");

}

break;

}

pRst.CreateInstance(__uuidof(Recordset));

pRst->Open(temp,pConnection.GetInterfacePtr(),

adOpenStatic,adLockReadOnly, -1);

printf("成功修改總數記錄,現記錄為%d\n",total-1);

printf("成功修改庫存記錄,現記錄為%d\n",nowcount-1);

break;

}

}

pCmd.Release();

pRst.Release();

pConnection.Release();

printf("按任意鍵回主菜單....\n");

getch();

Begin(select);

}

catch(_com_error &e)

{

PrintProviderError(pConnection);

PrintComError(e);

}

}

void PrintProviderError(_ConnectionPtr pConnection)

{

ErrorPtr pErr = NULL;

if( (pConnection->Errors->Count) > 0)

{

long nCount = pConnection->Errors->Count;

// Collection ranges from 0 to nCount -1.

for(long i = 0; i < nCount; i++)

{

pErr = pConnection->Errors->GetItem(i);

printf("\t Error number: %x\t%s", pErr->Number,

pErr->Description);

}

}

}

void PrintComError(_com_error &e)

{

_bstr_t bstrSource(e.Source());

_bstr_t bstrDescription(e.Description());

// Print Com errors.

printf("數據庫操作錯誤.先創建數據庫文件.由於數據指針操作復雜,詳細說明略\n");

printf("\tCode = %08lx\n", e.Error());

printf("\tCode meaning = %s\n", e.ErrorMessage());

printf("\tSource = %s\n", (LPCSTR) bstrSource);

printf("\tDescription = %s\n", (LPCSTR) bstrDescription);

}

  • 上一篇:macd指標是什麽?macd指標怎麽用?
  • 下一篇:網站被降權後怎麽正確的處理
  • copyright 2024編程學習大全網