资源描述
昆明理工大学城市学院
昆明理工大学城市学院面向对象程序设计实训报告
仓库商品检查登记管理系统
专业:
班级:
姓名:
学号:
指导老师:
2021年1月6日
目录
目录………………………………1
实训的目的和任务………………3
实训内容指导……………………3
仓库商品检查登记管理系统……
类设计……………………………
流程图……………………………
源代码……………………………
程序运行结果……………………
总结………………………………
一、实训的目的和任务
C++语言程序设计的实训,是教学方案中的一个有机组成局部,是培养学生综合应用所学的根底的理论,根本知识和技能,分析解决实际问题能力的重要一环,与其它教学环节紧密配合,相辅相成,是前面教学环节的继续,深入和开展。通过实训过程可在不同程度上提高调查研究,查问文献,实际应用的能力。
二、实训内容指导
〔一〕数据类型和表达式
根底实训
1、定义一个描述学生的结构体类型student,含有学号num、姓名name、性别sex、成绩score几个分量,再定义属于这个结构体类型的两个变量stu1、stu2。
struct student
{
int num; /* 学号 */
char name[20]; /* 姓名 */
char sex; /* 性别 */
float score; /* 成绩 */
};
struct student student1, student2;
2、建立一个适于描述碗和勺子的结构体,有关的信息是:两者都有货号、价格、颜色,不同的是碗的大小用口径来表示,勺子的大小用枚举类型表示,分大、中、小三种。现有的勺子的大小是中,将其表示出来。
#include <iostream>
using namespace std;
struct bowl{
int No;
int price;
char color;
float size;
};
struct spoon{
int No;
int price;
char color;
struct{
enum {small,medium,big}shaozi;
}a;
}b;
void main()
{
b.a.shaozi = b.a.medium;
cout<<b.a.shaozi;
}
3、编程实现两个整数相加。
#include<iostream.h>
int main()
{
int integer1,integer2,sum;
cout<<"Enter first integer\n";
cin>>integer1;
cout<<"Enter second integer\n";
cin>>integer2;
sum=integer1+integer2;
cout<<"Sum is "<< sum<< endl;
return;
}
4、编程实现,输入一个三位整数,能够将它反向输出。
#include <stdio.h>
#include<iostream>
using namespace std;
void main()
{
int num;
cout<<"input:";
cin>>num;
while(num)
{
cout<<num%10;
num /=10;
}
cout<<endl;
}
5、读程序写结果。
综合实训
数字互换实训。输入一个大于三位的整数,编一个程序,将它的十位数和百位数互换位置。
#include<iostream>
using namespace std;
int main()
{
int x;
int a[3];
cin>>x;
for(int i=0;i<3;i++)
{
a[i]=x%10;x=x/10;
}
x=x*1000+a[0]+a[1]*100+a[2]*10;
cout<<x<<endl;
return 1;
}
〔二〕语句和函数
根底实训
1、根据考试成绩的等级A、B、C和D,输出对应的百分制分数段,A对应85~100,B对应70~84,C对应60~69,D对应0~60。
#define num 100
int a[]=new int [num];
for(int i=0;i<num;i++)
{
if(a[i]>=85)
cout<<'A';
ese if(a[i]>=70)
cout<<'B';
else if(a[i]>=60)
cout<<'C';
else
cout<<'D';
}
2、用for语句编程求1~100之和。
#include<iostream.h>
void main()
{
int sum(0);
for(int i=1;i<=100;i++)
sum+=i;
cout<<"sum="<<sum<<endl;
}
3、用for语句、while语句和递归函数三种方法计算n!。
#include<iostream.h>
main(){
int n;
int sum=1;
cin<<n;
for(;n>0;)
sum*=n--;
while(n>0)
sum*=n--;
int f(int x)
{
if(x>1)
{
x*=f(x-1);
return x;
}
else
return x;
}
4、用for循环编程打印图形。
#include <iostream>
using namespace std;
int main()
{
for(int i=1;i<=5;i++)
{
for(int j=1;j<=i;j++)
cout<<"*";
cout<<endl;
}
cout<<"*****"<<endl;
cout<<"*"<<endl;
}
5、编写函数,判断一个数是否是质数。
# include<iostream>
# include<cmath>
using namespace std;
int main()
{int i,j,k;
cin>>j;
k=sqrt(j);
for(i=2;i<=k;i++)
if(j%i==0)break;
if(i>k)
cout<<1;
else cout<<0;
return 0;
}
9、设计一个函数,求三个数中的最大值。
#include<iostream.h>
int max(int,int,int);
void main()
{
cout<<max(35,48,26)<<endl;
}
int max(int a,int b,int c)
{
int t=max(a,b);
return max(t,c);
}
10、编写程序,利用itoa函数实现整数到字符串的转换。
#include<stdio.h>
int itoa(x)
{
char c;
c=x;
printf("%c",c);
getch();
}
int main(void)
{
int a;
printf("input a number:");
scanf("%d",&a);
itoa(a);
}
11、编写程序,最多读入10个数,读入0表示结束。将读入的非零的数放在一个数组里,按从大到小的顺序排序后输出。
#include <iostream>
#include<iterator>
#include<algorithm>
#include<vector>
using namespace std;
int main()//主函数
{
vector<int> b;
for(int i=0;i<10;i++){
int x=0;
cin>>x;
if( x )
b.push_back( x );
else
break;
}
sort( b.begin(),b.end() );
copy( b.begin(),b.end() , ostream_iterator<int>(cout," ") );
return 0;
}
12、将一个代表整型数的字符串转换为一个整型的数字。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
stringstream a;
string b;
int i;
cin>>b;
a.str(b);
a>>i;
cout<<i*2<<endl;
return 0;
}
综合实训〔职工信息处理函数实训〕
职工的信息有姓名、年龄、工龄、性别、婚姻状况、级别、工资、在职否。现在要进行工资的调整,规定但凡退休职工一律增加工资50元,在职1~5级职工的工资分别增加20、40、60、80、100元。编程实现上述工资调整。要求如下:
〔1〕分析要存放的信息,设计适宜的数据结构;
〔2〕分析要对信息进行的操作,进行处理;
〔3〕打印程序执行前后的工资状况和级别。
〔三〕面向对象根本概念与类实训
根底实训
1、读程序写结果;
2、设计一个表示猫的类,包括猫的颜色、体重、年龄等数据,具有设置猫的颜色,修改和显示猫的体重、年龄等操作。
设猫类的类名为Cat,猫类Cat有3个数据成员,颜色用字符串color[7],可以存放3个汉字,体重用实型数weight表示,年龄用整型数age表示,为了数据的平安性,Cat的3个数据成员全部为私有的。对猫的属性数据的设置和修改,PutColor为设置和修改颜色,PutWeight为设置和修改体重,PutAge为设置和修改年龄,它们都设置为公有函数,还要有一个1个3个参数的函数 SetCat。设计Display函数输出猫的信息。
#include <iostream>
class Cat
{
private String colour;
private int weight;
private int age;
...
int getWeight(){ return weight;}
int getAge(){ return age;}
void setClolur(String xClolour){ colour=xCloour;}
void setWeight(int xWeight){ weight=xWeight;}
void setAge(int xAge) { age=xAge;}
}
3、 设计一个表示学习成绩的类,至少包括三门课程的成绩,可以设置、显示每门课程的成绩,可以计算、显示平均成绩。
class Grades{
private:
int Math,English,Chinese;
public:
Grades() { Math = English = Chinese = 0;}
Grades(int a,int b,int c)
{
Math = a;
English = b;
Chinese = c;
}
int getM(){ return Math;}
int getE(){ return English;}
int GetC(){ return Chinese;}
void Setvalue(int a,int b,int c)
{
Math = a;
English = b;
Chinese = c;
}
void Display();
float Average()
{
return (Math+English+Chinese)/3.0;
}
}
4、设计成绩类,成绩类的数据成员,应该包括学生的学号Number[10]和姓名Name[9],假设有3门课,分别为C++程序设计语言,用整型变量Cpp表示;计算机原理,用整型变量Computer表示;数据库,用整型变量DataBase表示。平均成绩用实型变量Average表示。
为了Grade类数据的平安性,数据成员全部为私有成员,对成绩类的属性数据用一些函数进行设置和修改,PutNo为设置和修改学号,PutName为设置和修改姓名,PutCpp为设置和修改C++程序设计语言的成绩,PutCom为设置和修改计算机原理的成绩,PutData为设置和修改数据库的成绩,还有一个同时设置所有5个参数的函数SetGrade,它们都设置为公有函数。计算平均成绩的函数为Calc,设计函数Display输出成绩。有时可能要查看某个学生的成绩,所以设计比拟学号的函数为ComNo,设计比拟姓名的函数为ComName,GetCpp为读取C++程序设计语言的成绩,GetCom为读取计算机原理的成绩,GetData为读取数据库的成绩,设计读取平均成绩的函数为GetAvg。计算平均成绩只是在类的内部实现,所以设计为私有函数,其它都为公有函数。
综合实训
设计一个表示整型数据的集合类,可以对集合中的数据进行添加、删除,可以判断一个整数是否在这个集合里,可以求出集合数据的多少,可以判断集合的空与满,空集合就是没有数据元素,满集合就是数据元素已经占满给出的存储单元。两个集合可以做交运算,就是将两个集合的公共数据组成一个新的集合。两个集合可以做并运算,就是将两个集合的所有数据组成一个新的集合。要求如下:
〔1〕分析集合类的数据属性要求;
〔2〕分析集合类的操作属性要求;
〔3〕编制集合类的接口定义;
〔4〕实现集合类的属性函数。
#include<iostream.h>
//form the data
struct Data
{
long num;
Data *next;
};
//the set class
class Gather
{
public:
Gather(int =5);
//~Gather();
void form(int);
void del();
void setGather();
void print();
void add(int);
Data *getptr(){return ptr;}
Gather& operator=(Gather &);
Gather& operator+(Gather &);
Gather& operator*(Gather &);
private:
int LEN;
Data *ptr;
};
Gather inside;
Gather::Gather(int a){form(a);}
void Gather::form(int a)
{
LEN=a;
Data *p;
for (int i=0;i<a;i++){
if(i==0){
ptr=new Data;
p=ptr;
}
else {
p->next=new Data;
p=p->next;
}
}
p->next=NULL;
}
//Gather::~Gather(){del();}
void Gather::del()
{
Data *p;
Data *q;
p=ptr;
for(int i=0;i<LEN;i++){
q=p;
p=p->next;
delete q;
}
LEN=0;
}
void Gather::setGather()
{
Data *p;
p=ptr;
for (int i=0;i<LEN;i++){
cout<<"Enter item "<<i+1<<" :";
cin>>p->num;
p=p->next;
}
}
void Gather::print()
{
if (LEN==0)
cout<<"It's an empty set!"<<endl;
Data *p;
p=ptr;
for(int i=0;i<LEN;i++){
cout<<p->num<<" ";
p=p->next;
if (i!=0&&i%10==0) cout<<endl;
}
}
void Gather::add(int t)
{
bool y=true;
Data *p;
p=ptr;
for(int i=0;i<LEN;i++){
if (p->num==t){
y=false;
break;
}
if(i!=LEN-1)p=p->next;
}
if(y){
p->next=new Data;
p=p->next;
p->num=t;
p->next=NULL;
LEN++;
}
}
Gather& Gather::operator =(Gather &x)
{
if (ptr==x.ptr) return *this;
else {
del();
form(x.LEN);
Data *p,*q;
p=ptr;
q=x.ptr;
for(int i=0;i<x.LEN;i++){
p->num=q->num;
p=p->next;
q=q->next;
}
return *this;
}
}
Gather& Gather::operator +(Gather &x)
{
inside.del();
inside.form(LEN);
Data *q;
Data *p;
q=ptr;
p=inside.getptr();
for(int i=0;i<LEN;i++){
p->num=q->num;
p=p->next;
q=q->next;
}
q=x.ptr;
for(i=0;i<x.LEN;i++){
inside.add(q->num);
q=q->next;
}
return inside;
}
Gather& Gather::operator *(Gather &x)
{
int z=0;
long g[100];
bool y=true;
Data *p;
Data *q;
p=ptr;
q=x.ptr;
for(int i=0;i<LEN;i++){
q=x.ptr;
for(int j=0;j<x.LEN;j++){
if (p->num==q->num){
for(int t=0;t<z;t++)
if (p->num==g[t]){
y=false;
break;
}
if(y){
g[z]=p->num;
z++;
break;
}
y=true;
break;
}
else q=q->next;
}
p=p->next;
}
inside.del();
inside.form(z);
Data *pre;
pre=inside.getptr();
for (i=0;i<z;i++){
pre->num=g[i];
pre=pre->next;
}
return inside;
}
//the main
int main()
{
Gather x(6);
Gather y;
Gather result;
cout<<"Enter the item of set x:"<<endl;
x.setGather();
cout<<"The items of x is:"<<endl;
x.print();
cout<<endl;
cout<<"Enter the item of set y:"<<endl;
y.setGather();
cout<<"The items of y is:"<<endl;
y.print();
cout<<endl;
cout<<"The result of x+y is:"<<endl;
result=x+y;
result.print();
cout<<endl;
cout<<"The result of x*y is:"<<endl;
result=x*y;
result.print();
cout<<endl;
cout<<"Enter the item you want to add to x :";
int a;
cin>>a;
x.add(a);
cout<<"Now x is : ";
x.print();
cout<<endl;
inside.del();
result.del();
x.del();
y.del();
return 0;
}
〔四〕对象实训
根底实训
1、 读程序写结果;
2、 设计计算图形面积的程序,图形有圆和长方形,计算半径为15、23、37的圆和长宽分别为〔32,56〕、〔21,45〕的长方形等五个图形的面积。
class rect
{
private:
float length;
float width;
public:
rect(float l,float w);
void putwidth(float w);
void putlength(float l);
float getwidth()const;
float getlength()const;
float Area()const;
float Total()const;
};
rect::rect(float l=0 ,float w=0)
{
length=l;
width=w;
}
void rect::putwidth(float w)
{
width=w;
}
void rect::putlength(float l)
{
length=l;
}
float rect::getlength()const
{
return length;
}
float rect::getwidth()const
{
return width;
}
float rect::Area ()const
{
return length*width;
}
float rect::Total ()const
{
return 2*(length+width);
}
//rect.cpp
#include <iostream>
#include <conio.h>
#include "rect.h "
#include <string>
using namespace std;
void main()
{
cout < < "求长方形的面积与周长 " < <endl;
int str=0;
float rw,rl;
rect a(0,0);
ttt:
cout < < "请先输入长和宽: ";
cin> > rl> > rw;//此处输入字符时就会错误
a.putlength (rl);
a.putwidth (rw);
do
{
cout < < "输入0为退出,输入1求面积,输入2求周长,3是输入长和宽 " < <endl;
cin> > str;
switch (str)
{
case 1: cout < < "面积是: " < <a.Area () < <endl; break;
case 2: cout < < "周长是: " < <a.Total () < <endl; break;
case 3: goto ttt; break;
case 0: cout < < "ByeBye! " < <endl; break;
default: cout < < "错误!输入1求面积,输入2求周长! " < <endl; break;
}
}while(str);//*/
getch();
}
3、 设计一个日期类Date,可以求昨天的日期和明天的日期,输出格式为:年/月/日,编写主程序设置当前日期为2003年9月10日,显示昨天的日期和明天的日期,将日期改为2004年5月4日,显示修改后的日期。
综合实训
设计一个最多可以存放100个整数的类,要求这些整数按从小到大的顺序存放在类中的数组里,可以删除数组中的数据,也可以向数组中插入数据,但是要保持从小到大的顺序,可以求出数据的多少,可以判断数组的空和满,可以显示数组中的整数。当然刚生成对象时,对象中的数组没有数据,只有一个一个地向对象中插入数据。要求如下:
〔1〕分析数组类的数据属性要求;
〔2〕分析数组类的操作属性要求;
〔3〕编制数组类的接口定义;
〔4〕生成数组类对象;
〔5〕编制程序实现数组对象的插入和删除操作;
#include<iostream.h>
class Date
{
private:
int year,month,day;
public:
Date(int y=1900,int m=1,int d=1):year(y),month(m),day(d){}//构造函数
void setDate(int y,int m,int d)//设置日期
{
year=y;
month=m;
day=d;
}
void showDate()//输出日期格式
{
cout<<year<<"/"<<month<<"/"<<day<<endl;
}
int leap()//判断是否为润年
{
if(year%400==0||(year%100!=0&&year%4==0))
return 1;
else
return 0;
}
int Days()//判断当月天数
{
int d;
switch(month)
{
case 2:
if(leap())
d=29;
else
d=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:d=31;break;
case 4:
case 6:
case 9:
case 11:d=30;break;
}
return d;
}
int isRight()//判断日期数是否合理
{
if(year<0||month<1||month>12||day<1||day>Days())
{ cout<<"the date data is wrong!!"<<endl;return 0;}
else
return 1;
}
Date Yesterday()//求昨天
{
Date dt(year,month,day);
int y1=dt.year,m1=dt.month,d1=dt.day;
switch(month)
{
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:
{
if(day==1){y1=year;m1=month-1;d1=31;}
else {y1=year;m1=month;d1=day-1;}
break;
}
case 5:
case 7:
case 10:
case 12:
{
if(day==1){y1=year;m1=month-1;d1=30;}
else {y1=year;m1=month;d1=day-1;}
break;
}
case 3:
{
if(day==1)
{y1=year;m1=month-1;
if(leap())
d1=29;
else
d1=28;
}
else{ y1=year;m1=month;d1=day-1;}
break;
}
case 1:
{
if(day==1){y1=year-1;m1=12;d1=31;}
else {y1=year;m1=month;d1=day-1;}
break;
}
}
dt.setDate(y1,m1,d1);
return dt;
}
Date Tomorrow()//求明天日期
{
Date dt(year,month,day);
int y1=dt.year,m1=dt.month,d1=dt.day;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
{
if(day==31){y1=year;m1=month+1;d1=1;}
else {y1=year;m1=month;d1=day+1;}
break;
}
case 4:
case 6:
case 9:
case 11:
{
if(day==30){y1=year;m1=month+1;d1=1;}
else {y1=year;m1=month;d1=day+1;}
break;
}
case 2:
{
if((leap()&&day==29)||(!leap()&&day==28))
{y1=year;m1=month+1;d1=1;}
else{ y1=year;m1=month;d1=day+1;}
break;
}
case 12:
{
if(day==31){y1=year+1;m1=1;d1=1;}
else {y1=year;m1=month;d1=day+1;}
break;
}
}
dt.setDate(y1,m1,d1);
return dt;
}
};//data类结束
int main()
{
Date date1;
int y,m,d,tr=1;
while(tr)
{
cout<<"\t请输入当天日期"<<endl;
cout<<"年:";cin>>y;
cout<<"月: ";cin>>m;
cout<<"日: ";cin>>d;
date1.setDate(y,m,d);
if(date1.isRight())
{cout<<"当日日期";
date1.showDate();
cout<<"明日日期";
date1.Tomorrow().showDate();
cout<<"昨日日期";
date1.Yesterday().showDate();
}
cout<<"继续下一次测试〔1〕或者结束〔2〕"<<endl;
cin>>tr;
if(tr!=1)
break;
}
return 0;
}
〔五〕指针与引用实训
根底实训
1、 读程序写结果;
2、 设有一个整型数组A,有10个元素,输出各个元素,要求使用数组名和指针运算来实现。
3、 设计一个函数,以参数方式输入一个字符串,返回该字符串的长度。
#include<iostream.h>
int mystrlen(char *str)
{
int cnt = 0;
while((cnt++,*str++));
return cnt-1;
}
int main()
{
char str[100];
int length;
cout<<"输入字符串:"<<endl;
cin>>str;
length = mystrlen(str);
cout<<str<<"长度为:"<<length<<endl;
return 0;
}
4、 设计一个函数,比拟两个字符串是否相同。
#include <iostream.h>
#include <string.h>
void main()
{
char str1[100],str2[100];
cout<<"输入两个字符串(str1,str2):"<<endl;
cin>>str1>>str2;
int ret=strcmp(str1,s
展开阅读全文