全部2000分 求c语言高手 帮我 c语言实训
我们要c语言实训如果成功2000分分十道题全送给你具体题目音像图书租借管理系统功能要求:(1)创建音像图书库。此库中共有图书、VCD、录像带3类,而每个音像图书的信息均包...
我们要c语言 实训 如果成功2000分分十道题 全送给你
具体题目
音像图书租借管理系统
功能要求:
(1)创建音像图书库。此库中共有图书、VCD、录像带3类,而每个音像图书的信息均包括编号(用B_**、V_**和R_**分别表示图书、VCD和录像带的编号)、名称、原价、原数量及剩余数量。
(2)租借音像图书。在文件“borrow.dat”中添加租借者的有关信息,信息包括:编号、租借日期、押金、租借天数和租金,其中编号和租借日期需要从键盘输入,而租借天数和租金在归还时由系统自动计算。输入前2项信息后系统立即显示应交的押金额。每个音像图书的押金额由它们的原价决定,是原价的3倍。请注意,租借时音像图书库的剩余量应相应减少,而且当剩余数量为0时应显示“此音像图书已全部借出!”,如果没找到需要借的音像图书,则显示“无此音像图书!”的信息。
(3)归还音像图书。输入编号和归还日期,则显示该音像图书名,并根据租借日期和归还日期,计算租借天数,再借助编号按图书一天1元、VCD一天2元、录像带一天3元的标准计算应交的租金,最后显示押金、租金、应退的余额。如果租借天数过多,导致租金大于押金,则不再收取差额。请注意,归还时音像图书库的剩余量也相应增加,而且在“borrow.dat”文件中,删除该租借者的信息。
(4)购进音像图书。对于原有的音像图书,只增加其原数量,而对于新增加的音像图书,则需要再音像图书库中添加新的纪录。
(5)报废音像图书。对于丢失、过期的音像图书进行报废处理,但当原数量和剩余数量不相等,即已借出的音像图书不能报废。
(6)退出系统。
菜单要求:
设计循环显示如图所示的主菜单程序。
|----------------------------------------------|
| 请输入选项编号(0——5): |
|----------------------------------------------|
| 1——创建音像图书库 |
| 2——租借音像图书 |
| 3——归还时音像图书 |
| 4——购进音像图书 |
| 5——报废音像图书 |
| 0——退出系统 |
|----------------------------------------------|
用vc6.0的 source 编写...
留下你的qq 我们晚上详聊 谢谢各位 达人 展开
具体题目
音像图书租借管理系统
功能要求:
(1)创建音像图书库。此库中共有图书、VCD、录像带3类,而每个音像图书的信息均包括编号(用B_**、V_**和R_**分别表示图书、VCD和录像带的编号)、名称、原价、原数量及剩余数量。
(2)租借音像图书。在文件“borrow.dat”中添加租借者的有关信息,信息包括:编号、租借日期、押金、租借天数和租金,其中编号和租借日期需要从键盘输入,而租借天数和租金在归还时由系统自动计算。输入前2项信息后系统立即显示应交的押金额。每个音像图书的押金额由它们的原价决定,是原价的3倍。请注意,租借时音像图书库的剩余量应相应减少,而且当剩余数量为0时应显示“此音像图书已全部借出!”,如果没找到需要借的音像图书,则显示“无此音像图书!”的信息。
(3)归还音像图书。输入编号和归还日期,则显示该音像图书名,并根据租借日期和归还日期,计算租借天数,再借助编号按图书一天1元、VCD一天2元、录像带一天3元的标准计算应交的租金,最后显示押金、租金、应退的余额。如果租借天数过多,导致租金大于押金,则不再收取差额。请注意,归还时音像图书库的剩余量也相应增加,而且在“borrow.dat”文件中,删除该租借者的信息。
(4)购进音像图书。对于原有的音像图书,只增加其原数量,而对于新增加的音像图书,则需要再音像图书库中添加新的纪录。
(5)报废音像图书。对于丢失、过期的音像图书进行报废处理,但当原数量和剩余数量不相等,即已借出的音像图书不能报废。
(6)退出系统。
菜单要求:
设计循环显示如图所示的主菜单程序。
|----------------------------------------------|
| 请输入选项编号(0——5): |
|----------------------------------------------|
| 1——创建音像图书库 |
| 2——租借音像图书 |
| 3——归还时音像图书 |
| 4——购进音像图书 |
| 5——报废音像图书 |
| 0——退出系统 |
|----------------------------------------------|
用vc6.0的 source 编写...
留下你的qq 我们晚上详聊 谢谢各位 达人 展开
6个回答
展开全部
#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);
}
//注明:会的话自己改,不要再来问我。
#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);
}
//注明:会的话自己改,不要再来问我。
2009-05-28
展开全部
音像图书租借管理系统
功能要求:
(1)创建音像图书库。此库中共有图书、VCD、录像带3类,而每个音像图书的信息均包括编号(用B_**、V_**和R_**分别表示图书、VCD和录像带的编号)、名称、原价、原数量及剩余数量。
(2)租借音像图书。在文件“borrow.dat”中添加租借者的有关信息,信息包括:编号、租借日期、押金、租借天数和租金,其中编号和租借日期需要从键盘输入,而租借天数和租金在归还时由系统自动计算。输入前2项信息后系统立即显示应交的押金额。每个音像图书的押金额由它们的原价决定,是原价的3倍。请注意,租借时音像图书库的剩余量应相应减少,而且当剩余数量为0时应显示“此音像图书已全部借出!”,如果没找到需要借的音像图书,则显示“无此音像图书!”的信息。
(3)归还音像图书。输入编号和归还日期,则显示该音像图书名,并根据租借日期和归还日期,计算租借天数,再借助编号按图书一天1元、VCD一天2元、录像带一天3元的标准计算应交的租金,最后显示押金、租金、应退的余额。如果租借天数过多,导致租金大于押金,则不再收取差额。请注意,归还时音像图书库的剩余量也相应增加,而且在“borrow.dat”文件中,删除该租借者的信息。
(4)购进音像图书。对于原有的音像图书,只增加其原数量,而对于新增加的音像图书,则需要再音像图书库中添加新的纪录。
(5)报废音像图书。对于丢失、过期的音像图书进行报废处理,但当原数量和剩余数量不相等,即已借出的音像图书不能报废。
(6)退出系统。
菜单要求:
设计循环显示如图所示的主菜单程序。
|----------------------------------------------|
| 请输入选项编号(0——5): |
|----------------------------------------------|
| 1——创建音像图书库 |
| 2——租借音像图书 |
| 3——归还时音像图书 |
| 4——购进音像图书 |
| 5——报废音像图书 |
| 0——退出系统 |
|----------------------------------------------|
功能要求:
(1)创建音像图书库。此库中共有图书、VCD、录像带3类,而每个音像图书的信息均包括编号(用B_**、V_**和R_**分别表示图书、VCD和录像带的编号)、名称、原价、原数量及剩余数量。
(2)租借音像图书。在文件“borrow.dat”中添加租借者的有关信息,信息包括:编号、租借日期、押金、租借天数和租金,其中编号和租借日期需要从键盘输入,而租借天数和租金在归还时由系统自动计算。输入前2项信息后系统立即显示应交的押金额。每个音像图书的押金额由它们的原价决定,是原价的3倍。请注意,租借时音像图书库的剩余量应相应减少,而且当剩余数量为0时应显示“此音像图书已全部借出!”,如果没找到需要借的音像图书,则显示“无此音像图书!”的信息。
(3)归还音像图书。输入编号和归还日期,则显示该音像图书名,并根据租借日期和归还日期,计算租借天数,再借助编号按图书一天1元、VCD一天2元、录像带一天3元的标准计算应交的租金,最后显示押金、租金、应退的余额。如果租借天数过多,导致租金大于押金,则不再收取差额。请注意,归还时音像图书库的剩余量也相应增加,而且在“borrow.dat”文件中,删除该租借者的信息。
(4)购进音像图书。对于原有的音像图书,只增加其原数量,而对于新增加的音像图书,则需要再音像图书库中添加新的纪录。
(5)报废音像图书。对于丢失、过期的音像图书进行报废处理,但当原数量和剩余数量不相等,即已借出的音像图书不能报废。
(6)退出系统。
菜单要求:
设计循环显示如图所示的主菜单程序。
|----------------------------------------------|
| 请输入选项编号(0——5): |
|----------------------------------------------|
| 1——创建音像图书库 |
| 2——租借音像图书 |
| 3——归还时音像图书 |
| 4——购进音像图书 |
| 5——报废音像图书 |
| 0——退出系统 |
|----------------------------------------------|
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说实在的,这样一个工程,可以用到现实应用中,2000百度分是有些高,但不实在,如肯出100 RMB我就把代码给你了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你真强啊,这个做出来浪费不少时间了.2000分,不高
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C 还没那个水平。。 C#倒可以给你做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询