C图书管理系统课程设计.docx
《C图书管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《C图书管理系统课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
![C图书管理系统课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/19/c2662bf3-493f-419f-8249-9fa0b30808f2/c2662bf3-493f-419f-8249-9fa0b30808f21.gif)
C图书管理系统课程设计
课程设计实验报告
课程设计题目:
小型图书购销管理系统
所属院系:
信息科学与工程学院
专业:
电气信息类
班级:
1205
姓名:
Ø系统描述:
小型图书购销管理系统
1、需要处理的基础数据
✧图书资料基本信息:
图书编号、书名、作者、出版社、出版日期、定价等。
✧图书库存信息:
图书编号、书名、作者、库存数量等。
✧图书采购信息:
采购单号、图书编号、采购日期、采购数量、单价、采购金额等。
✧图书销售信息:
销售单号、图书编号、销售日期、销售数量、单价、销售金额等。
2、系统的基本功能
✧图书基本信息的录入和查询
✧图书采购
(1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出来。
(2)根据采购数量和单价,自动计算采购金额。
(3)根据采购数量,增加图书库存量。
✧图书销售
(1)输入要采购的图书编号(或书名)、销售数量,从图书库存信息中查找是否合法,合法时进行销售,否则报错。
(2)根据采购数量和单价,自动计算销售金额。
(3)销售时,从库存中减去相应的数量。
✧利润计算:
根据全部的采购金额和销售金额,计算书店的利润情况。
Ø功能模块结构:
本系统使用MVC结构框架,ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写。
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
如图1。
图1MVC结构框架图解
M(model):
系统的中的图书资料,采购销售账单,查询,以及交易记录写成4个类Book,Bill,Query,TRADE分别执行各自功能。
为后台程序。
V(view):
将视图集中写入一个类Interface,使用以上4个类中的函数,分5种情况反馈输出。
为前台程序。
C(control):
编主函数main使用视图类Interface,控制将其显示。
Ø主要模块的算法说明:
Model:
Book类:
包含图书基本资料:
书名,图书编号,作者,出版社,出版日期,价格及库存stringtitle,no,writer,publisher,date,doubleprice,intcount,声明一个无参的构造函数,以下会使用空的Book类的对象,声明一个有参的构造函数并将构造函数初始化。
以下Query类中信息录入,以及界面显示时查询时将会使用此Book类。
Bill类:
包含交易编号(采购和销售一起),图书编号,交易日期,交易数量,交易价格,stringno,order,indate;intcount,doubleprice;声明一个无参的构造函数,以下会使用空的Bill类的对象,声明一个有参的构造函数并将构造函数初始化。
以下TRADE类中采购销售以及利润计算时将会使用Bill类。
Query类:
声明一个Query类(包含信息录入和查询图书是否存在以及库存增减问题解决)
1.验证书号是否存在于:
书店Book类的对象放入名为lib的容器里书籍资料存储,用函数exsist:
给一个书号stringn验证它是否存在于lib[i].no中,若存在返回true,不存在返回false
2.Book类的对象a的存储:
编一个函数add,将输入的Book类的对象a插入到lib容器末端存储。
3.库存变化增减:
函数count给一个交易量intc和书号stringn,先判断图书编号n是否存在于lib[i].no中。
存在则库存count+c。
TRADE类:
声明一个TRADE类,定义Bill类的容器buy,sell采购和销售订单存储。
1.判断采购图书是否存在:
函数add1:
验证账单所对应书籍是否存在,若不存在,返回false;若存在将采购增加的书籍的量加入到lib[i].count中,将Bill类的对象a插入buy类的末端
2.判断销售图书是否存在并判断库存是否满足销售:
函数add2:
验证给的Bill类的对象a的图书编号是否存在,若不存在,返回false,若存在,验证库存是否足够,若足够,将账单对象a中销售的量a.count在书库lib[i].count中减少,将账单对象a插入sell类的末端保存,并返回true,若不足够返回false。
3.计算利润:
函数count,当采购时总利润sum-采购总价格,输入时总利润sum+=销售总价格。
View:
Interface类:
1.欢迎界面显示及5种选择
2.选择函数chose:
输入123456中6种情况
输出所得到的结果,反馈运行。
Control:
主函数main:
构造Interface类I,构造while死循环输出欢迎界面及选择函数。
Ø运行结果
系统界面如下
图书基本信息的录入如下
图书基本资料的查询如下:
图书的采购如下:
图书的销售如下:
书店获得的利润如下
退出系统:
Ø课程设计总结
一开始连构架都不知道从何想起,建立Query类,TRADE类不知道逻辑该往哪方面想,对于容器vector不知道如何使用。
通过本次编程,加强了自己的自学能力,学会自己学习,自己查找资料,比如学习到了容器vector的使用,mvc的构架。
也加强了自己面对困难合理解决的能力,当遇到困难时,变得善于思考善于与同学讨论,得出正确解答。
逻辑思维能力得到提高。
提高自信心,慢慢从小问题到大问题的解决,不再是自暴自弃,学会了正确面对,当正确面对后,认真思考,自主学习,得出结论,发现c++本次的课程设计也没有那么困难,踏出第一步,就是踏好了最后一步。
加油!
一个程序的开发是一个漫长的过程,需要把用户的所需变成C++编程所对的方向,再把这些内容变成c++语言编译,系统最初的结构构造也是十分重要的,需要有构架才能把各部分结合起来成为一个完整的程序,各部分的分工分开来写,不要出现交叉的现象,当程序出现问题是便于修改。
Ø参考文献
1.mvc框架
2.vector容器的使用
Ø附录
#include
#include
#include
#include
usingnamespacestd;
classBook//声明一个Book类
{
public:
stringtitle,no,writer,publisher,date;
doubleprice;
intcount;//包含stringtitle,no,writer,publisher,date,intprice,count.
Book(){}//声明无参的构造函数
Book(stringt,stringn,stringw,stringpu,stringd,doublep):
title(t),no(n),writer(w),publisher(pu),date(d),price(p)
{
count=0;
}//定义一个有参的构造函数,用参数的初始化表对数据成员初始化
};
classBill//声明一个Bill类
{
public:
stringno,order,indate;
intcount;
doubleprice;//包含stringno,order,indate;intcount,doubleprice;
Bill(){}
Bill(stringn,stringo,stringid,doublep,intc):
no(n),order(o),indate(id),price(p),count(c)
{
}//定义一个有参的构造函数,用参数的初始化表对数据成员初始化
};
classQuery//声明一个Query类
{
public:
vectorlib;//将Book类放入名为lib的容器里书籍资料存储
boolexsist(stringn,Book&a)//函数exsist:
给一个stringn验证它是否存在于lib.no中,
{
inti;
for(i=0;iif(lib[i].no==n)
{
a=lib[i];
returntrue;//若存在令Booka等于该lib[i],返回true
}
returnfalse;//不存在返回false
}
voidadd(Booka)//函数add:
将Booka插入lib类的末端;图书的录入
{
lib.push_back(a);
}
voidcount(intc,stringn)//函数count:
给一个intc和stringn,先判断图书编号n是否存在于lib[i].no中。
存在则库存count+c
{
inti;
for(i=0;iif(lib[i].no==n)
{
lib[i].count+=c;
return;
}
}
};
Querylib;//定义一个Query的对象lib
classTRADE//声明一个TRADE类(采购销售算法)
{
public:
vectorbuy,sell;//定义Bill类的容器buy,sell采购和销售订单存储
booladd1(Billa)//函数add1:
验证账单所对应书籍是否存在,若不存在,返回false;
{//若存在将采购增加的书籍的量加入到lib[i].count中,将Billa插入buy类的末端
Bookb;
if(lib.exsist(a.no,b)==true)
{
lib.count(a.count,a.no);//使用对象lib中的count算法
buy.push_back(a);//将Billa存入buy容器中
returntrue;
}
else
returnfalse;
};
booladd2(Billa)//函数add2:
验证给的Billa的图书编号是否存在,若不存在,返回false,若存在,验证库存是否足够,
{
Bookb;//若足够,将账单a中销售的量a.count在书库lib[i]。
count中减少,将账单a插入sell类的末端保存,并返回true,若不足够返回false。
if(lib.exsist(a.no,b)==true)
{
if(b.count>=a.count)
{
lib.count(-a.count,a.no);//使用对象lib中的count算法,当销售出去时库存显示减少
sell.push_back(a);//将Billa存入sell容器中
returntrue;
}
else
returnfalse;
}
else
returnfalse;
};
doublecount()//计算利润
{
doublepf=0;
for(inti=0;i{
pf-=buy[i].price*buy[i].count;
}
for(inti=0;i{
pf+=sell[i].price*sell[i].count;
}
returnpf;//返回利润
}
};
TRADEtrade;
classInterface//界面设置
{public:
voidshow()//显示内容
{
cout<<"******************************************************************************"<cout<<"**"<cout<<"**"<cout<<"**"<cout<<"*欢迎进入图书购销管理系统*"<cout<<"**"<cout<<"**"<cout<<"*请输入您想使用的功能:
*"<cout<<"*1.图书基本信息的录入*"<cout<<"*2.图书基本信息的查询*"<cout<<"*3.图书的采购*"<cout<<"*4.图书的销售*"<cout<<"*5.书店获得的利润*"<cout<<"*6.退出系统*"<cout<<"**"<cout<<"**"<cout<<"**"<cout<<"******************************************************************************"<}
voidchose()
{
intx;
cout<<"请选择:
"<cin>>x;
switch(x)//选择结构
{
case1:
entering();break;//反馈1,运行entering函数
case2:
query();break;//反馈2:
运行query函数
case3:
buy();break;//反馈3:
运行buy函数
case4:
sell();break;//反馈4:
运行sell函数
case5:
profit();break;//反馈5:
计算总利润
case6:
Exit();break;
default:
cout<<"输入有误"<}
}
voidentering()//声明一个entering函数
{
intn;
Booka;//声明一个Book类a
cout<<"请输入:
书名图书编号作者出版社出版日期价格库存"<cin>>a.title>>a.no>>a.writer>>a.publisher>>a.date>>a.price>>a.count;
lib.add(a);//将信息录入lib容器
}
voidquery()//声明一个query函数
{
stringn;
Booka;//声明一个Book类a
cout<<"请输入图书编号:
"<cin>>n;
if(lib.exsist(n,a)==true)//判断书籍是否存在
{
cout<<"书名图书编号作者出版社出版日期价格库存"<cout<<""<}
else
cout<<"本店没有该图书!
!
"<}
voidbuy()//声明一个buy函数
{
Billa;//声明一个Bill类a
Bookb;//声明一个Book类b
cout<<"请输入图书编号图书进价数量"<cin>>a.no>>a.price>>a.count;
if(trade.add1(a)==true)//判断该书籍是否存在
{
doublesum;
cout<<"该书存在"<if(lib.exsist(a.no,b)==true)
{
cout<<"书名图书编号作者出版社出版日期价格库存"<cout<<""<}//输出该书籍存在时图书信息
sum=a.price*a.count;
cout<<"采购金额为:
"<}
else
cout<<"该书不存在,不能买入!
!
"<}
voidsell()//声明一个sell函数(基本同buy函数)
{
Billa;
Bookb;
cout<<"请输入图书编号售价数量"<cin>>a.no>>a.price>>a.count;
if(trade.add2(a)==true)
{if(lib.exsist(a.no,b)==true)
{
cout<<"书名图书编号作者出版社出版日期价格库存"<cout<<""<}
doublesum;
cout<<"该书存在"<sum=a.price*a.count;
cout<<"销售金额为:
"<}
else
cout<<"该书不存在或库存不够!
!
"<}
voidprofit()//声明一个profit函数使用类TRADE中count函数计算
{
doublea;//定义变量a
a=trade.count();//再把count函数赋值给a
cout<<"获利为:
"<}
voidExit()
{
cout<<"谢谢使用"<exit(0);
}
};
intmain()
{
Interfacei;
while
(1){
i.show();
i.chose();
}
return0;
}