资源描述
某公司的库存管理系统
1.设计内容:
对课程《算法与程序设计》中的相关内容进行综合设计或应用(具体课题题目见后面的供选题目)。
(一)、课程设计题目:
某公司的库存管理系统
(二)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
(三)、设计方法和基本原理:
1、问题描述(功能要求):
某公司现有以下设备:普通电视机、DVD、带DVD的电视机,带DVD的电视机的售价为普通电视机和DVD单价之和的80%,要求对所有的库存设备都能按照品名进行显示、查找、增加和删除、保存的功能。
2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告以及系统使用说明书。
2.设计要求:
l 课程设计报告正文内容
(包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目等)。
(一)需求分析
系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求;
(二)总体设计
系统功能分析;系统功能模块划分与设计(系统功能模块图)。
(三)详细设计
数据库需求分析;数据库概念结构设计(E-R图);数据库逻辑结构设计;
类层次图。
(四)界面设计与各功能模块实现
(五)系统调试
调试问题出现的主要问题:编译语法错误及修改,重点是运行逻辑问题修改和调整。
(六)使用说明及编程体会
说明如何使用你编写的程序,详细列出每一步的操作步骤。
(七)关键源程序(带注释)
3 目 录
一、系统设计分析.........................................6
二、程序设计明...........................................6
1.四个类完成实体类的定义...............................8
2.公司库存管理系统中各模块功能的实现...................8
3.添加物品信息模块...........................................................................9
4.显示物品信息模块.........................................................................10 5.查找物品信息模块.........................................................................10
6.删除物品信息模块.........................................................................11
7.保存物品信息模块.........................................................................12
三、系统调试.............................................................................................. 12
四、总结.................................................12
五、附件..................................................................................................12
一、系统设计分析
公司库存管理系统程序中,系统要求我们设计四个类:由家电类派生出来的普通电视机类和DVD类;再由普通电视机类和DVD类共同派生出来的带DVD的普通电视机类。在这个系统中我们需要实现六个功能:1、显示物品功能;2、添加物品功能;3、查找物品功能;4、删除物品功能;5、保存物品功能。
公司库存管理系统主要是为了让用户根据自己的需要自己想输入的一些物品,然后将其保存,当用户想查看所有物品时可以查看,想添加物品时可以添加自己想添加的相关物品信息,当用户想删除自己认为应当删除的物品时,用户可以根据自己的需要输入用户想删除的物品名称,然后将物品的相关信息删除;当用户想查找某一物品时,用户可以输入这一物品的名称然后查看这一物品的所有信息。
在这个系统中,用户可以根据系统的提示分别执行用户自己想实现的功能,比如:在添加物品信息功能中,用户可以输入自己想输入的物品信息;在显示物品功能中用户可以查看用户所保存的所有物品信息;在查找物品功能中用户可以根据自己的需要输入自己想查找的物品名称,然后查找用户想查找的物品的所有相关信息;在删除物品功能中用户可以根据自己的需要输入自己想删除的物品名称,然后进行删除;在物品保存功能中,当用户需要实现物品的保存时,系统会自动打开文件然后将用户输入的数据保存在用户给定的文件中。
二、程序设计说明
在公司库存管理系统中,物品信息主要为:物品名称,物品生产日期,物品的单价和数量。
公司库存管理系统中系统需要我们实现六个功能: 2、添加物品功能;3、显示物品功能;4、查找物品功能;5、删除物品功能;6、保存物品功能。
在物品添加功能中用户可以根据自己的需要输入自己想输入的物品信息(名称、生产日期、数量),然后将其保存。程序开始时,系统会提示用户先进行哪个功能,然后用户可根据需要输入相关型号的物品信息,输入完之后会再次提示用户是否继续输入,然后再根据提示进行相关操作。
一般情况下,我们先进行添加物品这一功能中,当用户选择此功能时系统会将录入这些信息并保存,以便下次查找。
在显示物品功能中,用户可以根据系统的提示输入想查找的相关物品的信息,之后系统便会弹出物品信息。
在删除物品功能中,用户根据系统的提示输入自己想删除的物品名称,然后将其删除。
在查找物品功能中,用户根据系统提示输入自己想查找的相关物品名称,然后在库存中的相关物品中查找,如果有此物品则会显示此物品的所有信息,如果没有则会显示无此物品信息。
在保存物品功能中,当用户选择此功能时,系统会将用户需要的所有物品保存。
详情:
1.四个类完成实体类的定义
Wiring类
数据成员:物品名称,年.月.日.物品数量
成员函数:设置价格函数
class wiring
{public:
char name[10];//物品名称
int year,month,day;//出厂日期
int number;//物品数量
TV类
class TV:virtual public wiring
{public:
TV() {}
void set1(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price1=3000;} //普通电视机售价
float price1;};
DVD类 class DVD:virtual public wiring
{public:
DVD() {}
void set2(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price2=2000;}//DVD售价
float price2;};
TV_DVD类 class TV_DVD:public TV,public DVD
{public:
TV_DVD() {}
void set3(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price=(2000+3000)*80/100;}//带DVD的普通电视机售价
float price;};
2.公司库存管理系统中各功能模块的实现:
1、添加物品信息
2、显示物品信息
3、删除物品信息
3、查找物品信息
5、保存物品信息
6、保存物品信息
菜
单
3、添加物品信息模块:
添加物品信息
添加普通电视机的相关信息
添加DVD的相关信息
添加带DVD的普通电视机的相关信息
1、物品名称
2、生产日期
3、产品数量
4、显示物品信息模块:
在输入完第一次的添加产品后显示产品时,即显示出产品信息。
5、查找物品信息:
查找物品信息
查找类型
查找名称
返回后根据菜单选择3,即查找物品信息。依照提示输入所查找的类型和名称,则弹出所需物品信息。
6、删除物品信息:
删除物品
删除物品信息
物品名称
根据菜单选择4,即删除物品信息。依照提示输入要删除的类型和名称。
7、最后根据提示将保存物品信息。
三、系统调试
在调试程序中,出现很多问题,比如有的字符未定义,少花括号,分号,等等一些细节问题。后来一个一个慢慢改,感觉很是麻烦。还有显示有一个函数非法定义,后来经过同学帮忙才知道原来是花括号缺少的问题。
在调试中,我在添加物品信息中,当我输入完一类物品信息后,想输入另一物品信息时,无法继续输入,总是输入同一物品信息,后来当我在循环中想退出for语句循环时,在需要退出时加一个break语句就可以退出当前循环进行其他步骤。
在调试中,我深刻体会到循环语句的重要性,一个不留神就会把数据弄错,同时也尝到用while语句的妙用,感觉比do…while语句好用多了,所以在程序中就多次用到了while语句,用do…while语句的话,程序就要先执行一次,在判断那个语句是否正确,如果正确就会继续执行该程序段,否则就会退出程序。而用while语句的话则是先判断那个语句是否正确,如果正确就会执行该程序段,否则不执行。
四、总结
程序设计是一个很复杂的问题,有的时候自己感觉没有出现任何错误,但是一运行,错误一大堆。小问题也随处可见。所以感觉编程这份工作的确是需要付出很大的努力,要游刃有余的使用每个函数,而不用老是翻书查看,像我在建立类,需要创建派生类时,还需要翻书查看具体内容,这是对书本知识不熟练的表现。
在完善程序时,感觉添加物品信息时类型太少了,只要输入物品类型、名称、生产日期和产品数目。本来还打算多加几个,但又觉得太麻烦,所以就放弃了。
做完这次课程设计,深深的感到自己还有很大不足之处。所以下定决心这个寒假回家好好补补课。
附件:
#include<iostream>
#include<fstream>
#include<cstring>
#include<windows.h>
using namespace std;
class wiring
{public:
char name[10];//物品名称
int year,month,day;//出厂日期
int number;//物品数量
wiring() {}//构造函数
~wiring() {}//析构函数
virtual void pay() {}//设置价格函数
};
class TV:virtual public wiring
{public:
TV() {}
void set1(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price1=3000;} //普通电视机售价
float price1;};
class DVD:virtual public wiring
{public:
DVD() {}
void set2(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price2=2000;}//DVD售价
float price2;};
class TV_DVD:public TV,public DVD
{public:
TV_DVD() {}
void set3(char *n,int y,int m,int d,int nn)
{strcpy(name,n);
year=y;
month=m;
day=d;
number=nn;}
void pay() {price=(2000+3000)*80/100;}//带DVD的普通电视机售价
float price;};
TV t1[20];DVD d1[20];TV_DVD td1[20];
static int k(0),k1(0),k2(0);
void main()//主函数
{void caidan();
caidan();}
void caidan()
{void addw();//添加物品信息
void shown();//显示物品信息
void selectw();//删除物品信息
void searchw();//查找物品信息
void savew();//保存物品信息
int a1;
system("color 0D");
cout<<"\n";
cout<<"\t\t************************\n";
cout<<"\t(1) *** 添加物品信息 *** \n";
cout<<"\t(2) *** 显示物品信息 *** \n";
cout<<"\t(3) *** 查找物品信息 *** \n";
cout<<"\t(4) *** 删除物品信息 *** \n";
cout<<"\t(5) *** 保存物品信息 *** \n";
cout<<"\t(6) *** 退出 *** \n";
cout<<"\t\t************************\n";
cout<<"\n请输入1或2或3或4或5或6进行你所要执行地下一步动作:\n";
cin>>a1;
while(a1!=1&&a1!=2&&a1!=3&&a1!=4&&a1!=5&&a1!=6) {cout<<"\n请重新输入数字1或2或3或4或5或6:";cin>>a1;}
if(a1==1) addw();
if(a1==2) shown();
if(a1==3) searchw();
if(a1==4) selectw();
if(a1==5) savew();
if(a1==6) cout<<"\n退出程序!\n";
}
void addw()//添加物品信息函数
{void caidan();//菜单函数
char a[10];
int m,n,h,n1,rr,i1,v,i=9,r1;
cout<<"\n请输入数字键添加对应的物品信息(1-普通电视机 2-DVD 3-带DVD的普通电视机):";
while(i!=0)
{cin>>i;
if(i==1)
{cout<<"\n请输入普通电视机的相关信息!\n";
for(v=k;v<20;v++)
{cout<<"物品名称:";
cin>>a;
cout<<"\n物品出厂日期:";
cin>>m>>n>>h;
cout<<"\n物品数量:";
cin>>n1;
t1[v].set1(a,m,n,h,n1);
t1[v].pay();
k++;
cout<<"\n想继续添加普通电视机的相关信息吗?(1-是 2-否):";
cin>>i1;
while(i1!=1&&i1!=2)
{ cout<<"\n请重新输入数字1或2:";
cin>>i1;
}
if(i1==1) {cout<<"\n请继续输入普通电视机的相关信息!\n";}
else break;}}
if(i==2)
{cout<<"\n请输入DVD的相关信息!\n";
for(v=k1;v<20;v++)
{cout<<"物品名称:";
cin>>a;
cout<<"\n物品出厂日期:";
cin>>m>>n>>h;
cout<<"\n物品数量:";
cin>>n1;
d1[v].set2(a,m,n,h,n1);
d1[v].pay();
k1++;
cout<<"\n想继续添加DVD的相关信息吗?(1-是 2-否):";
cin>>i1;
while(i1!=1&&i1!=2)
{ cout<<"\n请重新输入数字1或2:";
cin>>i1;
}
if(i1==1) {cout<<"\n请继续输入DVD的相关信息!\n";}
else break;}}
if(i==3)
{cout<<"\n请输入带DVD的普通电视机的相关信息!\n";
for(v=k2;v<20;v++)
{cout<<"物品名称:";
cin>>a;
cout<<"\n物品出厂日期:";
cin>>m>>n>>h;
cout<<"\n物品数量:";
cin>>n1;
td1[v].set3(a,m,n,h,n1);
td1[v].pay();
k2++;
cout<<"\n想继续添加带DVD的普通电视机的相关信息吗?(1-是 2-否):";
cin>>i1;
while(i1!=1&&i1!=2)
{ cout<<"\n请重新输入数字1或2:";
cin>>i1;
}
if(i1==1) {cout<<"\n请继续输入带DVD的普通电视机的相关信息!\n";}
if(i1==2) break;}}
cout<<"\n想添加其他物品的相关信息吗?(1-是 2-否):";
cin>>i1;
while(i1!=1&&i1!=2) {cout<<"\n请重新输入数字1或2:";cin>>i1;}
if(i1==1) {cout<<"\n请输入数字输入相对应的物品信息(1-普通电视机 2-DVD 3-带DVD的普通电视机):";}
if(i1==2) break;}
cout<<"想保存你所输入得数据吗?(1-是 2-否):";
cin>>rr;
while(rr!=1&&rr!=2) {cout<<"\n请重新输入数字1或2:";cin>>rr;}
if(rr==1)
{ofstream ofile("wiring.txt",ios_base::out);
for(v=0;v<k;v++)
{ofile<<"\n普通电视机的名称:"<<t1[v].name<<"\n普通电视机的出厂日期:"<<t1[v].year<<"/"<<t1[v].month
<<"/"<<t1[v].day<<"\n普通电视机的单价:"<<t1[v].price1<<"\n普通电视机的数量:"<<t1[v].number<<endl;}
for(v=0;v<k1;v++)
{ofile<<"\nDVD的名称:"<<d1[v].name<<"\nDVD的出厂日期:"<<d1[v].year<<"/"<<d1[v].month
<<"/"<<d1[v].day<<"\nDVD的单价:"<<d1[v].price2<<"\nDVD的数量:"<<d1[v].number<<endl;}
for(v=0;v<k2;v++)
{ofile<<"\n带DVD的普通电视机的名称:"<<td1[v].name<<"\n带DVD的普通电视机的出厂日期:"<<td1[v].year<<"/"<<td1[v].month
<<"/"<<td1[v].day<<"\n带DVD的普通电视机的单价:"<<td1[v].price<<"\n带DVD的普通电视机的数量:"<<td1[v].number<<endl;}
ofile.close();
cout<<"\n物品信息已储存!";
cout<<"\n按键1返回菜单:";
cin>>r1;
while(r1!=1) {cout<<"\n请重新输入数字1:";cin>>r1;}
if(r1==1) { system("cls");caidan();}
if(r1==2) {cout<<"\n退出程序!";}}
if(rr==2)
{cout<<"\n按键1返回菜单2退出程序:";
cin>>r1;
while(r1!=1&&r1!=2) {cout<<"\n请重新输入数字1或2:";cin>>r1;}
if(r1==1) { system("cls");caidan();}
if(r1==2) {cout<<"\n退出程序!";}}}
void shown()//显示物品信息
{cout<<"\n从文件中读取物品信息\n";
char ch;int nn;
ifstream ofile("wiring.txt");
while(ofile.get(ch))
cout<<ch;
ofile.close();
cout<<"请按键1返回菜单或按键2退出程序:";
cin>>nn;
while(nn!=1&&nn!=2) {cout<<"请重新输入数字1或2:";cin>>nn;}
if(nn==1) {system("cls"); caidan();}
if(nn==2) cout<<"退出程序!\n";}
void searchw()//查找物品信息
{void caidan();
char namestr[20];int rr;int i,j;
cout<<"\n请输入你想查找的物品类型(1-普通电视机 2-DVD 3-带DVD的普通电视机):";
cin>>rr;
while(rr!=1&&rr!=2&&rr!=3) {cout<<"\n请重新输入数字1或2或3:";cin>>rr;}
if(rr==1)
{cout<<"\n请输入你要查找的普通电视机名称:";
cin>>namestr;
for(i=0;i<k;i++)
{if(strcmp(namestr,t1[i].name)==0)
{cout<<"\n普通电视机的名称:"<<t1[i].name<<"\n普通电视机的出厂日期:"<<t1[i].year<<"/"<<t1[i].month
<<"/"<<t1[i].day<<"\n普通电视机的单价:"<<t1[i].price1<<"\n普通电视机的数量:"<<t1[i].number<<endl;break;}}
if(i==k) cout<<"\n对不起,没有你所要的普通电视机的相关信息!\n"; }
if(rr==2)
{cout<<"\n请输入你要查找的DVD名称:";
cin>>namestr;
for(i=0;i<k1;i++)
{if(strcmp(namestr,d1[i].name)==0)
{cout<<"\nDVD的名称:"<<d1[i].name<<"\nDVD的出厂日期:"<<d1[i].year<<"/"<<d1[i].month
<<"/"<<d1[i].day<<"\nDVD的单价:"<<d1[i].price2<<"\nDVD的数量:"<<d1[i].number<<endl;break;}}
if(i==k1) cout<<"\n对不起,没有你所要的DVD的相关信息!\n";}
if(rr==3)
{cout<<"\n请输入你要查找的带DVD的普通电视机的名称:";
cin>>namestr;
for(i=0;i<k2;i++)
{if(strcmp(namestr,td1[i].name)==0)
{cout<<"\n带DVD的普通电视机的名称:"<<td1[i].name<<"\n带DVD的普通电视机的出厂日期:"<<td1[i].year<<"/"<<td1[i].month
<<"/"<<td1[i].day<<"\n带DVD的普通电视机的单价:"<<td1[i].price<<"\n带DVD的普通电视机的数量:"<<td1[i].number<<endl;break;
}}
if(i==k2) cout<<"\n对不起,没有你所要的带DVD的普通电视机的相关信息!\n";}
cout<<"\n请输入数字键1返回菜单或数字键2退出程序:";
cin>>j;
while(j!=1&&j!=2)
{cout<<"\n请重新输入数字1或2:";
cin>>j;}
if(j==1) {system("cls");caidan();}
if(j==2) cout<<"\n退出程序!";}
void selectw()//删除物品信息
{void caidan();
char namestr[20];int rr,i,r1,i1(-1),i2(-1),i3(-1);
cout<<"\n请输入你要删除的物品信息(1-普通电视机 2-DVD 3-带DVD的普通电视机):";
cin>>rr;
while(rr!=1&&rr!=2&&rr!=3) {cout<<"\n请重新输入数字1或2或3:";cin>>rr;}
if(rr==1)
{cout<<"\n请输入你想删除的普通电视机名称:";
cin>>namestr;
for(i=0;i<k;i++) {if(strcmp(namestr,t1[i].name)==0) i1=i;}}
if(rr==2)
{cout<<"\n请输入你想删除的DVD名称:";
cin>>namestr;
for(i=0;i<k1;i++) {if(strcmp(namestr,d1[i].name)==0) i2=i;}}
if(rr==3)
{cout<<"\n请输入你想删除的带DVD的普通电视机的名称:";
cin>>namestr;
for(i=0;i<k2;i++) {if(strcmp(namestr,td1[i].name)==0) i3=i;}}
cout<<"想保存删除后的信息吗?(1-是 2-否):";
cin>>r1;
while(r1!=1&&r1!=2) {cout<<"请重新输入数字1或2:";cin>>r1;}
if(r1==1)
{ofstream ofile("wiring.txt",ios_base::out);
for(i=0;i<k;i++)
{if(i==i1) continue;
else
{ofile<<"\n普通电视机的名称:"<<t1[i].name<<"\n普通电视机的出厂日期:"<<t1[i].year<<"/"<<t1[i].month
<<"/"<<t1[i].day<<"\n普通电视机的单价:"<<t1[i].price1<<"\n普通电视机的数量:"<<t1[i].number<<endl;}}
for(i=0;i<k1;i++)
{if(i==i2) continue;
else
{ofile<<"\nDVD的名称:"<<d1[i].name<<"\nDVD的出厂日期:"<<d1[i].year<<"/"<<d1[i].month
<<"/"<<d1[i].day<<"\nDVD的单价:"<<d1[i].price2<<"\nDVD的数量:"<<d1[i].number<<endl;}}
for(i=0;i<k2;i++)
{if(i==i3) continue;
else
{ofile<<"\n带DVD的普通电视机的名称:"<<td1[i].name<<"\n带DVD的普通电视机的出厂日期:"<<td1[i].year<<"/"<<td1[i].month
<<"/"<<td1[i].day<<"\n带DVD的普通电视机的单价:"<<td1[i].price<<"\n带DVD的普通电视机的数量:"<<td1[i].number<<endl;}}
ofile.close();
cout<<"\n物品信息已保存!\n";}
cout<<"按键1返回菜单,2退出程序:";
cin>>r1;
while(r1!=1&&r1!=2) {cout<<"请重新输入数字1或2:";cin>>r1;}
if(r1==1) {system("cls"); caidan();}
if(r1==2) cout<<"退出程序!\n";}
void savew()//保存物品信息
{void caidan();
ofstream ofile("wiring.txt",ios_base::out);
int i,rr;
for(i=0;i<k;i++)
{ofile<<"\n普通电视机的名称:"<<t1[i].name<<"\n普通电视机的出厂日期:"<<t1[i].year<<"/"<<t1[i].month
<<"/"<<t1[i].day<<"\n普通电视机的单价:"<<t1[i].price1<<"\n普通电视机的数量:"<<t1[i].number<<endl;}
for(i=0;i<k1;i++)
{ofile<<"\nDVD的名称:"<<d1[i].name<<"\nDVD的出厂日期:"<<d1[i].year<<"/"<<d1[i].month
<<"/"<<d1[i].day<<"\nDVD的单价:"<<d1[i].price2<<"\nDVD的数量:"<<d1[i].number<<endl;}
for(i=0;i<k2;i++)
{ofile<<"\n带DVD的普通电视机的名称:"<<td1[i].name<<"\n带DVD的普通电视机的出厂日期:"<<td1[i].year<<"/"<<td1[i].month
<<"/"<<td1[i].day<<"\n带DVD的普通电视机的单价:"<<td1[i].price<<"\n带DVD的普通电视机的数量:"<<td1[i].number<<endl;}
ofile.close();
cout<<"\n物品信息已储存!";
cout<<"\n输入数字键1返回菜单,2退出程序:";
cin>>rr;
while(rr!=1&&rr!=2) {cout<<"\n请重新输入数字1或2:";cin>>rr;}
if(rr==1) {system("cls");caidan();}//清屏并返回菜单
else {cout<<"\n退出程序!";}}
精选范本
展开阅读全文