全部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 我们晚上详聊 谢谢各位 达人
展开
 我来答
worldk
推荐于2016-01-04 · TA获得超过148个赞
知道答主
回答量:84
采纳率:0%
帮助的人:88.3万
展开全部
#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);
}
//注明:会的话自己改,不要再来问我。
匿名用户
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——退出系统 |
|----------------------------------------------|
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ryw12403
2009-06-02 · TA获得超过1899个赞
知道大有可为答主
回答量:2501
采纳率:0%
帮助的人:2101万
展开全部
说实在的,这样一个工程,可以用到现实应用中,2000百度分是有些高,但不实在,如肯出100 RMB我就把代码给你了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狂甚之尊
2009-06-08 · 超过22用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:0
展开全部
你真强啊,这个做出来浪费不少时间了.2000分,不高
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
撤了历史记载
2009-05-29 · 超过17用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:0
展开全部
C 还没那个水平。。 C#倒可以给你做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式