#include "string.h"
#define N 1000
struct book
{char author[10]
char bkname[20]
float price
int num
}
int n
bkin(struct book bk[])
{
char ath[10],bknm[20]
float pr
int nm,i
clrscr()
printf("Input BookName BookAuthor Price Number:\n")
scanf("%s%s%f%d",ath,bknm,&pr,&nm)
for (i=0i<ni++)
if ( strcmp(bk[i].bkname,bknm)==0 ) break
if (i<n) bk[i].num+=nm
else
{
strcpy(bk[n].author,ath)
strcpy(bk[n].bkname,bknm)
bk[n].price=pr
bk[n].num = nm
n++
}
printf("Book In ok...\n")
}
bksale(struct book bk[])
{
clrscr()
printf("Book Sale....\n")
}
bklist(struct book bk[])
{
int i
clrscr()
printf("Book List:\n\n")
printf("Author BookName Price BookNumber\n")
printf("------------------------------------------------------\n")
for (i=0i<ni++)
printf("%-10s %-20s %-10.2f %-5d\n",bk[i].author,
bk[i].bkname,bk[i].price,bk[i].num)
}
show()
{clrscr()
printf("\n\n\n\n\n")
printf(" ----------------------------------------------------\n")
printf(" 1.BookIn\n")
printf(" 2.Booksale\n")
printf(" 3.BookList\n")
printf(" 4.Exit\n")
printf(" ----------------------------------------------------\n")
printf(" Please select 1.2.3.4:\n")
}
main()
{
struct book bk[N]
int select
strcpy(bk[0].author,"Tom")
strcpy(bk[0].bkname,"Bookname1")
bk[0].price=20.00
bk[0].num = 10
strcpy(bk[1].author,"Jerry")
strcpy(bk[1].bkname,"Bookname2")
bk[1].price=12.00
bk[1].num = 3
n=2
show()
scanf("%d",&select)
while(select != 4)
{ if (select == 1) bkin(bk)
if (select == 2) bksale(bk)
if (select == 3) bklist(bk)
getch()
show()
scanf("%d",&select)
}
}
1 涉及的C语言知识
(1)输入
(2)加减乘除运算
(3)输出
2 一个小示例
#include<stdio.h>float get_discount(int x){
float output = 0
//当输入以0结尾时,不合法,返回0
if (x % 10 == 0)
return output
//当输入为 85 时,代表85折,输出应为0.85
if (x > 10 && x < 100)
output = x / 100.0
//当输入为 7 时,代表7折,输出应为0.7
if (x < 10 && x >= 1)
output = x / 10.0
return output
}
int main(){
float count
int discount_str
puts("输入书的金额和打印情况(以空格为分割符,按回车结束):")
puts("(如输入的是20 7则表示20元的书打7折)")
scanf("%f %d", &count, &discount_str)
float discount_f = get_discount(discount_str)
if (discount_f == 0)
puts("输入的打折情况不合法.")
else{
float result = count*discount_f
printf("打折后的金额为:%.2f\n", result)
}
getchar()
getchar()
return 0
}
3 运行情况
C++的行不?等等,要菜单??就是说要支持MFC??
要是您不嫌弃,就先试试这个吧,手头上只有这个了。
#include <string>//字符串头文件
#include <fstream>//文件头文件
#include <iostream>//是指标准库中输入输出流的头文件using namespace std//使用名字空间std
const int BMAX=50 //书最多个数
//图书管理模块
//图书类
class book
{
public:
int no //图书编号
char name[20] //图书名称
int b_flag //1为在架,2为借出
int b_del //1为存在, 2为删除
public :
book(){} //构造函数
void setno(int n)
{
no=n//图书编号取值
}
int getno()
{
return no //返回图书编号值
}
void setname(char na[])
{
strcpy(name, na) //字符串复制
}
char* getname()
{
return name //返回图书名称
}
void borbook()
{
b_flag=2//借书标志
}
void delbook()
{
b_del=2 //删除标志
}
void addbook(int no,char na[])//增加图书功能
{
setno(no)
setname(na)
b_flag=1
b_del=1
}
}
//图书数据库类
class bdatabase
{
public:
book btarray[BMAX]//图书集合
int top
public:
bdatabase()
{
book b
top=-1
fstream file("book.txt",ios::in) //打开文件
while (1)
{
file.read((char *)&b,sizeof(b))
if (!file) break
top++
btarray[top] = b
}
file.close()//关闭文件
}
~bdatabase() //析构函数,将btarray[]写到book.txt文件中
{
fstream file("book.txt",ios::out)
for (int i=0i<=topi++)
{
if (btarray[i].b_del==1)
file.write((char *)&btarray[i],sizeof(btarray[i]))
}
file.close()
}
void addbooks() //往图书数据库中加图书
{
book bk
int no
char bname[20]
cout<<"请输入书号: "
cin>>no
cout<<endl<<"请输入书名: "
cin>>bname
cout<<endl
bk.b_flag=1
bk.addbook(no, bname)
top++
btarray[top]=bk
return
}
int findbooks(int suffix)//查找图书,这个函数用于借书这书 *** 作,suffix是数组下标
{
int no
cout<<"请输入书号: "
cin>>no
for(int i=0i<=topi++)
{
if(btarray[i].no==no &&btarray[i].b_del==1)
{
return i
}
}
return -1
}
int findbooks()//查找图书,这个函数用于图书维护
{
int no
char value[6]
cout<<"请输入书号: "
cin>>no
for(int i=0i<=topi++)
{
if(btarray[i].no==no &&btarray[i].b_del==1)
{
if(btarray[i].b_flag==1) strcpy(value,"在架")
if(btarray[i].b_flag==2) strcpy(value,"借出")
cout<<"书号: "<<btarray[i].no<<" 书的名称: "<<btarray[i].name<<" 图书状态 :"<<value<<endl
return i
}
}
return -1
}
void editbooks() //编辑图书
{
int cur
cur = findbooks()
if (cur==-1)
{ cout<<"没有这本书"<<endl
return
}
cout<<"书号: "<<btarray[cur].no<<" 书的名称: "<<btarray[cur].name<<endl
cout<<"请修改数据:"<<endl
cout<<endl<<"书的名称: "
cin>>btarray[cur].name
return
}
void delbooks() //删除图书
{
int cur
cur = findbooks()
if (cur==-1)
{
return
}
if(btarray[cur].b_flag==2) //删除时判断图书是否借出
{
cout<<"该图书已经借出,请在归还后再删除。"<<endl
return
}
btarray[cur].b_del=2
return
}
void listbooks() //显示全部图书
{
char value[6]
for(int i=0i<=topi++)
{
if(btarray[i].b_del==1)
{
if(btarray[i].b_flag==1) strcpy(value,"在架")
if(btarray[i].b_flag==2) strcpy(value,"借出")
cout<<"书号: "<<btarray[i].no<<" 书的名称: "<<btarray[i].name<<" 图书状态 :"<<value<<endl
}
}
return
}
}
//读者管理模块
//读者类
class reader
{
public:
int no
char name[20]
int r_del //1存在,2删除
int r_bor //1借过书,2没有借书
book brbook
public:
void addreader(int id, char na[])//增加读者
{
no = id
strcpy(name, na)
r_del=1
}
void setbrbook(book bt) //设置借书标记
{
brbook = bt
}
book getbrbook()
{
return brbook //返回借书信息
}
}
//读者数据库类
class rdatabase
{
public:
reader rdarray[BMAX]
int top
public:
rdatabase()
{
reader rd
top=-1
fstream file("reader.txt",ios::in)//打开文件
while (1)
{
file.read((char *)&rd,sizeof(rd))
if (!file) break
top++
rdarray[top]=rd
}
file.close() //关闭文件
}
~rdatabase()//析构函数
{
fstream file("reader.txt",ios::out)
for (int i=0i<=topi++)
{
if (rdarray[i].r_del==1)
file.write((char *)&rdarray[i],sizeof(rdarray[i]))
}
file.close()
}
void addreaders()//添加读者
{
reader rd
int no
char rname[20]
cout<<"请输入学号: "
cin>>no
cout<<endl<<"请输入姓名: "
cin>>rname
cout<<endl
rd.addreader(no, rname)
rd.r_bor=2
top++
rdarray[top]=rd
return
}
int findreaders(int suffix) //查找读者,这个函数用于借书还书 *** 作。 参数suffix是数组下标
{
int no
cout<<"请输入学号: "
cin>>no
for(int i=0i<=topi++)
{
if(rdarray[i].no==no &&rdarray[i].r_del==1)
{
return i
}
}
return -1
}
int findreaders() //查找读者,这个函数用于读者维护 *** 作
{
int no
char value[3]
cout<<"请输入学号: "
cin>>no
for(int i=0i<=topi++)
{
if(rdarray[i].no==no &&rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1) strcpy(value,"借")
if(rdarray[i].r_bor==2) strcpy(value,"无")
cout<<"学号: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借书: "<<value<<endl
return i
}
}
return -1
}
void editreaders()//编辑读者信息
{
int cur
cur = findreaders()
if (cur==-1)
{ cout<<"没有该学生"<<endl
return
}
cout<<"请修改数据:"<<endl
cout<<endl<<" 姓名: "
cin>>rdarray[cur].name
return
}
void delreaders()//删除读者,读者如果借书要还书后才能删除
{
int cur
cur = findreaders()
if (cur==-1)
{
return
}
if(rdarray[cur].r_bor==1)
{
cout<<"该用户借了图书,请还书后再删除"<<endl
return
}
rdarray[cur].r_del=2
return
}
void listreaders() //显示所有读者
{
char value[3]
for(int i=0i<=topi++)
{
if(rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1) strcpy(value,"借")
if(rdarray[i].r_bor==2) strcpy(value,"无")
cout<<"学号: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借书: "<<value<<endl
}
}
return
}
}
void bookjiemain() //图书维护子菜单
{
cout<<"|---------------------|"<<endl
cout<<"|图书维护 |"<<endl
cout<<"| (1)增 加 |"<<endl
cout<<"| (2)更 改 |"<<endl
cout<<"| (3)删 除 |"<<endl
cout<<"| (4)查 找 |"<<endl
cout<<"| (5)显 示 |"<<endl
cout<<"| (6)返回上一层 |"<<endl
cout<<"|---------------------|"<<endl
}
void readerjiemian() //读者维护子菜单
{
cout<<"|---------------------|"<<endl
cout<<"|读者维护 |"<<endl
cout<<"| (1)增 加 |"<<endl
cout<<"| (2)更 改 |"<<endl
cout<<"| (3)删 除 |"<<endl
cout<<"| (4)查 找 |"<<endl
cout<<"| (5)显 示 |"<<endl
cout<<"| (6)返回上一层 |"<<endl
cout<<"|---------------------|"<<endl
}
void mainjiemian() //主界面
{
cout<<"***********************************************"<<endl
cout<<"* 图 书 管 理 系 统 *"<<endl
cout<<"* *"<<endl
cout<<"* (1) 借 书 *"<<endl
cout<<"* *"<<endl
cout<<"* (2) 还 书 *"<<endl
cout<<"* *"<<endl
cout<<"* (3) 图书管理 *"<<endl
cout<<"* *"<<endl
cout<<"* (4) 用户管理 *"<<endl
cout<<"* *"<<endl
cout<<"* (0) 退 出 *"<<endl
cout<<"***********************************************"<<endl
}
void borrowtoreturn(char br)
//借书还书函数.参数br用来判断是“借书”还是“还书”.1为“借书”,2为“还书”
{
int rdid=0
int bkid=0
int rsuffix, bsuffix
bdatabase t_bd
rdatabase t_rd
if(br=='1') //借书
{
rsuffix=t_rd.findreaders(rdid)
bsuffix=t_bd.findbooks(bkid)
if (rsuffix==-1 || bsuffix==-1)
return
if(t_bd.btarray[bsuffix].b_flag==2)
{
cout<<"图书已经借出,请选择其它图书"<<endl
return
}
if(t_rd.rdarray[rsuffix].r_bor==1)
{
cout<<"你已经借过图书,请先归还再借其它图书"<<endl
return
}
t_bd.btarray[bsuffix].b_flag=2
t_rd.rdarray[rsuffix].r_bor=1
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix]
return
}
if(br=='2')
{
rsuffix=t_rd.findreaders(rdid)
bsuffix=t_bd.findbooks(bkid)
if (rsuffix==-1 || bsuffix==-1 )
return
if(t_rd.rdarray[rsuffix].brbook.no==t_bd.btarray[bsuffix].no)
{
t_bd.btarray[bsuffix].b_flag=1
t_rd.rdarray[rsuffix].r_bor=2
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix]
}
else
{
cout<<"请重新输入,读者借的图书号不正确"<<endl
return
}
return
}
}
void booksmange()
{
char in
bdatabase bd
do{
bookjiemain()
cin>>in
switch (in)
{
case '1':
bd.addbooks()
break
case '2':
bd.editbooks()
break
case '3':
bd.delbooks()
break
case '4':
bd.findbooks()
break
case '5':
bd.listbooks()
break
case '6':
break
default:cout<<"输入错误,请从新输入。"<<endl
}
}while(in!='6')
return
}
void readersmange()
{
char in
rdatabase bd
do{
readerjiemian()
cin>>in
switch (in)
{
case '1':
bd.addreaders()
break
case '2':
bd.editreaders()
break
case '3':
bd.delreaders()
break
case '4':
bd.findreaders()
break
case '5':
bd.listreaders()
break
case '6':
break
default:cout<<"输入错误,请从新输入。"<<endl
}
}while(in!='6')
return
}
int main(int argc, char* argv[])
{ char in
do{
mainjiemian()
cin>>in
switch (in)
{
case '1':
borrowtoreturn(in)
break
case '2':
borrowtoreturn(in)
break
case '3':
booksmange()
break
case '4':
readersmange()
break
case '0':
break
default:cout<<"输入错误,请从新输入。"<<endl
}
}while(in!='0')
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)