课设报告.docx
- 文档编号:11756845
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:26
- 大小:190.21KB
课设报告.docx
《课设报告.docx》由会员分享,可在线阅读,更多相关《课设报告.docx(26页珍藏版)》请在冰点文库上搜索。
课设报告
中南大学
本科生课程设计(实践)任务书、设计报告
(c++程序设计基础课程设计)
题目
小型图书购销管理系统
学生学号
0909123020
学生姓名指导教师
汤蕾雨昕
学院
信息科学与工程学院
专业班级
电气信息类1230班
指导老师
向瑶
计算机基础教学实验中心
2013年7月5日
小型图书购销管理系统
一.系统描述
本次选择的小型图书购销管理系统主要包括图书资料基本信息、图书库存信息、图书采购信息和图书销售信息的数据处理,要求实现的基本功能有图书基本信息的录入和查询、图书采购、图书销售和利润统计。
此次编写的程序是在vc++环境下的一个基于控制台方式的应用程序,主要包含两个部分,一个是叫main.h的头文件,其中包含类的定义、以及各函数声明,另一个则是用于实现主要功能的main文件,其中包括各功能函数的定义、菜单函数、以及主函数。
在编写程序的过程中,充分考虑到了c++数据的保护以及封装性的特点,进行模块化、结构化的编程,同时,考虑到实际应用上的需求,在原要求上还添加了文件流的功能,以实现信息的自动读取和保存。
程序简洁易读,操作简便,执行效率高。
二.功能模块结构
类:
classBookInfo;
classPSInfo;
classStoreInfo;
classShop;
功能实现函数
Menu();
shop.AddBookInfo();
shop.Purchase();
shop.Sale();
shop.Profit();
shop.ListPurInfo();
shop.ListSaleInfo();
shop.FindBook();
shop.Save();
shop.Read();
Exit();
程序运行框图:
三.主要模块的算法说明
数据处理:
考虑到此次的程序为小型图书购销系统,数据存储量相对较小,所以数据的处理是基于数组来实现的。
为增强实践生活中的可操作性,首先在类外定义了MAXNUM_BOOKINFO和MAXNUM_PSINFO的两个宏,可以对这两个宏赋值来改变数组长度扩大数据储存量。
类:
首先在main.h中定义了四个类,来进行基本数据的处理。
BookInfo类:
图书编号、书名、作者、出版社、出版日期、定价
StoreInfo类:
图书编号、书名、作者、库存数量
PSInfo类:
采购单号、图书编号、采购日期、采购数量、单价、采购金额
销售单号、图书编号、销售日期、销售数量、单价、销售金额
Shop类:
包含所有功能函数,用于管理包括书籍添加、采购、销售、查询、订单、利润等。
重载:
1.输入输出流重载:
考虑到程序中要多次使用输入信息与输出信息,于是对输入输出进行了重载,用ostream&operator<<(ostream&os,constBookInfo&book)和istream&operator>>(istream&in,BookInfo&book)来进行图书信息的输入输出,用ostream&operator<<(ostream&os,constPSInfo&info)和istream&operator>>(istream&in,PSInfo&info)来进行图书采购和销售信息的输入输出。
2.运算符重载:
主要包括三个运算的符重载
StoreInfo&StoreInfo:
:
operator+=(constPSInfo&info)用于之后图书采购;
StoreInfo&StoreInfo:
:
operator-=(constPSInfo&info)用于之后图书销售;
StoreInfo&StoreInfo:
:
operator=(constBookInfo&info)用于添加信息。
3.文件流重载:
为实现数据的存储和录入功能,进行了文件流的重载。
用ofstream&operator<<(ofstream&os,constBookInfo&book)进行数据的保存,用ifstream&operator>>(ifstream&in,BookInfo&book)进行数据的读入。
Shop类的功能函数:
Shop相当于一个商店,用于管理所有的功能函数,以实现系统的所有基本功能。
voidAddBookInfo():
实现图书信息添加
voidPurchase():
实现图书采购
voidSale():
实现图书销售
floatProfit():
实现利润统计
voidListPurInfo():
实现采购订单查询
voidListSaleInfo():
实现销售订单查询
voidFindBook():
实现图书查找
voidSave():
实现信息保存
voidRead():
实现信息读入
主函数部分:
首先进行一个名为Menu()的函数,以实现进入后的系统页面,然后用switch(select)函数来实现不同功能的选择。
其他说明:
关于采购和销售日期:
在预处理中包含了一个time的头文件,根据实际的采购和销售时间有电脑自动生成。
关于采购和销售单号:
由电脑自动生成,采用循环语句,每次在之前的基础上加1。
关于退出:
根据用户使用习惯人性化考虑,加入了Exit()函数实现退出选项。
四.运行结果
程序进入主界面
选择1进行图书基本信息的添加
选择2进行图书采购
当采购的书籍未添加基本信息时
图书销售
当销售数量大于库存量时
选择4进行图书查询
选择5查询采购订单
选择6查询销售订单
选择7查询总利润
选择0退出系统
五.课程设计总结
本次课程设计总体来看完成不错,任务要求中的数据处理以及功能要求都能够得到实现,同时还增添了数据的储存和读入功能,但仍有一些部分欠缺不足,统观整个设计过程,现总结如下:
初期设想阶段:
刚开始的设计程序时的想法是想通过链表来实现的,但后来根据实际情况来看,由于是小型系统,通过数组来实现更为方便,同时宏的使用也更好的解决了实际问题中容量大小的问题。
同时根据课设要求来规划类和函数,实现基本构思和结构。
编程实践阶段:
这个过程是学到东西最多的阶段。
许多原来的设想也在实际操作中不断地进行改变和优化。
首先考虑到系统中多次需要用到的一些功能,决定采取用重载的方式来简化程序代码,在类的定义上也将原来计划定义的PurInfo和SaleInfo综合为一个PSInfo,同时考虑到c++的封装性以及结构化编程,用一个main.h包含了所有的类和声明,使主函数部分看起来更为简明。
而在后期编译的时候也遇到个许多问题,一些小的关于输入法符合上的错误是可以避免的,还有一些思路语句上的错误则在老师和同学的帮助下得到了解决。
后期优化阶段:
在后期主要是对程序的优化阶段,使程序更加美观,使用更加方便,同时对一些功能也做出了适当修改,例如将采购销售时间由原来的手动输入改为增加了一个time函数,使之能够通过电脑自动获取,还有加入Exit函数,使程序更为人性化。
当然,也还有一些未解决的问题,例如对于添加书籍时若输入了重复书籍编号,此时程序会记录原来的信息而不能录入新的信息。
在这个方面不能不能做到很好的解决。
对于程序的一些未能很好解决的问题,我会在今后继续加以完善。
最后感谢老师对我此次c++课程设计的细心指导!
参考文献:
C++程序设计谭浩强清华大学出版社(2004-06出版);
C++程序设计题解与程序指导谭浩强清华大学出版社(2004-06出版);
C++Primer中文版(美)StanleyB.LippmanBarbaraE.MooJoséeLaJoie著,李师贤等译(2006-6-1);
C++实训;
附录:
源代码程序
#include
#include
#include
#include
usingnamespacestd;
constintMAXNUM_BOOKINFO=200;
constintMAXNUM_PSINFO=100;
classBookInfo;
classPSInfo;
classPurInfo;
classSaleInfo;
ostream&operator<<(ostream&os,constBookInfo&book);
istream&operator>>(istream&in,BookInfo&book);
ostream&operator<<(ostream&os,constPSInfo&info);
istream&operator>>(istream&in,PSInfo&info);
ofstream&operator<<(ofstream&os,constBookInfo&book);
ifstream&operator>>(ifstream&in,BookInfo&book);
ofstream&operator<<(ofstream&os,constPSInfo&info);
ifstream&operator>>(ifstream&in,PSInfo&info);
BookInfo*FindBookInfo(conststring&str);
classBookInfo
{
friendclassStoreInfo;
//图书编号、书名、作者、出版社、出版日期、定价
stringindex;
stringname;
stringwriter;
stringpress;
stringdate;
floatprice;
public:
friendStoreInfo*FindStoreInfo(conststring&str);
friendBookInfo*FindBookInfo(conststring&str);
friendostream&operator<<(ostream&os,constBookInfo&book);
friendistream&operator>>(istream&in,BookInfo&book);
friendofstream&operator<<(ofstream&os,constBookInfo&book);
friendifstream&operator>>(ifstream&in,BookInfo&book);
conststring&GetName()const{returnname;}
conststring&GetIndex()const{returnindex;}
};
classStoreInfo
{
friendclassShop;
//图书编号、书名、作者、库存数量
stringindex;
stringname;
stringwriter;
intnum;
public:
StoreInfo&operator+=(constPSInfo&info);
StoreInfo&operator-=(constPSInfo&info);
StoreInfo&operator=(constBookInfo&info);
friendStoreInfo*FindStoreInfo(conststring&str);
friendBookInfo*FindBookInfo(conststring&str);
};
classPSInfo
{
friendclassShop;
friendclassStoreInfo;
protected:
//采购单号、图书编号、采购日期、采购数量、单价、采购金额
//销售单号、图书编号、销售日期、销售数量、单价、销售金额
stringindex;
stringbookid;
stringdate;
intnum;
floatprice;
floatsum;
public:
friendostream&operator<<(ostream&os,constPSInfo&info);
friendistream&operator>>(istream&in,PSInfo&info);
friendofstream&operator<<(ofstream&os,constPSInfo&info);
friendifstream&operator>>(ifstream&in,PSInfo&info);
};
classShop
{
BookInfobook[MAXNUM_BOOKINFO];
StoreInfostoreinfo[MAXNUM_BOOKINFO];
PSInfopurinfo[MAXNUM_PSINFO];
PSInfosaleinfo[MAXNUM_PSINFO];
intbook_num;
intstoreinfo_num;
intpurinfo_num;
intsaleinfo_num;
intpurid,saleid;
public:
Shop():
book_num(0),storeinfo_num(0),purinfo_num(0),saleinfo_num(0),purid(0),saleid(0){}
voidAddBookInfo();
voidPurchase();
voidSale();
floatProfit();
voidListPurInfo();
voidListSaleInfo();
voidFindBook();
voidSave();
voidRead();
friendStoreInfo*FindStoreInfo(conststring&str);
friendBookInfo*FindBookInfo(conststring&str);
};
#include"main.h"
#include
Shopshop;
//-------------------输入输出流重载-------------------------
ostream&operator<<(ostream&os,constBookInfo&book)
{
os<<"图书编号:
"< os< "< os< "< os< "< os< "< os< "< returnos; } istream&operator>>(istream&in,BookInfo&book) { cout<<"图书编号: "; in>>book.index; cout<<"书名: "; in>>book.name; cout<<"作者: "; in>>book.writer; cout<<"出版社: "; in>>book.press; cout<<"出版日期: "; in>>book.date; cout<<"定价: "; in>>book.price; returnin; } ostream&operator<<(ostream&os,constPSInfo&info) { //单号、图书编号、日期、数量、单价、金额 os<<"单号: "< os<<"\t图书编号: "< os<<"\t数量: "< os<<"\t单价: "< os<<"\t金额: "< os<<"\t日期: "< os< returnos; } istream&operator>>(istream&in,PSInfo&info) { time_ttm=time(NULL); charsztm[64]; strftime(sztm,sizeof(sztm),"%Y/%m/%d",localtime(&tm)); info.date=sztm; cout<<"图书编号或书名: "; stringidorname; in>>idorname; BookInfo*bookinfo=FindBookInfo(idorname); if(bookinfo) { info.bookid=bookinfo->GetIndex(); cout<<"数量: "; in>>info.num; cout<<"单价: "; in>>info.price; info.sum=info.price*info.num; cout<<"总金额: "< } else cerr<<"无相关信息! "< returnin; } ///----------------文件流重载--------------------- ofstream&operator<<(ofstream&os,constBookInfo&book) { os< os< os< os< os< os< returnos; } ifstream&operator>>(ifstream&in,BookInfo&book) { in>>book.index; in>>book.name; in>>book.writer; in>>book.press; in>>book.date; in>>book.price; returnin; } ofstream&operator<<(ofstream&os,constPSInfo&info) { os< os< os< os< os< os< returnos; } ifstream&operator>>(ifstream&in,PSInfo&info) { in>>info.index; in>>info.bookid; in>>info.num; in>>info.price; in>>info.sum; in>>info.date; returnin; } //-------------------------------------------------- StoreInfo&StoreInfo: : operator+=(constPSInfo&info) { num+=info.num; return*this; } StoreInfo&StoreInfo: : operator-=(constPSInfo&info) { num-=info.num; return*this; } StoreInfo&StoreInfo: : operator=(constBookInfo&info) { index=info.index; name=info.name; writer=info.writer; return*this; } BookInfo*FindBookInfo(conststring&str) { for(inti=0;i if(shop.book[i].name==str||shop.book[i].index==str) return&shop.book[i]; returnNULL; } StoreInfo*FindStoreInfo(conststring&str) { for(inti=0;i if(shop.storeinfo[i].name==str||shop.storeinfo[i].index==str) return&shop.storeinfo[i]; returnNULL; } voidShop: : Purchase() { cin>>purinfo[purinfo_num]; StoreInfo*stinfo=FindStoreInfo(purinfo[purinfo_num].bookid);//在库存库里查找 if(stinfo) { purid++; charpuridstr[50]; sprintf(puridstr,"%d",purid); purinfo[purinfo_num].index=puridstr; (*stinfo)+=purinfo[purinfo_num];//添加库存 purinfo_num++; } else cerr<<"未找到相关库存信息! "< } voidShop: : Sale() { cin>>saleinfo[saleinfo_num]; StoreInfo*stinfo=FindStoreInfo(saleinfo[saleinfo_num].bookid);//在库存库里查找 if(stinfo) { if(stinfo->num { cerr<<"该书库存数少于销售数! "< return; } saleid++; charsaleidstr[50]; sprintf(saleidstr,"%d",purid); saleinfo[sal
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报告