课设的要求:
1、要求利用面向对象的编程思想来完成系统的设计;
2、要求在设计的过程中,建立清晰的类层次;
3、在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;
4、在系统的设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。
5、学院固定资产管理系统主要负责学院各顶资产的常规管理工作。
系统中的固定资产主要有台式计算机、便携式计算机、服务器、打印机、投影仪等类别。每件(台、套)有资产编号、资产名、制造公司、购买时间、单价、数量、使用人、性能参数等。由于这些不同类别的资产有相同内容,故可设计一个含有公共信息的父类。
设计“学院固定资产管理系统”,使之能提供以下功能:
1)添加资产;
2)查询资产:按资产类别查询、按资产使用人查询、按资产编号查询;
3)资产信息的删除和修改;
4)资产信息统计:如按资产类别统计、按资产金额统计等。
注:类名取的是资产姓名前两个字的首字母。e.g:计算机——Js
部分功能展示:
源代码:
#include<iostream>
#include<string>
#include<fstream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
//record代表记录的所以资产件数
int record;
void save();
void read();
//Content类用来记录参数
class Content{
protected:
string num,name,maker;
int time;
double price;
string user,parameter;
};
//Way类包含对参数操作的函数
class Way:public Content{
public:
void show();
void edit();
void add();
void getcontent(string s1,string s2,string s3,int n1,double n2,string s4,string s5);
void del();
string backnum();
string backname();
string backmaker();
int backtime();
double backprice();
string backuser();
string backparameter();
};
//存放资产
Way bigguy[100];
void Way::show(){
cout<<"\t资产编号:"<<num<<endl;
cout<<"\t资产名:"<<name<<endl;
cout<<"\t制造公司:"<<maker<<endl;
cout<<"\t购买时间:"<<time<<endl;
cout<<"\t单价:"<<price<<endl;
cout<<"\t使用人:"<<user<<endl;
cout<<"\t性能参数:"<<parameter<<endl;
cout<<"\t——————————————\n" ;}
void Way::edit(){
int chose,mark=1,i;
string temp;
cout<<"\t选择要改表的内容\n";
cout<<"\t 1.资产编号\t 2.资产名\t 3.制造公司\n";
cout<<"\t 4.购买时间\t 5.单价 \t 6.使用人\n";
cout<<"\t 7.性能参数\n";
cin>>chose;
switch(chose){
case 1:{cout<<"\t资产编号:";
while(1){
cin>>temp;
for(i=0;i<record;i++)
if(bigguy[i].backnum()==temp){
cout<<"\t该编号已存在!请重新输入:";
break;}
if(i>=record){
num=temp;
break;
}
}
break;
}
case 2:{cout<<"\t资产名:";
cin>>name;
break;
}
case 3:{cout<<"\t制造公司:";
cin>>maker;
break;
}
case 4:{cout<<"\t购买时间(如:20200121):";
while(1){
cin>>time;
if(time<20201232&&time>20000101)
break;
else cout<<"\t输入的时间有误,请重输:";
}
break;
}
case 5:{cout<<"\t单价(元):";
while(1)
{
cin>>price;
if(cin.fail()||price<0)
{
cout<<"\t请输入有效数字:";
cin.clear();
cin.ignore(1024,'\n');
}
else
break;
}
break;
}
case 6:{cout<<"\t使用人:";
cin>>user;
break;
}
case 7:{cout<<"\t性能参数:";
cin>>parameter;
break;
}
default:{cout<<"\t无效选择";
mark==0;
}
}
if(mark==1)
cout<<"\t修改完成\n";
else
cout<<"\t请重新输入!";
}
void Way::add(){
int i;
cout<<"\t请按要求输入信息:\n";
cout<<"\t 1.资产编号:";
while(1){
cin>>num;
for(i=0;i<record;i++)
if(bigguy[i].backnum()==num){
cout<<"\t该编号已存在!请重新输入:";
break;
}
if(i>=record)break;
}
cout<<"\t 2.制造公司:"; cin>>maker;
cout<<"\t 3.购买时间(例:20200102):";
while(1){
cin>>time;
if(cin.fail()){
cin.clear();
cin.ignore(100,'\n');
cout<<"\t输入的时间有误,请重输:";
}
else if(time<20201232&&time>20000101)
break;
}
cout<<"\t 4.单价(元):";
while(1)
{
cin>>price;
if(cin.fail()||price<0)
{
cout<<"\t请输入有效数字:";
cin.clear();
cin.ignore(1024,'\n');
}
else
break;
}
cout<<"\t 5.使用人:"; cin>>user;
cout<<"\t 6.性能参数:"; cin>>parameter;
cout<<"\t资产添加完毕!\n";
}
void Way::getcontent(string s1,string s2,string s3,int n1,double n2,string s4,string s5){
num=s1; name=s2; maker=s3; time=n1; price=n2; user=s4; parameter=s5;
}
void Way::del(){
num='\0';name='\0';maker='\0';time=0;price=0;user='\0';parameter='\0';
cout<<"\t删除完成!\n";
}
string Way::backnum(){
return num;
}
string Way::backname(){
return name;
}
string Way::backmaker(){
return maker;
}
int Way::backtime(){
return time;
}
double Way::backprice(){
return price;
}
string Way::backuser(){
return user;
}
string Way::backparameter(){
return parameter;
}
class Ts:public Way{
public:
Ts(){
name="台式计算机";}
};
class Bx:public Way{
public:
Bx(){
name="便携式计算机";}
};
class Fw:public Way{
public:
Fw(){
name="服务器";}
};
class Dy:public Way{
public:
Dy(){
name="打印机";}
};
class Ty:public Way{
public:
Ty(){
name="投影仪";}
};
void menu();
string chosekind();
void searchn(string x);
void searchu(string x);
int searchnum(string x);
void statisticskind();
void statisticsmoney();
int main(){
read();
while(1){
menu();
}
}
void menu(){
int chose,temp,temp_;
string x;
cout<<"\t——————欢迎使用 学院固定资产管理系统——————\n";
cout<<endl;
cout<<"\t请选择您要进行的操作:\n";
cout<<"\t 1.添加资产 \t 2.查询资产\n" ;
cout<<"\t 3.资产信息修改与删除 \t 4.资产信息统计\t 5.退出系统\n";
cout<<endl;
cout<<"\t———————————————————————————\n";
while(1)
{
cin>>chose;
if(cin.fail())
{
cin.clear();
cin.ignore(1024,'\n');
}
else
break;
}
switch(chose){
case 1:{
cout<<"\t选择要添加的资产类型\n";
x=chosekind();
if(x=="台式计算机"){
Ts ts;
ts.add();
bigguy[record]=ts;
record++;
}
else if(x=="便携式计算机"){
Bx bx;
bx.add();
bigguy[record]=bx;
record++;
}
else if(x=="服务器"){
Fw fw;
fw.add();
bigguy[record]=fw;
record++;
}
else if(x=="打印机"){
Dy dy;
dy.add();
bigguy[record]=dy;
record++;
}
else if(x=="投影仪"){
Ty ty;
ty.add();
bigguy[record]=ty;
record++;
}
break;
}
case 2:{
cout<<"\t\t选择查询方式:\n";
cout<<"\t\t\t 1.按资产类别查询\t 2.按资产使用人查询\t 3.按资产编号查询\n";
cin>>temp;
switch(temp){
case 1:{
x=chosekind();
searchn(x);
break;
}
case 2:{
cout<<"\t请输入资产使用人姓名:";cin>>x;
searchu(x);
break;
}
case 3:{
cout<<"\t请输入资产编号:";cin>>x;
searchnum(x);
break;
}
default:cout<<"\t请输入有效数字!\n";
}
break;}
case 3:{
cout<<"\t输入需要编辑或删除的编号:";
cin>>x;
temp_=searchnum(x);
if(temp_!=-1){
cout<<"\t请选择编辑或删除:1.编辑\t 2.删除\n";
cin>>temp;
switch(temp){
case 1:bigguy[temp_].edit();break;
case 2:bigguy[temp_].del();break;
default:cout<<"\t请输入有效数字!\n";break;
}}
else cout<<"\t无此编号\n";
break;
}
case 4:{
cout<<"\t\t选择统计方式:\n";
cout<<"\t\t\t1.按资产类别统计\t 2.按资产金额统计\n";
cin>>temp;
switch(temp){
case 1:statisticskind();break;
case 2:statisticsmoney();break;
default:cout<<"\t请输入有效数字!\n";
}
break;
}
case 5:{ save(); cout<<"\t已退出!\n"; exit(0); break; }
default:cout<<"无效选择\n";
}
}
string chosekind(){
int chose;
string back;
cout<<"\t 1.台式计算机 \t 2.便携式计算机 3.服务器\n";
cout<<"\t 4.打印机 \t 5.投影仪\n";
cin>>chose;
switch(chose){
case 1:back="台式计算机";break;
case 2:back="便携式计算机";break;
case 3:back="服务器";break;
case 4:back="打印机";break;
case 5:back="投影仪";break;
default:cout<<"请输入有效值\n";
}
return back;
}
//参数内容保存在 test.txt 文件中,同理一开始也从此文件中读取
void read(){
ifstream infile;
infile.open("test.txt");
if(!infile){
cout<<"\t无此文件\n";return;
}
infile.seekg(ios::beg);
record=0;
int n1;
double n2;
string s1,s2,s3,s4,s5;
char c;
if(infile.eof())return;
while(!infile.eof()){
infile>>s1>>s2>>s3>>n1>>n2>>s4>>s5>>c;
bigguy[record].getcontent(s1,s2,s3,n1,n2,s4,s5);
record++;
}
infile.close();
}
void save(){
int i;
ofstream outfile("test.txt",ios::trunc);
for(i=0;i<record;i++){
if(bigguy[i].backtime()==0)continue;
else
outfile<<bigguy[i].backnum()<<" "<<bigguy[i].backname()<<" "
<<bigguy[i].backmaker()<<" "<<bigguy[i].backtime()<<" "
<<bigguy[i].backprice()<<" "<<bigguy[i].backuser()<<" "<<bigguy[i].backparameter()<<endl;}
outfile.close();
}
//通过用户搜索,searchn(ame),以下的函数命名意义相同
void searchn(string x){
int i;
for(i=0;i<record;i++)
if(bigguy[i].backname()==x)
bigguy[i].show();
if(i>record)cout<<"\t无此资产!\n";
}
void searchu(string x){
int i,mark=0;
for(i=0;i<record;i++)
if(bigguy[i].backuser()==x)
{
bigguy[i].show();
mark=1;
}
if(mark==0)cout<<"\t查无此人!\n";
}
int searchnum(string x){
int i;
for(i=0;i<record;i++){
if(bigguy[i].backnum()==x){
bigguy[i].show();
return i;
}
}
cout<<"\t无此编号!\n";
return -1;
}
void statisticskind(){
int i,n1,n2,n3,n4,n5;
n1=n2=n3=n4=n5=0;
for(i=0;i<record;i++){
if(bigguy[i].backname()=="台式计算机")n1++;
else if(bigguy[i].backname()=="便携式计算机")n2++;
else if(bigguy[i].backname()=="服务器")n3++;
else if(bigguy[i].backname()=="打印机")n4++;
else if(bigguy[i].backname()=="投影仪")n5++; }
cout<<"\t台式计算机\t"<<n1<<"台\n";
cout<<"\t便携式计算机\t"<<n2<<"台\n";
cout<<"\t服务器\t"<<n3<<"台\n";
cout<<"\t打印机\t"<<n4<<"台\n";
cout<<"\t投影仪\t"<<n5<<"台\n";
}
void statisticsmoney(){
int i;
double n1,n2,n3,n4,n5;
n1=n2=n3=n4=n5=0.0;
for(i=0;i<record;i++){
if(bigguy[i].backname()=="台式计算机")n1+=bigguy[i].backprice();
else if(bigguy[i].backname()=="便携式计算机")n2+=bigguy[i].backprice();
else if(bigguy[i].backname()=="服务器")n3+=bigguy[i].backprice();
else if(bigguy[i].backname()=="打印机")n4+=bigguy[i].backprice();
else if(bigguy[i].backname()=="投影仪")n5+=bigguy[i].backprice(); }
cout<<"\t台式计算机总金额(元)\t"<<n1<<endl;
cout<<"\t便携式计算机总金额(元)\t"<<n2<<endl;
cout<<"\t服务器总金额(元)\t"<<n3<<endl;
cout<<"\t打印机总金额(元)\t"<<n4<<endl;
cout<<"\t投影仪总金额(元)\t"<<n5<<endl;
}