C课程设计报告.docx
《C课程设计报告.docx》由会员分享,可在线阅读,更多相关《C课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
C课程设计报告
C++课程设计报告
姓名:
学号:
04
班级:
软件152班
指导老师:
2016年6月25日
课程设计报告
一、课程设计目的及要求
1.设计目的
1.提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。
2.培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。
3.学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。
仓库管理系统目的:
理清头绪,开始入手。
交通工具选择系统目的:
考察我们的抛出异常解决问题能力。
公司库存管理系统目的:
考察继承,基类和子类的关系。
学生选修课系统目的:
主要是文件的读写。
成绩记录簿目的:
练习链表功能,和文件与链表的关系。
2.设计要求
(1)仓库管理
①私有成员为,仓库名称,仓库中物品(名称,数量,单价),采用指针存储动态数组方式存储学生信息。
②重载“+”操作,表示两个仓库合并,仓库名称由两个仓库名称连接到一起,其中新仓库为为两个仓库的所有物品,且同一种物品能够合并。
③重载[]操作直接获得第i个同学记录。
④该类的对象不能拷贝构造及赋值
(2)交通工具选择
①设计抽象类:
交通工具类。
②派生类:
汽车类、火车类、飞机类。
③设计函数:
获得交通类型名称函数,函数可以根据不同交通工具类型输出不同的运输方式获得交通类型名称。
④设计运输函数,参数为运输人数,在不同派生类实现该函数,要求:
汽车<40;飞机<200;火车<2000;在不同类中如果参数超出范围则抛出字符串异常。
(3)公司库存管理系统
①某公司现有以下设备:
普通电视机、DVD、带DVD的电视机。
②带DVD的电视机的售价为普通电视机和DVD单价之和的80%。
③要求对所有的库存设备都能按照品名进行显示、查找、增加和删除、保存的功能。
(4)学生选修课系统
①系统以菜单方式工作
②课程信息录入功能(课程信息用文件保存)--输入
③课程信息浏览功能--输出
④查询功能:
(至少一种查询方式)--算法按学分查询按课程性质查询
⑤学生选修课程(可选项)
(5)成绩记录簿
①创建信息链表并以磁盘文件保存;
②读取磁盘文件并显示输出所有学生的成绩;
③按学号或姓名查询成绩;
④添加成绩记录;
⑤修改指定姓名或学号的学生的成绩并可存盘;
⑥显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
2、课程设计具体实现
1、仓库管理
(1)总体设计
用例图:
总体设计方案:
首先输入仓库信息接着输入仓库里的物品信息,直接进行合并,并输出合并后的信息,之后选择添加信息或者查询信息。
主要设计原理:
定义两个类,仓库类和物品类,在仓库类里采用动态数组储存物品的方式,在物品类里面重载插入提取运算符,方便输入和输出。
利用重载[]下标运算符来来获得所要查询的物品信息,如果下标越界则抛出异常,下面接受异常。
(2)详细设计
数据录入模块
主要完成功能为:
输入仓库信息,物品信息,合并仓库并输出。
主要使用技术:
重载插入,提取运算符,给指针分配空间。
关键代码如下:
ints;
cout<<"********************************************\n";
cout<<"请输入仓库名字:
";
cin>>Name;
cout<<"请输入物品种类:
";
cin>>n;
s=cin.rdstate();//判断输入n的返回流的状态
while(s)
{
cin.clear();
cin.getline(t,80);
cout<<"种类非法输入,请重新输入:
";
cin>>n;
s=cin.rdstate();
}
sum=n;
g=newCGoods[n];//动态分配空间
for(inti=0;icin>>g[i];//重载了插入运算符
for(i=0;i{
flag=1;
for(j=0;jif(s.g[j].getName()==s2.g[i].getName())//判断两个对象的物品名是否相同
{
flag=0;
s.g[j].setGood(s2.g[i]);//若相同,让两个数量相加
break;
}
if(flag)
s.g[s.sum++]=s2.g[i];//若不相同,让物品累加在前面对象的清单里
添加物品信息模块
主要完成功能为:
动态添加到动态数组。
主要使用技术:
需要再定义一个动态指针数组,并把以前的值付给指针数组之后再添加。
关键代码如下:
CGoods*gg;//新定义一个物品类指针
gg=newCGoods[sum+1];//分配原有物品个数+1大的空间
for(i=0;igg[i]=g[i];//把原来的物品类赋值给新开辟的空间
gg[sum++]=gd;//添加新的物品
delete[]g;//释放掉原有的空间
g=gg;//让g指针指向gg
for(inti=0;iif(go.getName()==s[i+1].getName())//判断物品是否相同
{
a=0;
s[i+1].setGood(go);//添加时若物品相同数量相加
break;
}
if(a)
s.addGood(go);
数据查询模块
主要完成功能:
用for循环来控制查找相同的变量输出,或者直接输出。
关键代码如下:
cout<<"名称"<<'\t'<<"数量"<<'\t'<<"单价"<for(inti=0;icout<(3)调试及问题解决
主要是动态数组分配空间,刚开始我直接开辟了一个256大的空间,因为不知道物品有多少件所以会形成越界的情况,所以再写一个函数,再定义一个动态指针数组,每次调用开辟新空间,再让以前的数据赋给这个指针数组。
用变量来控制并调试。
2、交通工具选择
(1)总体设计
用例图:
总体设计方案:
顾客人数------>选择交通工具------>输出交通类型,根据顾客人数判断抛出异常。
之后再重新选择直至三个交通方式都不是,或者只要有一个可以乘坐结束。
主要设计原理:
先定义一个抽象类,再定义汽车类,火车类,飞机类继承抽象类,分别实现里面的虚函数,判断是否抛出异常,接受异常并输出。
(2)详细设计
数据录入模块
主要完成功能为:
输入顾客人数,来判断乘坐哪种交通工具
数据输出模块
主要完成功能为:
判断顾客人数是否否和范围,不符合范围抛出异常,接受异常并输出异常。
其中有三个静态变量来控制标记已选过的交通工具。
三个都选过,或者没有异常结束。
主要使用技术:
使用throw,try,catch三个函数,用基类指针调用子类。
关键代码如下:
try
{
cout<<"请输入你的选项:
";
cin>>a;
intsss;
chartt[20];
sss=cin.rdstate();//用于控制输入选项的状态
while(sss)
{
cin.clear();
cin.getline(tt,80);
cout<<"请重新输入你的选项:
";
cin>>a;
sss=cin.rdstate();
}
while(a<1||a>3)//判断选项是否越界
{
cout<<"请重新输入你的选项:
";
cin>>a;
sss=cin.rdstate();
while(sss)
{
cin.clear();
cin.getline(tt,80);
cout<<"请重新输入你的选项:
";
cin>>a;
sss=cin.rdstate();
}
}
if(a==1)
{
v=&c;
v->printf();
v->transport(n);//抛出异常语句
}
elseif(a==2)
{
v=&t;
v->printf();
v->transport(n);//抛出异常语句
}
elseif(a==3)
{
v=&p;
v->printf();
v->transport(n);//抛出异常语句
}
}
catch(char*message)//接受异常
{
cout<cout<system("pause");
if(t.e2==2&&c.e1==1&&p.e3==3)//用来判断是否全选过一边
{
system("cls");//清屏
cout<cout<<"三种交通工具都超载!
!
请另想办法吧!
!
!
"<return;
}
by(n);//调用重新选则交通工具函数
}
(3)调试及问题解决
主要问题就是判断选项的输入是否越界等。
后来查书发现可以控制的语句。
控制不了若三种都不行怎么办,最后设置了三个静态变量来控制。
3、公司库存管理系统
(1)总体设计
总体设计方案:
主页面------>菜单------>显示包括录入和输出。
由于有三个物品类型所以要分别输入,之后的查询,删除等方式都要分情况选择。
实行完这些模块后会选择返回主页面和结束程序。
注意:
输入时第三种物品是前两种的价钱80%,所以要加以判断。
主要设计原理:
注意对应文件对应的对象,查询要从文件读数据,删除还要再写进去。
注意继承,由于函数相同所以要判断,其中还有静态变量来控制每个类型的物品数,用来之后的删除。
(2)详细设计
登陆模块
主要完成功能为:
当用户开始使用本系统,进入登陆模块。
屏幕显示提示,用户可根据需要选择相应功能。
具体如下:
1、进入菜单2、结束程序。
用户可根据需要选择相应功能。
进入菜单之后又会出现登录模块,1、存入物品2、显示库存3、查找物品4、增加物品5、删除物品6、返回主页面,根据自己的意愿选择相应的功能。
主要使用技术:
清屏实现页面的转换,控制选项的越界和状态。
关键代码如下:
system("cls");//清屏
cout<cout<<"***********************欢迎进入公司库存管理系统!
***********************"<cout<<"**"<cout<<"*1.存入物品*"<cout<<"**"<cout<<"*2.显示库存*"<cout<<"**"<cout<<"*3.查找物品*"<cout<<"**"<cout<<"*4.增加物品*"<cout<<"**"<cout<<"*5.删除物品*"<cout<<"**"<cout<<"*6.返回主页面*"<cout<<"**"<cout<<"************************************************************************"<cin>>n;
n=pand(n);//自己定义的判断选项状态的函数
数据录入模块
主要完成功能为:
刚进入就分四个选项,三个是要输入的种类,还有一个是返回主页面。
把信息分别录入不同种类的不同文件中,其中物品品名已经规定直接输入选项。
主要使用技术:
文件的写入,还有一些数据控制同上。
关键代码如下:
rrrface();//物品品名显示菜单
cout<<"请按照品名(1~6以外结束)单价输入,例:
(TV,DVD)1216555,(TVDVD)1222"<while
(1)//用选项来代替课程性质,但最后写入文件类型是string类
{
cout<<"请输入物品:
";
cin>>type;
type=pand(type);
if(type<1||type>6)
break;
if(type==1)
out<<"先科";
elseif(type==2)
out<<"先锋";
elseif(type==3)
out<<"谷天";
elseif(type==4)
out<<"索尼";
elseif(type==5)
out<<"飞利浦";
else
out<<"万利达";
cin>>price>>num;
查询、删除、添加模块
主要完成功能为:
查询,删除,添加对应信息的物品,物品品名可用选项代替,删除后要把删除后的代码重新读入文件中。
主要使用技术:
文件的读和写。
关键代码如下:
查询:
while(in>>t>>p>>n)
if(t1==t&&p==p1)//查询必须品名和单价相等
cout<<"所查询的TV有:
品名:
"<"<
"<in.close();
删除:
while(in>>t>>p>>n)
{
if(t!
=t1||p!
=p1)
{
cout<<"eee"<tt[i]=t;
pp[i]=p;
nn[i]=n;
i++;
}
}
in.close();
sum1--;
ofstreamout("TVGoods.txt");
if(!
out)
judge();
for(intj=0;j
out<
添加:
while
(1)
{
cout<<"请添加输入物品:
";
cin>>type;
type=pand(type);
if(type<0||type>6)
break;
if(type==1)
out<<"先科";
elseif(type==2)
out<<"先锋";
elseif(type==3)
out<<"谷天";
elseif(type==4)
out<<"索尼";
elseif(type==5)
out<<"飞利浦";
else
out<<"万利达";
cin>>price;
(3)调试及问题解决
删除时会系统会崩,原因是下表越界,由于程序太长,所以采用断点调试的方法查找错误。
还有就是控制输入格式。
4、学生选修课系统
(1)总体设计
用例图:
总体设计方案:
主页面------>菜单------>录入,输出,查询,学生选修,分别实现各个模块。
学生选修课程要先分学生登陆,注册。
登陆之后再进行选课或者查询选课纪录,之后再有两个选项返回主页面,和结束程序。
主要设计原理:
注意对应文件对应的对象,查询要从文件读数据。
学生选修课记录课程需要学生登录,注册。
注册密码需要把密码学生信息写到一个文件里,登录时需要从中读出相应学生密码并比较。
之后进入后可以选课或者已经选过课直接查看选课记录。
(2)详细设计
登陆模块
主要完成功能为:
当用户开始使用本系统,进入登陆模块。
屏幕显示提示,用户可根据需要选择相应功能。
具体如下:
1、进入菜单2、结束程序。
用户可根据需要选择相应功能。
进入菜单之后又会出现登录模块,1、录入课程信息2、输出课程信息3、按学分查询4、按课程性质查询5、学生选修课程。
根据用户的身份选则不同的选项。
进入学生选修课程后会有1、登陆2、注册3、返回页面。
关键代码如下:
system("cls");
cout<cout<<"*********************欢迎进入学生选修课程系统!
*************************"<cout<<"**"<cout<<"*1.录入课程信息*"<cout<<"**"<cout<<"*2.输出课程信息*"<cout<<"**"<cout<<"*3.查询课程信息--学分*"<cout<<"**"<cout<<"*4.查询课程信息--课程性质*"<cout<<"**"<cout<<"*5.学生选修课程*"<cout<<"**"<cout<<"*6.返回主页面*"<cout<<"**"<cout<<"************************************************************************"<数据录入和输出模块:
主要完成功能为:
把输入的数据写入文件里面,把从文件里面的数据读出来。
注意:
课程性质用选项来代替。
主要使用技术:
文件的读和写。
关键代码如下:
录入:
cout<<"课程(编号以xxx结束):
";
cin>>id;
if(id=="xxx")
break;
cin>>title>>nature>>period>>teachperiod[0]>>credit>>term;
teachperiod[1]=period-teachperiod[0];
while(nature>5||nature<1)
{
cout<<"课程性质不存在,请重新输入!
"<cout<<"课程(编号以xxx结束):
";
cin>>id>>title>>nature>>period>>teachperiod[0]>>credit>>term;
teachperiod[1]=period-teachperiod[0];
}
while(credit>4||credit<1)
{
cout<<"课程学分越界,请重新输入!
"<cout<<"课程(编号以xxx结束):
";
cin>>id>>title>>nature>>period>>teachperiod[0]>>credit>>term;
teachperiod[1]=period-teachperiod[0];
}
out<if(nature==1)
out<<"社会";
elseif(nature==2)
out<<"技术";
elseif(nature==3)
out<<"跨科";
elseif(nature==4)
out<<"数学";
elseif(nature==5)
out<<"文明";
out<<''<}
输出:
in.unsetf(ios:
:
skipws);
while(!
in.eof())//用字符一个一个读出来
{
in>>ch;
cout<if(ch=='')
cout<<'\t';
}
in.close();
学生选修课模块
主要完成功能为:
注册,登录,选课和查询选课记录。
主要使用技术:
隐藏密码,文件读写。
关键代码如下:
注册:
cout<cout<<"***********************欢迎注册!
************************"<cout<<"请输入学号:
";
cin>>num;
cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入密码:
";
for(inti=0;i<6;i++)
cin>>passage[i];
passage[6]='\0';
cout<<"***********************注册成功!
************************"<ofstreamout1("student.txt",ios:
:
app);
out1<out1.close();
登录:
for(inti=0;i<6;i++)
{
passage[i]=getch();//隐藏密码
putchar('*');//用*代替输入
}
passage[6]='\0';
while(inn>>n3>>na3)
{
inn>>i1>>t>>n1>>p1>>t1>>t2>>c1>>te;
if(n3==num&&na3==name)
cout<}
inn.close();
查询模块
主要完成功能为:
查找相应的物品信息
关键代码如下:
system("cls");
cout<<"***************学分类型*****************"<cout<<"1.1分2.2分3.3分4.4分"<cout<<"****************************************"<cout<<"请输入选项:
";
cin>>a;
if(a==1)
{
cout<<"***********************课程信息(学分为1)